มัลแวร์ไร้ร่องรอยโจมตีเป้าหมายโดยใช้ประโยชน์จากช่องโหว่เช่นในปลั๊กอินแฟลชของเบราว์เซอร์หรือในโปรโตคอลเครือข่าย
ptrace()
กระบวนการลินุกซ์สามารถแก้ไขได้โดยการใช้การโทรระบบ โดยทั่วไปแล้วการเรียกระบบนี้มักจะถูกใช้โดย debuggers เพื่อตรวจสอบและจัดการสถานะภายในของกระบวนการเป้าหมายและมีประโยชน์ในการพัฒนาซอฟต์แวร์
ยกตัวอย่างเช่นขอพิจารณากระบวนการที่มี PID 1234 กระบวนการนี้พื้นที่ที่อยู่ทั้งสามารถดูได้ในระบบแฟ้มหลอกที่ตั้ง/proc
/proc/1234/mem
คุณสามารถเปิด pseudofile นี้จากนั้นแนบกับกระบวนการนี้ผ่านptrace()
; หลังจากทำเช่นนั้นคุณสามารถใช้pread()
และpwrite()
เขียนไปยังพื้นที่กระบวนการ
char file[64];
pid = 1234;
sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);
waitpid(pid, NULL, 0);
off_t addr = ...; // target process address
pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);
ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);
(รหัสที่นำมาจากที่นี่มีบทความเกี่ยวกับการหาประโยชน์จาก ptrace อีกฉบับหนึ่งที่นี่ )
เกี่ยวกับการป้องกันเคอร์เนลจากการโจมตีเหล่านี้วิธีเดียวคือการติดตั้งแพทช์ผู้ขายเคอร์เนลและ / หรือปิดการใช้งานเวกเตอร์การโจมตีโดยเฉพาะ ตัวอย่างเช่นในกรณีของ ptrace คุณสามารถโหลดโมดูลปิดกั้น ptrace ไปยังเคอร์เนลซึ่งจะปิดการใช้งานการเรียกระบบเฉพาะนั้น ชัดเจนว่านี่ยังทำให้คุณไม่สามารถใช้ ptrace สำหรับการดีบั๊กได้