Tento článek obsahuje seznam nástrojů, které jsou k dispozici pro provádění analýzy kompromitovaného serveru. (Čištění napadeného serveru je mimo jeho rozsah.) Pomocí těchto nástrojů můžete zjistit následující informace:
- Vstupní bod
- Původ útoku
- Které soubory byly ohroženy
- Úroveň přístupu, kterou útočník získal
- Audit stopa útočníka
Unix® server může zneužít mnoho různých typů kompromisů. Útočníci mohou spustit útok hrubou silou, uhodnout slabé heslo nebo se pokusit použít známé zranitelnosti softwaru v naději, že server nemá pravidelný plán oprav. Je důležité pochopit, jak byl počítač napaden, abyste mohli určit rozsah poškození vašeho serveru a dalších hostitelů, kteří jsou pro napadený počítač přístupní.
U většiny kompromisů na úrovni root je nejpřímější přístup k obnově provedení čisté instalace serveru a obnovení všech důležitých dat ze záloh. Dokud však neznáte vstupní bod kompromisu, tento krok nemusí být dostatečný, protože musíte porozumět kompromisu, abyste mohli správně uzavřít bezpečnostní díru.
Zdokumentujte útok
Když budete upozorněni, že systém pod vaší kontrolou může být kompromitován, ujistěte se, že jste od reportéra získali co nejvíce informací, včetně následujících položek:
- Jak byl zjištěn počáteční problém
- Odhadovaný čas, kdy došlo ke kompromitaci
- Zda byl server po zjištění kompromitace změněn
- Cokoli jiného, co reportér říká, je důležité
Důležité :Pokud plánujete zapojit policii, je nutné, abyste na serveru neprováděli žádné další akce. Server musí zůstat v aktuálním stavu pro účely shromažďování důkazů.
Pokud se rozhodnete pokračovat ve vyšetřování, zdokumentujte vše, co najdete na serveru. Tento krok může být stejně jednoduchý jako zkopírování a vložení příkazu a jeho výsledků.
Nástroje pro vyšetřování
V některých kompromisech se útočníkovi podaří odstranit všechny důležité soubory protokolu, aby skryl své stopy. K tomu však vždy nedochází. Výsledkem je, že soubory protokolu obsahují cenná vodítka o tom, co útočník se serverem provedl. Soubory Thelog vám také mohou pomoci určit, zda byl útok základním webovým hackem nebo kompromisem na úrovni kořenů. Použijte příkazy v této části k nalezení vodítek, které vám pomohou rozluštit rozsah kompromisu.
poslední příkaz
poslední
příkaz uvádí relace uživatelů, kteří se nedávno přihlásili do systému. Jeho výstup obsahuje časová razítka a názvy hostitelů a označuje, zda je uživatel stále přihlášen. Pokud se ve výstupu objeví lichá adresa internetového protokolu (IP), můžete ji porovnat proti útoku brutální silou Secure Shell (SSH) v /var/log/messages nebo /var/log/secure adresář. Tento krok by mohl naznačovat, jak útočník získal záznam, jaké uživatelské jméno použil k získání přístupu a zda se mu podařilo eskalovat svá oprávnění na root
.
příkaz ls -lart
ls -lart
příkaz vygeneruje časově uspořádaný seznam souborů a adresářů, které můžete porovnat, když došlo ke kompromitaci. Tento výstup vám může pomoci určit, co útok přidal nebo odstranil ze systému.
příkaz netstat -na
Parametr netstat -na
příkaz zobrazí aktuální naslouchající sokety na počítači. Spuštění tohoto příkazu může odhalit všechna zadní vrátka, která naslouchají, nebo spuštěné chybné služby.
příkaz ps -wauxef
Tento příkaz vám pomůže vystopovat všechny chybné procesy, které naslouchají, a zobrazí další zvláštní procesy (například uživatel www
spuštění procesu Bash). Můžete také spustit příkaz lsof |grep
najít další informace o otevřených souborech, které proces používá. Současně spusťte cat /proc/
může vám také říci, kde existuje soubor, který řídí proces.
příkaz bash_history
Soubor historie je často Rosettským kamenem při hledání toho, co si vyžádalo kompromis. Pomocí bash_history
příkaz k prohlížení .bash_history
uživatele často přesně ukazuje, jaké příkazy provedli, jaké škodlivé programy stáhli a adresáře, na které se zaměřili.
top příkaz
Škodlivé procesy často způsobují problémy se spory o centrální procesorovou jednotku (CPU) v prostředí, a proto se objevují v horní části seznamu procesů. Použijte top
příkaz pro zobrazení tohoto seznamu. Když sledujete kompromis, považujte všechny procesy, které způsobují problémy se spory o CPU, za podezřelé.
příkaz strace
Když spustíte strace -p pid
příkaz na podezřelý proces, strace
příkaz může poskytnout důležité informace o tom, co proces dělá.
Další nástroje
Předchozí příkazy nemusí poskytnout mnoho vodítek ohledně toho, co se stalo během útoku. Pokud je to váš případ, můžete použít specializovanější nástroje.
Důležité :Než použijete nástroje v této části, měli byste se ujistit, že binární soubory, které používáte ke zkoumání, nejsou verze s trojskými koňmi. Verze s trojskými koňmi mohou provádět úkoly jménem útočníka, jako je vynechání informací, které by mohly odhalit, čeho se kompromitace snažila dosáhnout.
Spuštěním následujícího příkazu ověřte, zda máte dobře fungující sadu nástrojů:
rpm -Va
Ověření balíčku porovnává informace o nainstalovaných souborech balíčku s metadaty balíčku, která ukládá databáze RPM Package Manager (RPM). Ověření porovnává informace o velikosti, součtu MD5, oprávněních, typu, vlastníkovi a skupině, které jsou přidruženy ke každému souboru. Výstup zobrazuje všechny nesrovnalosti.
Důležité :Balíčky označené příznakem v následujících adresářích mohou naznačovat, že používáte trojanskou verzi binárního souboru, a proto nemůžete důvěřovat jeho výstupu:
/bin
/sbin
/usr/bin
/usr/sbin
Následující příklad ukazuje soubor s trojským koněm:
S.5….T /bin/login
příkaz rpm -qa
Můžete použít příkaz rpm -qa
zobrazit nedávno nainstalované balíčky v chronologickém pořadí. V případě ohrožení rootem však může být ohrožena i databáze rpm.
příkaz lsattr
Pokud útočník získá přístup root a trojské koně k určitým binárním souborům, mohou tyto binární soubory učinit neměnnými, takže nebudete moci znovu nainstalovat jejich čisté verze. Zkontrolujte následující adresáře:
/bin
/sbin
/usr/bin
/usr/sbin
Následující příklad ukazuje soubor, který útočník učinil neměnným:
-------i----- /bin/ps
Under normal circumstances in these directories, the rules should all look similar to:
------------- /bin/ps
příkaz hledání
najít
je unixový nástroj, který může být kritický při hledání nedávno upravených souborů. Soubory upravené během posledních pěti dnů můžete například najít spuštěním následujícího příkazu:
find / -mtime 5
Běžné adresáře pro webové exploity
Zkontrolujte následující světově zapisovatelné adresáře, do kterých Apache® běžně zapisuje dočasné soubory:
ls -al /tmp
ls -al /var/tmp
ls -al /dev/shm
Hledejte všechny soubory, které nepoznáváte nebo které vypadají podezřele. Dávejte pozor na skryté soubory a soubory, které mají oprávnění ke spuštění.
Pokud jste nastavili oprávnění pro adresáře na vašem webu na 777, zkontrolujte také.
Najděte místo vstupu
Pokud najdete užitečné informace pomocí nástrojů v předchozích částech, můžete mít také časové razítko, kdy hacker nainstaloval škodlivý soubor nebo soubory na server.
Toto časové razítko můžete použít ke kontrole protokolů přístupu vašeho webu, zda neobsahují podezřelé položky, které byly přidány během daného časového období. Pokud najdete něco podezřelého, můžete na to odkazovat s umístěním škodlivých souborů a zúžit tak místo vstupu.
Zatímco většina kompromisů pochází ze zneužitelného kódu na vašem webu, nemůžete vyloučit jiné vstupní body. Ujistěte se, že jste si přečetli /var/log/* za vše, co se během nahlášeného časového rámce jeví jako podezřelé.
Příklad vyšetřování
Příklad vyšetřování v této části ukazuje postup, který byste měli použít při vyšetřování podezření na kompromitaci na kořenové úrovni.
Identifikujte typ útoku
Ověřte, zda šlo o základní webový hack, nebo zda útočník skutečně získal práva root. Ve většině případů jde o jednoduchý webový hack, který můžete bezpečně vyčistit.
-
Spuštěním následujících příkazů zjistěte, zda útočník získal oprávnění root:
lsattr /usr/sbin | méně
lsattr /usr/bin | méně
lsattr /bin | méně
lsattr /sbin | méně
-
Hledejte upravené atributy, jako jsou binární soubory, které byly nastaveny na neměnný.
Výstup:
s---ia------- /sbin/shs
Když použijete
řetězce
příkaz k tomuto souboru, uvidíte, že je to backdoorshell.
Zkontrolujte, zda útočník začistil jejich stopy
V mnoha případech jsou útočníci nezkušení nebo nedbalí a nevymazali své stopy. Pomocí následujících kroků zkontrolujte, zda útočník zanechal stopy:
-
Ověřte, že všechny uživatelské účty v
/etc/passwd
mít platný shell spuštěním následujícího příkazu:cat /home/$USER/.bash_history
-
Načtěte historii uživatele root spuštěním následujících příkazů:
historie
cat /root/.bash_history
V tomto příkladu výstup z /root/.bash_history
příkaz odhalí, že útočník provedl na serveru následující akce:
- Stažené škodlivé nástroje k poskytování prostřednictvím Apache® v /var/www/html/* .
- Instalované nástroje Internet Relay Chat (IRC) a další nástroje v/var/tmp/.ICE-unix .
- Upravili kořenový crontab tak, aby si znovu stáhl škodlivé nástroje, pokud je někdo odstraní ze serveru (
* * * * * /var/tmp/.ICE-unix/update>/dev/null 2>&1 ).
Zkontrolujte základní webové hacky
Až do této chvíle jsme zjistili, že útok je pravděpodobně jednoduchý webový hack, který můžete snadno vyčistit bez formátování serveru.
V tomto příkladu však víme, že útočník získal oprávnění root. Mohli také zneužít phpMyAdmin
. Po načtení backdoor PHP Shell byl útočník schopen provést místní root exploit k eskalaci svých oprávnění.
-
Spusťte následující příkazy a vyhledejte skryté soubory a adresáře ve světově čitelných adresářích, do kterých Apache obvykle zapisuje
tmp
soubory:ls -al /var/tmp |méně
ls -al /tmp
ls -al /dev/shm
-
V tomto příkladu vrátí příkazy následující výstup:
drwx—— 3 70 70 4096 19. listopadu 02:00 /var/tmp/.ICE-unix
-
Pokud zde najdete položky, musíte se pokusit vystopovat vstupní bod, abyste mohli web odstranit, upgradovat kód webu nebo jinak opravit zneužitelný kód. Krok 5 představuje rychlý způsob, jak tento úkol splnit. Pokud je však výstup parametru
ps -waux
příkaz ukazuje, že IRC roboti běží, pak se můžete pokusit zjistit, odkud proces běží pomocílsof
příkaz nebops -wauxxef |grep
.
Hledejte identifikátory procesů, které naslouchají příchozím připojením
- Spusťte následující příkazy a vyhledejte identifikátory procesů (PID), které naslouchají příchozím připojením:
-
netstat -natp
:Hledá všechna podezřelá připojení, která běží na oddports -
ps -wauxxef
:Hledá podezřelé soubory, jako jebash
běžící podwww
kontextu -
lsof
:Pomáhá určit, odkud PID běžíVýstup vypadá podobně jako v následujícím příkladu:
tcp 0 0 0.0.0.0:1144 0.0.0.0:* LISTEN 1008/bash tcp 0 1 172.16.23.13:60968 22.22.22.22:7000 SYN_SENT 6860/sshd
V tomto příkladu několik dalších připojení vytvořených pomocí SSH také běží z portů na vysoké úrovni, jak ukazuje následující příklad:
[root@www tmp]# netstat -natp |grep sshd |awk '{print $4,$5,$6,$7}' 0.0.0.0:22 0.0.0.0:* LISTEN 1046/sshd 172.16.23.13:60986 22.22.22.22:6667 SYN_SENT 6860/sshd 123.123.123.123:22 22.22.22.22:59361 ESTABLISHED 22795/sshd 123.123.123.123:22 22.22.22.22:57434 ESTABLISHED 22796/sshd 123.123.123.123:57139 143.143.143.143:6667 ESTABLISHED 6860/sshd 123.123.123.123:57402 22.22.22.22:6667 ESTABLISHED 6860/sshd 123.123.123.123:22 143.143.143.143:49238 ESTABLISHED 8860/sshd 123.123.123.123:57134 22.22.22.22:6667 ESTABLISHED 6860/sshd 123.123.123.123:56845 22.22.22.22:6667 ESTABLISHED 6860/sshd 123.123.123.123:57127 143.143.143.143:6667 ESTABLISHED 6860/sshd
Tento výstup znamená, že útočníci jsou stále připojeni k tomuto počítači. Nevidíte je však, protože pravděpodobně upravili binární soubory, aby se skryli.
Určení vstupního bodu pro původní kompromis
Pomocí následujících kroků určete vstupní bod pro původní kompromis:
-
Zkontrolujte
/var/log/[messages|secure]
pro pokusy o SSH hrubou silou. -
Zkontrolujte protokoly přístupu Apache a protokoly chyb. Tento krok může pomoci určit, který web je zneužitelný.
Měli byste také porovnat IP adresy s protokoly, pokud si myslíte, že existuje šance, že by mohly pocházet odtud. Toto je rychlý a přímočarý způsob, jak vysledovat místo původu.
Servery s velkým počtem webových protokolů můžete rychle zkontrolovat pomocí následujících příkazů:
cd /var/log/httpd for i in `ls * |grep access`; do echo $i && grep wget $i; done for i in `ls * |grep access`; do echo $i && grep curl $i; done
Poznámka :Tento příklad hledá
wget
protožewget
byl v souboru historie root pod tím, co mohlo být součástí vstupního bodu.
Výsledek
V tomto příkladu naše vyšetřování odhalilo, že útočník zneužil phpMyAdmin
instalace v /var/www/html
adresář, pravděpodobně kvůli verzi phpMyAdmin
nainstalovaný na serveru byl značně zastaralý. Oprava phpMyAdmin
Pravidelný rozvrh zabrání této situaci.