В данной статье будет коротко рассмотрен инструмент The Artillery Project компании Binary Defense Systems,
целью которого является защита операционной системы от сетевых атак.

Что может Artillery

Artillery — это IPS система, позволяющая проводить мониторинг файловой системы на предмет модификаций и журналов служб на предмет сообщений об ошибках,
проводить анализ конфигурации операционной системы и выявлять уязвимости, работать как honeypot и блокировать нарушителей по IP адресам, а так же уведомлять системного администратора об атаках по электронной почте.
Atillery написан на Python и поддерживается операционными системами Linux и Windows.

Установка

Установка производится очень просто

git clone https://github.com/BinaryDefense/artillery.git
cd artillery
python setup.py

Далее отвечаем на несколько вопросов об автоматическом запуске демона и тому подобное.
В результате получаем сообщение вроде этого

Installation complete. Edit /var/artillery/config in order to config artillery to your liking.

На официальной странице можно посмотреть видео, описывающее установку: https://n0where.net/artillery-project/

Конфигурация

Ссылка на официальную документацию на английском языке: https://www.binarydefense.com/files/Artillery_Installation_Manual.pdf

Настройка Artillery осуществляется путем редактирования файла config в директории /var/artillery/
Конфигурационный файл имеет простую структуру с пояснениями, за что отвечает каждый параметр.
Так же есть возможность отключить модули, которые вы не хотите использовать, например мониторинг файловой системы на предмет изменений.

Краткое описание параметров представлено ниже.

Какие директории мы хотим мониторить на предмет изменения можно настроить в этой секции

THESE ARE THE FOLDERS TO MONITOR, TO ADD MORE, JUST DO "/root","/var/", etc.
MONITOR_FOLDERS="/var/www","/etc/"

При изменении файлов в этих директориях мы получим сообщение в журнале приложения и сообщение по email, если это настроено.
По умолчанию файлы проверяются раз в минуту. Это значение можно изменять параметром MONITOR_FREQUENCY
Так же можно исключить определенные файлы из анализа.

Конфигурация Honeypot

PORTS TO SPAWN HONEYPOT FOR
PORTS="135,445,22,1433,3389,8080,21,5900,25,53,110,1723,1337,10000,5800,44443"

При запуске Artillery начинает прослушивать основные порты, которые обычно являются целью злоумышленников. Далее, в зависимости от настроек,
Artillery может навсегда блокировать всех, кто пытается подключиться к этим портам или просто вносить IP-адреса в бан-лист. После чего бан-лист может быть использован другими утилитами.
Список заблокированных IP-адресов можно найти здесь /var/artillery/banlist.txt>

Далее идет секция для настройки уведомлений по электронной почте

CURRENT SUPPORT IS FOR SMTP, ENTER YOUR USERNAME AND PASSWORD HERE. LEAVE BLANK FOR OPEN RELAY
SMTP_USERNAME=""
ENTER THE SMTP PASSWORD HERE. LEAVE BLANK FOR OPEN RELAY
SMTP_PASSWORD=""
...

Настройка блокировки при попытке брутфорса SSH

DO YOU WANT TO MONITOR SSH BRUTE FORCE ATTEMPTS
SSH_BRUTE_MONITOR="ON"
HOW MANY ATTEMPTS BEFORE YOU BAN
SSH_BRUTE_ATTEMPTS="4"

Важной концепцией проекта Artillery является автоматическое получение списка уже известных публичных IP-адресов, являющихся вредоносными и их блокирование.
Этот список называется ATIF, сокращенно от the Artillery Threat Intelligence Feed. Список находится в публичном доступе и может быть просмотрен по ссылке
https://www.binarydefense.com/banlist.txt
Отключить использование ATIF можно изменив параметр THREAT_INTELLIGENCE_FEED на OFF.
Вы можете, так же, запустить собственный ATIF сервер и предоставить список нежелательных IP-адресов клиентам.

Запуск

Для запуска можно воспользоваться либо скриптом из директории с установленным Artillery
python restat_server.py

Либо запустить Artillery как обычный демон.
service artillery start

Проверяем, прослушиваются ли Honeypot порты:
netstat –antp | grep LISTEN


tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 8536/python
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 8536/python
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 8536/python
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN 8536/python
tcp 0 0 0.0.0.0:135 0.0.0.0:* LISTEN 8536/python
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 8536/python
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 8536/python

Анализ журналов

По умолчанию Artillery использует системный журнал для уведомления, но это может быть изменено при помощи параметра SYSLOG_TYPE

LOCAL — Значение по умолчанию, использовать SYSLOG
REMOTE — Использование удаленного SYSLOG
FILE — Использование файла alerts.log в каталоге с установленным Artillery

Я указал FILE и Artillery записывает сообщения в файл /var/artillery/logs/alerts.log

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

Insecure configuration detected on filesystem: Issue identified: Password authentication enabled. An attacker may be able to brute force weak passwords.

Insecure configuration detected on filesystem: Issue identified: /etc/ssh/sshd_config. SSH is running on the default port 22.
An attacker commonly scans for these type of ports. Recommendation: Change the port to something high that doesn’t get picked up by typical port scanners.

Чтобы проверить защиту от брутфорса SSH, я попробовал несколько раз залогиниться с некорректными данными.
Мой IP-адрес появился в файле banlist.txt, в цепочке iptables, а также в журнале:

Artillery has blocked (blacklisted) the following IP for SSH brute forcing violations: 192.168.1.3

Для удаления IP-адреса из бан-листа нужно воспользоваться скриптом из каталога Artillery.

python remove_ban.py 192.168.1.3

Обратите внимание, что IP-адреса снова попадут в бан-лист, если записи о некорректном входе остались в журнале SSHD.
Вы можете добавить IP-адрес в белый список, используя параметр WHITELIST_IP.

При попытке подключения к порту 3389, являющемуся Honeypot получаем в журнале сообщение

Artillery has blocked (and blacklisted) the IP Address: 192.168.1.3 for connecting to a honeypot restricted port: 3389

И бан IP-адреса.

Заключение

Таким образом утилита Artillery может являться как самостоятельной IPS системой так и хорошим дополнением к уже имеющимся средствам защиты информации. Весь код находится в открытом доступе и написан на Python, так что, при необходимости может быть дополнен недостающей функциональностью самостоятельно.