2015-01-17 4 views
11

Kullanıcıların süreçleri gizlemesinin popüler bir yolu,/proc dizini için yineleme işlevini ele geçirmektir. Ben orijinal yinelerler fonksiyonunu yeniden istediğiniz bir saptama yöntemi üzerinde çalışıyorumLinux çekirdek modülü: sanal dosya sisteminin yinelemeli işlevini yeniden ele geçirme

struct file *filep = filp_open("/proc", O_RDONLY, 0)); 
filep->f_op->iterate = p // We swap the pointer with our hacked iterate 

(bunu varsayarak zaten ele geçirildiğini) şu şekildedir: Bu yapılabilir./Proc dizini için kullanılan orijinal yineleme işlevini bulmanın bir yolu var mı?

+1

Doğrudan [proc_map_files_readdir] (http://lxr.free-electrons.com/source/fs/proc/base.c#L1841) adresini kullanabilirsiniz. Elbette, saldırganın çekirdeğe erişimi varsa, bunu da değiştirebilir. – zch

+0

@zch Bu işleve nasıl erişebileceğimi söyleyebilir misiniz? Sysmap'de mevcut değil. – AlexSee

+0

Doğru, bu statik bir işlevdir, bu nedenle bu sembolün sonuçta elde edilen çekirdekte bulunup bulunmayacağından emin değilim. İkinci "procfs" 'i monte etmeye çalışabilirsiniz ve belki de bu tür basit saldırıları tespit edebilirsiniz. – zch

cevap

1

Sezgisel yaklaşımı deneyebilirsiniz. Orijinal fonksiyonun adresi, diğer proc fonksiyonları ile aynı genel alanda olacaktır, hijacker işlevinin adresi ise farkedilir ölçüde farklı olacaktır. Daha sonra hijacker işlevinin makine kodunu ayrıştırırsınız. Korsanlık işlevi, geri dönmeden önce orijinal işlevine dalmak zorunda kalacaktır, böylece tüm şube yönergelerine bakın ve hangisinin diğer orijinal adreslere uygun olduğunu kontrol edin.

0

Kullandığınız çekirdeğin hangi sürümünün olduğunu biliyor musunuz?

Sadece işlevin bu sürümünü modülünüze kopyalayın ve iterat işaretçisini kopyanızın adresiyle birlikte geçersiz kılın.

İşlevsel olarak eşdeğer olmalıdır, ancak başka bir kötülük rouge modülünün serbest bırakılmış olabileceğini belirtmez.

+0

Korkarım ki bu kadar kolay değil, işlevi kopyaladığınızda, bu fonksiyonun ihtiyaç duyduğu başka birçok şey var ve bu da bulamıyor. modülün adres alanı. Belki bir şekilde mümkün ama ben derlemeyi başaramadım. – AlexSee