|
HackerEz egy kívánatos és ígéretes karrier. Értékelem a jó hackereket, és utálom a rossz hackereket. Az úgynevezett rossz hacker az a fajta ember, aki miatt valakit a túlóráztatásra kényszerít. A SYN Flood támadások tipikus szolgáltatás-megtagadási támadások. Az úgynevezett szolgáltatásmegtagadási támadás célja, hogy közvetve elérje a támadás célját azzal, hogy az áldozat gazda vagy hálózat képtelenné teszi a jó szolgáltatás nyújtását. A hackerek szeretnek ezt játszani, hogy megmutassák kiegyensúlyozottakat, képzettséget és bátrak, azzal, hogy a másik fél túlóráztat, de valójában semmi. 1: Mi az a SYN Flood támadás? A SYN Flood támadások kihasználják az IPv4 TCP protokolljának háromirányú kézfogási folyamatát. Ez a protokoll előírja, hogy ha az egyik vég TCP kapcsolatot akar indítani a másik végsel, először TCP SYN (szinkronizálás) csomagot kell küldeni a másik félnek, a másik félnek TCP SYN + ACK csomagot kell visszaküldenie annak átvétele után, majd a kezdeményező visszaküld egy TCP ACK (ACKnowledge karakter) csomagot, így a három kézfogás véget ér. A fent említett folyamatban néhány fontos fogalma létezik: A sor nincs csatlakoztatva: A háromirányú kézfogás protokollban a szerver egy csatlakoztatatlan sorban áll, amely megnyit egy bejegyzést minden kliens SYN csomagjához (syn=j), amely jelzi, hogy a szerver megkapta a SYN csomagot, és megerősíti az ügyfélnek, várva az ügyfél megerősítő csomagját. Az ezekkel a bejegyzésekkel azonosított kapcsolat Syn_RECV állapotban van a szerveren, és amikor a szerver kap egy megerősítő csomagot az ügyféltől, a bejegyzés törlődik, és a szerver belép a BEVEZETETT állapotba. Más szóval, amikor a TCP szerver megkapja a TCP SYN kéréscsomagot, mielőtt visszaküldi a TCP SYN+ACK csomagot a TCP kliensnek, a TCP szervernek először egy adatterületet kell kijelölnie a TCP kapcsolat kiszolgálására, amelyet ez a kéz alkot. Általában a kapcsolat állapota akkor jelenik meg, amikor a SYN csomagot megkapják, de az ACK csomagot még nem kapták megFélig nyitott kapcsolat(Félig nyitott kapcsolat)。 Backlog paraméter: A maximális számú nem csatlakoztatott sorszámot jelzi. SYN-ACK újraadások száma: Miután a szerver elküldte a SYN-ACK csomagot, ha az ügyfél megerősítő csomagját nem kapják meg, a szerver végrehajtja az első újraküldést, vár egy ideig, és nem kapja meg az ügyfél-visszaigazolási csomagot, majd végrehajtja a második újraküldést; ha az újraküldések száma meghaladja a rendszer által megadott maximális újraküldések számát, a rendszer törli a kapcsolati információkat a félkapcsolati sorból. Fontos megjegyezni, hogy minden újraindításra vonatkozó várakozási idő nem feltétlenül ugyanaz. Félig összefüggő túlélési idő: A félig kapcsolódási sorban lévő bejegyzés maximális élettartamát jelenti, vagyis a maximális idő, amely a szolgáltatás SYN csomag megérkezésétől addig az időpontig terjed, amikor a csomag érvénytelennek bizonyul, és az időérték az összes újraküldési kérelemcsomag maximális várakozási idejének összege. Néha félig összekapcsolt túlélési időnek is hívjuk, SYN_RECV túlélési időnek. A leggyakoribb SYN flood támadásban a támadó rövid idő alatt nagy számú TCP SYN csomagot küld az áldozatnak, ekkor a támadó a TCP kliens, az áldozat pedig a TCP szerver. A fenti leírás szerint az áldozat minden TCP SYN csomaghoz egy adott adatzónát rendelne, amennyiben a SYN csomagok eltérő forráscímekkel rendelkeznek (amit a támadók könnyen hamisíthatnak). Ez nagy terhet ró a TCP szerver rendszerére, és végül a rendszer nem működik megfelelően. 2. A SYN sütikek elvei Az egyik hatékony módja a SYN Flood támadások megelőzésének a SYN sütikek. SYN Cookie Ok D. J. Bernstain és Eric Schenk találta fel. A SYN sütik a TCP szerveroldali háromirányú kézfogási protokoll módosítása, amely megakadályozza a SYN Flood támadásokat.Az elve a következő:Amikor a TCP szerver kap egy TCP SYN csomagot és TCP SYN+ACK csomagot küld vissza, nem oszt dedikált adatterületet, hanem ezen SYN csomag alapján egy cookie értéket számít ki. Amikor TCP ACK csomagot kapnak, a TCP szerver ellenőrzi a TCP ACK csomag legitimitását az adott cookie érték alapján. Ha jogos, egy dedikált adatterületet rendelnek a jövőbeli TCP kapcsolatok kezelésére. Beszéljünk arról, hogyan lehet beállítani a kernel paramétereket a SYN sütikek megvalósításához Linuxban és FreeBSD-ben Három: Linux beállítások Ha a szerver konfigurációja nem jó, a TCP TIME_WAIT socketek száma eléri a 20 000-et vagy 30 000-et, és a szerver könnyen halálra vonszolható. A Linux kernel paraméterek módosításával csökkenthető a szerveren lévő TIME_WAIT socket száma. TIME_WAIT a következő parancs segítségével tekinthető meg: - 以下是代码片段:
- netstat -an | grep "TIME_WAIT" | wc -l
Kód másolásaLinuxon, például a CentOS-on, ezt úgy lehet elérni, ha módosítod az /etc/sysctl.conf fájlt. Add hozzá a következő sorokat: - 以下是代码片段:
- 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
Kód másolásaIllusztrál: net.ipv4.tcp_syncookies = 1 azt jelenti, hogy a SYN sütikek engedélyezve vannak, ami egy BOOLEAN. Amikor a SYN várja, hogy a sor túlcsorduljon, engedélyezze a sütikek kezelését, ami megakadályozhatja a kis számú SYN támadást, és az alapértelmezett 0, ami azt jelenti, hogy zárva van. net.ipv4.tcp_tw_reuse = 1 azt jelenti, hogy újrahasználat engedélyezett, ami egy BOOLEAN. Lehetővé teszi a TIME-WAIT socketek újrahasznosítását új TCP kapcsolatokhoz, alapértelmezett 0-ra, ami záródást jelez; net.ipv4.tcp_tw_recycle = 1 azt jelenti, hogy lehetővé teszi a TIME-WAIT socketek gyors újrahasznosítását TCP kapcsolatokban, ami egy BOOLEAN, és az alapértelmezett 0, ami zárva van. net.ipv4.tcp_fin_timeout = 30 azt jelenti, hogy ha a foglalatot egy helyi kérés zárja le, ez a paraméter határozza meg, meddig marad a FIN-WAIT-2 állapotban. Az egység másodpercek. net.ipv4.tcp_keepalive_time = 1200 azt jelzi, hogy a TCP hányszor küld keepalive üzenetet, amikor keepalive használatban van. Az alapértelmezés 2 óra, majd 20 percre változott. Az egység másodpercek. net.ipv4.ip_local_port_range = 1024 65000 a kifelé irányuló kapcsolatokhoz használt portok tartományát jelzi. Az alapértelmezett eset kicsi: 32768-tól 61000-ig, 1024-re 65000-re változott. net.ipv4.tcp_max_syn_backlog = 8192 a SYN sor hosszát jelzi, amely alapértelmezés szerint 1024, és a megnövelt sor hossza 8192, hogy több hálózati kapcsolatot fogadjon be, amelyek a csatlakozásra várnak. net.ipv4.tcp_max_tw_buckets = 5000 jelzi a rendszer által egyszerre TIME_WAIT maximális számú aljzat számot, és ha ezt a számot túllépik, TIME_WAIT socket azonnal törlésre kerül, és figyelmeztető üzenet jelenik meg. Az alapértelmezett érték 180000, most 5000-re változott. Az olyan szervereknél, mint az Apache és a Nginx, az előző sorok paraméterei TIME_WAIT jelentősen csökkenthetik a socketek számát, de a Squid esetében ez a hatás nem túl jó. Ez a paraméter szabályozza a TIME_WAIT socket maximális számát, hogy megakadályozza a Squid szervert nagy számú TIME_WAIT socket kihúzásán. net.ipv4.tcp_synack_retries és net.ipv4.tcp_syn_retries határozzák meg a SYN újrajátszások számát. A következő parancsot futtatjuk a konfiguráció működésének eléréséhez: Ha nem akarod módosítani az /etc/sysctl.conf fájlt, használhatod a parancsot is: - 以下是代码片段:
- /sbin/sysctl -w key=value
Kód másolásaNegyedik, FreeBSD alatt beállítva Yayu személyes tanulási nézőpontja: a FreeBSD syn elleni védelem nem feltétlenül ugyanaz, mint a Linuxban, a konfigurált paraméterek nem teljesen ugyanazok, és a releváns konfiguráció és megértés nem feltétlenül helyes:) Van egy a TCP linkbenMSL (maximális szegmens élettartama)A fogalmaMaximális generálási időAz MSL értéket általános megvalósításoknál 30 másodpercig veszik, és néhány megvalósítás 2 percet vesz igénybe. "Passzív leállítás" a TCP állapotgépben: CLOSE_WAIT-től LAST_ACK-ig a következő szabály létezik: Amikor a TCP aktív leállítást hajt végre és visszaküldi az utolsó ACK-t, a kapcsolatnak kétszer annyi ideig kell maradnia a TIME_WAIT állapotban, mint az MSL. Ez lehetővé teszi, hogy a TCP újra elküldje az utolsó ACK-t, ha elveszíti (a másik vég időlejár és visszaküldi az utolsó FIN-t). Ennek a szabálynak az a következménye, hogy az adott címen lévő link (klienscím, port- és szerveroldali cím, port, port) nem használható ebben a 2*MSL időszakban. Például, ha a link létrehozása után zárunk le, majd gyorsan újraindítjuk a kapcsolatot, akkor a port nem lesz elérhető. TIME_WAIT idő 2*MSL. Így csökkentheted TIME_WAIT időt a net.inet.tcp.msl beállításával. A webszerver esetében ez az érték 7500 vagy 2000 értékre állítható, ha hozzáférsz egy webhez, az oldalt nem lehet 4~15 másodpercnél tovább flasholni, fontolóra veheted, hogy feladsz -_-) Paraméterbeállítási referencia: - 以下是引用片段:
- 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
Kód másolásaFreeBSD-n yayu nem látott olyan parancsot, mint a "/sbin/sysctl -p", ami hatékonysá tehetné az /etc/sysctl.conf tartalmát, ezért egyszerűen a parancsot használta: - 以下是代码片段:
- sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Kód másolása
|