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.