Защита от брутфорс атак

Материал из Bryansk Linux Users Group.

Перейти к: навигация, поиск

Содержание

Брутфорс атаки

Брутфорс атаки являются самым простым, но по сей день эффективным способом взлома компьютерных систем. Эффективность брутфорс атаки напрямую зависит от ленивости и безответственности как администраторов, так и пользователей компьютерных систем. Атака брутфорсом заключается в подборе паролей путем перебора по словарю или методом прямого перебора.

Методы борьбы

Чаще всего борьба с брутфорсом заключается в запрещении досутпа атакующего к интересующему его порту. Запрещение устанавливается файрволом. Для этих целей применяются как различные виды скриптов, анализирующих лога аутентификации, так и средства самого файрвола. Рассмотрим оба способа. В качестве скрипта будем рассматривать fail2ban - очень интересный проект, позволяющий защищаться от брутфорсов большого числа сервисов (ssh, apache, vsftpd, proftpd, postfix, sasl). Примеры приведены для OC Debian GNU/Linux 4.0 Etch, но могут быть применены и на других дистрибутивах Linux с небольшими изменениями.

Fail2ban

Устанавливаем:

# apt-get install fail2ban

Конфигурационные файлы программы fail2ban находятся в директории /etc/fail2ban. Здесь Вы можете найти конфигурации демона, правил, действий. Более всего нас интересуют файлы fail2ban.conf (конфигурация демона) и jail.conf, в котором располагаются настройки для защищаемых сервисов.

/etc/fail2ban/fail2ban.conf

Конфиг очень корокий и простой, менять тут вобщем нечего, кроме уровня детализации логов

[Definition]
loglevel = 3 # уровень детализации логов (1-4)
logtarget = /var/log/fail2ban.log # лог-файл
socket = /tmp/fail2ban.sock # сокет демона

/etc/fail2ban/jail.conf

Этот конфигурационный файл придется немного больше изменить

[DEFAULT]

ignoreip = 127.0.0.1 217.65.0.119 # Игнорируемые адреса - эти адреса не будут забанены никогда
bantime  = 600 # Время бана в секундах
maxretry = 3 # Число разрешенных попыток по умолчанию

backend = polling # Способ слежения за изменением логов. 
  # В большинстве случаев нас устроит дефолтное значение polling (допустимы также gamin и auto). 
  # С методом gamin в Debian существуют некоторые проблемы.

destemail = user@test.ru # e-mail для отчетов о банах

# Действие - забанить и выслать whois информацию о брутфорсере на указанный выше e-mail
action = iptables[name=%(__name__)s, port=%(port)s]
        mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]

# Далее идут настройки для каждого из сервисов
[ssh]

enabled = true # разрешен
port    = ssh # можно указывать числовое значение (в данном случае - 22)
filter  = sshd # название фильтра (см. директорию /etc/fail2ban/filter.d)
logpath  = /var/log/auth.log # к какому лог-файлу применить фильтр
maxretry = 5 # разрешенное число неудачных попыток

#
# HTTP servers
#

[apache]

enabled = false
port    = http
filter  = apache-auth
logpath = /var/log/apache*/*access.log
maxretry = 6


[apache-noscript]

enabled = false
port    = http
filter  = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6

#
# FTP servers
#

[vsftpd]

enabled  = false
port     = ftp
filter   = vsftpd
logpath  = /var/log/auth.log
maxretry = 6


[proftpd]

enabled  = false
port     = ftp
filter   = proftpd
logpath  = /var/log/proftpd/proftpd.log
maxretry = 6


[wuftpd]

enabled  = false
port     = ftp
filter   = wuftpd
logpath  = /var/log/auth.log
maxretry = 6


#
# Mail servers
#

[postfix]

enabled  = false
port     = smtp
filter   = postfix
logpath  = /var/log/postfix.log


[couriersmtp]

enabled  = false
port     = smtp
filter   = couriersmtp
logpath  = /var/log/mail.log


[sasl]

enabled  = false
port     = smtp
filter   = sasl
logpath  = /var/log/mail.log

# Список сервисов можно расширить самому (изучайте регулярные выражения!)

С конфигурацией закончили, теперь запускаем сервис:

invoke-rc.d fail2ban start

Файрвол

Рассмотрим защиту SSH порта от брутфорса методами файрвола iptables. В этом нам поможет расширение recent. Для примера добавим три следующих правила:

# iptables -t filter -A INPUT -p tcp --destination-port 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT 

В этом правиле мы устанавливаем метку на SSH пакеты

# iptables -t filter -A INPUT -p tcp --destination-port 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_BRUTFORCE: "
# iptables -t filter -A INPUT -p tcp --destination-port 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

Этими двумя правилами устанавливаем запись в системный лог попыток брутфорса, а также блокируем брутфорсера. Параметр --seconds устанавливает время в секундах, в течении которых проводится наблюдение за доступом к порту, параметр --hitcount устанавливает число разрешенных попыток.

При применении этих правил будет следующий эффект: нельзя в течении одной минуты подключиться на порт SSH более 4х раз. Защита очень простая и эффективная, хотя и не такая гибкая, как fail2ban.

Выбор за Вами! Также Вы можете комбинировать эти два способа для большей эффективности.

16:26, 11 июля 2007 (MSD)