Kompromitovaný web rozesílá spam: proč oddělit odesílání e-mailů do relay s limity a jak zneužití odhalit
Zranitelnost ve webové aplikaci nebo pluginu končí často tím, že z vašeho serveru odchází spam a doména skončí na blokovaných seznamech. Obranná opatření: odesílání jen přes relay s API klíčem s omezenými právy, denní a minutové limity, rychlá rotace klíčů a sledování míry bounce jako detektor zneužití.
Každých několik měsíců se objeví nová zranitelnost v populárním redakčním systému, e-shopovém pluginu nebo PHP knihovně a vzápětí vlna webů, ze kterých útočník rozesílá spam a phishing. Aktuálně diskutovaná zranitelnost označovaná jako „PHP2Shell" je jen poslední z řady; technické detaily tu nerozebíráme, na obraně nic nemění. Důsledek pro provozovatele webu je vždy stejný: vaše doména a IP adresa rozesílají spam, končí na blokovaných seznamech a přestanou chodit i potvrzení objednávek. Tenhle článek je o tom, jak odesílání e-mailů postavit tak, aby kompromitovaný web způsobil malou a rychle zastavitelnou škodu.
Proč je web, který sám posílá e-maily, problém
Typický e-shop nebo firemní web posílá e-maily jedním z těchto způsobů:
- Přímo z webového serveru funkcí
mail()nebo lokálním poštovním serverem. Útočník, který na serveru spustí kód, má k dispozici neomezené odesílání z vaší IP a domény. - Přes SMTP účet kancelářské pošty (Google Workspace, Microsoft 365) s heslem uloženým v konfiguraci. Útočník získá heslo ke skutečné schránce, čte poštu a posílá jejím jménem.
- Přes relay s API klíčem, který je uložený v konfiguraci. Útočník získá klíč. Jak velká škoda z toho vznikne, závisí na tom, co klíč smí.
Kód běžící na webu bude dřív nebo později kompromitovaný: web je veřejný, má desítky závislostí a aktualizuje se pozdě. Otázka tedy není jen, jak tomu zabránit, ale jak omezit, co se útočníkovi s odesíláním podaří. Varianty 1 a 2 omezit prakticky nejde. Varianta 3 jde, pokud ji nastavíte správně.
Zásada 1: web posílá jen přes relay, nic jiného
Na webovém serveru vypněte lokální odesílání pošty (žádný sendmail, žádný Postfix s povoleným odesíláním do světa, žádná funkce mail() bez nakonfigurovaného relay). Všechny e-maily jdou přes jednu cestu: SMTP relay nebo REST API služby s ověřenou doménou.
Výhody z pohledu bezpečnosti:
- Odesílání má jedno hrdlo, které jde zastavit jediným kliknutím: zneplatněním klíče.
- Všechny e-maily jsou vidět v doručenkách s odesílatelem, příjemcem, předmětem a výsledkem; útočník nemůže posílat potají.
- Relay prosazuje ověřenou doménu ve From; útočník nemůže vaším serverem posílat jménem banky.
- Reputaci IP adres hlídá poskytovatel, který zneužití pozná a odesílání pozastaví; v tomhle případě přesně to, co chcete.
Jak odesílání z e-shopu přesunout na relay, popisuje článek o e-mailech, které padají do spamu.
Zásada 2: klíč s nejmenšími nutnými právy
API klíč, který leží v konfiguraci webu, považujte za veřejný dřív nebo později. Podle toho ho nastavte:
- Vlastní klíč pro každou aplikaci. E-shop má jiný klíč než fakturační program, helpdesk nebo testovací prostředí. Když jeden unikne, zneplatníte ho bez výpadku ostatních a z doručenek hned vidíte, odkud zneužití přišlo.
- Jen oprávnění k odesílání. Web nepotřebuje číst historii doručenek ani měnit nastavení domény. U TopEmail má klíč rozsahy oprávnění (
send,read); webu dejte jensend. - Omezení na IP adresy webového serveru, pokud jsou pevné. Uniklý klíč pak z útočníkova serveru nefunguje; musí posílat přímo z vašeho webu, kde ho rychleji odhalíte.
- Rate limit na klíč. Kolik e-mailů za minutu web reálně potřebuje? E-shop s 500 objednávkami denně pošle ve špičce možná 30 e-mailů za minutu. Limit 60 za minutu ho neomezí, ale útočníka ano: místo milionu zpráv za noc jich pošle desítky tisíc, a to je rozdíl mezi „pár stížností" a „doména na blokovaném seznamu na týden". U TopEmail se limit nastavuje u každého klíče zvlášť; u SMTP relay navíc platí nejvýše 20 zpráv za minutu na připojení a 50 příjemců na zprávu.
- Klíč mimo kód. V proměnných prostředí nebo v konfiguračním souboru mimo webový root, ne v repozitáři a ne v souboru, který web umí zobrazit. Při úniku repozitáře klíč stejně rotujte.
Zásada 3: rotaci klíčů musíte umět za pět minut
Rotaci klíče budete dělat ve stresu, v neděli večer, po telefonátu od hostingu. Připravte si ji dopředu:
- Vědět, kde klíč leží. Do interní dokumentace: aplikace, soubor nebo proměnná, kdo má přístup.
- Vytvořit nový klíč dřív, než zrušíte starý. Krátce běží oba, aplikace přepnete na nový, starý zrušíte. Bez výpadku.
- Zrušit, ne přejmenovat. Zneplatněný klíč musí přestat fungovat okamžitě, včetně otevřených SMTP spojení.
- Rotovat i webhook secret a hesla k databázi, pokud mohl útočník číst konfiguraci. Kdo měl klíč k odesílání, měl nejspíš všechno vedle něj.
- Rotovat pravidelně, třeba při každém větším nasazení nebo jednou za čtvrt roku, aby se postup nezapomněl a staré klíče v zapomenutých konfiguracích nezůstávaly platné.
U TopEmail klíč vytvoříte a zrušíte v dashboardu; secret se zobrazí jen jednou při vytvoření, takže ho nelze zpětně vyčíst ani z našeho rozhraní.
Zásada 4: limity denní, ne jen minutové
Minutový limit brání výbuchu, denní limit brání vytrvalému odkapávání. Útočník, který zjistí, že smí 60 e-mailů za minutu, pošle 60 za minutu celou noc: 36 000 zpráv. Proto:
- Hlídejte denní objem vlastní logikou na straně aplikace nebo monitoringem doručenek: pokud web za den pošle víc než trojnásobek obvyklého maxima, pošlete si upozornění a odesílání zastavte.
- Předplacený kredit je přirozený strop: spotřebuje se a odesílání se zastaví. Nenechávejte na účtu pro web nabitý roční objem; dobíjejte průběžně.
- Oddělte web od ostatních odesílatelů alespoň na úrovni klíče a subdomény; škoda z kompromitovaného webu nemá zasáhnout faktury z účetního systému.
U TopEmail se odesílání při vysoké míře nedoručitelnosti nebo stížností automaticky pozastaví a prověří; nepříjemné při vlastní chybě, cenné při útoku.
Zásada 5: míra bounce a stížností jako alarm
Spam z kompromitovaného webu má spolehlivý příznak: jde na adresy, které neznáte, a velká část z nich neexistuje. U potvrzení objednávek je hard bounce kolem 1 % a stížnosti prakticky nula; u cizího seznamu adres jsou bounce v desítkách procent a stížnosti přijdou během minut. Tohle jde měřit automaticky:
- Zpracovávejte webhook
email.statusa počítejte klouzavou mírubouncedacomplainedza posledních 15 minut a 24 hodin. Překročí-li bounce 5 % nebo se objeví víc než jednotky stížností za hodinu, upozorněte správce a zastavte odesílání z webu. - Sledujte počet odeslaných e-mailů za hodinu proti obvyklému profilu; noční špička u e-shopu, který v noci nic neprodává, je zneužití.
- Sledujte předměty a příjemce v doručenkách: e-maily s předmětem, který vaše šablony nepoužívají, nebo na domény, které u vašich zákazníků nebývají, jsou jasný signál. Značky (
tags), které k e-mailům přidáváte, tu pomohou: e-mail bez značky z webu, který značky vždy nastavuje, nepochází z vaší aplikace. - Mějte u účtu u poskytovatele kontakt, který někdo čte i o víkendu.
Doručenky za 90 dní v přehledu API poslouží i zpětně: po incidentu z nich zjistíte, co, komu a kdy odešlo, což budete potřebovat i pro případné oznámení podle GDPR.
Co dělat, když už se to stalo
- Zrušte klíč webu (a všechny ostatní, které mohl útočník vidět). Odesílání se zastaví okamžitě.
- Vypněte web nebo ho přepněte do režimu údržby, dokud není vyčištěný; odstranění jednoho škodlivého souboru obvykle nestačí.
- Z doručenek si vyexportujte, co z klíče odešlo: časy, příjemce, předměty. Pošlete nám na abuse@topemail.cz informaci, že šlo o kompromitaci; pomůže to při prověřování pozastaveného účtu.
- Zkontrolujte blokované seznamy pro vaši doménu a požádejte o odstranění až po vyčištění.
- Opravte příčinu: aktualizace, odstranění zranitelného pluginu, změna všech hesel, kontrola dalších účtů, ke kterým vedly údaje z konfigurace.
- Teprve potom nový klíč s omezenými právy a limity podle zásad výše.
Shrnutí
- Web bude někdy kompromitovaný; návrh odesílání s tím musí počítat.
- Jedna cesta pro e-maily: relay s ověřenou doménou, lokální odesílání vypnuté.
- Klíč na aplikaci, jen
send, omezení na IP, rate limit podle reálné potřeby, uložený mimo kód. - Rotace klíče připravená dopředu: nový vytvořit, přepnout, starý zrušit, do pěti minut.
- Denní limity a průběžné dobíjení kreditu místo ročního objemu na účtu.
- Míra bounce, stížností a neznámé předměty v doručenkách jsou nejrychlejší detektor zneužití.
Jak klíče, oprávnění a limity u TopEmail nastavit, najdete v častých dotazech. Pokud řešíte podezření na zneužití teď, napište na abuse@topemail.cz; odpovídáme do jednoho pracovního dne, u běžícího incidentu dřív.
Transakční e-maily z vaší domény přes API nebo SMTP, od 0,025 do 0,06 Kč za e-mail podle objemu, prvních 1 000 e-mailů měsíčně zdarma. Registrace zdarma, bez platební karty.
Registrovat zdarma →