Cum vă protejaţi serverul de Counter-Strike impotiva atacurilor cu csdos.pl (pentru servere găzduite pe Linux)Ce este csdos.pl?Este un script perl care exploatează un bug din serverul de Half-Life (şi toate mod-urile sale, printre care si Counter-Strike), provocând un Denial of Service (refuz al serviciului). Ce înseamnă acest lucru mai exact şi cum vă afectează pe dumneavoastră ca owner de server de Counter-Strike? Păi e foarte simplu, serverul intră intr-o buclă infinită care nu mai permite jucătorilor să se mai conecteze; în plus, dacă pe maşina respectivă mai aveţi şi alte servicii, serviciile respective vor fi şi ele afectate, pentru că serverul de Counter-Strike are tendinţa de a consuma foarte mult timp de procesor (99%), provocând încetinirea generală a sistemului. OK, aţi înteles despre ce este vorba, dar ce este de facut în cazul în care serverul nostru este supus unui atac de acest fel? Momentan nu există nici un patch oficial pentru această vulnerabilitate (descoperită în februarie 2006). Trebuie menţionat că aceasta problemă NU afectează serverele STEAM.
Ce este de făcut?Din fericire există mai multe variante de a opri atacurile de acest gen. Una din metode este analizarea traficului dintre server şi clienţi, cu snort sau iptables (utilizând string matching). Ambele metode au însă dezavantajul că analizează fără discernământ TOT traficul, crescând inutil încărcarea procesorului. În plus implementarea acestor metode este relativ greoaie şi dificilă pentru un începător (necesită cunostinţe destul de bune de administrare a serverelor Linux). Un alt dezavantaj este că aceste metode nu rezistă atacurilor cu csdos.pl modificat.
Soluţia dezvoltată de
Serghei Amelian şi propusă atenţiei dvs. abordează altfel această problemă. În principiu este vorba de o bibliotecă care se interpune între server şi internet, care analizează doar request-urile de tip CONNECT care vin dinspre clienţi (csdos.pl exploatează un bug care se manifestă doar pentru aceste tipuri de request-uri).
Versiunea curentă a HLShield-ului este 1.6Instalarea este extrem de simplă, pur şi simplu rulaţi grupul de comenzi de mai jos în folderul radăcină a serverului Half Life:
- Cod:
-
wget http://www.freakz.ro/download/hlshield-install.sh
chmod 755 hlshield-install.sh
./hlshield-install.sh
Bineinteles, după această operaţiune trebuie să restartaţi serverul. Dacă totul a fost corect executat, în consola ar trebui să vedeţi ceva de genul ăsta:
- Cod:
-
[AMXX] Loaded 28 admins from file
HLShield[10062]: HLShield 1.6 - (c) 2007 by Serghei Amelian
Master server communication disabled.
Acum a sosit momentul pentru a testa protecţia. Porniţi serverul Half Life, asiguraţi-vă că pe sistemul dumneavoastră exista perl (cam orice Linux vine cu perl preinstalat), apoi executaţi comenzile de mai jos:
- Cod:
-
wget http://hobby.sarichioi.com/cstrike/csdos.pl
perl csdos.pl IP.SERVER
Pentru a afla dacă atacul iniţiat a fost respins, verificaţi aici:
- Cod:
-
tail -f /var/log/daemon.log
Dacă patch-ul a fost corect aplicat, trebuie sa vedeţi ceva de genul ăsta:
- Cod:
-
Jan 26 11:26:48 gw HLShield[28563]: rejected atack from IP.SERVER
Începând cu versiunea 0.9,
HLShield[.b] are câteva noi opţiuni, care se configurează prin adăugarea câtorva variabile de mediu în [b]hlds_run. Pentru a le introduce, deschideţi cu editorul de text preferat (vi, nano, joe, mcedit, etc.) fişierul
hlds_run şi introduceţi (înainte de linia cu "
export LD_PRELOAD=./hlshield.so") variabilele corespunzătoare. De exemplu pentru mesaj de răspuns la atac trebuie să arate cam aşa:
- Cod:
-
export HLSHIELD_REPLY="Ratatii să se lase de meserie!"
export LD_PRELOAD=./hlshield.so
Dacă doriţi să blocaţi un IP care incearcă prea multe connect-uri într-un interval de timp foarte scurt (în general atacatorii procedează astfel), editaţi hlds_run pentru a arata astfel:
- Cod:
-
export HLSHIELD_INTERVAL=30
export LD_PRELOAD=./hlshield.so
Acest lucru înseamnă că într-un interval de 30 de secunde nu pot fi efectuate mai mult de 3 încercări de conectare. Puteţi testa asta conectând-vă/de-conectându-vă (în serie rapidă) cu clientul de counter. O să vă apară o fereastră ca cea de mai jos. Dacă atacatorul nu respectă cele 30 de secunde, intervalul se prelungeşte cu încă 30 de secunde, ş.a.m.d.
Această ultimă opţiune poate proteja serverul dvs. de exploit-ul cu "
born to be pig", care blochează serverul după încercări repetate de reconectare.
Începând cu versiunea 1.5 (această opţine nu funcţionează împreună cu versiunea 3561 a engine-ului Half Life), am introdus posibilitatea de a şterge din numele jucătorului unele caractere, cum ar fi de exemplu
` sau
~. Pentru a face acest lucru, hlds_run trebuie editat pentru a arăta în felul următor:
- Cod:
-
export HLSHIELD_REMOVE='`~'
export LD_PRELOAD=./hlshield.so
Începând cu versiunea 1.6, HLShield poate funcţiona cu versiunea 3561 a engine-ului Half Life. Notaţi că dacă veţi folosi versiunea 3561, opţiunea HLSHIELD_REMOVE nu va putea fi utilizată (această versiune a Half Life-ului nu acceptă să fie modificat string-u CONNECT).
Notă: Locaţia fişierului daemon.log poate diferi, în funcţie de distribuţia folosită.
Notă: patch-ul a fost testat doar pentru Counter Strike 1.6 non-steam, dar este posibil să funcţioneze şi cu alte MOD-uri HalfLife.
Autor:
Serghei Amelian