Īsi sakot: Servera izejošos savienojumus pārbaudiet ar ss -tunap vai lsof -i, kas katru savienojumu piesaista procesam. Normāli ir savienojumi ar datubāzi, pasta serveri, atjauninājumu serveriem un zināmām saskarnēm. PHP vai tīmekļa servera procesu savienojumi ar nezināmiem mērķiem, neparasti porti un pastāvīgi savienojumi bez iemesla ir brīdinājuma pazīmes par tālvadību vai datu aizplūdi. Ilgstoši palīdz izejošā filtrēšana, kas atļauj tikai nepieciešamos mērķus.
Kāpēc skatiens uz ārpusi tik daudz atklāj
Meklējot ielaušanos, lielākā daļa skatās uz failiem. Taču uzbrucējs ar savu piekļuvi grib kaut ko darīt: ielādēt rīkus, saņemt komandas, iznest datus vai izmantot serveri surogātpastam vai uzbrukumiem citiem. Visam tam vajadzīgi savienojumi uz ārpusi.
Tīmekļa serveris pats veido tikai dažus savienojumus, un lielākā daļa no tiem ir paredzami: tas vaicā datubāzei, nodod pastu, izsauc maksājumu vai piegādes saskarnes un ielādē atjauninājumus. Tāpēc svešie savienojumi šeit uzkrīt īpaši. Saskaņā ar mūsu rīcībā esošajiem ziņojumiem izejošie savienojumi pieder pie vispārējām brīdinājuma pazīmēm pēc ielaušanās; apstiprinātu Indicators of Compromise tieši PHP2Shell nav. Citas pazīmes apkopo Vai esmu jau kompromitēts?.
Izejošos savienojumus uzskaitīt un piesaistīt procesiem
Šīs komandas tikai lasa. Izpildiet tās kā root, citādi procesu dati trūkst.
# Visi izveidotie TCP savienojumi ar procesu
ss -tnp state established
# TCP un UDP ieskaitot klausošos pakalpojumus
ss -tunap
# Savienojumi pa programmām un lietotājiem, bez nosaukumu atrisināšanas
lsof -i -n -P | grep -v LISTEN
# Tikai tīmekļa servera lietotāju procesu savienojumi
lsof -i -n -P -u www-data 2>/dev/null
Izvadā pievērsiet uzmanību trim kolonnām: procesam, mērķa adresei ar portu un lietotājam. Savienojums no php-fpm uz datubāzi portā 3306 ir normāls. Savienojums no programmas ar nezināmu nosaukumu no /tmp uz svešu adresi neparastā portā nav. Zem kura lietotāja PHP darbojas, ir atkarīgs no distributīva un paneļa.
Normāli vai aizdomīgi? Iedalījums
| Novērojums | Drīzāk normāli | Drīzāk aizdomīgi |
|---|---|---|
| Mērķis | sava datubāze, pasta serveris, zināmas API, atjauninājumu serveri | nezināmas adreses bez saistības ar lietojumprogrammu |
| Process | php-fpm, tīmekļa serveris, pasta un atjauninājumu pakalpojumi | nezināmas programmas, procesi no /tmp vai /dev/shm |
| Ports | 443, 3306, 5432, 587 | neparasti augsti porti, IRC tipiski porti |
| Ilgums | īss, atbilst pieprasījumiem | pastāvīgi atvērts, arī naktī bez apmeklētājiem |
| Apjoms | neliels un vienmērīgs | pēkšņi izejošā datu apjoma pīķi |
| Pasta satiksme | sūtīšana caur paredzēto pasta serveri | daudz tiešu savienojumu portā 25 |
Daudzi savienojumi portā 25 norāda uz surogātpasta sūtīšanu; tam ir atsevišķs raksts, Serveris sūta surogātpastu.
Nezināma mērķa novērtēšana
Svešā adrese sarakstā vēl nav pierādījums. Pirms lemjat, noskaidrojiet, kurp savienojums ved un kas to izveidojis. Arī šie soļi neko nemaina:
- Noteikt procesu: paņemt PID no
ssun arls -l /proc/PID/exeun komandrindu pārbaudīt, kura programma slēpjas aiz tā. - Meklēt mērķi: ar
dig -x <IP>noskaidrot nosaukumu un arwhois <IP>tīkla operatoru. - Salīdzināt ar lietojumprogrammu: pajautāt izstrādātājam vai pakalpojumu sniedzējam, vai jūsu lietojumprogramma šo pakalpojumu izmanto.
- Pārbaudīt vēsturi: ugunsmūra un tīkla protokoli rāda, kopš kura laika savienojums pastāv un cik daudz datu ir plūdis.
- Nodrošināt rezultātus: izvadus saglabāt ar laiku, pirms ko pārtraucat vai bloķējat.
Rēķinieties ar neviennozīmīgiem rezultātiem. Daudzi likumīgi pakalpojumi darbojas lielu mākoņa un CDN sniedzēju tīklos, kuru adreses neļauj izdarīt secinājumus par klientu. Un otrādi, arī uzbrucēji izmanto īrētus mākoņa serverus. Zināms tīkla operators tāpēc nav ne atvieglojums, ne pierādījums; izšķirošs ir tas, vai process un nolūks atbilst jūsu lietojumprogrammai.
Momentuzņēmums ar ss rāda tikai to, kas šobrīd atvērts. Īsus savienojumus, kas tiek veidoti ik minūti, redzat tikai protokolos. Tāpēc jautājumā par datu aizplūdi ugunsmūra vai plūsmas protokoli bieži ir svarīgāki nekā skatiens uz pašu serveri.
Ja dati varētu būt atstājuši jūsu serveri un ir skarti personas dati, var pastāvēt ziņošanas pienākums saskaņā ar VDAR, parasti 72 stundu laikā. Noskaidrojiet to savlaicīgi ar savu datu aizsardzības speciālistu; fonu skatiet sadaļā VDAR ziņošanas pienākums 72 stundās. Šī nav juridiskā konsultācija.
DNS un konteineri nav aizmirstami
Ne katrai datu aizplūdei vajadzīgs redzams savienojums ar svešu adresi. Nosaukumu atrisināšana caur DNS iet uz jūsu datu centra resolver, un ss sarakstā tā gandrīz neuzkrīt. Uzbrucēji datus var iepakot garos, nejauši šķietamos apakšdomēnos un tā iznest caur DNS pieprasījumiem. Uz to norāda resolver protokoli: neparasti daudz pieprasījumu uz vienu un to pašu svešu domēnu, ļoti gari nosaukumi vai pieprasījumi laikos, kad neviens vietni neizmanto.
Ja jūsu lietojumprogrammas darbojas konteineros, resursdators konteineru savienojumus bieži redz tikai kā konteineru tīkla satiksmi. Tad pārbaudiet katru konteineru atsevišķi, ciktāl tur ir pieejami rīki, vai izvērtējiet savienojumus resursdatora un ugunsmūra līmenī.
# Savienojumi konteinera iekšienē (ja ss ir iekļauts attēlā)
docker exec <container> ss -tnp 2>/dev/null
# Resursdatorā: kodola izsekotie savienojumi, ja conntrack ir instalēts
sudo conntrack -L 2>/dev/null | head -50
Izejošo satiksmi ilgstoši ierobežot
Visefektīvākā profilakse ir izejošā filtrēšana: serveris drīkst sasniegt tikai tos mērķus, kas tam patiešām vajadzīgi, viss pārējais tiek bloķēts un protokolēts. Uzbrucējiem tādējādi kļūst ievērojami grūtāk ielādēt rīkus vai izvilkt datus, pat ja viņi var izpildīt kodu.
Ceļš uz to sākas ar vajadzīgo mērķu sarakstu, ko atvasināt no augstāk savāktajiem savienojumiem. Pēc tam seko fāze, kurā bloķētie savienojumi tikai tiek protokolēti, pirms bloķēšana tiek ieslēgta pilnībā. Maksājumu pakalpojumiem, atjauninājumu serveriem un saskarnēm ar mainīgām adresēm tur nepieciešama īpaša rūpība. Kā kopumā tiek uzbūvēts ugunsmūris tīmekļa serveriem, apraksta Ugunsmūris tīmekļa serveriem: atvērt tikai nepieciešamos portus.
Kā PHP SOS palīdz konkrēti?
- Pārbaudīt savienojumus: Mēs visus aktīvos savienojumus piesaistām procesiem un nolūkiem un novērtējam nezināmus mērķus.
- Novērtēt datu aizplūdi: Mēs izvērtējam ugunsmūra un tīkla protokolus un noskaidrojam, vai un kad dati tika pārsūtīti.
- Ierobežot izejošo: Mēs kopā ar jums izstrādājam atļauto mērķu sarakstu un soli pa solim iestatām izejošo filtrēšanu.
- Uzraudzīt ilgstoši: Ar drošības monitoringu mēs ziņojam par jauniem vai neparastiem savienojumiem.
Biežāk uzdotie jautājumi
Kādi izejošie savienojumi tīmekļa serverim ir normāli?
Tipiski ir savienojumi ar datubāzi, pasta serveri, maksājumu un piegādes pakalpojumiem, atjauninājumu serveriem un lietojumprogrammas zināmām saskarnēm. Viss, ko nevar piesaistīt nevienam no šiem nolūkiem, pelna uzmanīgāku skatienu.
Kā redzēt, kurš process savienojumu izveidojis?
Ar ss -tunap vai lsof -i -n -P kā root. Abi pie katra savienojuma rāda procesa ID un programmas nosaukumu. Tā atpazīsit, vai savienojums nāk no PHP, tīmekļa servera vai svešas programmas.
Vai nezināms savienojums nozīmē, ka dati ir aizplūduši?
Ne obligāti. Taču tā ir norāde, kas jānoskaidro. Vai un kādi dati tika pārsūtīti, bieži var atbildēt tikai ar ugunsmūra vai tīkla protokoliem. Ja ir skarti personas dati, var pastāvēt ziņošanas pienākumi.
Vai tīmekļa serverim vispār jāatļauj izejošie savienojumi?
Tikai uz tiem mērķiem, kas tam vajadzīgi. Izejošā filtrēšana, kas bloķē visu pārējo, uzbrucējiem būtiski apgrūtina rīku ielādi un datu aizplūdi. Taču tā rūpīgi jātestē.