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 →

Serveris siunčia šlamštą: kaip rasti priežastis

Neįteikiami laiškai, juodieji sąrašai, skundai: kai pats serveris siunčia šlamštą, už to dažniausiai slypi skriptas arba užgrobta pašto dėžutė. Kaip rasti šaltinį.

Būsena 5 min. skaitymoAptikimas ir forensika

Trumpai: kai serveris siunčia šlamštą, dažniausiai yra viena iš trijų priežasčių: įterptas ar išnaudojamas PHP skriptas, pašto dėžutė su pavogtu slaptažodžiu arba neteisingai sukonfigūruotas pašto serveris. Išsaugokite kelis laukiančius laiškus, perskaitykite jų antraštės eilutes ir pašto žurnalą, ir daugeliu atvejų rasite šaltinį. Tada sustabdykite siuntimą, uždarykite priežastį ir tik po to prašykite pašalinti iš juodųjų sąrašų.

Kai klientai jūsų sąskaitas randa šlamšto aplanke

Retai viskas prasideda nuo saugumo pranešimo. Dažniausiai kreipiasi klientai, negaunantys jūsų pasiūlymų, arba pašto dėžutė prisipildo grįžtančių pranešimų apie laiškus, kurių niekas niekada neparašė. Kartais hostingo teikėjas užblokuoja siuntimą ir priežastimi nurodo krintantį į akis pašto srautą.

Įmonei tai greitai turi juntamų pasekmių. Jei serverio adresas yra juodajame sąraše, kiti pašto serveriai atmeta ir tikrus jūsų laiškus: sąskaitas, užsakymų patvirtinimus, slaptažodžio nuorodas iš parduotuvės. Domeno reputacija kenčia, o žala auga su kiekviena valanda, kai siuntimas tęsiasi.

Šlamšto siuntimas priklauso žinomoms kompromitavimo pasekmėms. Po PHP2Shell, pažeidžiamumų CVE-2026-109618 ir CVE-2026-109619 su kodo vykdymu be prisijungimo, tai dar viena priežastis žiūrėti atidžiau. Tačiau šlamštas nėra specifinė PHP2Shell užuomina; patvirtintų kompromitavimo indikatorių (Indicators of Compromise) nėra. Kitus bendruosius požymius aprašo Ar jau esu pažeistas?.

Trys tipinės priežastys, kai serveris siunčia šlamštą

Priežastis Tipinis vaizdas Kur žiūrėti
Įterptas PHP skriptas laiškai be prisijungimo, vietoje pateikti per sendmail antraštės eilutės, PHP pašto žurnalas, nauji PHP failai
Išnaudojama forma laiškai per kontaktų ar rekomendavimo formą svetimiems gavėjams formos prieigos žurnalas, antraštės eilutės
Užgrobta pašto dėžutė siuntimas su galiojančiu prisijungimu prie pašto serverio pašto žurnalas su prisijungimo vardu, prisijungimo vietos
Atviras pašto serveris svetimi siuntėjai naudoja jūsų serverį kaip persiuntimą pašto serverio konfigūracija, išorinė patikra

Pirmosios dvi priežastys liečia svetainę, trečia pašto paskyras, ketvirta serverio konfigūraciją. Skirtumas svarbus, nes atsakomosios priemonės visiškai skirtingos.

Pašto eilės skaitymas

Serveriuose su Postfix eilė parodo, ką šiuo metu ketinama siųsti. Toliau pateiktos komandos tik skaito:

# Parodyti eilės turinį (atitinka mailq)
postqueue -p | tail -30

# Parodyti pavieniu laišku antraštės eilutes (įrašyti eilės ID iš sąrašo)
sudo postcat -q -h QUEUE-ID

# Sėkmingi prisijungimai prie pašto serverio su naudotojo vardu
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head

Antraštės eilutės dažnai jau išduoda šaltinį. Jei laiškas ateina iš prisijungusios pašto dėžutės, prisijungimo vardas atsiranda pašto žurnale. Jei ten kaupiasi viena paskyra su prisijungimais iš svetimų šalių, šios pašto dėžutės slaptažodis labai tikėtinai tapo žinomas. Jei laiškas, priešingai, pateiktas vietoje, jis dažniausiai kyla iš skripto serveryje.

Jei jūsų serveryje veikia kitas pašto serveris, pavyzdžiui, Exim, komandos vadinasi kitaip, principas lieka tas pats: pažiūrėti eilę, perskaityti antraštės eilutes, suskaičiuoti prisijungimus žurnale. Bendrinamo hostingo atveju be shell prieigos raštu paprašykite hostingo teikėjo pašto žurnalo ištraukos ir kelių pavyzdinių laiškų su pilnomis antraštės eilutėmis. Daug hostingo teikėjų tokius duomenis pateikia paprašius, nes patys suinteresuoti siuntimą nutraukti.

Prieš sustabdydami ar ištuštindami eilę, išsaugokite kelis pilnus laiškus. Jie yra įrodymai vėlesnei analizei ir pokalbiams su hostingo teikėju ar juodųjų sąrašų operatoriais.

Atsakingo PHP skripto radimas

Jei siuntimas vyksta per PHP, padeda PHP pašto konfigūracija. Pagal PHP vadovą mail.log registruoja kiekvieną mail() funkcijos iškvietimą su pilnu skripto keliu, eilutės numeriu, gavėju ir antraštės eilutėmis. mail.add_x_header papildomai į kiekvieną laišką įrašo antraštės eilutę X-PHP-Originating-Script su naudotojo identifikatoriumi ir failo pavadinimu.

; php.ini arba FPM baseine, po to paleisti iš naujo visus darbinius procesus
mail.add_x_header = On
mail.log = /var/log/php/mail.log

Žurnalo failas turi būti PHP procesui rašomas. Antraštės eilutė gavėjams išduoda failo pavadinimą; po analizės ją vėl išjunkite, jei nenorite jos laikyti nuolat.

Jei siuntėju randamas nežinomas failas, pavyzdžiui, įkėlimų ar talpyklos aplanke, tai webshell užuomina. Kaip tokius failus įvertinti, aprašo Webshell atpažinimas ir šalinimas. Jei, priešingai, tai žinoma kontaktų forma, ji greičiausiai buvo išnaudota, pavyzdžiui, nes gavėjai ar antraštės eilutės perimami iš formos įvesties. Tai kodo klaida, o ne įsilaužimas, bet ją taip pat reikia ištaisyti greitai.

Ne kiekvienas šlamštas naudoja mail() funkciją. Kenkėjiškas kodas gali ir tiesiogiai užmegzti ryšį su svetimais pašto serveriais. Tuomet siuntimas neatsiranda nei eilėje, nei PHP pašto žurnale, bet atsiranda kaip išeinantys ryšiai prievadu 25. Kaip juos patikrinti, aprašyta skiltyje Serverio išeinančių ryšių patikra.

Siuntimą sustabdyti ir tvarkingai vėl paleisti

Radus šaltinį, išvalymas vyksta tokia tvarka:

  1. Sustabdyti siuntimą: užblokuoti paveiktą kelią, t. y. išjungti skriptą, užblokuoti pašto dėžutę ar sustabdyti eilę. Laukiančius laiškus išsaugoti kaip įrodymą.
  2. Uždaryti priežastį: esant webshell PHP atnaujinti į ištaisytą būseną (8.5.12, 8.4.27, 8.3.36, 8.2.35 arba patvirtintas atgalinis perkėlimas), paleisti iš naujo visus darbinius procesus ir išvalyti svetainę. Esant formai pataisyti kodą. Esant pašto dėžutei pakeisti slaptažodį ir patikrinti naudotojo įrenginį.
  3. Ieškoti kitų pėdsakų: kas šlamštą siunčia per webshell, dažnai yra įrengęs kitas užpakalines duris.
  4. Apriboti išėjimą: išeinančius ryšius prievadu 25 leisti tik pašto serveriui, o ne žiniatinklio serverio naudotojui.
  5. Išvalyti juoduosius sąrašus: tik dabar pas juodųjų sąrašų operatorius prašyti pašalinimo ir trumpai aprašyti, kas ištaisyta.
Patarimas

Šia proga patikrinkite savo domeno SPF, DKIM ir DMARC. Šie DNS įrašai nustato, kurie serveriai gali siųsti jūsų domeno vardu, ir apsunkina svetimiems jūsų siuntėjo adreso piktnaudžiavimą.

Kaip PHP SOS padeda konkrečiai?

  • Vertiname eilę, antraštės eilutes ir pašto žurnalus ir nustatome, ar priežastis yra skriptas, forma, pašto dėžutė ar konfigūracija.
  • Kontroliuojamai sustabdome siuntimą ir išsaugome įrodymus hostingo teikėjui ir juodiesiems sąrašams.
  • Išvalome svetainę per kenkėjiškos programinės įrangos šalinimą ir uždarome vartus.
  • Serverio lygiu apribojame išeinantį pašto srautą ir lydime pašalinimą iš juodųjų sąrašų.

Dažni klausimai

Kaip pastebėti, kad mano serveris siunčia šlamštą?

Tipiški grįžtantys pranešimai apie laiškus, kurių niekas neparašė, hostingo teikėjo perspėjimai, pilna pašto eilė ir klientai, kurie jūsų laiškus staiga randa šlamšto aplanke. Aiškus ženklas ir jūsų serverio adreso įrašai viešuose juoduosiuose sąrašuose.

Kaip rasti PHP skriptą, kuris siunčia šlamštą?

PHP kiekvieną mail() funkcijos iškvietimą su skripto keliu gali registruoti, jei nustatytas mail.log. Su mail.add_x_header PHP skripto pavadinimą papildomai įrašo į kiekvieno laiško antraštę. Jau išsiųstuose ar laukiančiuose laiškuose padeda žvilgsnis į antraštės eilutes.

Ar pašto eilę turėčiau iškart ištuštinti?

Ne, kol neišsaugojote kelių laiškų kaip įrodymo. Antraštės eilutės dažnai parodo, kuris skriptas ar pašto dėžutė sukėlė siuntimą. Sustabdyti paprastai geriau nei ištrinti, kol šaltinis nežinomas.

Kaip vėl išeiti iš juodųjų sąrašų?

Pirmiausia pašalinkite priežastį, tada pas atitinkamų juodųjų sąrašų operatorius paprašykite pašalinimo. Dauguma reikalauja paaiškinimo, kas buvo ištaisyta. Kas prašo per anksti ir toliau siunčia šlamštą, vėl įrašomas.

Š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