Linux Forensics
Last updated
Last updated
Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie. Uzyskaj dostęp już dziś:
Przede wszystkim zaleca się posiadanie USB z dobrze znanymi binariami i bibliotekami (możesz po prostu pobrać ubuntu i skopiować foldery /bin, /sbin, /lib, i /lib64), następnie zamontować USB i zmodyfikować zmienne środowiskowe, aby używać tych binariów:
Gdy skonfigurujesz system do używania dobrych i znanych binariów, możesz zacząć ekstrahować podstawowe informacje:
Podczas uzyskiwania podstawowych informacji powinieneś sprawdzić dziwne rzeczy, takie jak:
Procesy root zazwyczaj działają z niskimi PID, więc jeśli znajdziesz proces root z dużym PID, możesz podejrzewać
Sprawdź zarejestrowane loginy użytkowników bez powłoki w /etc/passwd
Sprawdź hasła w /etc/shadow
dla użytkowników bez powłoki
Aby uzyskać pamięć działającego systemu, zaleca się użycie LiME. Aby skompilować go, musisz użyć tego samego jądra, które używa maszyna ofiary.
Pamiętaj, że nie możesz zainstalować LiME ani nic innego na maszynie ofiary, ponieważ wprowadzi to wiele zmian w niej
Więc, jeśli masz identyczną wersję Ubuntu, możesz użyć apt-get install lime-forensics-dkms
W innych przypadkach musisz pobrać LiME z github i skompilować go z odpowiednimi nagłówkami jądra. Aby uzyskać dokładne nagłówki jądra maszyny ofiary, możesz po prostu skopiować katalog /lib/modules/<wersja jądra>
na swoją maszynę, a następnie skompilować LiME używając ich:
LiME obsługuje 3 formaty:
Surowy (wszystkie segmenty połączone razem)
Wypełniony (taki sam jak surowy, ale z zerami w prawych bitach)
Lime (zalecany format z metadanymi)
LiME może być również używany do wysyłania zrzutu przez sieć zamiast przechowywania go w systemie, używając czegoś takiego jak: path=tcp:4444
Przede wszystkim musisz wyłączyć system. Nie zawsze jest to opcja, ponieważ czasami system będzie serwerem produkcyjnym, którego firma nie może sobie pozwolić na wyłączenie.
Istnieją 2 sposoby na wyłączenie systemu, normalne wyłączenie i wyłączenie "wyciągnięcia wtyczki". Pierwsze pozwoli procesom zakończyć się jak zwykle i system plików będzie zsynchronizowany, ale pozwoli również potencjalnemu złośliwemu oprogramowaniu na zniszczenie dowodów. Podejście "wyciągnięcia wtyczki" może wiązać się z pewną utratą informacji (nie wiele informacji zostanie utraconych, ponieważ już zrobiliśmy obraz pamięci) i złośliwe oprogramowanie nie będzie miało żadnej możliwości działania w tej sprawie. Dlatego, jeśli podejrzewasz, że może być złośliwe oprogramowanie, po prostu wykonaj komendę sync
w systemie i wyciągnij wtyczkę.
Ważne jest, aby zauważyć, że przed podłączeniem komputera do czegokolwiek związanego z sprawą, musisz upewnić się, że będzie on zamontowany jako tylko do odczytu, aby uniknąć modyfikacji jakichkolwiek informacji.
Tworzenie obrazu dysku bez dodatkowych danych.
Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społeczności. Uzyskaj dostęp już dziś:
Linux oferuje narzędzia do zapewnienia integralności komponentów systemowych, co jest kluczowe dla wykrywania potencjalnie problematycznych plików.
Systemy oparte na RedHat: Użyj rpm -Va
do kompleksowego sprawdzenia.
Systemy oparte na Debianie: dpkg --verify
do wstępnej weryfikacji, a następnie debsums | grep -v "OK$"
(po zainstalowaniu debsums
za pomocą apt-get install debsums
), aby zidentyfikować wszelkie problemy.
Przeczytaj następującą stronę, aby dowiedzieć się o narzędziach, które mogą być przydatne do znajdowania złośliwego oprogramowania:
Aby skutecznie wyszukiwać zainstalowane programy zarówno w systemach Debian, jak i RedHat, rozważ wykorzystanie dzienników systemowych i baz danych obok ręcznych kontroli w typowych katalogach.
Dla Debiana sprawdź /var/lib/dpkg/status
i /var/log/dpkg.log
, aby uzyskać szczegóły dotyczące instalacji pakietów, używając grep
do filtrowania konkretnych informacji.
Użytkownicy RedHat mogą zapytać bazę danych RPM za pomocą rpm -qa --root=/mntpath/var/lib/rpm
, aby wylistować zainstalowane pakiety.
Aby odkryć oprogramowanie zainstalowane ręcznie lub poza tymi menedżerami pakietów, przeszukaj katalogi takie jak /usr/local
, /opt
, /usr/sbin
, /usr/bin
, /bin
i /sbin
. Połącz listy katalogów z poleceniami specyficznymi dla systemu, aby zidentyfikować pliki wykonywalne, które nie są związane z znanymi pakietami, co zwiększy twoje możliwości wyszukiwania wszystkich zainstalowanych programów.
Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społeczności. Uzyskaj dostęp już dziś:
Wyobraź sobie proces, który został uruchomiony z /tmp/exec, a następnie usunięty. Możliwe jest jego wydobycie
Ścieżki, w których złośliwe oprogramowanie może być zainstalowane jako usługa:
/etc/inittab: Wywołuje skrypty inicjalizacyjne, takie jak rc.sysinit, kierując dalej do skryptów uruchamiających.
/etc/rc.d/ i /etc/rc.boot/: Zawierają skrypty do uruchamiania usług, z których drugi znajduje się w starszych wersjach Linuksa.
/etc/init.d/: Używane w niektórych wersjach Linuksa, takich jak Debian, do przechowywania skryptów uruchamiających.
Usługi mogą być również aktywowane za pomocą /etc/inetd.conf lub /etc/xinetd/, w zależności od wariantu Linuksa.
/etc/systemd/system: Katalog dla skryptów menedżera systemu i usług.
/etc/systemd/system/multi-user.target.wants/: Zawiera linki do usług, które powinny być uruchamiane w trybie wieloużytkownikowym.
/usr/local/etc/rc.d/: Dla usług niestandardowych lub firm trzecich.
~/.config/autostart/: Dla aplikacji uruchamiających się automatycznie dla konkretnego użytkownika, które mogą być miejscem ukrycia złośliwego oprogramowania skierowanego na użytkownika.
/lib/systemd/system/: Domyślne pliki jednostek w skali systemu dostarczane przez zainstalowane pakiety.
Moduły jądra Linuksa, często wykorzystywane przez złośliwe oprogramowanie jako komponenty rootkit, są ładowane podczas uruchamiania systemu. Katalogi i pliki krytyczne dla tych modułów obejmują:
/lib/modules/$(uname -r): Zawiera moduły dla uruchamianej wersji jądra.
/etc/modprobe.d: Zawiera pliki konfiguracyjne do kontrolowania ładowania modułów.
/etc/modprobe i /etc/modprobe.conf: Pliki dla globalnych ustawień modułów.
Linux wykorzystuje różne pliki do automatycznego uruchamiania programów po zalogowaniu użytkownika, co może sprzyjać złośliwemu oprogramowaniu:
/etc/profile.d/*, /etc/profile, i /etc/bash.bashrc: Wykonywane przy każdym logowaniu użytkownika.
~/.bashrc, ~/.bash_profile, ~/.profile, i ~/.config/autostart: Pliki specyficzne dla użytkownika, które uruchamiają się po ich logowaniu.
/etc/rc.local: Uruchamia się po uruchomieniu wszystkich usług systemowych, oznaczając koniec przejścia do środowiska wieloużytkownikowego.
Systemy Linux śledzą aktywności użytkowników i zdarzenia systemowe za pomocą różnych plików logów. Logi te są kluczowe do identyfikacji nieautoryzowanego dostępu, infekcji złośliwym oprogramowaniem i innych incydentów bezpieczeństwa. Kluczowe pliki logów obejmują:
/var/log/syslog (Debian) lub /var/log/messages (RedHat): Rejestrują wiadomości i aktywności w skali systemu.
/var/log/auth.log (Debian) lub /var/log/secure (RedHat): Rejestrują próby uwierzytelnienia, udane i nieudane logowania.
Użyj grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log
, aby filtrować odpowiednie zdarzenia uwierzytelnienia.
/var/log/boot.log: Zawiera wiadomości o uruchamianiu systemu.
/var/log/maillog lub /var/log/mail.log: Rejestrują aktywności serwera pocztowego, przydatne do śledzenia usług związanych z pocztą.
/var/log/kern.log: Przechowuje wiadomości jądra, w tym błędy i ostrzeżenia.
/var/log/dmesg: Zawiera wiadomości sterowników urządzeń.
/var/log/faillog: Rejestruje nieudane próby logowania, co pomaga w dochodzeniach dotyczących naruszeń bezpieczeństwa.
/var/log/cron: Rejestruje wykonania zadań cron.
/var/log/daemon.log: Śledzi aktywności usług w tle.
/var/log/btmp: Dokumentuje nieudane próby logowania.
/var/log/httpd/: Zawiera logi błędów i dostępu Apache HTTPD.
/var/log/mysqld.log lub /var/log/mysql.log: Rejestrują aktywności bazy danych MySQL.
/var/log/xferlog: Rejestruje transfery plików FTP.
/var/log/: Zawsze sprawdzaj, czy nie ma niespodziewanych logów.
Logi systemowe Linuksa i podsystemy audytu mogą być wyłączone lub usunięte w przypadku incydentu włamania lub złośliwego oprogramowania. Ponieważ logi w systemach Linux zazwyczaj zawierają jedne z najbardziej użytecznych informacji o złośliwych działaniach, intruzi rutynowo je usuwają. Dlatego, przeglądając dostępne pliki logów, ważne jest, aby szukać luk lub nieuporządkowanych wpisów, które mogą wskazywać na usunięcie lub manipulację.
Linux utrzymuje historię poleceń dla każdego użytkownika, przechowywaną w:
~/.bash_history
~/.zsh_history
~/.zsh_sessions/*
~/.python_history
~/.*_history
Ponadto, polecenie last -Faiwx
dostarcza listę logowań użytkowników. Sprawdź je pod kątem nieznanych lub niespodziewanych logowań.
Sprawdź pliki, które mogą przyznać dodatkowe uprawnienia:
Przejrzyj /etc/sudoers
w poszukiwaniu nieprzewidzianych uprawnień użytkowników, które mogły zostać przyznane.
Przejrzyj /etc/sudoers.d/
w poszukiwaniu nieprzewidzianych uprawnień użytkowników, które mogły zostać przyznane.
Zbadaj /etc/groups
, aby zidentyfikować wszelkie nietypowe członkostwa w grupach lub uprawnienia.
Zbadaj /etc/passwd
, aby zidentyfikować wszelkie nietypowe członkostwa w grupach lub uprawnienia.
Niektóre aplikacje również generują własne logi:
SSH: Sprawdź ~/.ssh/authorized_keys i ~/.ssh/known_hosts w poszukiwaniu nieautoryzowanych połączeń zdalnych.
Gnome Desktop: Zajrzyj do ~/.recently-used.xbel w poszukiwaniu ostatnio otwieranych plików za pomocą aplikacji Gnome.
Firefox/Chrome: Sprawdź historię przeglądarki i pobierania w ~/.mozilla/firefox lub ~/.config/google-chrome w poszukiwaniu podejrzanych działań.
VIM: Przejrzyj ~/.viminfo w poszukiwaniu szczegółów użycia, takich jak ścieżki otwieranych plików i historia wyszukiwania.
Open Office: Sprawdź dostęp do ostatnich dokumentów, co może wskazywać na skompromitowane pliki.
FTP/SFTP: Przejrzyj logi w ~/.ftp_history lub ~/.sftp_history w poszukiwaniu transferów plików, które mogą być nieautoryzowane.
MySQL: Zbadaj ~/.mysql_history w poszukiwaniu wykonanych zapytań MySQL, co może ujawnić nieautoryzowane działania w bazie danych.
Less: Analizuj ~/.lesshst w poszukiwaniu historii użycia, w tym przeglądanych plików i wykonanych poleceń.
Git: Sprawdź ~/.gitconfig i projekt .git/logs w poszukiwaniu zmian w repozytoriach.
usbrip to mały program napisany w czystym Pythonie 3, który analizuje pliki logów Linuksa (/var/log/syslog*
lub /var/log/messages*
w zależności od dystrybucji) w celu skonstruowania tabel historii zdarzeń USB.
Interesujące jest znalezienie wszystkich używanych USB i będzie to bardziej przydatne, jeśli masz autoryzowaną listę USB, aby znaleźć "zdarzenia naruszenia" (użycie USB, które nie znajdują się na tej liście).
Więcej przykładów i informacji w repozytorium github: https://github.com/snovvcrash/usbrip
Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społeczności. Uzyskaj dostęp już dziś:
Sprawdź /etc/passwd, /etc/shadow oraz dzienniki zabezpieczeń w poszukiwaniu nietypowych nazw lub kont utworzonych i/lub używanych w bliskiej odległości od znanych nieautoryzowanych zdarzeń. Sprawdź również możliwe ataki brute-force na sudo. Ponadto sprawdź pliki takie jak /etc/sudoers i /etc/groups w poszukiwaniu nieoczekiwanych uprawnień przyznanych użytkownikom. Na koniec poszukaj kont z brakującymi hasłami lub łatwymi do odgadnięcia hasłami.
Podczas badania incydentów związanych z złośliwym oprogramowaniem, struktura systemu plików jest kluczowym źródłem informacji, ujawniającym zarówno sekwencję zdarzeń, jak i zawartość złośliwego oprogramowania. Jednak autorzy złośliwego oprogramowania opracowują techniki, aby utrudnić tę analizę, takie jak modyfikowanie znaczników czasu plików lub unikanie systemu plików do przechowywania danych.
Aby przeciwdziałać tym metodom antyforensycznym, istotne jest:
Przeprowadzenie dokładnej analizy chronologicznej przy użyciu narzędzi takich jak Autopsy do wizualizacji chronologii zdarzeń lub mactime
z Sleuth Kit do szczegółowych danych chronologicznych.
Zbadanie nieoczekiwanych skryptów w $PATH systemu, które mogą obejmować skrypty powłoki lub PHP używane przez atakujących.
Sprawdzenie /dev
pod kątem nietypowych plików, ponieważ tradycyjnie zawiera pliki specjalne, ale może zawierać pliki związane z złośliwym oprogramowaniem.
Wyszukiwanie ukrytych plików lub katalogów o nazwach takich jak ".. " (kropka kropka spacja) lub "..^G" (kropka kropka kontrola-G), które mogą ukrywać złośliwą zawartość.
Identyfikacja plików setuid root za pomocą polecenia: find / -user root -perm -04000 -print
To znajduje pliki z podwyższonymi uprawnieniami, które mogą być nadużywane przez atakujących.
Przeglądanie znaczników czasu usunięcia w tabelach inode, aby dostrzec masowe usunięcia plików, co może wskazywać na obecność rootkitów lub trojanów.
Inspekcja kolejnych inode w poszukiwaniu pobliskich złośliwych plików po zidentyfikowaniu jednego, ponieważ mogły zostać umieszczone razem.
Sprawdzenie wspólnych katalogów binarnych (/bin, /sbin) pod kątem niedawno zmodyfikowanych plików, ponieważ mogły zostać zmienione przez złośliwe oprogramowanie.
Zauważ, że atakujący może zmodyfikować czas, aby pliki wyglądały na legalne, ale nie może zmodyfikować inode. Jeśli odkryjesz, że plik wskazuje, że został utworzony i zmodyfikowany w tym samym czasie co reszta plików w tym samym folderze, ale inode jest niespodziewanie większy, to znaczniki czasu tego pliku zostały zmodyfikowane.
Aby porównać wersje systemu plików i zlokalizować zmiany, używamy uproszczonych poleceń git diff
:
Aby znaleźć nowe pliki, porównaj dwa katalogi:
Dla zmodyfikowanej treści, wymień zmiany, ignorując konkretne linie:
Aby wykryć usunięte pliki:
Opcje filtru (--diff-filter
) pomagają zawęzić do konkretnych zmian, takich jak dodane (A
), usunięte (D
) lub zmodyfikowane (M
) pliki.
A
: Dodane pliki
C
: Skopiowane pliki
D
: Usunięte pliki
M
: Zmodyfikowane pliki
R
: Zmienione nazwy plików
T
: Zmiany typu (np. plik na symlink)
U
: Niezłączone pliki
X
: Nieznane pliki
B
: Uszkodzone pliki
Książka: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides
Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społeczności. Uzyskaj dostęp już dziś:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)