Rozumiem definicję złośliwego oprogramowania bez plików:
Szkodliwy kod, który nie jest oparty na plikach, ale istnieje tylko w pamięci… W szczególności złośliwy kod bez plików… dołącza się do aktywnego procesu w pamięci…
Czy ktoś może wyjaśnić, jak działa to dołączanie do aktywnego procesu w pamięci?
Ponadto, jaka ochrona (jądro) / hartowanie jest dostępna przed takimi atakami?
process
linux-kernel
malware
Martin Vegter
źródło
źródło
Odpowiedzi:
Bezplikowe złośliwe oprogramowanie atakuje cel, wykorzystując lukę, np. We wtyczce Flash przeglądarki lub w protokole sieciowym.
Proces systemu Linux można zmodyfikować za pomocą wywołania systemowego
ptrace()
. To wywołanie systemowe jest zwykle używane przez debuggery do kontroli i zarządzania stanem wewnętrznym procesu docelowego i jest przydatne w rozwoju oprogramowania.Rozważmy na przykład proces z PID 1234. Całą przestrzeń adresową tego procesu można wyświetlić w pseudo-systemie plików
/proc
w lokalizacji/proc/1234/mem
. Możesz otworzyć ten pseudoplik, a następnie dołączyć do tego procesu za pośrednictwemptrace()
; po wykonaniu tej czynności możesz używaćpread()
ipwrite()
pisać w przestrzeni procesu.(Kod pochodzi stąd . Kolejny artykuł na temat exploita ptrace jest dostępny tutaj .)
Jeśli chodzi o zorientowaną na jądro obronę przed tymi atakami, jedynym sposobem jest zainstalowanie łat dostawcy jądra i / lub wyłączenie określonego wektora ataku. Na przykład w przypadku ptrace możesz załadować moduł blokujący ptrace do jądra, który wyłączy to określone wywołanie systemowe; najwyraźniej sprawia to, że nie można używać ptrace do debugowania.
źródło
/proc/PID/mem
. Mam nadzieję, że jesteś mniej odporny niż druga osoba na aktualizowanie i poprawianie odpowiedzi, zamiast utrwalania mitów i dezinformacji.Gdy uda się zawiesić proces, możesz spowodować, że proces wstawi dane do pamięci. Bardzo popularnym sposobem na to jest użycie przepełnienia bufora .
Jak to działa ? Wiesz na przykład, że proces nasłuchuje na porcie x i ma bufor dla pewnej funkcji, która ma, powiedzmy, 15 bajtów. Wywołujesz tę funkcję z 15 bajtami danych + n bajtów (twój kod do wykonania). Jeśli program nie zweryfikuje poprawnie danych, nadpisze przylegającą pamięć kodem, a tym samym kod żyje w pamięci. Jeśli możesz uruchomić ten kod, jesteś właścicielem systemu. Istnieją ograniczenia, na przykład proces nie może zapisać do pamięci poza przydzielonym miejscem .
Istnieje długa lista luk we wszystkich systemach operacyjnych, w których przepełnienie bufora pozwala crackerom na wstrzykiwanie danych do pamięci celu.
źródło