Stručne: Odchádzajúce spojenia servera skontrolujete pomocou ss -tunap alebo lsof -i, ktoré priradia každé spojenie procesu. Normálne sú spojenia na databázu, poštový server, aktualizačné servery a známe rozhrania. Spojenia procesov PHP alebo webového servera na neznáme ciele, neobvyklé porty a trvalé spojenia bez príčiny sú varovné signály diaľkového ovládania alebo úniku dát. Trvalo pomáha výstupné filtrovanie, ktoré povoľuje len potrebné ciele.
Prečo pohľad von toľko prezrádza
Pri hľadaní vlámania sa väčšina pozerá na súbory. Útočník však chce so svojím prístupom niečo začať: doťahovať nástroje, prijímať príkazy, vyvážať dáta alebo využívať server na spam či útoky na iných. To všetko potrebuje spojenia smerom von.
Webový server nadväzuje sám od seba len málo spojení a väčšina z nich je predvídateľná: dopytuje databázu, odovzdáva poštu, volá platobné alebo prepravné rozhrania a sťahuje aktualizácie. Cudzie spojenia tu preto obzvlášť upútajú. Podľa správ, ktoré máme k dispozícii, patria odchádzajúce spojenia medzi všeobecné varovné signály po vlámaní; potvrdené indikátory kompromitácie (Indicators of Compromise) špeciálne pre PHP2Shell neexistujú. Ďalšie príznaky zhŕňa Som už kompromitovaný?.
Vypísať odchádzajúce spojenia a priradiť ich procesom
Nasledujúce príkazy len čítajú. Spúšťajte ich ako root, inak chýbajú údaje o procesoch.
# Všetky nadviazané spojenia TCP s procesom
ss -tnp state established
# TCP a UDP vrátane počúvajúcich služieb
ss -tunap
# Spojenia podľa programu a používateľa, bez prekladu mien
lsof -i -n -P | grep -v LISTEN
# Len spojenia procesov používateľov webového servera
lsof -i -n -P -u www-data 2>/dev/null
Vo výstupe sledujte tri stĺpce: proces, cieľovú adresu s portom a používateľa. Spojenie php-fpm na databázu na porte 3306 je normálne. Spojenie programu s neznámym názvom z /tmp na cudziu adresu na neobvyklom porte nie je. Pod akým používateľom PHP beží, závisí od distribúcie a panela.
Normálne alebo podozrivé? Zaradenie
| Pozorovanie | Skôr normálne | Skôr podozrivé |
|---|---|---|
| Cieľ | vlastná databáza, poštový server, známe API, aktualizačný server | neznáme adresy bez vzťahu k aplikácii |
| Proces | php-fpm, webový server, poštové a aktualizačné služby | neznáme programy, procesy z /tmp alebo /dev/shm |
| Port | 443, 3306, 5432, 587 | neobvyklé vysoké porty, porty typické pre IRC |
| Trvanie | krátke, zodpovedá požiadavkám | trvalo otvorené, aj v noci bez návštevníkov |
| Objem | malý a rovnomerný | náhle špičky v odchádzajúcom objeme dát |
| Poštová prevádzka | odosielanie cez určený poštový server | mnoho priamych spojení na port 25 |
Mnoho spojení na porte 25 naznačuje odosielanie spamu; k tomu je samostatný článok, Server rozosiela spam.
Vyhodnotiť neznámy cieľ
Cudzia adresa v zozname ešte nie je dôkaz. Skôr než sa rozhodnete, objasnite, kam spojenie vedie a kto ho nadviazal. Ani tieto kroky nič nemenia:
- Určiť proces: Vziať PID zo
ssa pomocouls -l /proc/PID/exea príkazového riadka skontrolovať, aký program za tým stojí. - Vyhľadať cieľ: Pomocou
dig -x <IP>zistiť názov a pomocouwhois <IP>prevádzkovateľa siete. - Porovnať s aplikáciou: Opýtajte sa vývojára alebo dodávateľa, či vaša aplikácia túto službu používa.
- Skontrolovať priebeh: Protokoly firewallu a siete ukážu, odkedy spojenie existuje a koľko dát sa prenieslo.
- Zabezpečiť výsledky: Uložiť výstupy s časom skôr, než niečo ukončíte alebo zablokujete.
Počítajte s nejednoznačnými výsledkami. Mnohé legitímne služby bežia u veľkých poskytovateľov cloudu a CDN, ktorých adresy nedovoľujú vyvodiť záver o zákazníkovi. Naopak, aj útočníci používajú prenajaté servery v cloude. Známy prevádzkovateľ siete teda nie je ani odvolaním poplachu, ani dôkazom; rozhodujúce je, či proces a účel zodpovedajú vašej aplikácii.
Momentka pomocou ss ukazuje len to, čo je práve otvorené. Krátke spojenia, ktoré sa nadväzujú v minútovom takte, uvidíte iba v protokoloch. Preto sú protokoly firewallu alebo flow pri otázke úniku dát často dôležitejšie než pohľad na samotný server.
Ak dáta mohli váš server opustiť a sú dotknuté osobné údaje, môže existovať oznamovacia povinnosť podľa GDPR, spravidla do 72 hodín. Vyjasnite to včas so svojím zodpovedným pracovníkom pre ochranu údajov; súvislosti v časti Oznamovacia povinnosť podľa GDPR do 72 hodín. Nejde o právne poradenstvo.
Nezabudnite na DNS a kontajnery
Nie každý únik dát potrebuje viditeľné spojenie na cudziu adresu. Preklady mien cez DNS idú na resolver vášho dátového centra a v zozname ss sotva upútajú. Útočníci môžu zabaliť dáta do dlhých, náhodne pôsobiacich subdomén a tak ich vyniesť cez dopyty DNS. Náznaky poskytujú protokoly resolvera: nezvyčajne mnoho dopytov na tú istú cudziu doménu, veľmi dlhé mená alebo dopyty v čase, keď web nikto nepoužíva.
Ak vaše aplikácie bežia v kontajneroch, hostiteľ vidí spojenia kontajnerov často len ako prevádzku siete kontajnerov. Skontrolujte potom každý kontajner osobitne, pokiaľ sú tam nástroje k dispozícii, alebo vyhodnoťte spojenia na úrovni hostiteľa a firewallu.
# Spojenia v rámci kontajnera (ak je ss súčasťou obrazu)
docker exec <container> ss -tnp 2>/dev/null
# Na hostiteľovi: spojenia sledované jadrom, ak je nainštalovaný conntrack
sudo conntrack -L 2>/dev/null | head -50
Odchádzajúcu prevádzku trvalo obmedziť
Najúčinnejšou prevenciou je výstupné filtrovanie: server smie dosiahnuť len ciele, ktoré skutočne potrebuje, všetko ostatné sa zablokuje a zaprotokoluje. Pre útočníkov je tak výrazne ťažšie doťahovať nástroje alebo sťahovať dáta, aj keď môžu vykonávať kód.
Cesta k tomu začína zoznamom potrebných cieľov, ktorý odvodíte z vyššie zozbieraných spojení. Potom nasleduje fáza, v ktorej sa zablokované spojenia len protokolujú, a až potom sa blokovanie spustí naostro. Platobné služby, aktualizačné servery a rozhrania s meniacimi sa adresami vyžadujú pritom obzvlášť starostlivosť. Ako sa firewall pre webové servery buduje ako celok, opisuje Firewall pre webové servery: otvárajte len potrebné porty.
Ako konkrétne pomáha PHP SOS?
- Skontrolovať spojenia: Všetky aktívne spojenia priradíme procesom a účelom a neznáme ciele vyhodnotíme.
- Odhadnúť únik dát: Vyhodnotíme protokoly firewallu a siete a objasníme, či a kedy sa dáta preniesli.
- Obmedziť výstup: S vami vypracujeme zoznam povolených cieľov a výstupné filtrovanie zavedieme postupne.
- Sledovať trvalo: Prostredníctvom bezpečnostného monitoringu hlásime nové alebo neobvyklé spojenia.
Časté otázky
Ktoré odchádzajúce spojenia sú pri webovom serveri normálne?
Typické sú spojenia na databázu, poštový server, platobné a prepravné služby, aktualizačné servery a známe rozhrania aplikácie. Všetko, čo sa nedá priradiť k žiadnemu z týchto účelov, si zaslúži bližší pohľad.
Ako vidím, ktorý proces spojenie nadviazal?
Pomocou ss -tunap alebo lsof -i -n -P ako root. Oba ukazujú ku každému spojeniu ID procesu a názov programu. Tak rozpoznáte, či spojenie pochádza od PHP, webového servera alebo cudzieho programu.
Znamená neznáme spojenie, že unikli dáta?
Nie nevyhnutne. Je to však náznak, ktorý treba objasniť. Či a aké dáta sa preniesli, sa dá často zodpovedať len pomocou protokolov firewallu alebo siete. Ak sú dotknuté osobné údaje, môžu existovať oznamovacie povinnosti.
Mal by webový server vôbec smieť nadväzovať odchádzajúce spojenia?
Len na ciele, ktoré potrebuje. Výstupné filtrovanie, ktoré blokuje všetko ostatné, výrazne sťažuje útočníkom doťahovanie nástrojov a únik dát. Treba ho však starostlivo otestovať.