Jak działa złośliwe oprogramowanie bez plików w systemie Linux?


10

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?


Na przykład, wykorzystując przepełnienie bufora w aplikacji sieciowej, a następnie pobrać złośliwy kod, który działa wewnątrz aplikacji i rozprzestrzenia się za pośrednictwem sieci. Brak zaangażowanych plików. Druga część pytania jest bardzo szeroka, w istocie sprowadza się do „jakie istnieją środki zaradcze przeciwko złośliwemu oprogramowaniu”?
— reż

Odpowiedź na to pytanie może być lepsza na https://security.stackexchange.com/ .
— rubynorails

@rubynorails - interesują mnie tylko odpowiedzi specyficzne dla systemu Linux. SecuritySE jest ogólny. Jeśli poproszę o odpowiedź dla Linuksa, wyślą mnie tutaj.
— Martin Vegter

Odpowiedzi:


6

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 /procw lokalizacji /proc/1234/mem. Możesz otworzyć ten pseudoplik, a następnie dołączyć do tego procesu za pośrednictwem ptrace(); po wykonaniu tej czynności możesz używać pread()i pwrite()pisać w przestrzeni procesu.

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 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.


Podobnie jak w przypadku innej odpowiedzi , to także jest nieaktualne - jak wyjaśniono tutaj , nie trzeba już śledzić procesu, aby go odczytać lub zapisać /proc/PID/mem. Mam nadzieję, że jesteś mniej odporny niż druga osoba na aktualizowanie i poprawianie odpowiedzi, zamiast utrwalania mitów i dezinformacji.
— pizdelect

... co w tym przypadku może mieć konsekwencje, ponieważ ludzie błędnie zakładają, że śledząc proces, mogą uniemożliwić innym procesom odczytanie jego pamięci.
— pizdelect

@pizdelect Dziękujemy za link. Byłoby dobrze, jeśli dodasz treść jako kolejną odpowiedź.
— dr_

Nie, nie zamierzam dodawać kolejnej odpowiedzi. Oczekuję, że naprawisz swój.
— pizdelect

Pamiętaj, że możesz także edytować odpowiedzi innych osób. Wygląda na to, że masz lepszą wiedzę na ten temat niż ja, więc możesz to zrobić.
— dr_

1

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.