Röviden: Egy szerver kimenő kapcsolatait az ss -tunap vagy az lsof -i paranccsal ellenőrzi, amelyek minden kapcsolatot egy folyamathoz rendelnek. Normálisak az adatbázishoz, a levelezőszerverhez, a frissítési szerverekhez és az ismert interfészekhez vezető kapcsolatok. A PHP- vagy webszerver-folyamatok kapcsolatai ismeretlen célokhoz, a szokatlan portok és az ok nélküli tartós kapcsolatok a távirányítás vagy az adatszivárgás figyelmeztető jelei. Tartósan egy olyan kimenő szűrés segít, amely csak a szükséges célokat engedi.
Miért árul el ennyit a kifelé pillantás
A behatolás keresésekor a legtöbben a fájlokat nézik. A támadó azonban a hozzáféréssel akar valamit kezdeni: eszközöket letölteni, parancsokat fogadni, adatokat kivinni, vagy a szervert spamre vagy mások elleni támadásokra használni. Mindehhez kifelé irányuló kapcsolatok kellenek.
A webszerver magától csak kevés kapcsolatot épít, és ezek többsége kiszámítható: lekérdezi az adatbázist, leveleket ad át, fizetési vagy szállítási interfészeket hív, és frissítéseket tölt le. Ezért itt különösen feltűnnek az idegen kapcsolatok. A rendelkezésünkre álló beszámolók szerint a kimenő kapcsolatok a behatolás utáni általános figyelmeztető jelek közé tartoznak; kifejezetten a PHP2Shellre vonatkozó megerősített Indicators of Compromise nincsenek. További jeleket foglal össze a Megfertőzték már a rendszeremet? oldal.
A kimenő kapcsolatok felsorolása és hozzárendelése folyamatokhoz
A következő parancsok csak olvasnak. Futtassa őket rootként, különben hiányoznak a folyamatadatok.
# Az összes felépített TCP-kapcsolat folyamattal
ss -tnp state established
# TCP és UDP, a figyelő szolgáltatásokkal együtt
ss -tunap
# Kapcsolatok programonként és felhasználónként, névfeloldás nélkül
lsof -i -n -P | grep -v LISTEN
# Csak a webszerver-felhasználók folyamatainak kapcsolatai
lsof -i -n -P -u www-data 2>/dev/null
A kimenetben három oszlopra figyeljen: a folyamatra, a célcímre porttal és a felhasználóra. A php-fpm kapcsolata az adatbázishoz a 3306-os porton normális. Egy ismeretlen nevű, a /tmp mappából származó program kapcsolata egy idegen címhez szokatlan porton nem az. Hogy a PHP melyik felhasználó alatt fut, az a disztribúciótól és a paneltől függ.
Normális vagy gyanús? Egy besorolás
| Megfigyelés | Inkább normális | Inkább gyanús |
|---|---|---|
| Cél | saját adatbázis, levelezőszerver, ismert API-k, frissítési szerverek | ismeretlen címek az alkalmazáshoz való kapcsolat nélkül |
| Folyamat | php-fpm, webszerver, levelező- és frissítési szolgáltatások | ismeretlen programok, a /tmp vagy a /dev/shm alól futó folyamatok |
| Port | 443, 3306, 5432, 587 | szokatlan magas portok, IRC-re jellemző portok |
| Időtartam | rövid, a kérésekhez illő | tartósan nyitva, éjszaka látogatók nélkül is |
| Mennyiség | csekély és egyenletes | hirtelen csúcsok a kimenő adatmennyiségben |
| Levélforgalom | küldés a kijelölt levelezőszerveren át | sok közvetlen kapcsolat a 25-ös porton |
A 25-ös porton lévő sok kapcsolat spamküldésre utal; erről külön cikk van, A szerver spamet küld.
Egy ismeretlen cél értékelése
Egy idegen cím a listán még nem bizonyíték. Mielőtt döntene, tisztázza, hova vezet a kapcsolat, és ki építette fel. Ezek a lépések sem változtatnak semmit:
- A folyamat meghatározása: Vegye az
ssPID-jét, és azls -l /proc/PID/exeparanccsal és a parancssorral ellenőrizze, melyik program áll mögötte. - A cél utánanézése: A
dig -x <IP>paranccsal a nevet, awhois <IP>paranccsal a hálózat üzemeltetőjét derítheti ki. - Egyeztetés az alkalmazással: Kérdezze meg a fejlesztőket vagy a szolgáltatót, hogy az alkalmazása használja-e ezt a szolgáltatást.
- Az előzmények ellenőrzése: A tűzfal- és hálózati naplók megmutatják, mióta áll fenn a kapcsolat, és mennyi adat áramlott.
- Az eredmények mentése: Mentse a kimeneteket időponttal, mielőtt bármit befejezne vagy zárolna.
Számítson többértelmű eredményekre. Sok jogos szolgáltatás nagy felhő- és CDN-szolgáltatóknál fut, amelyek címei nem engednek következtetni az ügyfélre. Fordítva, a támadók is bérelnek felhőszervereket. Egy ismert hálózati üzemeltető tehát sem vészjelzés, sem bizonyíték; az a döntő, hogy a folyamat és a cél illik-e az alkalmazásához.
Az ss pillanatfelvétele csak azt mutatja, ami éppen nyitva van. A rövid kapcsolatokat, amelyeket percenként építenek fel, csak naplókban látja. Ezért az adatszivárgás kérdésében a tűzfal- vagy flow-naplók gyakran fontosabbak, mint magára a szerverre vetett pillantás.
Ha adatok esetleg elhagyták a szerverét, és személyes adatok érintettek, a GDPR szerinti bejelentési kötelezettség általában 72 órán belül állhat fenn. Egyeztessen erről korán az adatvédelmi felelősével; a háttér a GDPR-bejelentési kötelezettség 72 órán belül oldalon olvasható. Ez nem jogi tanácsadás.
Ne feledkezzen meg a DNS-ről és a konténerekről
Nem minden adatszivárgáshoz kell látható kapcsolat egy idegen címhez. A DNS-en keresztüli névfeloldások az adatközpont resolverére mennek, és az ss listáján alig tűnnek fel. A támadók az adatokat hosszú, véletlenszerűnek tűnő aldomainekbe csomagolhatják, és így DNS-kéréseken keresztül vihetik ki. Erre a resolver naplói adnak jelzést: szokatlanul sok kérés ugyanahhoz az idegen doménhez, nagyon hosszú nevek, vagy olyan időpontokban érkező kérések, amikor senki sem használja a weboldalt.
Ha az alkalmazásai konténerekben futnak, a gazdagép a konténerek kapcsolatait gyakran csak a konténerhálózat forgalmaként látja. Ilyenkor ellenőrizze minden konténerben külön, amennyiben az eszközök ott megvannak, vagy értékelje ki a kapcsolatokat a gazdagép és a tűzfal szintjén.
# Kapcsolatok egy konténeren belül (ha az ss benne van az image-ben)
docker exec <container> ss -tnp 2>/dev/null
# A gazdagépen: a kernel által követett kapcsolatok, ha a conntrack telepítve van
sudo conntrack -L 2>/dev/null | head -50
A kimenő forgalom tartós korlátozása
A leghatékonyabb megelőzés a kimenő szűrés: a szerver csak azokat a célokat érheti el, amelyekre valóban szüksége van, mindent mást zárolnak és naplóznak. A támadóknak így jóval nehezebb eszközöket letölteni vagy adatokat kinyerni, még ha tudnak is kódot végrehajtani.
Az út a szükséges célok listájával kezdődik, amelyet a fent összegyűjtött kapcsolatokból vezet le. Ezután egy olyan fázis következik, amelyben a zárolt kapcsolatokat csak naplózzák, mielőtt a zárolást élesítik. A fizetési szolgáltatások, a frissítési szerverek és a változó címekkel rendelkező interfészek különös gondosságot igényelnek. Hogyan épül fel egy webszerver tűzfala egészében, azt a Tűzfal webszerverhez: csak a szükséges portokat nyissa meg írja le.
Hogyan segít konkrétan a PHP SOS?
- A kapcsolatok ellenőrzése: Az összes aktív kapcsolatot folyamatokhoz és célokhoz rendeljük, és értékeljük az ismeretlen célokat.
- Az adatszivárgás megítélése: Kiértékeljük a tűzfal- és hálózati naplókat, és tisztázzuk, történt-e adatátvitel, és mikor.
- A kimenő forgalom korlátozása: Önnel együtt kidolgozzuk az engedélyezett célok listáját, és fokozatosan beállítjuk a kimenő szűrést.
- Tartós figyelés: A Security-Monitoringgal jelezzük az új vagy szokatlan kapcsolatokat.
Gyakori kérdések
Mely kimenő kapcsolatok normálisak egy webszervernél?
Tipikusak az adatbázishoz, a levelezőszerverhez, a fizetési és szállítási szolgáltatásokhoz, a frissítési szerverekhez és az alkalmazás ismert interfészeihez vezető kapcsolatok. Minden, ami egyik célhoz sem rendelhető, alaposabb vizsgálatot érdemel.
Honnan látom, melyik folyamat épített kapcsolatot?
Az ss -tunap vagy az lsof -i -n -P paranccsal rootként. Mindkettő minden kapcsolathoz megmutatja a folyamatazonosítót és a programnevet. Így felismeri, hogy a kapcsolat a PHP-től, a webszervertől vagy egy idegen programtól származik.
Az ismeretlen kapcsolat azt jelenti, hogy adatok szivárogtak ki?
Nem feltétlenül. De olyan jelzés, amelyet tisztázni kell. Hogy átvittek-e adatokat, és melyeket, azt gyakran csak tűzfal- vagy hálózati naplókkal lehet megválaszolni. Ha személyes adatok érintettek, bejelentési kötelezettségek állhatnak fenn.
Egyáltalán lehetnek kimenő kapcsolatai egy webszervernek?
Csak azokhoz a célokhoz, amelyekre szüksége van. A mindent mást zároló kimenő szűrés jelentősen megnehezíti a támadóknak az eszközök letöltését és az adatok kiszivárogtatását. Gondosan tesztelni kell azonban.