Pull to refresh

Опять про IDS или ELK для suricata

Reading time 4 min
Views 29K
Привет, привет!
Сегодня хочу поделиться с вами опытом по настройке ELK и IDS Suricata. В инете много мануалов, но ни один из них не позволит «завезти» связку этих продуктов в текущих версиях.
Также есть готовый дистрибутив SELKS — www.stamus-networks.com/open-source/#selks или же, в качестве альтернативы, связка snort, snorby и barnyard2 в SecOnion — blog.securityonion.net.
Для остальных прошу под кат.

Итак, что нам надо:
Систему, которая будет наглядно отображать события с IDS, и чтобы это не был ArcSight, OSSIM, QRadar и т.п.
Для начала найдем что-нибудь из RHEL7 или CentOS7. Можно и Ubuntu LTS, что вам больше нравится для продакшена.
А также сами компоненты ELK и IDS.
Suricata — suricata-ids.org
ElasticSearch — www.elastic.co/products/elasticsearch
Logstash — www.elastic.co/products/logstash
Kibana — www.elastic.co/products/kibana
Ну и дунуть, чтобы получилось чудо… В смысле, думать!

IDS


Для начала доустановим необходимые компоненты (java, json):
yum -y install java-1.8.0-openjdk-devel.x86_64
yum -y install gcc libpcap-devel pcre-devel libyaml-devel file-devel   zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make   libnetfilter_queue-devel lua-devel

Скачиваем и устанавливаем ids suricata:
wget http://www.openinfosecfoundation.org/download/suricata-3.0.tar.gz
tar -xvzf suricata-3.0.tar.gz
cd suricata-3.0
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua

Далее
make; sudo make install; sudo ldconfig

Или следующие команды для автоматического конфигурирования: make install-conf; make install-rules
make install-full –если вам не нужно что-то тонко настраивать, рекомендую использовать данную команду. Автоматически будут созданы переменные, папки и правила докачаются соостветсвенно в директорию /rules
При автоматической установке нужная нам директория с логами будет располагаться в:
@srv-ids ~]# cd /var/log/suricata/

Здесь будут файлы: eve.json fast.log http.log stats.log. Но не все файлы одинаково полезны. Нам нужен тот у которого хвост json
Теперь необходимо настроить IDS. Мы остановимся только на том, чтобы alerts попадали в json файл. Идем в /etc/suricata/suricata.yaml и находим там блок вывода логов или alerts. Для вывода в json нужен такой конфиг:
- eve-log:
      enabled: yes
      filetype: regular #regular|syslog|unix_dgram|unix_stream|redis
      filename: eve.json

Остальной конфиг на ваше усмотрение. Благо там есть над чем задуматься.

ELK


Далее elsasticsearch:
Проверяем что там с java:
java –version
echo $JAVA_HOME

Если все ок, продолжаем (иначе, в начало заметки).
Скачиваем и устанавливаем elasticsearch:
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.2.1/elasticsearch-2.2.1.rpm
sudo rpm -Uvh ./elasticsearch-2.2.1.rpm 
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
sudo systemctl status elasticsearch.service

Status –OK? Поехали за Logstash
wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-2.2.2-1.noarch.rpm
sudo rpm -Uvh ./logstash-2.2.2-1.noarch.rpm

Тверь нужно его настроить, идем в /etc/logstash/conf.d/
Вот так выглядит рабочий конфиг logstash для текущих версий компонентов ПО:
input {
  file {
    path => ["/var/log/suricata/eve.json"]
    #sincedb_path => ["/var/lib/logstash/"]   
    codec =>   json
    type => "SuricataIDPS-logs"
    start_position => "beginning"  
}
}
filter {
  if [type] == "SuricataIDPS-logs" {
    date {
      match => [ "timestamp", "ISO8601" ]
    }
ruby {
      code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;" 
    }
  }
  if [src_ip]  {
    geoip {
      source => "src_ip"
      target => "geoip"
      #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
     convert => [ "[geoip][coordinates]", "float" ]
    }
  }
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
  #stdout { codec => rubydebug }	
}

Сохраняем, проверяем конфигурацию:
@srv-ids ~]# service logstash configtest
Configuration OK

Напоследок устанавливаем web лицо нашей системы IDS — Kibana4.
wget https://download.elastic.co/kibana/kibana/kibana-4.4.2-linux-x64.tar.gz

Распаковываем в папку, например так: /opt/kibana4/ или /var/www/html/. В директории /opt/kibana4/bin/ стартуем веб-интерфейс. Можно сделать службу, как — описано здесь discuss.elastic.co/t/run-kibana-as-service-on-centos/23971/2. Я не делал.
Бывает, что при запуске kibana появляется ошибка «kibana is still indexing», это можно увидеть в консоли или на вэбке в дашборде «Status». Для устранения ошибки делаем следующие команды с проверкой успешности:
curl -XDELETE http://localhost:9200/.kibana
curl -XDELETE http://localhost:9200/*

Теперь нам нужны индексы. Идем сюда github.com/StamusNetworks/KTS. Здесь мы найдем уже подготовленные индексы и дашборды.
git clone https://github.com/StamusNetworks/KTS.git
patch -p1 -d /opt/kibana4/ < /opt/kibana4/KTS/patches/kibana-integer.patch
patch -p1 -d /opt/kibana4/ < /opt/kibana4/KTS/patches/timelion-integer.patch
./load.sh

Go, go, go!

Для запуска движка IDS вводим:
@srv-ids ~]# /usr/bin/suricata -c /etc/suricata//suricata.yaml -i eth0

Обратите внимание на название интерфейса и режим его работы. Для пассивного анализа, необходимо перевезти интерфейс в режим promisc ну и SPAN сессией тоже лучше обзавестись:
@srv-ids ~]# ifconfig eth0 promisc 

После запуска IDS, размер лог файлов должен существенно увеличиваться.
Если критичных ошибок при старте не было, заходим на 5601 порт. Выбираем индексы logstash-*, идем в Dashboards и создаем интерфейс отображения под себя. Может получиться что-нибудь похожее на это:

Или на это (скрин не мой):

Для того чтобы смотреть на карту, нужно раскоментировать в конфиге logstash эту строку: #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" и скачать собственно указанный или аналогичный файл с геолокацией по IP.
Да еще не забудьте про Log rotation.
В /etc/logrotate.d/ создаем файл suricata cо следующим содержанием:
/var/log/suricata/*.log /var/log/suricata/*.json
{
    rotate 3
    missingok
    nocompress
    create
    sharedscripts
    postrotate
            /bin/kill -HUP $(cat /var/run/suricata.pid)
    endscript
}

Буду рад вашим комментариям.
Если будете пробовать и не заведтся ELK или suricata, пишите, может что и выйдет=)
Tags:
Hubs:
+7
Comments 4
Comments Comments 4

Articles