|
HackerJe to žiaduca a sľubná kariéra. Vážim si dobrých hackerov a zlých hackerov neznášam. Takzvaný zlý hacker je ten typ človeka, ktorý spôsobí, že niekto na druhej strane pracuje nadčasy. Útoky SYN Flood sú typickým útokom typu denial of service. Takzvaný útok odmietnutia služby má nepriamo dosiahnuť účel útoku tým, že obeť je neschopná poskytovať kvalitné služby. Hackeri to radi hrajú, aby ukázali, že sú vyrovnaní, schopní a odvážni, tým, že nútia druhú stranu pracovať nadčas, ale v skutočnosti to nič nie je. 1: Čo je to útok SYN Flood? Útoky SYN Flood využívajú trojcestný handshake proces protokolu TCP v IPv4. Tento protokol stanovuje, že ak chce jedna strana iniciovať TCP spojenie na druhú stranu, musí najprv poslať TCP SYN (synchronize) paket druhej strane, a druhá strana pošle TCP SYN + ACK paket späť po jeho prijatí, a potom iniciátor pošle TCP ACK (ACKnowledge Character) paket späť, takže tri handshake sú ukončené. V uvedenom procese sú niektoré dôležité koncepty: Fronta nie je pripojená: V protokole trojcestného handshake server udržiava nepripojenú frontu, ktorá otvára záznam pre každý klientov SYN paket (syn=j), ktorý signalizuje, že server prijal SYN paket a posiela zákazníkovi potvrdenie, čakajúc na potvrdzovací paket od zákazníka. Spojenie identifikované týmito záznamami je na serveri v Syn_RECV stave a keď server dostane potvrdzovací paket od zákazníka, záznam sa vymaže a server vstúpi do stavu ESTABLISHED. Inými slovami, keď TCP server prijme TCP SYN požiadavkový paket, pred odoslaním TCP SYN+ACK paketu späť TCP klientovi musí TCP server najskôr prideliť dátovú oblasť na obsluhu TCP spojenia vytvoreného touto rukou. Vo všeobecnosti je stav spojenia, keď je prijatý SYN paket, ale ACK paket ešte nebol prijatýPolootvorené spojenie(Polootvorené spojenie)。 Parameter backlogu: Označuje maximálny počet neprepojených frontov. SYN-ACK počet opakovaných vysielaní: Po odoslaní paketu SYN-ACK serverom, ak potvrdzovací paket od zákazníka nie je prijatý, server vykoná prvé opätovné odoslanie, počká určitý čas a neprijme potvrdenie zákazníka, a vykoná druhé opätovné odoslanie; ak počet opakovaných vysielaní presiahne maximálny počet opakovaných vysielaní stanovený systémom, systém vymaže informácie o spojení z fronty polopripojenia. Všimnite si, že čakacia doba na každý opätovný prechod nemusí byť nevyhnutne rovnaká. Poloprepojený čas prežitia: Označuje maximálny čas, počas ktorého prežije záznam v semi-connection queue, teda maximálny čas od prijatia SYN paketu službou do momentu, keď je potvrdený neplatnosť paketu, a hodnota času je súčtom maximálneho čakacieho času pre všetky pakety žiadosti o opätovné odoslanie. Niekedy nazývame poloprepojený čas prežitia SYN_RECV čas prežitia. Pri najbežnejšom SYN flood útoku útočník pošle obeti veľké množstvo TCP SYN paketov v krátkom čase, pričom útočníkom je TCP klient a obeťou TCP server. Podľa vyššie uvedeného popisu obeť priradila ku každému TCP SYN paketu špecifickú dátovú zónu, pokiaľ mali SYN pakety rôzne zdrojové adresy (čo by útočníci ľahko falšovali). To spôsobí veľkú záťaž na TCP serverový systém a nakoniec spôsobí, že systém nebude správne fungovať. 2. Princíp SYN cookies Jedným zo spôsobov, ako účinne predchádzať útokom SYN Flood, sú SYN cookies. SYN Cookie Dôvod D. Vynašli ho J. Bernstain a Eric Schenk. SYN cookies sú modifikáciou protokolu TCP serverového trojcestného handshake na zabránenie útokom SYN Flood.Jej princíp je:Keď TCP server prijme TCP SYN paket a vráti TCP SYN+ACK paket, nepridelí vyhradenú dátovú oblasť, ale vypočíta hodnotu cookie na základe tohto SYN paketu. Keď je prijatý TCP ACK paket, TCP server kontroluje legitímnosť TCP ACK paketu na základe tejto hodnoty cookies. Ak je to legálne, je pridelená vyhradená dátová oblasť na spracovanie budúcich TCP spojení. Poďme sa porozprávať o tom, ako nastaviť parametre jadra na implementáciu SYN cookies v Linuxe a FreeBSD Po tretie: Nastavenia Linuxu Ak konfigurácia servera nie je dobrá, počet TCP TIME_WAIT socketov dosiahne 20 000 alebo 30 000 a server môže byť ľahko pretiahnutý do smrti. Úpravou parametrov jadra Linuxu je možné znížiť počet TIME_WAIT socketov na serveri. TIME_WAIT je možné zobraziť nasledujúcim príkazom: - 以下是代码片段:
- netstat -an | grep "TIME_WAIT" | wc -l
Kopírovať kódNa Linuxe, ako je CentOS, to môžete dosiahnuť úpravou súboru /etc/sysctl.conf. Pridajte nasledujúce riadky: - 以下是代码片段:
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.ip_local_port_range = 1024 65000
- net.ipv4.tcp_max_syn_backlog = 8192
- net.ipv4.tcp_max_tw_buckets = 5000
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
Kopírovať kódIlustrovať: net.ipv4.tcp_syncookies = 1 znamená, že SYN cookies sú povolené, čo je BOOLEAN. Keď SYN čaká, kým fronta pretečie, povolte cookies, aby sa s ňou vyrovnali, čo môže zabrániť malému počtu SYN útokov, a predvolená hodnota je 0, čo znamená, že je uzavretá. net.ipv4.tcp_tw_reuse = 1 znamená, že opätovné použitie je povolené, čo je BOOLEAN. Umožňuje opätovné použitie TIME-WAIT socketov pre nové TCP pripojenia, predvolene nastavené na 0, čo indikuje uzavretie; net.ipv4.tcp_tw_recycle = 1 znamená umožniť rýchlu recykláciu TIME-WAIT socketov v TCP spojeniach, čo je BOOLEAN, a predvolená hodnota je 0, čo znamená, že je uzavretá. net.ipv4.tcp_fin_timeout = 30 znamená, že ak je socket zatvorený lokálnou požiadavkou, tento parameter určuje, ako dlho zostane v stave FIN-WAIT-2. Jednotka sú sekundy. net.ipv4.tcp_keepalive_time = 1200 označuje, ako často TCP posiela správy keepalive, keď sa keepalive použije. Predvolená doba je 2 hodiny, zmenená na 20 minút. Jednotka sú sekundy. net.ipv4.ip_local_port_range = 1024 65000 označuje rozsah portov používaných na vonkajšie pripojenia. Predvolený prípad je malý: 32768 na 61000, zmenený na 1024 na 65000. net.ipv4.tcp_max_syn_backlog = 8192 označuje dĺžku SYN fronty, ktorá je predvolene 1024, a dĺžka zvýšenej fronty je 8192, aby sa zmestilo viac sieťových spojení čakajúcich na spojenie. net.ipv4.tcp_max_tw_buckets = 5000 označuje maximálny počet socketov, ktoré systém udržiava TIME_WAIT súčasne, a ak je tento počet prekročený, TIME_WAIT socketov sa okamžite vymaže a vytlačí sa varovná správa. Predvolená hodnota je 180000, zmenená na 5000. Pre servery ako Apache a Nginx môžu parametre v predchádzajúcich riadkoch TIME_WAIT dobre znížiť počet socketov, ale pre Squid efekt nie je veľký. Tento parameter ovláda maximálny počet TIME_WAIT socketov, aby zabránil tomu, aby Squid server bol vytiahnutý veľkým počtom TIME_WAIT socketov. net.ipv4.tcp_synack_retries a net.ipv4.tcp_syn_retries určujú počet SYN opakovaní. Spustite nasledujúci príkaz, aby sa konfigurácia aktivovala: Ak nechcete upravovať /etc/sysctl.conf, môžete tiež použiť príkaz na to: - 以下是代码片段:
- /sbin/sysctl -w key=value
Kopírovať kódPo štvrté, nastavené pod FreeBSD yayuov osobný pohľad na učenie: obrana proti syn vo FreeBSD nemusí byť rovnaká ako v Linuxe, nastavené parametre nie sú úplne rovnaké a relevantná konfigurácia a pochopenie nemusia byť správne :) Jeden je v TCP linkeMSL (maximálna životnosť segmentu)KonceptMaximálny čas generovaniaHodnota MSL sa vo všeobecných implementáciách berie na 30 sekúnd, niektoré implementácie trvajú 2 minúty. "Pasívne vypnutie" v TCP stavovom automate: Od CLOSE_WAIT do LAST_ACK platí nasledovné pravidlo: Keď TCP vykoná aktívne vypnutie a pošle späť posledný ACK, spojenie musí zostať v TIME_WAIT stave dvakrát dlhšie ako MSL. To umožňuje TCP poslať posledný ACK znova, ak sa stratí (druhý koniec vyprší a odošle posledný FIN). Existencia tohto pravidla má za následok, že spojenie (adresa klienta, port a adresa na strane servera, port) na tejto adrese nemôže byť použité počas tohto 2*MSL času. Napríklad, ak po jeho vytvorení uzavrieme odkaz a potom ho rýchlo reštartujeme, port bude nedostupný. TIME_WAIT čas je 2*MSL. Takže TIME_WAIT čas môžete znížiť úpravou net.inet.tcp.msl. Pre webový server je možné túto hodnotu upraviť na 7500 alebo 2000 (prístup na web, stránka nemôže byť flashovaná dlhšie ako 4~15 sekúnd, môžete zvážiť vzdanie sa -_-) Referencia nastavenia parametra: - 以下是引用片段:
- net.inet.tcp.syncookies=1
- 防止DOS攻击
- net.inet.tcp.msl=7500
- 防止DOS攻击,默认为30000
- net.inet.tcp.blackhole=2
- 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
- net.inet.udp.blackhole=1
- 接收到一个已经关闭的端口发来的所有UDP包直接drop
Kopírovať kódNa FreeBSD yayu nevidel príkaz ako "/sbin/sysctl -p", ktorý by mohol spraviť obsah /etc/sysctl.conf efektívnym, tak jednoducho použil príkaz: - 以下是代码片段:
- sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Kopírovať kód
|