 |
от valqk(21-07-2006)
рейтинг (7)
[ добре ]
[ зле ]
Вариант за отпечатване
Източник: http://webreality.org/content/view/18/3...
www.webreality.org
Както всяка система в интернет, напълно нормално е и вашия
компютър - бил той сървър или настолната машина на която
работите, да е подложена на постоянни опити за хакване от
страна на всякакви навлеци в интернет.
Разбира се тези атаки могат да са от произволни script
kiddies или от доста добри кракери.
Ако атакуващия вашата машина е от втория тип, или въобще
няма да разберете, или ще е прекалено късно когато ви светне
какво става или пък ще ви е трудно да го хванете. Както и да
е, в тази статия не става дума за втория тип атакуващи.
Първия тип - скрипт юзърите, които свалят даден 'експлойт'
(ако мога така да нарека brute force ssh скриптовете) и
вкарването на речник с думи имат доста досаден ефект за
всеки който наблюдава лог файловете си:
1. Генерират доста излишен трафик
2. Заемат ресурси на машината ви(дори и да са
минимални в повечето случаи)
3. Най досадното нещо - пълнят лог файловете с
ненужна информация
Тази статия има за цел да ви запознае с техника която се
използва за преждевременно блокиране на въпросните brute
force атаки.
След доста ровене и проучване, в резултатите ми от
търсенето се появи един доста интересно звучащ проект -
blocksshd.
Може да бъде намерен на адрес: http://sourceforge.net/projects/blockss...
Проектът е стартиран от James Turnbull
james@lovedthanlost_-_net и при първоначален поглед е нищо
особенно - още един проект за блокиране на ssh атаките. След
като го свалих и го разархивирах обаче, останах наистина
очарован от кода на това малко и сладко програмче - написано
на пърл, с малко зависимости и много красив код.
След бегъл поглед върху кода си казах 'Ееее... страхотно
програмче, но защо няма поддръжка за BSD... жалко...'.
Секунда по късно ми хрумна мисълта... 'Защо пък не.....и
започнах да дописвам кода за да може да се интегира с
защитната стена pf'.
Избрах pf за интеграцията, защото това е стена, която има
поддръжка във всички BSD системи и това пък значи, че може
да се използва навсякъде.
И така започваме.
Както споменах по горе, програмката е писана на perl - т.е.
ще е нужно той да е инсталиран, също така малко модули от
cpan.org:
Sys::Syslog Sys::Hostname File::Tail Net::DNS::Resolver
Proc::Daemon Proc::PID::File Getopt::Long
Това са нужните зависимости - моля ако операционната ви
система е с пакетна система, да ги инсталирате през нея, ако
не - на ръка.
След като осигурите необходимите зависимости, разархивирате
програмката.
В пакета има стандартните README, CHANGES, INSTALL,
CREDITS, blocksshd - самото програмче и blocksshd.conf -
конфигурационния файл.
Също така, има директория init в която може да се открие rc
стартиращ скрипт подходящ за повечето линукс
дистрибуции.
Разположението на файловете е по желание, като за да
сработи без да редактирате blocksshd файла, трябва да
сложите blocksshd.conf в /usr/local/etc/ , ако искате,
разбира се, може да пипнете самия пърл скрипт.
Нека да видим съдържанието на 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;
--------------------
Тук е представена конфигурацията, която ида по подразбиране
с пакета.
Нека я разгледаме ред по ред.
На първия ред е указано ако отваряме файла с vim редактор,
как той да оцвети кода. Не мисля, че е нужно да го
променяте.
На следващия ред се създава хеш, който после програмката да
може да чете директно. Ако искате да работи не пипайте(освен
разбира се ако знаете какво правите).
По надолу започва същинската настройка.
Всяка стойност трябва да е във вида:
key => 'value',
Последния ред от стойностите трябва да е без ,
Нека да опиша и кое какво значи(въпреки, че опциите са
разбираеми от пръв поглед).
* os - тип на операционната система - linux
или bsd.От тук програмката разбира коя стена да ползва.
* chain - това е името на 'веригата' във
вашата стена, дори и да го оставите по подразбиране, после
само ще трябва да добавите DENY или block правило за
пакетите от тази верига(описано по долу).
* logfile - файла в който се записват
заявките ви за аутентикация.
* logcheck - интервала през който се
проверява по горния файл.
* max_attempts - максимален брой грешни
аутентикаций от даден арес, преди да се блокира.
* timeout - време след което се рестартира
брояча за грешни опити за влизане.
* unblock - флаг 1/0 който указва дали
блокираните адрес да се разблокират.
* unblock_timeout - период след който
блокираните адреси биват разблокирани, ако е позволено
автоматично разблокиране.
* restore_blocked - флаг 1/0 който указва
дали при стартиране на blocksshd да се възтанови блокажа на
адреси от блокираните преди неговото спиране.
* log_ips - указва пътя към файл в който, ще
се пазят всички блокирани адрес и в последствие ако е
пусната опцията restore_blocked, те ще бъдат четени от този
файл.
* pid_file - указва къде ще се пази файла в
който е записан номера на процеса на blocksshd (PID
file).
* send_email - флаг 1/0 - пуска или спира
изпращането на е.поща при добавяне на нов адрес в списъка с
блокираните.
* email - Е.поща на която да бъде изпратено
уведомяването, ако е пуснато.
* mail - Указване на пътя към стандартната
mail програма на линукс/*BSD.
* iptables - Указване на пътя към програмата
iptables.
* pfctl - Указване на пътя към програмата
pfctl.
* whitelist - Списък с адреси, които не
трябва да се блокират.Адресите се вписват В къдравите скоби
- един адрес на ред.
Това са всички опции, които blocksshd предлага (за сега -
19.07.2006).
В зависимост от ОС ви система, във вашите 'огнени
стени'(firewalls) ще трябва да добавите по 1 ред.
Той ще служи да блокира връзките които са добавени в
съответната верига(chain) от blocksshd.
За Линукс ОС в най общия случай и най просто изпълнение, ви
трябва да изпълните този ред като супер
потребител(root):
#> iptables -I INPUT -p tcp -m tcp --dport 22 -j
Където е името, което сте написали в конфигурационния файл
- chain опцията.
ВНИМАНИЕ: Поради различните начини на зареждане на линукс
системите, трябва да прочетете в страницата на вашата
дистрибуция, как да накарате този ред да се зарежда при
всеки старт на машината.
След като имате правило, което забранява връзката към вас
от списъка с блокирани адрес, ще трябва да стартирате
blocksshd да работи постоянно на вашата машина.
Тъй като за нормална работа blocksshd, трябва да работи
като daemon(демон) в паметта, може да използвате скрипта от
init директорията, на пакета и да го добавите в стартиращите
скриптове на вашия Линукс.
Възможно е стартиране на ръка(за тестови цели или писане на
собствени inir скриптове.
За да стартирате blocksshd в не резидентен режим просто
извиквате изпълнимия файл: /usr/local/sbin/blocksshd или
където сте го сложили. За да го пуснете да работи като демон
blocksshd се вика с опция --start за пускане и --stop за
спиране.
#>/usr/local/sbin/blocksshd --start
#>/usr/local/sbin/blocksshd --stop
За FreeBSD (може би и за другите *BSD системи - не съм
тествал, моля за коментар) ще трябва да добавите това
правило в /etc/pf.conf някъде преди последните редове:
block in on $ext_if proto tcp from to me port { 21,22
}
Където chain е името на веригата от конфигурацията.
След като запазите промяната в /etc/pf.conf, ще трябва да
презаредите правилата с командата:
#>pfctl -f /etc/pf.conf
След като я изпълните, ако разбира се ползвате pf защитната
стена, вече ще имате правило което да блокира връзките от
-а.
Ако не използвате pf защитна стена, ще трябва да я
разрешите за използване от /etc/rc.conf (man rc.conf и
търсите pf).
След като я разрешите, ако не искате да рестартирате и да
разрешите pf изпълнете командата:
#>pfctl -e
За статистики на pf, може да пробвате:
#>pfctl -sa
или да си прочетете: pf manual.
Тъй като при *BSD (и конкретно при FreeBSD) стартиращите
скриптове са организирани по съвсем различен начин от
Линукс, ще се наложи да ползвате старт скрипта който ще дам
по долу, докато направя порт за FreeBSD и го кача тук.
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"
Поставете този файл в /usr/local/etc/rc.d/.
Отворете /etc/rc.conf и добавете:
blocksshd_enable="YES"
след което изпълнете:
/usr/local/etc/rc.d/blocksshd.sh start
и сте готови, сега при всеки старт на системата ще се
стартира и blocksshd.
Ако някой пусне програмката под други BSD системи и си
направи стартиращи скриптове, моля да ги прати на за
да ги добавя в пакета.
Малко самореклама - pfctl интеграцията и възможността за
записване на всички блокирани адрес и възтановяването им при
старт са моя реализация.
Всякакви коментари и подобрения са добре дошли!
---------------------------------------
Anton Blajev - www.webreality.org team
<< Проста защита за SSH атаки (bruteforce, dictionary) | Понижаване на напрежението на Pentium M >>
|
 |