Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 13773|Válasz: 0

[Biztonsági oktató] SYN Flood támadások, SYN cookie védelem és kernel paramétermódosítás Linux/FreeBSD esetén

[Linket másol]
Közzétéve 2014. 10. 27. 21:37:19 | | |

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:

  1. 以下是代码片段:
  2. netstat -an | grep "TIME_WAIT" | wc -l
Kód másolása

Linuxon, 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:

  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
Kód másolása

Illusztrá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:

  1. 以下是代码片段:
  2. /sbin/sysctl -p
Kód másolása

Ha nem akarod módosítani az /etc/sysctl.conf fájlt, használhatod a parancsot is:

  1. 以下是代码片段:
  2. /sbin/sysctl -w key=value
Kód másolása

Negyedik, 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:

  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
Kód másolása

FreeBSD-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:

  1. 以下是代码片段:
  2. 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






Előző:A Wuchang Műszaki Intézet egyik hallgatójának levele a sajtónak
Következő:Állítsd vissza az igazságot a prostitúció szervezetéről a szállodákban főiskolákon és egyetemeken "Wuchang Műszaki Intézet: A pletykák itt állnak meg...
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com