Использование psad для определения попыток взлома сети на Ubuntu VPS

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

Система обнаружения вторжений (или IDS) мониторит и записывает подозрительные соединения и сообщает администратору о необычной активности на сервере. Некоторые IDS работают исключительно как системы оповещения, другие же могут блокировать потенциально вредоносный трафик.

Инструмент psad (port scan attack detection) – это программное обеспечение, которое мониторит журналы фаервола с целью обнаружить сканирование или атаку на сервер, после чего может предупредить администраторов или предпринять активные шаги по сдерживанию угрозы.

Данное руководство охватывает установку и настройку psad на сервере Ubuntu 12.04 (в целом, данные процедуры подходят и для других дистрибутивов).

Установка psad

Система обнаружения вторжений psad доступна в репозиториях Ubuntu, следовательно, ее очень легко получить при помощи команды apt:

sudo apt-get update
sudo apt-get install psad

Для доставки почты будет предложено настроить почтовый сервер Postfix. Чтобы получить инструкции по настройке Postfix в Ubuntu, читайте:

В большинстве случаев можно просто выбрать «Internet Site», а затем ввести доменное имя сервера, что будет использовано в качестве части имени отправителя (в поле “From”) сообщений, генерируемых psad.

Настройка правил IPTables

Система psad обнаруживает активность на сервере путем мониторинга журналов фаервола. По умолчанию Ubuntu поставляется с фаерволом iptables, который при этом совершенно не настроен и, следовательно, ничего не блокирует и не мониторит.

Конечно, можно обойтись следующими командами, которые активируют ведение журналов; однако лучше поработать над более надежными конфигурациями фаервола.

sudo iptables -A INPUT -j LOG
sudo iptables -A FORWARD -j LOG

Примечание: если вы уже ввели данные правила, сбросьте их при помощи следующей команды, так как начать настройку iptables нужно с другого:

sudo iptables -F

Просмотреть текущие правила (которые на данный момент должны содержать только политику по умолчанию) можно с помощью команды:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Теперь можно приступить к созданию правил (главным образом для цепочки INPUT). iptables нужно настроить таким образом, чтобы он сбрасывал все ненужные и нежелательные соединения. Для начала нужно добавить правила, разрешающие необходимые подключения, а затем внести ограничения.

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

sudo iptables -A INPUT -i lo -j ACCEPT

Теперь нужно внести правило, разрешающее весь трафик, связанный с уже существующими подключениями (это нужно, чтоюы текущие сессии не прервались):

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Затем нужно добавить сервисы, которые должны остаться открытыми. Чтобы добавить SSH, используйте:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Если веб-сервер запущен на порту по умолчанию (80), внесите правило:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Используя такой же синтаксис, добавьте любые другие порты сервисов, которые нужно оставить общедоступными:

sudo iptables -A INPUT -p протокол --dport номер_порта -j ACCEPT

Внеся все необходимые сервисы, установите правила, сбрасывающие все остальные соединения.

Но прежде чем сделать это, внесите правила, которые активируют ведение журнала (iptables будет записывать необработанный трафик).

sudo iptables -A INPUT -j LOG

Также нужно внести подобное правило для цепочки FORWARD:

sudo iptables -A FORWARD -j LOG

Наконец, нужно сбросить весь посторонний трафик, который не отвечает правилам. Для этого либо добавьте правило сброса, которому отвечают все пакеты, в конец цепочки:

sudo iptables -A INPUT -j DROP

либо установите политику DROP, чтобы сбрасывать все пакеты, не отвечающие ни одному правилу цепочки:

sudo iptables -P INPUT DROP

Результаты этих правил одинаковы.

Примечание: если вместо внесения правила сброса в конец цепочки была установлена политика DROP, не забудьте сменить ее на ACCEPT, прежде чем сбросить все правила:

sudo iptables -P INPUT ACCEPT
sudo iptables -F

Если этого не сделать, то после сброса правил iptables останется политика DROP, сбрасывающая все входящие соединения; весь входящий трафик и SSH-подключение будут сброшены.

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

sudo apt-get install iptables-persistent
sudo service iptables-persistent start

Настройка psad для определения сканирования

Установив правила iptables, настройте проверку журналов psad.

Откройте главный конфигурационный файл psad с привилегиями root:

sudo nano /etc/psad/psad.conf

Первый блок кода, который нужно отредактировать, находится в начале файла; в EMAIL_ADDRESSES нужно внести электронные адреса, на которые система psad должна отправлять отчеты о проверке. Кроме того, в HOSTNAME нужно внести доменное имя, чтобы psad мог ссылаться на машину:

EMAIL_ADDRESSES     address1@domain.com, address2@other.com;
HOSTNAME            доменное_имя.com;

Обратите внимание: каждая строка должна оканчиваться символом точки с запятой (;), иначе psad не сможет читать файл.

Также нужно обратить внимание на объявление уровней опасности (danger level), которые необходимы psad, чтобы определить, представляет ли та или иная активность угрозу для сервера.

Данные уровни автоматически определяются по количеству пакетов, вовлеченных в событие, но их можно определить и самостоятельно. По умолчанию установлены следующие значения:

DANGER_LEVEL1           5;
DANGER_LEVEL2           15;
DANGER_LEVEL3           150;
DANGER_LEVEL4           1500;
DANGER_LEVEL5           10000;

Данные значения можно изменить согласно требованиям сервера.

Параметр PORT_RANGE_SCAN_THRESHOLD задает уровень чувствительности psad; этот уровень определяется количеством просканированных портов в диапазоне. По умолчанию psad отправляет предупреждение после того, как два портабыли просканированы.

PORT_RANGE_SCAN_THRESHOLD       1;

IPT_SYSLOG_FILE – один из самых важных параметров, которые нужно отредактировать, потому что в настоящее время он не направлен на файл, который syslog использует по умолчанию.

Укажите путь к файлу syslog, чтобы открыть psad доступ к активным журналам.

IPT_SYSLOG_FILE         /var/log/syslog;

При использовании определенных портов для таких вещей, как «port knocking», необходимо сказать psad игнорировать попытки подключения на этих портах, в противном случае он будет отправлять оповещения в ходе обычной деятельности сервера:

IGNORE_PORTS            ports_or_range_to_ignore;

Также psad может игнорировать активность на сервере, основываясь на другие параметры: IGNORE_PROTOCOLS, IGNORE_INTERFACES и IGNORE_LOG_PREFIXES.

Если оповещения приходят слишком часто, можно установить уровень опасности, по достижении которого извещение будет отправлено:

MIN_DANGER_LEVEL           1;  # Controls psad logging and email alerts
EMAIL_ALERT_DANGER_LEVEL   1;  # Applies only for email alerts

Можно также ограничить количество извещений:

EMAIL_LIMIT                0;

Значение 0 значит, что ограничений нет. Данный параметр определяет количество извещений, которые могут быть отправлены от одного IP.

На данный момент файл можно сохранить и закрыть.

Обнаружение вторжений с помощью psad

Завершив настройку psad, приступите к установке политик и активации системы.

Прежде чем начать, обновите определения сигнатур psad, чтобы система могла правильно распознать известные типы атак. Для этого вызовите:

sudo psad --sig-update

Это извлечет последние файлы и обновит базу данных.

Теперь нужно перезапустить psad, чтобы эти обновления и изменения настроек вступили в силу. Наберите:

sudo service psad restart

Это выполнит мониторинг журналов. Чтобы увидеть текущее состояние обнаруженных psad событий, наберите:

sudo service psad status
[+] psadwatchd (pid: 3737)  %CPU: 0.0  %MEM: 0.0
Running since: Fri Jan 10 15:36:04 2014
[+] psad (pid: 3735)  %CPU: 0.0  %MEM: 0.3
Running since: Fri Jan 10 15:36:04 2014
Command line arguments: [none specified] Alert email address(es): example@domain.com
[+] Version: psad v2.1.7
[+] Top 50 signature matches:
[NONE] [+] Top 25 attackers:
[NONE] [+] Top 20 scanned ports:
[NONE] [+] iptables log prefix counters:
[NONE] Total packet counters: tcp: 0, udp: 0, icmp: 0
[+] IP Status Detail:
[NONE] Total scan sources: 0
Total scan destinations: 0
[+] These results are available in: /var/log/psad/status.out

Как видите, пока что ничего не обнаружено. Также можно видеть, что события записываются в файлы, расположенные в /var/log/psad/.

Тестовое сканирование портов

Чтобы фаервол сделал некоторые записи в журналах, попытайтесь просканировать порты сервера с другого компьютера. Для этого используйте утилиту nmap.

Выполните SYN-сканирование портов TCP с другой машины. С помощью опции –PN скажите nmap, что нужный хост включен:

sudo nmap -PN -sS домен_или_ip_сервера
Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-10 15:54 EST
Nmap scan report for server_domain_or_ip
Host is up (0.013s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh
Nmap done: 1 IP address (1 host up) scanned in 6.84 seconds

Как видите, такое сканирование определяет настройки фаервола. Каждый порт, кроме SSH-порта, помечен как «filtered» (отфильтрованный), что говорит о том, что он защищен фаерволом.

Повторно запустите на сервере команду status:

sudo service psad status

Будет выведен гораздо более объемный список предупреждений.

Поскольку была просканирована 1000 портов, событие вызвало совпадение сигнатур большого количества различных угроз. Для более точных атак, ориентированных на определенный порт или точку входа, сигнатуры будут гораздо более полезными.

Если элекронные извещения настроены, на данный момент на почте должно быть одно или несколько писем. Если у компьютера, с которого велось сканирование, есть домен, то в отчете будет раздел «who is», сообщающий об источнике сканированиея.

Это можно использовать, чтобы попытаться связаться с владельцем IP или, возможно, интернет- или хостинг-провайдером.

Предотвращение вторжений

Убедившись в том, что psad обнаруживает подозрительную активность и попытки получить доступ к серверу, внедрите механизм профилактики, с помощью которого psad может автоматически изменять правила iptables, чтобы заблокировать сканеры.

Для начала просмотрите файл auto_dl:

sudo nano /etc/psad/auto_dl

Этот файл сообщает, какой уровень опасности мы должны автоматически установить для определенных IP-адресов. Например, для злоумышленника, который постоянно пытается сканировать систему, можно автоматически установить уровень опасности 5:

ip_злоумышленника          5;

И наоборот, psad может не реагировать на  некоторые IP-адреса. Можно было бы, к примеру, добавить локальный хост и установить уровень опасности 0, если бы в iptables не было соответствующего правила. Поскольку psad уже автоматически блокирует трафик с опасного IP, в этот список можно добавить домашний компьютер (чтобы случайно не заблокировать себя):

ip_локального_компьютера        0;

Завершив, сохраните изменения и закройте файл.

Откройте конфигурационный файл psad:

sudo nano /etc/psad/psad.conf

Найдите параметр ENABLE_AUTO_IDS; он позволяет psad изменить правила фаервола и блокировать определенные адреса. Для активации данного параметра используйте:

ENABLE_AUTO_IDS         Y;

Затем нужно определить уровень угрозы, при котором опасный IP будет заблокирован. Для этого отрегулируйте параметр:

AUTO_IDS_DANGER_LEVEL       5;

Еще один важный параметр указывает общее время блокировки в секундах:

AUTO_BLOCK_TIMEOUT          3600;

Данное значение заблокирует адрес на час.

Тестирование предотвращения вторжений

Теперь нужно протестировать работу psad, временно заблокировав себя. В том же конфигурационном файле установите эти параметры:

ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       4;
AUTO_BLOCK_TIMEOUT          60;

Это включит автоматические конфигурации фаервола, установит уровень опасности 4 (которому отвечает обычное SYN-сканирование) и период блокировки в 60 секунд.

Сохраните и закройте файл.

Откройте файл auto_dl, если домашний IP внесен, и временно закомментируйте данный параметр:

# local_computer_ip      0;

Перезапустите psad, чтобы файлы были считаны заново:

sudo service psad restart

С домашнего компьютера перезапустите сканирование (как в предыдущий раз):

sudo nmap -PN -sS домен_или_ip_сервера

При подключении к машине psad по SSH на данном этапе в течение нескольких секунд это подключение должно быть сброшено и заблокировано на 60 секунд.

Это происходит потому, что psad вступает в действие, когда достаточное количество просканированных портов достигло уровня опасности 4. psad изменяет правила iptables и переводит трафик на другие цепочки правил, которые временно блокируют данный ​​IP.

Снова получив возможность войти в сеть и проверив правила iptable, можно увидеть следы этого тестового взлома:

sudo iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N PSAD_BLOCK_FORWARD
-N PSAD_BLOCK_INPUT
-N PSAD_BLOCK_OUTPUT
-A INPUT -j PSAD_BLOCK_INPUT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j LOG
-A FORWARD -j PSAD_BLOCK_FORWARD
-A FORWARD -j LOG
-A OUTPUT -j PSAD_BLOCK_OUTPUT

Как видите, появились новые цепочки правил и весь входящий трафик был направлен на одну из них. Во время блокировки эта цепочка сбрасывала попытки подключения данного IP.

Протестировав работу системы psad, верните прежние настройки. Вероятно, следует увеличить продолжительность блокировки. Кроме того, нужно повторно добавить безопасные IP-адреса:

local_computer_ip           0;
ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       5;
AUTO_BLOCK_TIMEOUT          3600;

Не забудьте перезапустить psad после внесения необходимых настроек:

sudo service psad restart

Запомните: есть определенные типы атак, которые могут подменить IP-адрес источника. То есть, злоумышленник, который подозревает, что на сервере активирована функция автоблокировки адресов, может запретить безопасные сайты или сервисы. Будьте очень осторожны, тщательно взвесьте все плюсы и минусы этого типа настроек.

Итоги

Правильная настройка инструмента обнаружения вторжения psad позволяет получать необходимые предупреждения об угрозах прежде, чем проблема перерастет в серьезную опасность. Такие инструменты, как psad, могут заранее предупреждать об атаках и справляться с некоторыми из них самостоятельно.

Продуктивное использование psad основывается на настройке уровней опасности и электронных оповещений, а также на постоянном отслеживании отчетов. В сочетании с другими ресурсами обнаружения вторжений (как Tripwire) этот инструмент может обеспечить довольно хорошую защиту.

Tags: , , , , ,

Добавить комментарий