LINUX-BG   Adres : http://www.linux-bg.org
Blokirane na avtomatizirani ataki pod Linuks i *BSD
Ot: valqk
Publikuvana na: 21-07-2006
Adres na statiiata: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=384460807
Iztochnik: http://webreality.org/content/view/18/3...

www.webreality.org

Kakto vsiaka sistema v internet, napulno normalno e i vashiia kompyutur - bil toi survur ili nastolnata mashina na koiato rabotite, da e podlozhena na postoianni opiti za hakvane ot strana na vsiakakvi navletsi v internet.

Razbira se tezi ataki mogat da sa ot proizvolni script kiddies ili ot dosta dobri krakeri.

Ako atakuvashtiia vashata mashina e ot vtoriia tip, ili vuobshte niama da razberete, ili shte e prekaleno kusno kogato vi svetne kakvo stava ili puk shte vi e trudno da go hvanete. Kakto i da e, v tazi statiia ne stava duma za vtoriia tip atakuvashti.


Purviia tip - skript yuzurite, koito svaliat daden 'eksploit' (ako moga taka da nareka brute force ssh skriptovete) i vkarvaneto na rechnik s dumi imat dosta dosaden efekt za vseki koito nablyudava log failovete si:

  1. Generirat dosta izlishen trafik
  2. Zaemat resursi na mashinata vi(dori i da sa minimalni v povecheto sluchai)
  3. Nai dosadnoto neshto - pulniat log failovete s nenuzhna informatsiia



Tazi statiia ima za tsel da vi zapoznae s tehnika koiato se izpolzva za prezhdevremenno blokirane na vuprosnite brute force ataki.

Sled dosta rovene i prouchvane, v rezultatite mi ot turseneto se poiavi edin dosta interesno zvuchasht proekt - blocksshd.

Mozhe da bude nameren na adres: http://sourceforge.net/projects/blockss...

Proektut e startiran ot James Turnbull james@lovedthanlost_-_net i pri purvonachalen pogled e nishto osobenno - oshte edin proekt za blokirane na ssh atakite. Sled kato go svalih i go razarhivirah obache, ostanah naistina ocharovan ot koda na tova malko i sladko programche - napisano na purl, s malko zavisimosti i mnogo krasiv kod.

Sled begul pogled vurhu koda si kazah 'Eeee... strahotno programche, no zashto niama poddruzhka za BSD... zhalko...'.
Sekunda po kusno mi hrumna misulta... 'Zashto puk ne.....i zapochnah da dopisvam koda za da mozhe da se integira s zashtitnata stena pf'.

Izbrah pf za integratsiiata, zashtoto tova e stena, koiato ima poddruzhka vuv vsichki BSD sistemi i tova puk znachi, che mozhe da se izpolzva navsiakude.


I taka zapochvame.

Kakto spomenah po gore, programkata e pisana na perl - t.e. shte e nuzhno toi da e instaliran, sushto taka malko moduli ot cpan.org:
Sys::Syslog Sys::Hostname File::Tail Net::DNS::Resolver Proc::Daemon Proc::PID::File Getopt::Long

Tova sa nuzhnite zavisimosti - molia ako operatsionnata vi sistema e s paketna sistema, da gi instalirate prez neia, ako ne - na ruka.


Sled kato osigurite neobhodimite zavisimosti, razarhivirate programkata.
V paketa ima standartnite README, CHANGES, INSTALL, CREDITS, blocksshd - samoto programche i blocksshd.conf - konfiguratsionniia fail.
Sushto taka, ima direktoriia init v koiato mozhe da se otkrie rc startirasht skript podhodiasht za povecheto linuks distributsii.


Razpolozhenieto na failovete e po zhelanie, kato za da sraboti bez da redaktirate blocksshd faila, triabva da slozhite blocksshd.conf v /usr/local/etc/ , ako iskate, razbira se, mozhe da pipnete samiia purl skript.

Neka da vidim sudurzhanieto na blocksshd.conf:

--------------------

# vim: syntax=perl

$cfg = {
   os              => 'linux', # Target OS - either linux or bsd
   chain           => 'blocksshd', # Name of iptables or pf chain
   logfile         => '/var/log/secure', # Log file to monitor
   logcheck        => '10', # How often to check the log file
   max_attempts    => '4', # Max number of failures
   timeout         => '360', # Reset IP count if no activity after time out in seconds
   unblock         => '1', # Enable unblocking
   unblock_timeout => '43200', # Time in seconds after which to unblock a blocked IP address
   restore_blocked => '0', # Turn on checking for previously blocked IPs
   log_ips         => '/usr/local/etc/blocksshd.list', # Log file for blocked IPs
   pid_file        => '/var/run/blocksshd.pid', # Location of PID file
   send_email      => '1', # Enable the sending of email notifications
   email           => 'root', # Email address to send notifications
   mail            => '/bin/mail', # Location of mail binary    
   iptables        => '/sbin/iptables', # Location of iptables binary - only for Linux
   pfctl           => '/sbin/pfctl', # Location of pfctl binary - only for BSD
   whitelist       => [qw{
                       127.0.0.1
                   }], # whitelist - list of IPs that will never be blocked
};

#leave 1; here!
1;

--------------------

Tuk e predstavena konfiguratsiiata, koiato ida po podrazbirane s paketa.

Neka ia razgledame red po red.

Na purviia red e ukazano ako otvariame faila s vim redaktor, kak toi da otsveti koda. Ne mislia, che e nuzhno da go promeniate.

Na sledvashtiia red se suzdava hesh, koito posle programkata da mozhe da chete direktno. Ako iskate da raboti ne pipaite(osven razbira se ako znaete kakvo pravite).

Po nadolu zapochva sushtinskata nastroika.

Vsiaka stoinost triabva da e vuv vida:

key => 'value',

Posledniia red ot stoinostite triabva da e bez ,

Neka da opisha i koe kakvo znachi(vupreki, che optsiite sa razbiraemi ot pruv pogled).

   * os - tip na operatsionnata sistema - linux ili bsd.Ot tuk programkata razbira koia stena da polzva.
   * chain - tova e imeto na 'verigata' vuv vashata stena, dori i da go ostavite po podrazbirane, posle samo shte triabva da dobavite DENY ili block pravilo za paketite ot tazi veriga(opisano po dolu).
   * logfile - faila v koito se zapisvat zaiavkite vi za autentikatsiia.
   * logcheck - intervala prez koito se proveriava po gorniia fail.
   * max_attempts - maksimalen broi greshni autentikatsii ot daden ares, predi da se blokira.
   * timeout - vreme sled koeto se restartira broiacha za greshni opiti za vlizane.
   * unblock - flag 1/0 koito ukazva dali blokiranite adres da se razblokirat.
   * unblock_timeout - period sled koito blokiranite adresi bivat razblokirani, ako e pozvoleno avtomatichno razblokirane.
   * restore_blocked - flag 1/0 koito ukazva dali pri startirane na blocksshd da se vuztanovi blokazha na adresi ot blokiranite predi negovoto spirane.
   * log_ips - ukazva putia kum fail v koito, shte se paziat vsichki blokirani adres i v posledstvie ako e pusnata optsiiata restore_blocked, te shte budat cheteni ot tozi fail.
   * pid_file - ukazva kude shte se pazi faila v koito e zapisan nomera na protsesa na blocksshd (PID file).
   * send_email - flag 1/0 - puska ili spira izprashtaneto na e.poshta pri dobaviane na nov adres v spisuka s blokiranite.
   * email - E.poshta na koiato da bude izprateno uvedomiavaneto, ako e pusnato.
   * mail - Ukazvane na putia kum standartnata mail programa na linuks/*BSD.
   * iptables - Ukazvane na putia kum programata iptables.
   * pfctl - Ukazvane na putia kum programata pfctl.
   * whitelist - Spisuk s adresi, koito ne triabva da se blokirat.Adresite se vpisvat V kudravite skobi - edin adres na red.




Tova sa vsichki optsii, koito blocksshd predlaga (za sega - 19.07.2006).

V zavisimost ot OS vi sistema, vuv vashite 'ogneni steni'(firewalls) shte triabva da dobavite po 1 red.
Toi shte sluzhi da blokira vruzkite koito sa dobaveni v suotvetnata veriga(chain) ot blocksshd.

Za Linuks OS v nai obshtiia sluchai i nai prosto izpulnenie, vi triabva da izpulnite tozi red kato super potrebitel(root):

#> iptables -I INPUT -p tcp -m tcp --dport 22 -j




Kudeto e imeto, koeto ste napisali v konfiguratsionniia fail - chain optsiiata.

VNIMANIE: Poradi razlichnite nachini na zarezhdane na linuks sistemite, triabva da prochetete v stranitsata na vashata distributsiia, kak da nakarate tozi red da se zarezhda pri vseki start na mashinata.

Sled kato imate pravilo, koeto zabraniava vruzkata kum vas ot spisuka s blokirani adres, shte triabva da startirate blocksshd da raboti postoianno na vashata mashina.

Tui kato za normalna rabota blocksshd, triabva da raboti kato daemon(demon) v pametta, mozhe da izpolzvate skripta ot init direktoriiata, na paketa i da go dobavite v startirashtite skriptove na vashiia Linuks.

Vuzmozhno e startirane na ruka(za testovi tseli ili pisane na sobstveni inir skriptove.

Za da startirate blocksshd v ne rezidenten rezhim prosto izvikvate izpulnimiia fail: /usr/local/sbin/blocksshd ili kudeto ste go slozhili. Za da go pusnete da raboti kato demon blocksshd se vika s optsiia --start za puskane i --stop za spirane.

#>/usr/local/sbin/blocksshd --start

#>/usr/local/sbin/blocksshd --stop





Za FreeBSD (mozhe bi i za drugite *BSD sistemi - ne sum testval, molia za komentar) shte triabva da dobavite tova pravilo v /etc/pf.conf niakude predi poslednite redove:

block in on $ext_if proto tcp from  to me port { 21,22 }



Kudeto chain e imeto na verigata ot konfiguratsiiata.
Sled kato zapazite promianata v /etc/pf.conf, shte triabva da prezaredite pravilata s komandata:

#>pfctl -f /etc/pf.conf




Sled kato ia izpulnite, ako razbira se polzvate pf zashtitnata stena, veche shte imate pravilo koeto da blokira vruzkite ot -a.

Ako ne izpolzvate pf zashtitna stena, shte triabva da ia razreshite za izpolzvane ot /etc/rc.conf (man rc.conf i tursite pf).
Sled kato ia razreshite, ako ne iskate da restartirate i da razreshite pf izpulnete komandata:

#>pfctl -e



Za statistiki na pf, mozhe da probvate:

#>pfctl -sa



ili da si prochetete: pf manual.

Tui kato pri *BSD (i konkretno pri FreeBSD) startirashtite skriptove sa organizirani po suvsem razlichen nachin ot Linuks, shte se nalozhi da polzvate start skripta koito shte dam po dolu, dokato napravia port za FreeBSD i go kacha tuk.

blocksshd.sh

#!/bin/sh
#
# $FreeBSD: ports/sysutils/blocksshd/files/blocksshd.in,v 1.2 2006/07/13 03:37:57 dougb Exp $
#

# PROVIDE: blocksshd
# REQUIRE: DAEMON
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable blocksshd:
#
#blocksshd_enable="YES"
#
# See blocksshd.conf.
#

. /etc/rc.subr

name=blocksshd
rcvar=`set_rcvar`

blocksshd_pidfile="/var/run/blocksshd.pid"

command="/usr/local/sbin/blocksshd"
start_precmd="print_start"
start_cmd="${command} --start"
stop_precmd="print_stop"
stop_cmd="${command} --stop"

command_args=" "
# set defaults

blocksshd_enable=${blocksshd_enable:-"NO"}
blocksshd_conf=${blocksshd_conf:-"/usr/local/etc/blocksshd.conf"}
blocksshd_flags=${blocksshd_flags:-""}


load_rc_config ${name}

required_files=${blocksshd_conf}

print_stop() {
   echo "Stopping ${name}."
   return 0
}

print_start() {
   echo "Starting ${name}."
}

run_rc_command "$1"




Postavete tozi fail v /usr/local/etc/rc.d/.

Otvorete /etc/rc.conf i dobavete:

blocksshd_enable="YES"



sled koeto izpulnete:

/usr/local/etc/rc.d/blocksshd.sh start



i ste gotovi, sega pri vseki start na sistemata shte se startira i blocksshd.

Ako niakoi pusne programkata pod drugi BSD sistemi i si napravi startirashti skriptove, molia da gi prati na  za da gi dobavia v paketa.

Malko samoreklama - pfctl integratsiiata i vuzmozhnostta za zapisvane na vsichki blokirani adres i vuztanoviavaneto im pri start sa moia realizatsiia.

Vsiakakvi komentari i podobreniia sa dobre doshli!

---------------------------------------
Anton Blajev - www.webreality.org team

<< Prosta zashtita za SSH ataki (bruteforce, dictionary) | Ponizhavane na naprezhenieto na Pentium M >>

Avtorite na saita, kakto i tehnite sutrudnitsi zapazvat avtorskite prava vurhu sobstvenite si materiali publikuvani tuk, no te sa copyleft t.e. mogat svobodno da budat kopirani i razprostraniavani s iziskvaneto izrichno da se upomenava imeto na avtora, kakto i da se publikuva na vidno miasto, che te sa vzeti ot originalniia im URL-adres na tozi survur (http://www.linux-bg.org). Avtorskite prava na prevodnite materiali prinadlezhat na tehnite avtori. Ako s publikuvaneto tuk na niakakuv material nevolno sa narusheni nechii prava - sled konstatiraneto na tozi fakt materialut shte bude svalen.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Linuks za bulgari EOOD 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.17 usr + 0.03 sys = 0.20 CPU)