В базе приложений Splunk есть много решений, которые позволяют делать Enrichment и добавлять информацию о том, что тот или иной IP-адрес выглядит подозрительным и «засветился» в той или иной reputation-базе. Однако, эти приложения либо платные (например, Recorded Future App, Kaspersky Threat Feed App), либо очень медленные (IP Reputation App, на момент написания к тому же не до конца доступен из-за maintenance с февраля месяца), поэтому мы решили разработать свой opensource плагин RST Cloud Threat Database Add-on for Splunk, который позволит собирать в единую базу разрозненные сведения из открытых источников и выдавать ответы на потоках в десятки тысяч запросов в секунду.

Для создания плагина был разработан небольшой набор скриптов на Python, который обогащает данные при поиске в Splunk налету, запрашивая нужные сведения во внешней базе данных. В качестве БД мы использовали Key-Value хранилище Redis, которое держит в оперативной памяти все значения и практически не зависит от скорости чтения/записи с дисковой подсистемы. Плагин опубликован на github и открыт для предложений по улучшению.

Наши тесты производительности данного решения на виртуальной машине с 2 ядрами Intel® Xeon® E5-2630 и 4 ГБ RAM показали, что с учетом всех накладных расходов со стороны Python 2.7, виртуализации на обычном оборудовании и самого Splunk, пропускная способность при 300K записей в Redis составляет в среднем 25K RPS, что достаточно для многих задач. Стоит сразу обратить ваше внимание на то, что данные цифры получены при использовании Redis «из коробки» без дополнительной оптимизации и кластеризации. Также в скрипте поиска пока не используются механизмы pipeline при работе с базой.

Например, использование плагина позволяет определить web form spammer или подключения к сайту с зараженных IP-адресов.

image

Можно быстро вывести всех «опасных» клиентов из консоли:
sourcetype=Web:*:access_log host=www.demo.demo | fields clientip | dedup clientip | lookup local=true lookupthreat clientip OUTPUT threatscore threatsource threatcategory | where threatscore > 0

Отображая данные, мы показываем их источник, категории в которых засветился данный IP в разных базах и кумулятивную оценку Threat Score.

image

Можно воспользоваться макросом, с которым работать несколько удобнее:
| `threatDB(clientip)`

Для упрощения Redis может стоять непосредственно на Splunk Head, а может быть вынесен на другой сервер или кластер серверов. Кроме того, в состав RST Cloud Threat Database Add-on входит несколько скриптов, которые автоматически скачивают репутационные базы из различных источников и импортируют их в Redis.

Сегодня очень много надежных и открытых источников для сбора подозрительных и опасных IP-адресов. Например, плагин позволяет работать с более чем 15, включая:

  • Sblam! – база веб-спамеров в блогах, форумах и комментариях
  • StopForumSpam — база веб-спамеров в блогах, форумах, wiki
  • CINS Score – база Sentinel IPS, которой компания поделилась с community
  • Blocklist.de – база с адресами атакующих на Postfix, SSH, Apache, Spambots, irc-Bots, Reg-Bots, DDos и других
  • Ransomware Tracker – адреса серверов CnC для Ransomware (программы вымогатели)
  • AlienVault OTX – открытые фиды от популярного SIEM
  • Binary Defence – специализированный поставщик Theat Intelligence
  • EmergingThreats – мы интегрировали фиды от компании ProofPoint для блокирования на межсетевых экранах
  • Arbor ATLAS – адреса, от известнейшей компании, с которых идет DDoS-атаки
  • Botvrij – адреса скомпрометированные вредоносным ПО
  • Tor Project – адреса Tor-сетей.

База может включать как отдельные адреса, которые ищутся по ключу IP: red.smembers('ip:'+clientip), так и подсети, обрабатываемые скриптом в цикле for i in red.sscan_iter(name='net:index',match=str(ip.words[0])+'*',count=500).

Теперь перейдем к установке. Описание по шагам:

  1. Установка Redis
  2. Установка необходимых библиотек
  3. Корректировка строк для подключения в скриптах
  4. Настройка CRON-задачи для актуализации IP Reputation БД

Первый шаг мы опустим, во-первых, манулов много, а, во-вторых, на debian он ставится одной командой apt-get install -y redis-server с базовыми настройками.

Для решения проблем с зависимостями от Python библиотек достаточно выполнить:
$ wget bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ sudo pip install redis
$ sudo pip install netaddr

Стоит отметить, что Splunk использует внутри себя свой Python, который не стоит модифицировать, поэтому все дополнительное лучше устанавливать в тот Python, что живет в операционной системе.

В зависимости от того как вы установили Redis вам может потребоваться исправить адреса и порты подключения в скриптах в каталоге $SPLUNK_HOME/etc/apps/threatDB/bin.

Основной скрипт поиска из Splunk: redisworker.py
sys.path.append("/usr/local/lib/python2.7/dist-packages") # Path to redis-py module
redis_server = '127.0.0.1'
redis_port = 6379

Скрипт очистки БД: threat_flushdb.py
redis_server = '127.0.0.1'
redis_port = 6379

Скрипт загрузки обновленных IoC: threatuploader.py
redis_server = '127.0.0.1'
redis_port = 6379

Скрипт-загрузчик IoC из разных источников: start_threatupload.sh
base_dir=/opt/splunk/bin/scripts/threatDB
python_bindir=/usr/bin

Далее выбираем какой-нибудь временный каталог:
$ mkdir -p /tmp/threatsupload

И настраиваем CRON-планировщик, например, через файл /etc/crontab:
2 0 * * * root $SPLUNK_HOME/etc/apps/threatDB/bin/start_threatupload.sh /tmp/threatsupload

В продуктивной среде вместо root лучше использовать другую учетную запись. Так же стоит отметить, что установленного по умолчанию обновления раз в сутки достаточно, так как TTL для записей в БД составляет 48 часов.

Платные решения предоставляют целый набор индикаторов компрометации, включая IP-адреса, доменные адреса, хэши и пути файлов, имена мьютексов и т.п., что позволяет идентифицировать активность вредоносного ПО в организации, мы же в RST Cloud концентрируемся на вебе, поэтому пока наш плагин дает возможность работы только с IP-адресами. В дальнейшем мы планируем доработать плагин в части производительности и расширить его функционал, в том числе добавить фиды репутационных баз с DNS-именами, тем самым расширить область его применения.
Поделиться с друзьями
-->

Комментарии (0)