вторник, 4 октября 2016 г.

Splunk. Немного о безопасности

Приветствую, уважаемый читатель!

Хотел бы поделиться несколькими известными мне механизмами обеспечения безопасности Splunk-сервера от несанкционированных подключений. Проблема особенно остро встает, если вы используете лицензию отличную от Enterprise.






Итак, в чем собственно проблема? При использовании триальной лицензии функциональные возможности Splunk почти аналогичны Enterprise, а вот в части прохождения процедур идентификации, аутентификации и авторизации в самой системе возникают вопросы. А простыми словами – у триальной лицензии админка Splunk сервера торчит в Интернет на 8000/tcp и любой желающий может её посмотреть и поадминить :)

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

Обезопасить Splunk-сервер можно следующим образом:
  • Запретить подключения с левых ip-адресов.
  • Разрешить индексацию событий в Data Input с определенных IP.      


Запретить подключения с левых ip-адресов

В моём случае Splunk установлен на Linux-сервере и для исключения подключений с левых ip можно воспользоваться iptables. Причем, как и любая сложная система Splunk открывает и использует для своих целей немало портов.

Узнать список портов, которые слушает Splunk:

netstat -naptu | grep splunkd | grep LISTEN | awk ' { print $4 } '



Для управления сервером используется порт 8000/tcp, все остальные связаны или с получением данных (3030/tcp, 3333/tcp, 8088/tcp) или управлением компонентами системы (9997/tcp, 8089/tcp). На ваших серверах данные могут быть отличны.

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

Сделать это можно так:

iptables -A INPUT -p tcp -m multiport --dport 3333,9997,3030,8088,8089,8000 -j DROP

Но предположим, что для 8000/tcp заранее предусмотреть все разрешенные IP-адреса нельзя и управление системой может осуществляться с различных адресов.  Мне стало интересно, что умеет iptables и можно ли отбрасывать подключения на основании содержимого пакетов. 

Например, подключения к Splunk-серверу помимо перечня белых IP-адресов разрешить только по ссылке:


/en-GB/ в url позволяет явно указать Splunk под какой языковой локализацией хочется поработать. Языковых локализаций у Splunk немало:  

/de_DE/
/en_GB/
/en_US/
/fr_FR/
/it_IT/
/ja_JP/
/ko_KR/
/zh_CN/
/zh_TW/

Достаточно быстро наткнулся на описание модуля iptables string, который позволяет посмотреть в содержимое пакета. Естественно, ни о каком DPI речь не идет, но условный regexp байт провести можно.

Обновленное разрешающее правило для 8000/tcp будет выглядеть следующим образом:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 8000 -m string --hex-string "|2f 65 6e 2d 55 53 2f|" --algo bm --from 44 --to 50 -j ACCEPT

iptables -A INPUT -p tcp --dport 8000 -j DROP

Немного поясню,
ключ –hex-string  -  позволяет указать последовательность искомых байт в шестнадцатеричном виде;
ключ –from  -  позволяет указать с какого байта в пакете начинать поиск;

Таким образом, мы разрешим подключаться к Splunk только по ссылке с «/en-GB. Не панацея, но всё же.

Разрешить индексацию событий в Data Input с определённых IP

За получение событий от источников отвечают «Data Inputs», и соответственно Inputs.conf (по умолчанию лежит тут - /opt/splunk/etc/apps/search/local/inputs.conf). С помощью него мы настраиваем базовые параметры источников событий.   

Разработчики предусмотрели у каждого «Data Input’s» возможность явно указать список IP-адресов, с которых Splunk будет принимать события. Для этого в описании каждого источника необходимо добавить параметр acceptFrom:

acceptFrom = 10.1.3.40,10.1.3.50
или
acceptFrom = 10.1/16
или
acceptFrom = 10.1/16,server1.domain.com


На этом пока всё :)




Комментариев нет:

Отправить комментарий