ot Vladsun(5-06-2007)

reiting (31)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

1. Vuvedenie

Adaptivnost narichame onova svoistvo na obektite, koeto pozvoliava tehnite reaktsii da se promeniat s techenie na vremeto pri edni i sushti vhodni usloviia. Adaptivnostta e tiasno svurzana s poniatieto "pamet". Bez da imame pamet ne mozhem da imame adaptivnost.
V oblastta na IT i po spetsialno pri izgrazhdaneto na zashtitni steni (firewall) poniatieto pamet se svurzva s drugi dva angliiski termina - stateful i stateless. V tazi tiasna oblast tezi termini sa po-skoro svurzani sus sledeneto na paketite za vsiaka vruzka i suotvetstvashtiia i protokol (connection tracking).
V tazi statiia shte opisha niakolko prilozheniia na "adaptivnite" zashtitni steni - tova sa tezi steni, koito osven sledeneto na otdelnite vruzki i svurzanite s tiah deistviia v kratkosrochen plan, mogat da promeniat svoite deistviia v zavisimost ot poluchenite paketi v po-dulgosrochen plan. Adaptivnostta pri tezi steni obiknoveno se proiaviava v otkaz na dostup do edna, niakolko ili vsichki uslugi na zashtitavanata mashina pri ustanoviavane na ataka. Otkazut na dostup e samo kum atakuvashtiia, dokato vsichki ostanali legitimni potrebiteli mogat bezproblemno da polzvat tezi uslugi.
Realiziranata v tazi statiia adaptivna zashtitna stena ima tri niva na zashtita - purvoto nivo e obrabotkata na vseki paket sam za sebe si (stateless), vtoroto nivo e adaptivna zashtita na vsiaka edna otdelna usluga na mashinata ili ot konkretna ataka i tretoto nivo e adaptivna zashtita chrez otkaz na dostup do absolyutno vsichki portove na mashinata.

2. Realizatsiia

Vseki paket s iztochnik opredelen host v realiziranata ot men zashtitna stena mozhe da se opredeli kato:

  • "bial" - paketut dostiga krainoto si prednaznachenie;
  • "siv" - paketut ne dostiga krainoto si prednaznachenie, ako to se schita za atakuvano, no dostiga do ostanalite, ako te ne sa atakuvani;
  • "cheren" - paketut se othvurlia avtomatichno nezavisimo ot prednaznachenieto si.


  • "Sivite" paketi sa onezi paketi, koito sa izprateni ot identifitsiran kato "atakuvasht" host i sa prednaznacheni za opredelena usluga (port) - te bivat othvurliani. V sushtoto vreme obache paketite ot "atakuvashtiia" host, koito sa prednaznacheni kum drugi uslugi (portove) bivat propuskani ot ZS.
    "CHernite" paketi, sa onezi paketi, koito sa izprateni ot identifitsiran kato "atakuvasht" host, kato takava identifikatsiia e stanala poveche ot edin put v ramkite na opredelen (prim. 3 min.) period ot vreme.

    Po-dolu e pokazan sors koda (bash) na takava zashtitna stena. SHTe razdelia sorsa na chasti i shte obiasnia prednaznachenieto na vseki edin ot tiah. Izbranata shema na deistviia za tazi stena sa RETURN-DROP, koeto oznachava, che mozhe da se izbere vsiakakva politika po podrazbirane.

    Izpolzvani sa slednite iptables moduli i iziskvanite ot tiah:

    set, recent, hashlimit, connlimit, limit, LOG

    2.1. Initsializatsiia

    Primeren kod
     /sbin/modprobe ipt_recent ip_list_tot=1000
     
     ipt="/usr/local/sbin/iptables"
     ips="/usr/local/sbin/ipset"
     
     for TABLE in filter nat mangle; do
     $ipt -F -t $TABLE
     $ipt -X -t $TABLE
     $ipt -Z -t $TABLE
     done
     
     $ips -F
     $ips -X
     
     if [ "$1" == "stop" ]
     then
     echo
     echo "Stopping firewall..."
     echo
     exit
     fi
     
     # White IP list
     $ips -N WL iphash
     $ips -A WL 127.0.0.1
     $ips -A WL 192.168.0.1
     
     # White nets list
     $ips -N WLN nethash
     $ips -A WLN 192.168.0.0/24
    Dotuk "izchistihme" tablitsite na iptables i ipset. Sushto taka sustavihme spisutsi s dovereni hostove i mrezhi.

    2.2. Adaptiven totalen filtur

    Primeren kod
    ### ADAPTIVE TOTAL DROP ###
     $ipt -A INPUT -m recent --name banned-hosts --update --seconds 36000 -j DROP
     
     $ipt -N BANNED
     $ipt -A BANNED -m limit --limit 1/s --limit-burst 1 -j LOG
     $ipt -A BANNED -m recent --name banned-hosts --set -j RETURN
     
     $ipt -N ADAPT
     $ipt -A ADAPT -m limit --limit 1/s --limit-burst 1 -j LOG
     $ipt -A ADAPT -m recent --hitcount 2 --name watch-hosts --update --seconds 180 -j BANNED
     $ipt -A ADAPT -m recent --name watch-hosts --set -j RETURN
    Vizhda se, che vsichki paketi minavat prez:
    Primeren kod
    $ipt -A INPUT -m recent --name banned-hosts --update --seconds 36000 -j DROP
    T.e. ako hostut se namira v recent tablitsata "banned-hosts", to vsichki negovi paketi shte budat othvurliani, kato vseki edin negov paket shte zapochva novi 3600 sekundi (1 chas) na othvurliane. Kak popada daden host v tozi spisuk - nuzhno e da e postupil negov paket vuv verigata BANNED, koeto ot svoia strana iziskva da sa postupili pone 2 paketa (t.e. "sivi") na atakuvashtiia vuv verigata ADAPT i to za ne poveche ot 180 sek. (3 min.). Kakto shte se vidi po-dolu paketite, koito postupvat vuv verigata ADAPT sa takiva, koito sa identifitsirani kato zapochvashti ataka kum dadena usluga. S drugi dumi kazano, ako zlonamereniiat host atakuva edna usluga poveche ot dva puti ili atakuva poveche ot edna usluga za za vreme po-malko ot 3 min., to toi shte bude vklyuchen v spisuka "banned-hosts" i vsichki negovi paketi (t.e. "cherni") shte budat othvurliani za pone edin chas.

    2.3. Paketen filtur

    Primeren kod
    ### MALFORMED PACKETS ###
     
     # Smurf attack
     $ipt -A INPUT -p icmp -d 0.0.0.255/0.0.0.255 -j DROP
     
     # Invalid tcp packets
     $ipt -A INPUT -p tcp --tcp-option 128 -j DROP
     $ipt -A INPUT -p tcp --tcp-option 64 -j DROP
     
     # Malformed xmas packets
     $ipt -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
     
     # Malformed null packets
     $ipt -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
     
     # New tcp connections must be SYN packets!
     $ipt -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
     
     # others
     $ipt -A INPUT -m state --state INVALID -j DROP
     
     # Local IP filter
     $ipt -t mangle -A PREROUTING -i eth+ -s 172.16.0.0/16 -j DROP
     $ipt -t mangle -A PREROUTING -i eth+ -d 172.16.0.0/16 -j DROP
     $ipt -t mangle -A PREROUTING -i eth+ -d 192.168.0.0/16 -j DROP
     $ipt -t mangle -A PREROUTING -i eth+ -s 192.168.0.0/16 -j DROP
     $ipt -t mangle -A PREROUTING -i eth+ -s 10.0.0.0/8 -j DROP
     $ipt -t mangle -A PREROUTING -i eth+ -d 10.0.0.0/8 -j DROP
     $ipt -t mangle -A PREROUTING -i ! lo -s 127.0.0.0/8 -j DROP
     
     # Block timestamp
     $ipt -A INPUT -p icmp --icmp-type timestamp-request -j DROP
     $ipt -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP
     
     # Always allow VPN users
     $ipt -A INPUT -i ppp+ -j ACCEPT
     $ipt -A OUTPUT -o ppp+ -j ACCEPT
     
     # Always allow localhost
     $ipt -A INPUT -i lo -j ACCEPT
    Tazi chast ot zashtitnata stena e klasicheska i niama nuzhda ot komentar.

    2.4. Obshta zashtita

    Zashtitata v sledvashtite chasti e realizirana priblizitelno po edin i susht nachin:
  • suzdavane na veriga, v koiato da vlizat paketite s opredelen priznak;
  • ako paketut e ot host identifitsiran kato atakuvasht v opredelen vremevi interval (60 sek.) se othvurlia (i se izliza ot verigata);
  • ako paketut ne se schita za atakuvasht se izliza ot verigata (t.e. NE se othvurlia);
  • ako paketut se schita za atakuvasht se zapomnia hosta ot koito e izpraten, kato v sushtoto vreme se signalizira za provedena ataka ot tozi host v ADAPT verigata;
  • paketut se othvurlia;

  • Primeren kod
    # Port scan detection
     $ipt -N PSD 
     $ipt -A INPUT -m recent --name PSD --update --seconds 60 -j DROP
     $ipt -A INPUT -m psd --psd-weight-threshold 10 --psd-delay-threshold 200 -j PSD
     $ipt -A PSD -m set --set WL src -j RETURN
     $ipt -A PSD -m recent --name PSD --set -j ADAPT
     $ipt -A PSD -j DROP

    Izpolzva se dopulnenieto kum iptables - modulut psd. Osobenoto tuk e, che blokut ne sledva suvsem tochno goreopisanata posledovatelnost. Prichinata e, che psd match-a direktno opredelia paketut kato atakuvasht, a ne da go razgranichava po priznak. Pokazanite po-dolu chasti sledvat tazi posledovatelnost.

    Eto go i podrobnoto obiasnenie:
  • red #1. Suzdavane na verigata PSD
  • red #2. Vseki paket se proveria za tova dali iztochnikut mu e v spisuka sus zabranen dostup kum tazi usluga i ako e, se othvurlia, kato zapochvat novi 60 sek. vreme na othvurliane;
  • red #3. Proveriava se dali paketut prinadlezhi kum skanirashta poreditsa - ako da, to paketut se izprashta kum verigata PSD. Ako ne, to paketut produlzhava natatuk bez posledstviia.
  • red #4. Proveriava se dali paketut identifitsiran kato skanirasht prinadlezhi na host ot spisuka na doverenite hostove. Ako da - izliza se ot verigata i paketut produlzhava natatuk bez posledstviia. Ako ne, to paketut produlzhava kum sledvashtoto pravilo vuv verigat PSD.
  • red #5. Iztochnikut na paketa i vremeto, v koeto toi e pristignal se zapisvat v recent tablitsata PSD. Sled tova paketut se izprashta kum ADAPT verigata, s koeto se realizira opisanata po-gore adaptivna zashtita na mashinata.
  • red #6. Paketut se othvurlia, tui kato e identifitsiran kato atakuvasht.

  • Pokazanite po-dolu chasti sledvat podobna logika.

    Primeren kod
    # Syn-flood protection
     $ipt -N syn-flood
     $ipt -A INPUT -p tcp --syn -j syn-flood
     $ipt -A syn-flood -m set --set WL src -j RETURN
     $ipt -A syn-flood -m recent --name syn-flood --update --seconds 60 -j DROP
     $ipt -A syn-flood -m hashlimit --hashlimit 1/s --hashlimit-burst 50 --hashlimit-mode srcip --hashlimit-name syn-flood -j RETURN
     $ipt -A syn-flood -m recent --name syn-flood --set -j ADAPT
     $ipt -A syn-flood -j DROP
     
     # Furtive port scanner
     $ipt -N port-scan
     $ipt -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
     $ipt -A port-scan -m recent --name port-scan --update --seconds 60 -j DROP
     $ipt -A port-scan -m hashlimit --hashlimit 1/s --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name port-scan -j RETURN
     $ipt -A port-scan -m recent --name port-scan --set -j ADAPT
     $ipt -A port-scan -j DROP
     
     # Ping of death
     $ipt -N PoD
     $ipt -A INPUT -p icmp --icmp-type echo-request -j PoD
     $ipt -A PoD -m set --set WL src -j RETURN
     $ipt -A PoD -m set --set WLN src -m limit --limit 50/s --limit-burst 60 -j RETURN
     $ipt -A PoD -m recent --name PoD --update --seconds 60 -j DROP
     $ipt -A PoD -m length --length 128: -m hashlimit --hashlimit 1/s --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name PoD -j RETURN
     $ipt -A PoD -m hashlimit --hashlimit 5/s --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name PoD -j RETURN
     $ipt -A PoD -m recent --name PoD --set -j ADAPT
     $ipt -A PoD -j DROP


    2.5. Zashtita po uslugi

    Logikata na izpulnenie e sushtata kato v gornite zashtiti, no s tazi razlika, che paketut v kraia ne se othvurlia, tui kato prinadlezhi kum ne atakuvashta poreditsa.
    Primeren kod
    # Mail protection 
     $ipt -N MAIL
     $ipt -A INPUT -p tcp --dport 25 --syn -j MAIL
     $ipt -A INPUT -p tcp --dport 143 --syn -j MAIL
     $ipt -A MAIL -m set --set WL src -j RETURN
     $ipt -A MAIL -p tcp -m connlimit --connlimit-above 2 --connlimit-mask 32 -j REJECT
     $ipt -A MAIL -m recent --hitcount 2 --name mail --update --seconds 60 -j DROP
     $ipt -A MAIL -m recent --name mail --update --seconds 60 -j RETURN
     $ipt -A MAIL -m recent --name mail --set -j ADAPT
     
     # SSH bruteforce attack protection
     $ipt -N SSH
     $ipt -A INPUT -p tcp --dport 22 --syn -j SSH
     $ipt -A SSH -m set --set WL src -j RETURN
     $ipt -A SSH -p tcp -m recent --hitcount 2 --name SSH --update --seconds 60 -j DROP
     $ipt -A SSH -p tcp -m recent --name SSH --update --seconds 60 -j RETURN
     $ipt -A SSH -m recent --name SSH --set -j ADAPT
     
     # FTP bruteforce attack protection
     $ipt -N FTP
     $ipt -A INPUT -p tcp --dport 21 --syn -j FTP
     $ipt -A FTP -m set --set WL src -j RETURN
     $ipt -A FTP -m set --set WLN src -j RETURN
     $ipt -A FTP -p tcp -m recent --hitcount 2 --name FTP --update --seconds 60 -j DROP
     $ipt -A FTP -p tcp -m recent --name FTP --update --seconds 60 -j RETURN
     $ipt -A FTP -m recent --name FTP --set -j ADAPT


    3. Zaklyuchenie

    Pokazana beshe realizatsiiata na adaptivna zashtitna stena, koiato e sposobna da izolira atakuvashtiia host za otnositelno dulug period ot vreme - ot niakolko minuti do niakolko chasa (ili dni !!!). Zashtitata e dosta agresivna i poradi tova triabva da se izberat podhodiashti za vashite sluchai parametri - vremena na otkaz, broi popadeniia za otkaz i t.n.
    V zaklyuchenie shte kazha, che vmesto DROP mozhe da se izpolzvat drugi, po-interesni deistviia - TARPIT, MIRROR ;). Tezi deistviia predizvikvat obratna ataka kum atakuvashtiia, vmesto da go ignorirat.

    EDIT: Pri men sum napravil i set nethash ot mrezhovite prefiksi v bulgarskoto prostranstvo i otkazvam dostup do SSH i FTP uslugite v sluchai, che hostut ne e sred tiah.
    Za "pulnene" na spisuka izpolzvam:
    Primeren kod
    # BG IPs list
     $ips -N BG_NETS nethash
     for i in `cat /usr/local/router/data/bgnets`; do
     $ips -A BG_NETS $i
     done
    Togava blokovete za upravlenie na dostupa do SSH i FTP izglezhdat po sledniia nachin:
    Primeren kod
    # SSH bruteforce attack protection
     $ipt -N SSH
     $ipt -A INPUT -p tcp --dport 22 --syn -j SSH
     $ipt -A SSH -m set --set WL src -j RETURN
     $ipt -A SSH -m set ! --set BG_NETS src -j REJECT
     $ipt -A SSH -p tcp -m recent --name SSH --update --seconds 60 -j DROP
     $ipt -A SSH -m recent --name SSH --set -j ADAPT
     
     # FTP bruteforce attack protection
     $ipt -N FTP
     $ipt -A INPUT -p tcp --dport 21 --syn -j FTP
     $ipt -A FTP -m set --set WL src -j RETURN
     $ipt -A FTP -m set --set WLN src -j RETURN
     $ipt -A FTP -m set ! --set BG_NETS src -j REJECT
     $ipt -A FTP -p tcp -m recent --name FTP --update --seconds 60 -j DROP
     $ipt -A FTP -m recent --name FTP --set -j ADAPT


    << Instalirane na Beryl pod Mandriva Linux 2007 | Protsesi v GNU/Linuks >>