2012-10-16 10 views
8

Chciałbym utworzyć moduł jądra od zera, który zostanie zablokowany w sesji użytkownika i monitorować każde wywołanie systemowe wykonane przez procesy należące do tego użytkownika.Moduł jądra do monitorowania syscalls?

Wiem, co wszyscy myślą - "wykorzystaj strace" - ale chciałbym mieć trochę własnego rejestrowania i analizy danych, które zbieram, a strace ma pewne problemy - aplikacja może użyć "mmap" do zapisuj do pliku bez zawartości pliku, która kiedykolwiek pojawiła się jako argumenty "otwartego" wywołania systemowego, lub aplikacja bez uprawnień do zapisu może tworzyć coredumpy do kopiowania wrażliwych danych.

Chcę być w stanie obsłużyć te specjalne przypadki i zrobić własne logowanie. Zastanawiam się jednak - w jaki sposób mogę skierować wszystkie syscalls przez mój moduł? Czy jest jakiś sposób, aby to zrobić bez dotykania kodu jądra?

Dzięki

+1

Powinieneś użyć funkcji 'ptrace' syscall (która rzeczywiście jest używana przez' strace' i 'gdb'). Powodzenia, potrzebujesz trochę. Ale prawdopodobnie nie musisz kodować żadnego modułu jądra, tylko po to, aby rozwinąć aplikację za pomocą 'ptrace'. –

Odpowiedz

2

mam zrobić coś podobnego w przeszłości, używając modułu jądra do patchowania tabeli wywołań systemowych. Każdy poprawionych funkcji zrobił coś tak:

patchFunction(/*params*/) 
{ 
    // pre checks 
    ret = origFunction(/*params*/); 
    // post checks 
    return ret; 
} 

Należy pamiętać, że po uruchomieniu mucking w struktur danych jądra, twój moduł staje wersja zależne. Moduł jądra będzie prawdopodobnie musiał zostać skompilowany dla konkretnej wersji jądra, na której się instalujesz.

Należy również zauważyć, że jest to technika stosowana przez wiele rootkitów, więc jeśli masz zainstalowane oprogramowanie zabezpieczające, możesz próbować uniemożliwić zrobienie czegoś takiego.

+0

To był zdecydowanie właściwy kierunek. https://bbs.archlinux.org/viewtopic.php?id=139406 był najlepszym przewodnikiem, jaki mogłem znaleźć. Z pewnym obrzydzeniem doszedłem do miejsca, gdzie mogę przejąć JAKĄKOLWIEK syscall. Dzięki za pomoc! – PinkElephantsOnParade