Zararsız kötü amaçlı yazılım, örneğin bir tarayıcının Flash eklentisinde veya bir ağ protokolünde bulunan bir güvenlik açığından yararlanarak hedefe saldırır.
Linux işlemi sistem çağrısı kullanılarak değiştirilebilir ptrace()
. Bu sistem çağrısı genellikle hata ayıklayıcılar tarafından hedef sürecin iç durumunu denetlemek ve yönetmek için kullanılır ve yazılım geliştirmede yararlıdır.
Örneğin, PID 1234 ile bir işlemi ele alalım. Bu işlemin tüm adres alanı /proc
, konumdaki sözde dosya sisteminde görüntülenebilir /proc/1234/mem
. Bu sahte dosyayı açabilir, ardından bu işleme şu yolla ekleyebilirsiniz ptrace()
; bunu yaptıktan sonra pread()
ve pwrite()
tuşlarını kullanarak işlem alanına yazabilirsiniz.
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);
(Kod alınan burada . Başka kağıt bir ptrace hakkında kullanılabilir istismar burada .)
Bu saldırılara karşı çekirdek odaklı savunma ile ilgili olarak, tek yol çekirdek satıcı yamalarını kurmak ve / veya belirli saldırı vektörünü devre dışı bırakmaktır. Örneğin, ptrace durumunda, çekirdeğe söz konusu sistem çağrısını devre dışı bırakacak bir ptrace engelleme modülü yükleyebilirsiniz; açıkça bu da hata ayıklama için ptrace kullanamaz hale getirir.