Lühidalt: Serveri väljaminevaid ühendusi kontrollite käsuga ss -tunap või lsof -i, mis seovad iga ühenduse protsessiga. Normaalsed on ühendused andmebaasi, meiliserveri, uuendusserverite ja tuntud liidestega. PHP või veebiserveri protsesside ühendused tundmatutesse sihtkohtadesse, ebatavalised pordid ja põhjuseta püsivad ühendused on hoiatusmärgid kaugjuhtimise või andmevoolu kohta. Püsivalt aitab väljundfiltreerimine, mis lubab ainult vajalikke sihtkohti.
Miks pilk väljapoole nii palju reedab
Sissemurdmise otsimisel vaatavad enamik faile. Ründaja tahab oma ligipääsuga aga midagi ette võtta: tööriistu juurde laadida, käske vastu võtta, andmeid välja viia või kasutada serverit spämmiks või rünnakuteks teiste vastu. See kõik vajab väljaminevaid ühendusi.
Veebiserver loob ise vaid vähe ühendusi ja enamik neist on ettemääratavad: ta teeb päringuid andmebaasile, edastab kirju, kutsub makse- või saatmisliideseid ja toob uuendusi. Seetõttu jäävad võõrad ühendused siin eriti silma. Meie käsutuses olevate aruannete kohaselt kuuluvad väljaminevad ühendused sissemurdmise järgsete üldiste hoiatusmärkide hulka; spetsiaalselt PHP2Shelli jaoks kinnitatud kompromiteerimistunnuseid (Indicators of Compromise) ei ole. Täiendavaid tunnuseid võtab kokku Kas olen juba kompromiteeritud?.
Väljaminevate ühenduste loetlemine ja protsessidega seostamine
Järgmised käsud ainult loevad. Käivitage need root-na, muidu puuduvad protsessiandmed.
# Kõik loodud TCP-ühendused koos protsessiga
ss -tnp state established
# TCP ja UDP, kaasa arvatud kuulavad teenused
ss -tunap
# Ühendused programmi ja kasutaja kaupa, ilma nimelahenduseta
lsof -i -n -P | grep -v LISTEN
# Ainult veebiserveri kasutajate protsesside ühendused
lsof -i -n -P -u www-data 2>/dev/null
Jälgige väljundis kolme veergu: protsess, sihtaadress koos pordiga ja kasutaja. Ühendus php-fpm-ilt andmebaasi porti 3306 on normaalne. Tundmatu nimega programmi ühendus kataloogist /tmp võõra aadressi ebatavalisele pordile ei ole. Millise kasutaja all PHP töötab, sõltub distributsioonist ja paneelist.
Normaalne või kahtlane? Liigitus
| Tähelepanek | Pigem normaalne | Pigem kahtlane |
|---|---|---|
| Sihtkoht | oma andmebaas, meiliserver, tuntud API-d, uuendusserverid | tundmatud aadressid ilma seoseta rakendusega |
| Protsess | php-fpm, veebiserver, meili- ja uuendusteenused | tundmatud programmid, protsessid kataloogidest /tmp või /dev/shm |
| Port | 443, 3306, 5432, 587 | ebatavalised kõrged pordid, IRC-le omased pordid |
| Kestus | lühike, päringutega kooskõlas | püsivalt avatud, ka öösel külastajateta |
| Maht | väike ja ühtlane | äkilised tipud väljamineva andmemahu puhul |
| Meililiiklus | saatmine ettenähtud meiliserveri kaudu | palju otseühendusi pordile 25 |
Palju ühendusi pordile 25 viitab spämmi saatmisele; selle kohta on eraldi artikkel, Server saadab spämmi.
Tundmatu sihtkoha hindamine
Võõras aadress nimekirjas ei ole veel tõend. Enne otsustamist selgitage, kuhu ühendus viib ja kes selle lõi. Needki sammud ei muuda midagi:
- Määrake protsess: võtke
ss-ist PID ja kontrollige käsugals -l /proc/PID/exening käsureaga, milline programm selle taga on. - Otsige sihtkohta: käsuga
dig -x <IP>nimi ja käsugawhois <IP>võrguoperaator. - Võrrelge rakendusega: küsige arendajatelt või teenusepakkujalt, kas teie rakendus seda teenust kasutab.
- Kontrollige kulgu: tulemüüri- ja võrguprotokollid näitavad, alates millest ühendus eksisteerib ja kui palju andmeid on liikunud.
- Kindlustage tulemused: salvestage väljundid kellaajaga enne, kui midagi lõpetate või blokeerite.
Arvestage mitmetähenduslike tulemustega. Paljud legitiimsed teenused töötavad suurte pilve- ja CDN-pakkujate juures, kelle aadressid ei võimalda kliendi kohta järeldusi teha. Vastupidi kasutavad ka ründajad renditud pilveservereid. Tuntud võrguoperaator ei ole seega ei andestus ega tõend; otsustav on, kas protsess ja eesmärk sobivad teie rakendusega.
Hetktõmmis käsuga ss näitab ainult seda, mis parajasti avatud on. Lühikesi ühendusi, mis luuakse minutitempos, näete ainult protokollides. Seetõttu on tulemüüri- või voo (flow) protokollid andmevoolu küsimuses sageli olulisemad kui pilk serverile endale.
Kui andmed võisid teie serverist lahkuda ja on mõjutatud isikuandmed, võib IKÜM-i kohane teavitamiskohustus üldjuhul 72 tunni jooksul kehtida. Selgitage see varakult välja oma andmekaitsespetsialistiga; taust lehel IKÜM-i teavitamiskohustus 72 tunni jooksul. See ei ole õigusnõu.
DNS-i ja konteinereid ärge unustage
Mitte iga andmevoog ei vaja nähtavat ühendust võõra aadressiga. DNS-i kaudu toimuvad nimelahendused lähevad teie andmekeskuse resolverisse ja jäävad käsu ss nimekirjas vaevu silma. Ründajad võivad andmed pakkida pikkadesse, juhuslikuna näivatesse alamdomeenidesse ja viia need nii DNS-päringutega välja. Vihjeid sellele annavad resolveri protokollid: ebatavaliselt palju päringuid samale võõrale domeenile, väga pikad nimed või päringud ajal, mil keegi veebisaiti ei kasuta.
Kui teie rakendused töötavad konteinerites, näeb host konteinerite ühendusi sageli ainult konteinerivõrgu liiklusena. Kontrollige siis igat konteinerit eraldi, niivõrd kui tööriistad seal olemas on, või hinnake ühendusi hosti ja tulemüüri tasemel.
# Ühendused konteineri sees (kui ss on pildis olemas)
docker exec <container> ss -tnp 2>/dev/null
# Hostis: tuuma poolt jälgitavad ühendused, kui conntrack on paigaldatud
sudo conntrack -L 2>/dev/null | head -50
Väljamineva liikluse püsiv piiramine
Kõige tõhusam ennetus on väljundfiltreerimine: server tohib jõuda ainult nende sihtkohtadeni, mida ta tõesti vajab, kõik muu blokeeritakse ja logitakse. Ründajatel on seeläbi oluliselt raskem tööriistu juurde laadida või andmeid välja tõmmata, isegi kui nad suudavad koodi käivitada.
Tee sinna algab vajalike sihtkohtade nimekirjast, mille tuletate ülal kogutud ühendustest. Seejärel järgneb faas, milles blokeeritud ühendusi ainult logitakse, enne kui blokeering teravaks lülitatakse. Makseteenused, uuendusserverid ja muutuvate aadressidega liidesed vajavad seejuures erilist hoolt. Kuidas veebiserverite tulemüür tervikuna üles ehitatakse, kirjeldab Veebiserveri tulemüür: avage ainult vajalikud pordid.
Kuidas PHP SOS konkreetselt aitab?
- Ühenduste kontroll: Seome kõik aktiivsed ühendused protsesside ja eesmärkidega ning hindame tundmatuid sihtkohti.
- Andmevoolu hindamine: Hindame tulemüüri- ja võrguprotokolle ning selgitame, kas ja millal andmeid edastati.
- Väljundi piiramine: Koostame koos teiega lubatud sihtkohtade nimekirja ja seadistame väljundfiltreerimise etapiviisiliselt.
- Püsiv jälgimine: Turvaseirega teatame uutest või ebatavalistest ühendustest.
Korduma kippuvad küsimused
Millised väljaminevad ühendused on veebiserveri puhul normaalsed?
Tüüpilised on ühendused andmebaasiga, meiliserveriga, makse- ja saatmisteenustega, uuendusserveritega ja rakenduse tuntud liidestega. Kõik, mida ei saa ühegi sellise eesmärgiga seostada, väärib täpsemat pilku.
Kuidas näen, milline protsess ühenduse lõi?
Käsuga ss -tunap või lsof -i -n -P root-na. Mõlemad näitavad iga ühenduse juures protsessi ID-d ja programmi nime. Nii tunnete ära, kas ühendus pärineb PHP-st, veebiserverist või võõrast programmist.
Kas tundmatu ühendus tähendab, et andmeid on välja voolanud?
Mitte tingimata. See on aga vihje, mis tuleb selgitada. Kas ja milliseid andmeid edastati, saab sageli vastata ainult tulemüüri- või võrguprotokollide abil. Kui on mõjutatud isikuandmed, võivad kehtida teavitamiskohustused.
Kas veebiserver peaks üldse väljaminevaid ühendusi tegema tohtima?
Ainult nendesse sihtkohtadesse, mida ta vajab. Väljundfiltreerimine, mis blokeerib kõik muu, raskendab ründajatel tööriistade juurdelaadimist ja andmete väljavoolu oluliselt. Seda tuleb aga hoolikalt testida.