FastNetMon

Showing posts with label Безопасность. Show all posts
Showing posts with label Безопасность. Show all posts

Sunday, 7 March 2010

Занимательные задачки, задача 1: "Найди руткит"

ls -la /tmp
total 24
drwxrwxrwt 6 root root 4096 2010-03-07 15:09 .
drwxr-xr-x 20 root root 4096 2009-11-26 22:45 ..
drwxr-xr-x 3 igor igor 4096 2010-03-06 19:25 ...
drwxrwxrwt 2 root root 4096 2009-11-26 22:45 .ICE-unix
drwx------ 2 root root 4096 2010-03-07 15:17 mc-root
drwxrwxrwt 2 root root 4096 2009-11-26 22:45 .X11-unix


Скрина комментов нету, так что просто не смотрим в них :)

Thursday, 25 February 2010

Исправленное правило для fail2ban для защиты Postfix / Debian

Необходимо заменить содержимое файла /etc/fail2ban/filter.d/sasl.conf на следующее (в стандартной версии баг в регулярном выражении):


# Fail2Ban configuration file
#
# Author: Yaroslav Halchenko
#
# $Revision: 510 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#

# Example:
# Feb 25 00:38:07 v1 postfix/smtpd[11100]: warning: unknown[95.79.205.2]: SASL PLAIN authentication failed: authentication failure

# fixed by FastVPS version:
failregex = : warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: authentication failure$

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Tuesday, 12 January 2010

Использование geoip для защиты от атак

Ставим:
apt-get install -y geoip-bin


Переносим тестовый конфиг в рабочий:
mv /etc/GeoIP.conf.default /etc/GeoIP.conf


Теперь пробуем для любого (я делал для своего) определить принадлежность IP адреса стране:

geoiplookup 95.79.205.111
GeoIP Country Edition: RU, Russian Federation


Теперь получим список всех клиентов, подключенных к нашему серверу:

netstat -apnt | awk '{print $5}' | tr ':' ' ' | awk '{print $1}' | sort | uniq > /tmp/ips


А теперь получаем список стран, соответствующих IP адресам наших клиентов:

for ip in `cat /tmp/ips`; do geoiplookup $ip; done | tr ',' ' ' | awk '{print $4}' | sort | uniq -c


Теперь, если вы точно уверены, что, например, посетителей с Зимбабве в числе 1500 человек у Вас ну точно нету, то можете написать скрипт, который забанит неугодных ботов :) Кроме этого, есть модуль для iptables, который позволяет отсекать посетителей в зависимости от страны.

Полезная опция rpm для борьбы с руткитами


rpm {-V|--verify} [select-options] [verify-options]

Verifying a package compares information about the installed files in the package with information about the files taken from the package metadata stored in the rpm database. Among other things, verifying compares the size, MD5 sum, permissions, type, owner and group of each file. Any discrepancies are displayed. Files that were not installed from the package, for example, documentation files excluded on installation using the "--excludedocs" option, will be silently ignored.


Для Debian есть команда:
apt-get install -y dpkg-sig

Thursday, 7 January 2010

Защита от распределенной HTTP GET DoS атаки

Кроме разновидности DDoS атак, когда каждый бот открывает большое число потоков до жертвы, есть разновидность, когда каждый бот открывает не боле одного потока, но долбит большим числом соединений с небольшой задержкой между ними.


iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name http --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name http --update --seconds 60 --hitcount 20 -j DROP


Кстати, странно то, что некоторые большие значения hitcount / seconds модуль отвергает ошибкой "iptables: Invalid argument".

То есть, каждый клиент может сделать максимум 100 соединений за 10 минут, а все остальные будут отброшены. Как понимаете, нормальный человек такой сделать не в силах, а вот бот как раз :)

Защита Nginx от DoS ботов, не передающих хидер host

За свою практику очень часто сталкивался с ботами, которые долбят сервер по IP не передавая какой-либо конкретный виртуальный хост (host заголовок http запроса).

Nginx разумеется, их обслуживает как честных клиентов, посылая в ответ им 400й код, тратя на это ресурсы. Для того, чтобы сэкономить и эти ресурсы, у Nginx есть специальный код ответа - 444, который делает следующее:


Nginx understands that if you want to send the client the 444 error code (only 400-417 and 500-505 are allowed by RFC) then Nginx should just close the connection to the client. Just dropping the connection and sending an empty TCP reset packet to the client will deny scanner information about the server and _may_ confuse them.


Иными словами, он просто закрывает сокет, никаким образом не затрудняясь на корректный ответ клиенту.

Вот этот сервер необходимо добавить в конфиг файл nginx.conf самым первым.
server {
listen 80;
server_name _; #default
# access_log /var/log/nginx/localhost.access.log;
return 444;
}


И после этого сделать reload Nginx у:

/etc/init.d/nginx reload


источник: https://calomel.org/nginx.html

Защита от перебора паролей SSH посредством iptables

Модуль recent дает очень удобный способ защитить sshd от перебора ботами, вот отличная статья по его настройке: http://www.debian-administration.org/articles/187

Для тех, кто не ходит по ссылкам вот пример:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ssh_secure --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ssh_secure --update --seconds 60 --hitcount 4 -j DROP


Первое правило добавляет IP нового клиента в таблицу recent. Второе правило проверяет наличие IP в таблице recent, и в случае, если от указанного клиента было более 3 попыток соединения за последние 60 секунд отклонит его последующие попытки.

Monday, 4 January 2010

Удаление неудаляемых файлов

Тела руткитов нередко защищены от удаления и при вызове даже от рута команды rm выдают следующее:
rm /sbin/ttyload
rm: remove write-protected regular file `/sbin/ttyload'? y
rm: cannot remove `/sbin/ttyload': Operation not permitted


Фиксится так:
chattr -ia /sbin/ttyload

Поиск всех файлов в Linux, где не пустой lsattr

for f in `find / | grep -v '/proc' | grep -v '/dev' | grep -v '/sys'`; do lsattr $f | grep -v '^-------------' ; done


Очень помогает для борьбы с некоторыми видами руткитов, которые делают свои исполняемые / инфицированные ими файлы не удаляемыми и не изменяемыми.

Вот примеры зловредного ПО и инфицированных файлов:

s---ia------- /sbin/ttyload
s---ia------- /sbin/ttyload
s---ia------- /etc/sh.conf
s---ia------- /etc/sh.conf
s----a------- /usr/sbin/lsof
s----a------- /usr/sbin/lsof

Thursday, 31 December 2009

Защищаемся от руткитов/спам скриптов и сканеров

Подавляющее большинство серверов взламываются через уязвимости в скриптах, позволяющие что-либо загрузить (обычно это perl скрипт) в /var/tmp либо /tmp и оттуда запустить (обычно PHP функцией exec).

Есть очень интересный вариант защиты - снятие exec флага с файловых систем /tmp и /var/tmp, это можно сделать следующим образом: http://www.debian-administration.org/articles/57

От второго можно защититься следующим образом, указав в /etc/php.ini либо /etc/php5/apache2/php.ini следующее (после внесения изменений необходимо перезапустить апача - /etc/init.d/httpd restart либо для Дебияна: /etc/init.d/apache2 restart):
disable_functions = dl, shell_exec, posix_mkfifo, exec, system,passthru, symlink, link, set_time_limit, max_execution_time


Это запретит ряд не безопасных функций предотвратит запуск бОльшей части вредоносных скриптов.

Friday, 18 December 2009

Повышаем безопасность сервера - посылаем письмо при логине рутом

Подсмотрел у одного клиента очень крутую фишку по повышению безопасности серверов:

В файл:
vi /root/.bashrc


Добавляем строки:


echo 'ALERT - Root Shell Access (hzgde.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d"(" -f2 | cut -d")" -f1`" user@domain.ru


И получаем письма при каждом логине по ssh :)