Linux Forensics

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ś:

Wsparcie dla HackTricks

Wstępne zbieranie informacji

Podstawowe informacje

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:

export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64

Gdy skonfigurujesz system do używania dobrych i znanych binarek, możesz zacząć ekstrahować podstawowe informacje:

date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info
ifconfig -a || ip a #Network interfaces (promiscuous mode?)
ps -ef #Running processes
netstat -anp #Proccess and ports
lsof -V #Open files
netstat -rn; route #Routing table
df; mount #Free space and mounted devices
free #Meam and swap space
w #Who is connected
last -Faiwx #Logins
lsmod #What is loaded
cat /etc/passwd #Unexpected data?
cat /etc/shadow #Unexpected data?
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory

Podejrzane 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

Zrzut pamięci

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:

make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"

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

Obrazowanie dysku

Wyłączanie

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ęciem wtyczki". Pierwsze pozwoli na normalne zakończenie procesów i synchronizację systemu plików, ale również umożliwi potencjalnemu złośliwemu oprogramowaniu 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ę.

Robienie obrazu dysku

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.

#Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512

#Raw copy with hashes along the way (more secure as it checks hashes while it's copying the data)
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes

Wstępna analiza obrazu dysku

Tworzenie obrazu dysku bez dodatkowych danych.

#Find out if it's a disk image using "file" command
file disk.img
disk.img: Linux rev 1.0 ext4 filesystem data, UUID=59e7a736-9c90-4fab-ae35-1d6a28e5de27 (extents) (64bit) (large files) (huge files)

#Check which type of disk image it's
img_stat -t evidence.img
raw
#You can list supported types with
img_stat -i list
Supported image format types:
raw (Single or split raw file (dd))
aff (Advanced Forensic Format)
afd (AFF Multiple File)
afm (AFF with external metadata)
afflib (All AFFLIB image formats (including beta ones))
ewf (Expert Witness Format (EnCase))

#Data of the image
fsstat -i raw -f ext4 disk.img
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: Ext4
Volume Name:
Volume ID: 162850f203fd75afab4f1e4736a7e776

Last Written at: 2020-02-06 06:22:48 (UTC)
Last Checked at: 2020-02-06 06:15:09 (UTC)

Last Mounted at: 2020-02-06 06:15:18 (UTC)
Unmounted properly
Last mounted on: /mnt/disk0

Source OS: Linux
[...]

#ls inside the image
fls -i raw -f ext4 disk.img
d/d 11: lost+found
d/d 12: Documents
d/d 8193:       folder1
d/d 8194:       folder2
V/V 65537:      $OrphanFiles

#ls inside folder
fls -i raw -f ext4 disk.img 12
r/r 16: secret.txt

#cat file inside image
icat -i raw -f ext4 disk.img 16
ThisisTheMasterSecret

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ś:

Wyszukiwanie znanego złośliwego oprogramowania

Zmodyfikowane pliki systemowe

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, aby przeprowadzić kompleksowe sprawdzenie.

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

Detektory złośliwego oprogramowania/rootkitów

Przeczytaj następującą stronę, aby dowiedzieć się o narzędziach, które mogą być przydatne do znajdowania złośliwego oprogramowania:

Malware Analysis

Wyszukiwanie zainstalowanych programów

Aby skutecznie wyszukiwać zainstalowane programy zarówno w systemach Debian, jak i RedHat, rozważ wykorzystanie dzienników systemowych i baz danych obok ręcznych sprawdzeń 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, aby filtrować konkretne informacje.

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

# Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
cat /var/log/dpkg.log | grep installed
# RedHat RPM database query
rpm -qa --root=/mntpath/var/lib/rpm
# Listing directories for manual installations
ls /usr/sbin /usr/bin /bin /sbin
# Identifying non-package executables (Debian)
find /sbin/ -exec dpkg -S {} \; | grep "no path found"
# Identifying non-package executables (RedHat)
find /sbin/ –exec rpm -qf {} \; | grep "is not"
# Find exacuable files
find / -type f -executable | grep <something>

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ś:

Przywracanie usuniętych działających binariów

Wyobraź sobie proces, który został uruchomiony z /tmp/exec, a następnie usunięty. Możliwe jest jego wyodrębnienie

cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it

Inspekcja lokalizacji autostartowych

Zaplanowane zadania

cat /var/spool/cron/crontabs/*  \
/var/spool/cron/atjobs \
/var/spool/anacron \
/etc/cron* \
/etc/at* \
/etc/anacrontab \
/etc/incron.d/* \
/var/spool/incron/* \

#MacOS
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/

Usługi

Ś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

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.

Inne lokalizacje autostartu

Linux wykorzystuje różne pliki do automatycznego uruchamiania programów po zalogowaniu użytkownika, co może sprzyjać ukrywaniu złośliwego oprogramowania:

  • /etc/profile.d/*, /etc/profile, i /etc/bash.bashrc: Wykonywane dla każdego logowania użytkownika.

  • ~/.bashrc, ~/.bash_profile, ~/.profile, i ~/.config/autostart: Pliki specyficzne dla użytkownika, które uruchamiają się po jego logowaniu.

  • /etc/rc.local: Uruchamia się po uruchomieniu wszystkich usług systemowych, oznaczając koniec przejścia do środowiska wieloużytkownikowego.

Sprawdź logi

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 nieoczekiwane logi tutaj.

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 nieoczekiwanych logowań.

Sprawdź pliki, które mogą przyznać dodatkowe uprawnienia:

  • Przejrzyj /etc/sudoers w poszukiwaniu nieoczekiwanych uprawnień użytkowników, które mogły zostać przyznane.

  • Przejrzyj /etc/sudoers.d/ w poszukiwaniu nieoczekiwanych uprawnień użytkowników, które mogły zostać przyznane.

  • Zbadaj /etc/groups, aby zidentyfikować wszelkie nietypowe członkostwa grupowe lub uprawnienia.

  • Zbadaj /etc/passwd, aby zidentyfikować wszelkie nietypowe członkostwa grupowe 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.

Logi USB

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 znajduje się na tej liście).

Instalacja

pip3 install usbrip
usbrip ids download #Download USB ID database

Przykłady

usbrip events history #Get USB history of your curent linux machine
usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user
#Search for vid and/or pid
usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid

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ś:

Przeglądaj konta użytkowników i aktywności logowania

Zbadaj /etc/passwd, /etc/shadow i 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 pod kątem nieoczekiwanych uprawnień przyznanych użytkownikom. Na koniec poszukaj kont z brakującymi hasłami lub łatwymi do odgadnięcia hasłami.

Zbadaj system plików

Analiza struktur systemu plików w badaniach nad złośliwym oprogramowaniem

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 osi czasu przy użyciu narzędzi takich jak Autopsy do wizualizacji osi czasu zdarzeń lub mactime z Sleuth Kit do szczegółowych danych osi czasu.

  • Zbadanie nieoczekiwanych skryptów w $PATH systemu, które mogą obejmować skrypty shell 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.

# List recent files in a directory:
ls -laR --sort=time /bin```

# Sort files in a directory by inode:
ls -lai /bin | sort -n```

Zauważ, że atakujący może zmodyfikować czas, aby pliki wyglądały na legalne, ale nie może zmienić 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 czasy tego pliku zostały zmodyfikowane.

Porównaj pliki różnych wersji systemu plików

Podsumowanie porównania wersji systemu plików

Aby porównać wersje systemu plików i zlokalizować zmiany, używamy uproszczonych poleceń git diff:

  • Aby znaleźć nowe pliki, porównaj dwa katalogi:

git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
  • Dla zmodyfikowanej treści, wymień zmiany, ignorując konkretne linie:

git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
  • Aby wykryć usunięte pliki:

git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
  • Opcje filtrowania (--diff-filter) pomagają zawęzić zmiany do konkretnych, 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

Odniesienia

Wsparcie HackTricks

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ś:

Last updated