Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

Serverio išeinančių ryšių patikra

Žiniatinklio serveris daugiausia atsako į užklausas. Jei jis pats užmezga ryšius su nežinomais tikslais, tai gali reikšti užpuolikų valdymą ar duomenų nutekėjimą. Kaip tikrinti ir riboti išeinantį srautą.

Būsena 5 min. skaitymoAptikimas ir forensika

Trumpai: serverio išeinančius ryšius tikrinate su ss -tunap arba lsof -i, kurios kiekvieną ryšį priskiria procesui. Normalūs ryšiai su duomenų baze, pašto serveriu, atnaujinimų serveriais ir žinomomis sąsajomis. PHP ar žiniatinklio serverio procesų ryšiai su nežinomais tikslais, neįprasti prievadai ir nuolatiniai ryšiai be priežasties yra nuotolinio valdymo ar duomenų nutekėjimo įspėjamieji ženklai. Ilgalaikei apsaugai padeda išeinančių ryšių filtravimas, leidžiantis tik reikalingus tikslus.

Kodėl žvilgsnis į išorę tiek daug pasako

Ieškodami įsilaužimo dauguma žiūri į failus. Tačiau užpuolikas su savo prieiga nori ką nors nuveikti: atsisiųsti įrankių, gauti komandų, išvežti duomenų ar naudoti serverį šlamštui ar atakoms prieš kitus. Visa tai reikalauja ryšių į išorę.

Žiniatinklio serveris pats užmezga tik nedaug ryšių, ir dauguma jų nuspėjami: jis užklausia duomenų bazės, perduoda laiškus, kviečia mokėjimo ar siuntų sąsajas ir atsisiunčia atnaujinimus. Todėl svetimi ryšiai čia ypač krenta į akis. Pagal mūsų turimus pranešimus išeinantys ryšiai priklauso bendriesiems įspėjamiesiems ženklams po įsilaužimo; patvirtintų kompromitavimo indikatorių (Indicators of Compromise) tiksliai PHP2Shell nėra. Kitus požymius apibendrina Ar jau esu pažeistas?.

Išvardyti išeinančius ryšius ir priskirti procesams

Toliau pateiktos komandos tik skaito. Vykdykite jas kaip root, kitaip trūks duomenų apie procesus.

# Visi užmegzti TCP ryšiai su procesu
ss -tnp state established

# TCP ir UDP, įskaitant klausančias tarnybas
ss -tunap

# Ryšiai pagal programą ir naudotoją, be vardų išsprendimo
lsof -i -n -P | grep -v LISTEN

# Tik žiniatinklio serverio naudotojų procesų ryšiai
lsof -i -n -P -u www-data 2>/dev/null

Išvestyje atkreipkite dėmesį į tris stulpelius: procesą, tikslo adresą su prievadu ir naudotoją. Ryšys iš php-fpm į duomenų bazę prievadu 3306 yra normalus. Ryšys programos su nežinomu pavadinimu iš /tmp į svetimą adresą neįprastu prievadu toks nėra. Su kuriuo naudotoju PHP veikia, priklauso nuo distribucijos ir skydelio.

Normalu ar įtartina? Įvertinimas

Stebėjimas Greičiau normalu Greičiau įtartina
Tikslas sava duomenų bazė, pašto serveris, žinomos API, atnaujinimų serveriai nežinomi adresai be sąsajos su programa
Procesas php-fpm, žiniatinklio serveris, pašto ir atnaujinimų tarnybos nežinomos programos, procesai iš /tmp ar /dev/shm
Prievadas 443, 3306, 5432, 587 neįprasti dideli prievadai, IRC būdingi prievadai
Trukmė trumpa, atitinka užklausas nuolat atviras, taip pat naktį be lankytojų
Kiekis mažas ir tolygus staigūs išeinančių duomenų apimties šuoliai
Pašto srautas siuntimas per numatytą pašto serverį daug tiesioginių ryšių prievadu 25

Daug ryšių prievadu 25 rodo šlamšto siuntimą; tam skirtas atskiras straipsnis, Serveris siunčia šlamštą.

Nežinomo tikslo vertinimas

Svetimas adresas sąraše dar nėra įrodymas. Prieš nuspręsdami išsiaiškinkite, kur ryšys veda ir kas jį užmezgė. Šie žingsniai taip pat nieko nekeičia:

  1. Nustatyti procesą: paimti PID iš ss ir su ls -l /proc/PID/exe bei komandine eilute patikrinti, kokia programa už to slypi.
  2. Pasižiūrėti tikslą: su dig -x <IP> nustatyti vardą ir su whois <IP> tinklo operatorių.
  3. Palyginti su programa: paklauskite kūrėjų ar paslaugų teikėjo, ar jūsų programa naudoja šią paslaugą.
  4. Patikrinti eigą: ugniasienės ir tinklo protokolai rodo, nuo kada ryšys egzistuoja ir kiek duomenų nutekėjo.
  5. Išsaugoti rezultatus: išvestis išsaugoti su laiku, prieš ką nors nutraukiant ar blokuojant.

Būkite pasirengę dviprasmiškiems rezultatams. Daug teisėtų paslaugų veikia didelių debesų ir CDN teikėjų infrastruktūroje, kurių adresai neleidžia spręsti apie klientą. Ir atvirkščiai, užpuolikai taip pat naudoja išnuomotus debesų serverius. Žinomas tinklo operatorius todėl nėra nei nuraminimas, nei įrodymas; lemia, ar procesas ir paskirtis atitinka jūsų programą.

Akimirkos vaizdas su ss rodo tik tai, kas šiuo metu atidaryta. Trumpus ryšius, užmezgamus minučių ritmu, matysite tik protokoluose. Todėl ugniasienės ar srauto (flow) protokolai klausimui apie duomenų nutekėjimą dažnai svarbesni nei žvilgsnis į patį serverį.

Svarbu

Jei duomenys galėjo palikti jūsų serverį ir paveikti asmens duomenys, pareiga pranešti pagal BDAR paprastai gali kilti per 72 valandas. Išsiaiškinkite tai anksti su savo duomenų apsaugos pareigūnu; pagrindai skiltyje Pranešimo pareiga pagal BDAR per 72 valandas. Tai nėra teisinė konsultacija.

DNS ir konteinerių nepamiršti

Ne kiekvienam duomenų nutekėjimui reikia matomo ryšio su svetimu adresu. Vardų išsprendimas per DNS eina į jūsų duomenų centro resolverį ir ss sąraše vos pastebimas. Užpuolikai duomenis gali supakuoti į ilgus, atsitiktinai atrodančius subdomenus ir taip išvežti per DNS užklausas. Užuominų teikia resolverio protokolai: neįprastai daug užklausų tam pačiam svetimam domenui, labai ilgi vardai ar užklausos laikais, kai niekas nesinaudoja svetaine.

Jei jūsų programos veikia konteineriuose, pagrindinis kompiuteris konteinerių ryšius dažnai mato tik kaip konteinerių tinklo srautą. Tuomet patikrinkite kiekviename konteineryje atskirai, jei ten yra įrankių, arba vertinkite ryšius pagrindinio kompiuterio ir ugniasienės lygiu.

# Ryšiai konteinerio viduje (jei ss yra atvaizde)
docker exec <container> ss -tnp 2>/dev/null

# Pagrindiniame kompiuteryje: branduolio sekami ryšiai, jei įdiegtas conntrack
sudo conntrack -L 2>/dev/null | head -50

Išeinantį srautą apriboti ilgalaikiai

Veiksmingiausia prevencija yra išeinančių ryšių filtravimas: serveris gali pasiekti tik tuos tikslus, kurių jam iš tikrųjų reikia, viskas kita blokuojama ir registruojama. Užpuolikams tampa gerokai sunkiau atsisiųsti įrankius ar ištraukti duomenis, net jei jie gali vykdyti kodą.

Kelias prasideda nuo reikalingų tikslų sąrašo, kurį išvedate iš aukščiau surinktų ryšių. Po to seka fazė, kai užblokuoti ryšiai tik registruojami, prieš blokavimas įjungiamas. Mokėjimo paslaugoms, atnaujinimų serveriams ir sąsajoms su kintančiais adresais čia reikia ypatingo kruopštumo. Kaip apskritai sukuriama ugniasienė žiniatinklio serveriams, aprašo Ugniasienė žiniatinklio serveriams: atidaryti tik būtinus prievadus.

Kaip PHP SOS padeda konkrečiai?

  • Patikrinti ryšius: visus aktyvius ryšius priskiriame procesams ir paskirtims bei vertiname nežinomus tikslus.
  • Įvertinti duomenų nutekėjimą: vertiname ugniasienės ir tinklo protokolus ir išsiaiškiname, ar ir kada duomenys buvo perduoti.
  • Apriboti išėjimą: kartu su jumis parengiame leidžiamų tikslų sąrašą ir etapais įrengiame išeinančių ryšių filtravimą.
  • Stebėti nuolat: su saugumo stebėsena pranešame apie naujus ar neįprastus ryšius.

Dažni klausimai

Kokie išeinantys ryšiai žiniatinklio serveriui yra normalūs?

Tipiški ryšiai su duomenų baze, pašto serveriu, mokėjimo ir siuntų paslaugomis, atnaujinimų serveriais ir žinomomis programos sąsajomis. Viskas, ko negalima priskirti nė vienam iš šių tikslų, vertas atidesnio žvilgsnio.

Kaip pamatyti, kuris procesas užmezgė ryšį?

Su ss -tunap arba lsof -i -n -P kaip root. Abu prie kiekvieno ryšio rodo proceso ID ir programos pavadinimą. Taip atpažįstate, ar ryšys kyla iš PHP, žiniatinklio serverio ar svetimos programos.

Ar nežinomas ryšys reiškia, kad duomenys nutekėjo?

Nebūtinai. Bet tai užuomina, kurią reikia išsiaiškinti. Ar ir kokie duomenys buvo perduoti, dažnai galima atsakyti tik pagal ugniasienės ar tinklo protokolus. Jei paveikti asmens duomenys, gali kilti pranešimo pareigos.

Ar žiniatinklio serveriui apskritai reikėtų leisti išeinančius ryšius?

Tik į tuos tikslus, kurių jam reikia. Išeinančių ryšių filtravimas, blokuojantis viską kita, gerokai apsunkina užpuolikams įrankių atsisiuntimą ir duomenų nutekinimą. Bet jį reikia kruopščiai išbandyti.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba