|
1. Osnove DDoS napadov DDoS (Distributed Denial of Service) napadi so eni najmočnejših in najtežjih za obrambo, saj je glavni namen DDoS napadov preprečiti določeni tarči, da bi nudila običajne storitve ali celo izginila z interneta. DDoS lahko preprosto razdelimo v tri kategorije glede na način sproženja. Prva kategorija zmaga z močjoOgromni podatkovni paketi se valijo z vseh koncev interneta, blokirajo vhod v IDC, zaradi česar so različni zmogljivi strojni obrambni sistemi in hitri ter učinkoviti izredni postopki neuporabni. Tipični primeri takšnega napada so ICMP Flood in UDP Flood, ki sta danes redka. Druga kategorija zmaga zaradi prebrisanosti, pametno in neopazno, pošiljanje paketa vsakih nekaj minut ali celo samo paket lahko povzroči, da luksuzni konfiguracijski strežnik ne odgovarja več. Ta vrsta napada se večinoma sproži z izkoriščanjem ranljivosti v protokolih ali programski opremi, kot so napadi Slowloris, napadi s trki z zgoščevanjem itd., in zahteva specifična okoljska naključja. Tretja kategorija je mešanica zgoraj omenjenih dvehNe izkorišča le pomanjkljivosti protokola in sistema, ampak ima tudi veliko prometa, kot sta napad SYN Flood in napad DNS Query Flood, ki sta trenutno glavna metoda napada. Ta članek bo opisal te najpogostejše in reprezentativne metode napada eno za drugo ter predstavil njihove obrambne možnosti. 1.1. SYN FloodSYN Flood je eden najbolj klasičnih DDoS napadov na internetu, prvič se je pojavil okoli leta 1999, pri čemer je bil Yahoo takrat najbolj znana žrtev. Napadi SYN Flood izkoriščajo TCP trojne ročne napake, ki lahko povzročijo, da je ciljni strežnik neodziven in težko sledljiv z majhnimi stroški. Standardni TCP tristranni postopek stiskanja roke je naslednji: - Odjemalec pošlje TCP paket, ki vsebuje SYN zastavico, SYN je sinhroniziran, sinhronizacijski paket pa označuje port, ki ga uporablja odjemalec, in začetno serijsko številko TCP povezave.
- Po prejemu SYN paketa od odjemalca strežnik vrne paket SYN+ACK (tj. potrditev potrditve), ki označuje, da je zahtevek sprejet, začetna serijska številka TCP pa se samodejno doda za 1.
- Odjemalec strežniku vrne potrditveno sporočilo ACK, TCP serijska številka pa se doda za 1.
Po teh treh korakih se vzpostavi TCP povezava. Da bi dosegli zanesljiv prenos, je protokol TCP vzpostavil nekatere mehanizme za obravnavo izjem med tremi rokami. V tretjem koraku, če strežnik ne prejme zadnjega ACK potrditvenega paketa od odjemalca, strežnik ostane v SYN_RECV stanju, doda IP naslov odjemalca na čakalno listo in v drugem koraku ponovno pošlje paket SYN+ACK. Ponovne objave se običajno izvajajo 3-5-krat, čakalna lista pa se preveri enkrat v intervalih približno 30 sekund, da se ponovno preizkusijo vse stranke. Po drugi strani pa strežnik po pošiljanju paketa SYN+ACK vnaprej razporedi vire za shranjevanje informacij za prihajajočo TCP povezavo, ki se ohranijo med čakanjem na ponovni poskus. Še pomembneje pa je, da če so strežniški viri omejeni, SYN_RECV stanje, ki ga je mogoče vzdrževati, po preseženju omejitve ne bo več sprejemalo novih SYN paketov, torej bodo nove TCP povezave zavrnjene. SYN Flood uporablja zgoraj navedene nastavitve protokola TCP za dosego namena napada. Napadalci prikrivajo veliko število IP naslovov, da pošiljajo SYN pakete strežniku, in ker so ponarejeni IP naslovi skoraj nemogoči, skoraj nobena naprava ne odgovori strežniku. Zaradi tega strežnik vzdržuje ogromno čakalno listo in nenehno poskuša poslati SYN+ACK pakete, kar porabi veliko virov in ga ni mogoče sprostiti. Še pomembneje pa je, da je SYN_RECV čakalna vrsta napadenega strežnika polna zlonamernih paketov, nove SYN zahteve niso več sprejete, legitimni uporabniki pa ne morejo izvesti treh rokovanja za vzpostavitev TCP povezav. Z drugimi besedami, strežniku je SYN Flood zavrnil storitev. Če vas zanima SYN Flood, si lahko ogledate http://www.icylife.net/yunshu/show.php?id=367, ki sem ga napisal leta 2006, kasneje pa sem naredil več sprememb, popravil hrošče in zmanjšal agresivnost ter se uporabljal izključno za testiranje. 1.2. Poplava DNS poizvedbKot najosnovnejša in najosnovnejša storitev interneta je DNS naravno ena izmed pomembnih tarč DDoS napadov. Onemogočenje DNS storitve lahko posredno oslabi celotno poslovanje podjetja ali omrežno storitev v določeni regiji. Pred časom je priljubljena hekerska skupina Anonymous prav tako napovedala, da bo napadla 13 DNS strežnikov na globalnem internetu, vendar ji na koncu ni uspelo. UDP napadi so najlažja metoda za začetek množičnega prometa, ponarejanje naključnih virov IP naslovov pa je težko slediti. Vendar je filtriranje lažje, ker večina IP-jev ne nudi UDP storitev, zato lahko preprosto zavržete UDP promet. Zato so čisti UDP prometni napadi danes razmeroma redki in jih nadomeščajo DNS Query Flood napadi, ki jih izvaja UDP protokol. Preprosto povedano, DDoS napadi, ki se sprožijo na višjem protokolu, težje se je braniti, saj je protokol višji, bolj poslovni in obrambni sistem je bolj kompleksen. DNS Query Flood je, ko napadalec manipulira z velikim številom sockpuppet naprav, da sproži veliko število zahtevkov za poizvedbe po domenah cilju. Da bi preprečili filtriranje na osnovi ACL, je treba izboljšati naključnost paketov. Pogosta praksa je naključno ponarejanje izvornega IP naslova, naključno ponarejanje izvornega priključka in drugih parametrov na UDP plasti. Na DNS-protokolni plasti se ID poizvedbe naključno ponaredi skupaj z domeno, ki jo je treba rešiti. Poleg preprečevanja filtriranja lahko naključno ponarejena domenska imena, ki jih je treba razrešiti, lahko tudi zmanjšajo verjetnost zadetka DNS predpomnilnika in porabijo čim več CPU virov DNS strežnika. Kar zadeva kodo za DNS Query Flood, sem julija 2011 napisal kodo za testiranje zmogljivosti strežnika in povezava je http://www.icylife.net/yunshu/show.php?id=832. Podobno je ta koda umetno manj agresivna in je namenjena le testnim namenom. 1.3. HTTP poplavaSYN Flood in DNS Query Flood, opisani zgoraj, se lahko učinkovito branijo v tej fazi, pravi glavobol za večje proizvajalce in internetna podjetja pa so HTTP Flood napadi. HTTP Flood je napad na spletno storitev na protokolu sedme plasti. Njegova velika škoda se kaže predvsem v treh vidikih: priročni iniciaciji, težavnem filtriranju in daljnosežnem vplivu. Tako SYN Flood kot DNS Query Flood zahtevata, da napadalci nadzorujejo veliko število botov z root pravicami. Zbiranje velikega števila root privilegijev zahteva čas in trud, med napadom pa se lutkovna naprava počasi obnavlja zaradi hitre izgube virov napadalca zaradi nenavadnega prometa, ki ga odkrije administrator, kar povzroči znatno zmanjšanje intenzivnosti napada in ga ni mogoče vzdrževati dolgo časa. HTTP Flood napadi so drugačni, napadalci ne potrebujejo nadzora nad velikim številom botov, temveč uporabljajo skenerje vrat za iskanje anonimnih HTTP proxyjev ali SOCKS proxyjev na internetu, preko katerih napadalec sproži HTTP zahteve do cilja napada. Anonimni proxyji so razmeroma bogat vir in ni težko pridobiti proxyjev v nekaj dneh, zato so napadi enostavni za začetek in lahko trajajo dolgo. Po drugi strani pa se HTTP flood napadi izvajajo na HTTP plasti, ki močno posnema vedenje običajnih uporabnikov pri zahtevkih za spletne strani, kar je tesno povezano s poslovanjem spletnih strani, zaradi česar je varnostnim ponudnikom težko ponuditi skupno rešitev, ki ne vpliva na uporabniško izkušnjo. Pravila, ki dobro delujejo na enem mestu, lahko spreminjanje scenarijev vodi do velikega števila ubojev iz malomarnosti. Nazadnje, HTTP flood napadi lahko povzročijo resne verižne reakcije, ki ne le neposredno povzročijo počasen odziv napadenega spletnega vmesnika, temveč tudi posredno napadajo zaledni Java in druge poslovne logike ter podatkovne baze storitev, kar povečuje njihov pritisk in celo vpliva na strežnike za shranjevanje dnevnikov. Zanimivo je, da ima HTTP Flood tudi zgodovinski vzdevek CC napad. CC je okrajšava za Challenge Collapsar, kar je naprava za zaščito pred DDoS napadi znanega varnostnega podjetja na Kitajskem. Glede na trenutno situacijo je ne le Collapsar, ampak vsa obrambna oprema še vedno izpostavljena izzivom, tveganje pa ni bilo odpravljeno. 1.4. Počasni napadi povezavKo gre za napade, je prva reakcija velik promet in množični paketi. Obstaja pa napad, ki naredi ravno nasprotno, znan po tem, da je počasen, tako da so nekateri cilji napada ubiti, ne da bi vedeli, kako umrejo, kar je napad počasne povezave, najbolj reprezentativen je Slowloris, izumljen s strani rsnake. HTTP protokol določa, da HTTP zahteve končajo z \r\n\r\n, kar pomeni, da je odjemalec končal pošiljanje in da je strežnik začel obdelovati. Kaj se zgodi, če nikoli ne pošlješ \r\n\r\n? Slowloris to izkorišča v svojo korist pri DDoS napadih. Napadalec nastavi povezavo na Keep-Alive v HTTP glavi zahteve, prosi spletni strežnik, naj TCP povezava ostane neprekinjena, nato pa strežniku vsakih nekaj minut počasi pošlje format ključ-vrednost, kot je a:b\r\n, zaradi česar strežnik misli, da HTTP glava ni bila prejeta, in počaka. Če napadalec uporabi večnitnost ali lutko za enako, bo spletni kontejner strežnika hitro preobremenjen s strani napadalca in ne bo več sprejemal novih zahtev. Kmalu so se začele pojavljati različne različice Slowlorisov. Na primer, metoda POST pošlje podatke na spletni strežnik, zapolni velik obseg dolžine vsebine, a počasi bajt za bajtom POST vsebino dejanskih podatkov itd. Glede napada Slowloris rsnake prav tako poda testno kodo, glej http://ha.ckers.org/slowloris/slowloris.pl. 2. DDoS napad napreduje2.1. Hibridni napadiZgornje uvaja več osnovnih metod napada, od katerih je mogoče uporabiti katerokoli za napad na omrežje in celo za premagovanje velikih spletnih strani, kot so Alibaba, Baidu in Tencent. A to še ni vse, različne ravni napadalcev lahko sprožijo povsem različne DDoS napade, njihova uporaba pa je enaka. Napredni napadalci nikoli ne uporabljajo enega samega vektorja za napad, temveč jih prilagodljivo kombinirajo glede na ciljno okolje. Običajni SYN Flood je enostavno filtrirati z napravami za čiščenje prometa z zaznavanjem obrata, SYN piškotki in drugimi tehničnimi metodami, vendar če so SYN+ACK paketi pomešani v SYN Flood, tako da ima vsak ponarejen SYN paket ustrezni ponarejeni potrditveni paket odjemalca, se ustrezni tukaj nanaša na izvorni IP naslov, izvorni port, ciljni IP, ciljni port, velikost TCP okna, TTL itd., so vsi v skladu z značilnostmi istega gostitelja in istega TCP toka. Pritisk na zmogljivost zaznavanja vzvratne vožnje in SYN piškotkov opreme za čiščenje pretoka se bo znatno povečal. Pravzaprav imajo SYN podatkovni paketi in različni drugi biti zastavic posebne učinke napada, ki tukaj niso predstavljeni. Obstajajo tudi edinstvene tehnike za DNS Query Flood. Najprej je mogoče DNS razdeliti na običajen DNS in pooblaščeni domenski DNS, pri čemer je treba naključno ponarediti IP naslov, strežnik pa zahteva rekurzivno ločljivost; Vendar pa pri napadu na DNS pooblaščene domene ponarejeni izvorni IP naslov ne sme biti povsem naključen, temveč naj bodo DNS naslovi ponudnikov internetnih storitev po svetu zbrani vnaprej, da se doseže največji učinek napada, tako da je naprava za čiščenje prometa v neprijetni situaciji, da doda IP črno listo ali ne. Dodajanje tega bo povzročilo veliko število ubojev iz malomarnosti, in če ne dodate črne liste, je treba vsak paket preizkušati v obratni smeri, kar poveča pritisk na zmogljivost. Po drugi strani pa, kot je bilo že omenjeno, je za povečanje pritiska čiščenja naprave potrebno naključno določiti zahtevano domeno brez udarca v predpomnilnik, vendar je treba poudariti, da mora ime, ki ga želimo razrešiti, imeti določeno rednost pri ponarejevanju, na primer ponarejanje le določenega dela domene in utrjevanje dela, ki prebije beli seznam, ki ga je določila čistilna naprava. Razlog je preprost: strežniki Tencenta lahko razrešijo le Tencentova domena, popolnoma naključna domena pa se lahko neposredno zavrže in jih je treba utrjevati. Če pa je popolnoma popravljen, ga je enostavno zavreči neposredno, zato ga je treba ponarediti. Drugič, napadi na DNS ne bi smeli biti osredotočeni zgolj na UDP priključke, ki so tudi standardne storitve po DNS protokolu. V primeru napada je mogoče hkrati izvesti tako UDP kot TCP napad. Osredotočenost HTTP Flood je prebiti predpomnilnik na frontendu in neposredno doseči sam spletni strežnik preko nastavitev polja v HTTP glavi. Poleg tega je HTTP Flood zelo pomemben tudi pri izbiri tarč, običajni napadalci pa bodo izbrali strani, ki zahtevajo veliko podatkovnih poizvedb, kot je iskanje kot cilj napada, kar je zelo pravilno in lahko porabi čim več virov strežnika. Toda ta napad je enostavno prepoznati s čiščenjem opreme z identifikacijo človek-stroj, zato se sprašujem, kako rešiti ta problem? Zelo preprosto je, poskušajte izbrati strani, do katerih imajo običajni uporabniki dostop prek aplikacije, na splošno različnih spletnih API-jev. Običajni uporabniki in zlonamerni promet prihajajo iz aplikacije, razlika med človekom in strojem pa je zelo majhna in težko je ločiti osnovno integracijo. Vsaka TCP povezava obstaja na strežniški strani in na svoji strani, poleg tega pa mora porabiti vire za vzdrževanje TCP stanja, zato povezave ni mogoče vzdrževati preveč. Če se to reši, se agresivnost močno poveča, torej lahko Slowloris izvaja napade brezstanj, zajame TCP serijsko številko in potrdi vzdrževanje TCP povezav na odjemalcu s prisluškovanjem, jedro sistema pa ne potrebuje spremljati različnih sprememb stanja TCP, zato lahko prenosnik ustvari do 65.535 TCP povezav. Prejšnji opisi so vsi tehnični izboljšavi napadov. Na človeški strani obstajajo tudi druga sredstva. Če SYN Flood pošlje veliko paketov in ga spremljajo počasne povezave Slowloris, koliko ljudi bo odkrilo skrivnost? Tudi če strežnik odpove, se lahko najdejo le SYN napadi, ki poskušajo okrepiti čiščenje TCP plasti in ignorirajo vedenje aplikacijske plasti. Vse vrste napadov lahko delujejo skupaj, da dosežejo največji učinek. Izbira časa napada je prav tako ključna točka, na primer pri izbiri vzdrževalnega osebja, ko si privoščijo kosilo, ko so vzdrževalci obtičali na cesti po koncu dela ali ko na brezžični omrežni kartici v podzemni železnici ni signala, in ko ciljno podjetje organizira velik dogodek in promet naraste. To je čisti napad, zato ni podana nobena koda ali poglobljena razlaga. 2.2. Napadi iz P2P omrežijPrejšnje metode napada so večinoma zahtevale nekaj botov, celo HTTP Flood zahteva iskanje velikega števila anonimnih proxyjev. Če pride do napada, morate le izdati nekaj navodil, stroj pa se samodejno pojavi in ga izvede, kar je popolna rešitev. Ta napad se je že pojavil, in to iz P2P omrežij. Kot vsi vemo, je število P2P uporabnikov in prometa na internetu izjemno veliko. Če vsi gredo na določeno mesto za prenos podatkov in povezavo tisočev pravih IP naslovov, jih nobena naprava ne more podpirati. Vzemimo za primer prenos BT – ponarejanje torrentov nekaterih priljubljenih videov in njihovo objavljanje v iskalnikih je dovolj, da zavede veliko uporabnikov in promet, a to je le osnovni napad. Napredni P2P napadi so neposredno ponarejanje strežnikov za upravljanje virov. Na primer, Thunder odjemalec naloži najdene vire na strežnik za upravljanje virov in jih nato posreduje drugim uporabnikom, ki morajo prenesti iste vire, da bo povezava objavljena. S preobratom protokola napadalci ponaredijo veliko količino priljubljenih informacij o virih in jih razdelijo prek centra za upravljanje virov, ki se lahko takoj razširijo po celotnem P2P omrežju. Še bolj strašljivo je, da tega napada ni mogoče ustaviti, niti napadalec sam, in napad se nadaljuje, dokler uradnik P2P ne odkrije težave, ne posodobi strežnika in uporabnik prenosa ponovno ne zažene prenesene programske opreme. 3. PovzetekTo je vse, kar je v uvodu v DDoS napade, in ne želim iti dlje – dovolj je, da razumem, da je toliko obrambe dovolj. Na splošno so DDoS napadi lahko spretni in elegantni. Lepota uporabe je v enotnosti uma. |