Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 13773|Odpověď: 0

[Bezpečnostní tutoriál] Útoky SYN Flood, obrana proti SYN cookies a úprava parametrů jádra pro Linux/FreeBSD

[Kopírovat odkaz]
Zveřejněno 27.10.2014 21:37:19 | | |

HackerJe to žádoucí a slibná kariéra. Vážím si dobrých hackerů a nesnáším špatné hackery. Takzvaný špatný hacker je ten typ člověka, který způsobí, že někdo na druhé straně pracuje přesčas.

    Útoky SYN Flood jsou typickým útokem typu denial of service. Takzvaný útok typu denial of service má nepřímo dosáhnout účelu útoku tím, že znemožní hostiteli nebo síti poskytovat kvalitní služby. Hackeři to rádi hrají, aby ukázali, že jsou vyrovnaní, schopní a odvážní, tím, že nutí druhou stranu pracovat přesčas, ale ve skutečnosti to nic není.

   1: Co je to útok SYN Flood?

    Útoky SYN Flood využívají třícestný handshake protokolu TCP v IPv4. Tento protokol stanovuje, že pokud chce jedna strana navázat TCP spojení s druhou stranou, musí nejprve poslat TCP SYN (synchronize) paket druhé straně, druhá strana pošle TCP SYN + ACK paket zpět po jeho přijetí, a poté iniciátor pošle zpět TCP ACK (ACKnowledge Character) paket, takže tři handshakey jsou u konce.

    V uvedeném procesu jsou některé důležité koncepty:

    Fronta není připojená: V protokolu třícestného handshake server udržuje nepřipojenou frontu, která otevírá záznam pro každý klientův SYN paket (syn=j), který označuje, že server obdržel SYN paket a vydává potvrzení zákazníkovi, čeká na potvrzovací paket od zákazníka. Spojení identifikované těmito záznamy je na serveru ve stavu Syn_RECV a když server obdrží potvrzovací paket od zákazníka, záznam je smazán a server přechází do stavu ESTABLISHED. Jinými slovy, když TCP server obdrží požadavek TCP SYN, musí server TCP nejprve přidělit datovou oblast pro TCP spojení vytvořené tímto rukou, než pošle paket TCP SYN+ACK zpět TCP klientovi. Obecně se jedná o stav spojení, kdy je přijat SYN paket, ale ACK paket ještě nebyl přijatPolootevřené spojení(Polo-otevřené spojení)。

    Parametr backlogu: Označuje maximální počet nepropojených front.

    Počet opakovaných přenosů SYN-ACK: Po odeslání paketu SYN-ACK serverem, pokud potvrzovací paket zákazníka není přijat, server provede první opětovné odeslání, čeká určitou dobu a neobdrží potvrzovací paket zákazníka, a provede druhé znovuodeslání, pokud počet opakovaných přenosů překročí maximální počet opakovaných přenosů stanovený systémem, systém smaže informace o spojení z fronty polopřipojení. Všimněte si, že čekací doba na každé opakování nemusí být nutně stejná.

    Polopropojená doba přežití: Označuje maximální dobu, po kterou záznam ve frontě semi-connection přežije, tedy maximální dobu od okamžiku, kdy služba přijme SYN paket do okamžiku, kdy je paket potvrzen jako neplatný, a hodnota času je součtem maximální čekací doby pro všechny pakety žádosti o opětovné odeslání. Někdy také nazýváme částečně propojený čas přežití SYN_RECV časem přežití.

    Při nejčastějším SYN flood útoku útočník odešle oběti velké množství TCP SYN paketů během krátké doby, kdy je útočníkem TCP klient a obětí TCP server. Podle výše uvedeného popisu by oběť každému TCP SYN paketu přiřadila konkrétní datovou zónu, pokud by SYN pakety měly různé zdrojové adresy (což by útočníci snadno falšovali). To způsobí velké zatížení TCP serverového systému a nakonec způsobí, že systém nebude správně fungovat.

    2. Princip cookies SYN

    Jedním ze způsobů, jak účinně zabránit útokům SYN Flood, jsou SYN cookies. SYN Cookie Důvod D. Vynalezli J. Bernstain a Eric Schenk.

    SYN cookies jsou modifikací protokolu TCP třícestného handshake na straně TCP, aby zabránily útokům SYN Flood.Jeho princip je:Když TCP server přijme TCP SYN paket a vrátí TCP SYN+ACK paket, nepřiděluje vyhrazenou datovou oblast, ale na základě tohoto SYN paketu vypočítá hodnotu cookie. Když je přijat TCP ACK paket, TCP server ověří pravost TCP ACK paketu na základě této hodnoty cookies. Pokud je to legální, je přidělena vyhrazená datová oblast pro zpracování budoucích TCP spojení.

    Pojďme si povědět o tom, jak nastavit parametry jádra pro implementaci SYN cookies v Linuxu a FreeBSD

    Za třetí: Nastavení Linuxu

    Pokud vaše konfigurace serveru není dobrá, počet TCP TIME_WAIT socketů dosáhne 20 000 nebo 30 000 a server může být snadno přetažen do smrti. Úpravou parametrů jádra Linuxu lze snížit počet TIME_WAIT socketů na serveru.

    TIME_WAIT lze zobrazit pomocí následujícího příkazu:

  1. 以下是代码片段:
  2. netstat -an | grep "TIME_WAIT" | wc -l
Kopírovat kód

Na Linuxu, například na CentOS, toho dosáhnete úpravou souboru /etc/sysctl.conf.

    Přidejte následující řádky:

  1. 以下是代码片段:
  2. net.ipv4.tcp_fin_timeout = 30
  3. net.ipv4.tcp_keepalive_time = 1200
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_tw_recycle = 1
  7. net.ipv4.ip_local_port_range = 1024    65000
  8. net.ipv4.tcp_max_syn_backlog = 8192
  9. net.ipv4.tcp_max_tw_buckets = 5000
  10. net.ipv4.tcp_synack_retries = 2
  11. net.ipv4.tcp_syn_retries = 2
Kopírovat kód

Ilustrovat:

net.ipv4.tcp_syncookies = 1 znamená, že SYN cookies jsou povoleny, což je BOOLEAN. Když SYN čeká, až fronta přeteče, povolte cookies, aby s ní naložili, což může zabránit malému počtu útoků SYN, a výchozí hodnota je 0, což znamená, že je uzavřena.
net.ipv4.tcp_tw_reuse = 1 znamená, že je povoleno opětovné použití, což je BOOLEAN. Umožňuje opětovné použití socketů TIME-WAIT pro nové TCP připojení, výchozí nastavení na 0, což znamená uzavření;
net.ipv4.tcp_tw_recycle = 1 znamená umožnit rychlou recyklaci socketů TIME-WAIT v TCP připojeních, což je BOOLEAN a výchozí hodnota je 0, což znamená, že je uzavřeno.
net.ipv4.tcp_fin_timeout = 30 znamená, že pokud je socket uzavřen lokálním požadavkem, tento parametr určuje, jak dlouho zůstane ve stavu FIN-WAIT-2. Jednotka je sekunda.
net.ipv4.tcp_keepalive_time = 1200 označuje, jak často TCP odesílá zprávy o držení paliva při použití těchto správ. Výchozí je 2 hodiny, změněno na 20 minut. Jednotka je sekunda.
net.ipv4.ip_local_port_range = 1024 65000 označuje rozsah portů používaných pro odchozí spojení. Výchozí případ je malý: 32768 až 61000, změněno na 1024 na 65000.
net.ipv4.tcp_max_syn_backlog = 8192 označuje délku fronty SYN, která je ve výchozím nastavení 1024, a délka prodloužené fronty je 8192, aby se umožnilo více síťovým připojením čekajícím na připojení.
net.ipv4.tcp_max_tw_buckets = 5000 označuje maximální počet socketů, které systém udržuje současně TIME_WAIT, a pokud je tento počet překročen, TIME_WAIT socketů bude okamžitě vymazáno a vytištěna varovná zpráva. Výchozí hodnota je 180000, změněna na 5000. U serverů jako Apache a Nginx mohou parametry v předchozích řadách počet socketů TIME_WAIT výrazně snížit, ale u Squidu efekt není velký. Tento parametr řídí maximální počet TIME_WAIT socketů, aby zabránil tomu, aby byl server Squid vytažen velkým počtem TIME_WAIT socketů.
net.ipv4.tcp_synack_retries a net.ipv4.tcp_syn_retries určují počet SYN opakovaných pokusů.

Spustěte následující příkaz, aby konfigurace nastoupila do platnosti:

  1. 以下是代码片段:
  2. /sbin/sysctl -p
Kopírovat kód

Pokud nechcete upravovat /etc/sysctl.conf, můžete také použít příkaz:

  1. 以下是代码片段:
  2. /sbin/sysctl -w key=value
Kopírovat kód

Za čtvrté, založeno pod FreeBSD

    Yayuův osobní pohled: obrana proti syn ve FreeBSD nemusí být stejná jako v Linuxu, nastavené parametry nejsou úplně stejné a relevantní konfigurace a porozumění nemusí být správné:)

    Jeden je v TCP odkazuMSL (maximální životnost segmentu)KonceptMaximální doba generaceHodnota MSL se v běžných implementacích bere 30 sekund a některé implementace trvají 2 minuty. "Pasivní vypnutí" v TCP stavovém automatu: Od CLOSE_WAIT do LAST_ACK platí pravidlo následující: Když TCP provede aktivní vypnutí a odešle zpět poslední ACK, spojení musí zůstat ve stavu TIME_WAIT dvakrát déle než MSL. To umožňuje TCP znovu poslat poslední ACK v případě, že se ztratí (druhý konec vyprší a odešle poslední FIN).

    Existence tohoto pravidla má za důsledek, že spojení (adresa klienta, port a adresa na straně serveru, port) na této adrese nemůže být během tohoto 2*MSL času použito. Například pokud po jeho vytvoření uzavřeme odkaz a rychle ho restartujeme, port bude nedostupný.

    TIME_WAIT čas je 2*MSL. Takže můžete zkrátit TIME_WAIT čas úpravou net.inet.tcp.msl. Pro webový server lze tuto hodnotu upravit na 7500 nebo 2000 (přístup na web, stránka nesmí být flashována déle než 4~15 sekund, můžete zvážit vzdání -_-)

    Reference nastavení parametrů:

  1. 以下是引用片段:
  2. net.inet.tcp.syncookies=1
  3. 防止DOS攻击

  4. net.inet.tcp.msl=7500
  5. 防止DOS攻击,默认为30000

  6. net.inet.tcp.blackhole=2
  7. 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

  8. net.inet.udp.blackhole=1
  9. 接收到一个已经关闭的端口发来的所有UDP包直接drop
Kopírovat kód

Na FreeBSD yayu neviděl příkaz jako "/sbin/sysctl -p", který by mohl zefektivnit obsah /etc/sysctl.conf, takže prostě použil příkaz:

  1. 以下是代码片段:
  2. sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Kopírovat kód






Předchozí:Dopis studenta Wuchangského technologického institutu médiím
Další:Obnovte pravdu o organizaci prostituce v hotelech na vysokých školách a univerzitách "Wuchang Institute of Technology: Pověsti končí na...
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com