Threat Hunting: установка лаборатории мониторинга журналов с ELK

Дата: 21.08.2020. Автор: Игорь Б. Категории: Статьи по информационной безопасности

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

Elastic Stack (еще известный как ELK Stack) – это сборник бесплатного программного обеспечения с открытым исходным кодом от компании Elastic. Оно было специально разработано для централизованного ведения журналов. ПО позволяет осуществлять поиск, анализ и визуализацию журналов из различных источников. В этой статье будет уделено особое внимание установке Elastic Stack на Ubuntu.

Для настройки Elk Stack на своей платформе Ubuntu, необходимо выполнить некоторые предварительные подготовления:

  • Ubuntu 20.04;
  • Привилегии root.

Компоненты ELK Stack

  • Elasticsearch: поисковая система, которая хранит в безопасности все собранные данные.
  • Logstash: компонент обработки данных, который отправляет входящие данные в Elasticsearch.
  • Kibana: веб-интерфейс для поиска и визуализации журналов.
  • Filebeat: легкий одноцелевой переадресатор данных, который может отправлять данные с тысяч машин либо в Logstash, либо в Elasticsearch.

Установка Java и всех необходимых элементов

Elasticsearch требует наличия OpenJDK на машине пользователя. Нужно установить Java с помощью приведенной ниже команды вместе с поддержкой HTTPS и пакетами wget для APT.

apt install -y openjdk-11-jdk wget apt-transport-https curl

Теперь пользователь собирается импортировать открытый ключ Elasticsearch в APT. Для импорта ключа GPG ему следует ввести следующую команду:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –

После он добавит репозиторий Elastic к sources.list.d с помощью следующей команды:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

Установка и настройка Elasticsearch

Обновление системного репозитория

apt update

Пользователю нужно установить Elasticsearch с помощью следующей команды:

apt install elasticsearch

Далее пользователь настраивает Elasticsearch.

Elasticsearch способен просматривать трафик на порту 9200. Пользователь собирается ограничить внешний доступ к этому экземпляру Elasticsearch, чтобы посторонние не смогли раскрыть секретные данные или остановить кластер Elastic через REST API. Теперь человеку необходимо внести некоторые изменения в конфигурационный файл Elasticsearch – elasticsearch.yml.

Он введет следующую команду:

nano /etc/elasticsearch/elasticsearch.yml

Следует найти строку, которая указывает на атрибут network.host и раскомментировать ее, добавив localhost в качестве его значения. Также пользователь раскомментирует атрибут http.port.

network.host: localhost
http.port: 9200

Теперь надо запустить и включить службы Elasticsearch.

systemctl start elasticsearch
systemctl enable elasticsearch

Настала пора проверить статус Elasticsearch.

systemctl status elasticsearch
curl -X GET "localhost:9200"

По умолчанию Elasticsearch просматривает порт 9200. Пользователь также может проверить его в своем веб-браузере с помощью пинга https://localhost:9200.

Теперь Elasticsearch установлен и готов к работе.

Установка и настройка Logstash

Logstash используется для сбора и централизации журналов с разных серверов с помощью filebeat

Сначала стоит проверить, что OpenSSL работает, а затем установить Logstash, при этом выполнив следующую команду:

openssl version -a
apt install logstash -y

Необходимо отредактировать файл /etc / hosts и добавить следующую строку:

nano /etc/hosts

Здесь: 18.224.44.11 – IP-адрес сервера Elk-master.

Пользователю нужно создать SSL-сертификат для защиты передачи данных журнала с клиента Rsyslog & Filebeat на сервер Logstash.

Для этого открывается новый каталог SSL в разделе Logstash configuration. Пользователь перейдет в этот каталог, создаст сертификат SSL, выполнив следующую команду:

mkdir -p /etc/logstash/ssl
cd /etc/logstash/
openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

Теперь он собирается создать новые конфигурационные файлы для Logstash с именем «filebeat-input.conf». В качестве входного файла из системного журнала – «syslog-filter.conf» – для обработки системных журналов, и «output- output-elasicsearch.conf» – для определения вывода результатов работы Elasticsearch.

Пользователю следует перейти в каталог Logstash и создать там файл «filebeat-input.conf» по пути conf.D, выполнив команду:

cd /etc/logstash/
nano conf.d/filebeat-input.conf

Он также добавит следующую конфигурацию:

input {
  beats {
    port => 5443
    type => syslog
    ssl => true
    ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
    ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
  }
}

Для обработки данных системного журнала человек будет использовать плагин фильтра под названием “grok”. Ему надо создать новый файл .conf (syslog-filter.conf) в той же папке.

nano conf.d/syslog-filter.conf

Он также добавит следующую конфигурацию:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

И, наконец, пользователь создаст файл конфигурации «output-elasticsearch.conf» для вывода результатов работы Еlasticsearch.

nano conf.d/output-elasticsearch.conf

Он также добавит следующую конфигурацию:

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

После этого нужно сохранить изменения и выйти.

Теперь пользователю необходимо запустить и проверить статус службы Logstash.

systemctl start logstash
systemctl enable logstash
systemctl status logstash

Установка и настройка Kibana

Пользователь может установить Kibana с помощью следующей команды:

apt install kibana

Он собирается внести некоторые изменения в конфигурационный файл Kibana.

nano /etc/kibana/kibana.yml

Нужно найти и раскомментировать следующие атрибуты.

Теперь осталось только запустить и активировать сервис Kibana:

systemctl enable kibana
systemctl start kibana

Установка и настройка NGINX

Пользователю необходимо установить и настроить Nginx и ‘Apache2-utlis’.

apt install nginx apache2-utils -y

Он создаст новый файл виртуального хоста с именем Kibana.

nano /etc/nginx/sites-available/kibana

И добавит в файл следующую конфигурацию:

server {
    listen 80;
    server_name localhost;
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;
    location / {
        proxy_pass https://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

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

sudo htpasswd -c /etc/nginx/.kibana-user elastic
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
systemctl enable nginx
systemctl restart nginх

Установка и настройка Filebeat

Пользователь собирается настроить отправителей данных Filebeat на своем сервере Еlk-master. Это будет использоваться для сбора данных из различных источников и транспортировки их в Logstash и Elasticsearch.

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

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.11-amd64.deb

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

sudo dpkg -i filebeat-6.8.11-amd64.deb

Затем открыть конфигурационный файл Filebeat с именем «filebeat.yml».

nano /etc/filebeat/filebeat.yml

Пользователь отредактирует файл конфигурации:

Он собирается использовать Elasticsearch для выполнения дополнительной обработки данных, собранных Filebeat. Поэтому стоит запустить поисковики Filebeat, изменив значение строки “Еnabled” на “Тrue”.

Затем пользователь перейдет в раздел вывода результатов работы Elasticsearch и добавит следующие строки:

output.elasticsearch:

hosts: ["192.168.0.156:9200"]
username: "elastic"
password: "123"
setup.kibana:
host: "192.168.0.156:5601"

Включить и настроить модуль Elasticsearch можно с помощью следующей команды:

sudo filebeat modules enable elasticsearch

Пора запустить Filebeat.

sudo filebeat setup
sudo service filebeat start

И, наконец, пользователь скопирует файл logstash-forwarder.crt в /etc/filebeat directory, выполнив следующую команду:

cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/
sudo service filebeat restart

Чтобы протестировать ELK Stack, пользователю необходимо открыть браузер и просмотреть IP-адрес своего сервера, а затем – сам порт 5601.

https://localhost:5601

Маршрутизация журналов Linux в Elasticsearch

Пользователь займется маршрутизацией журналов из rsyslog в Logstash, ведь они автоматически передаются в Elasticsearch.

Маршрутизация журналов из Logstash в Elasticsearch

Прежде чем маршрутизировать журналы из rsyslog в Logstash, пользователю нужно настроить переадресацию журналов между Logstash и Elasticsearch.

Для этого будет создан конфигурационный файл Logstash. Чтобы создать его, человеку следует перейти в каталог /etc/logstash / conf.d и создать там файл logstash.conf.

cd /etc/logstash/conf.d
nano logstash.conf

Также он добавит следующую конфигурацию в него.

input {                                                                                     
  udp {                                                                                     
    host => "127.0.0.1"                                                                     
    port => 10514                                                                            
    codec => "json"                                                                         
    type => "rsyslog"                                                                       
  }                                                                                          
}    
                                                                                                                                                         
# The Filter pipeline stays empty here, no formatting is done.    
filter { } 
 
                                                                                     
# Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.                                                                                             
output {                                                                                    
  if [type] == "rsyslog" {                                                                  
    elasticsearch {                                                                          
      hosts => [ "127.0.0.1:9200" ]                                                         
    }                                                                                       
  }
  }

Пользователь перезапустит службу Logstash.

systemctl restart logstash

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

netstat -na | grep 10514

Маршрутизация журналов из rsyslog в Logstash

Rsyslog способен преобразовывать журналы с помощью шаблонов для их пересылки в rsylog. Пользователю следует открыть каталог /etc/rsylog.d и создать там новый файл с именем 70-output.conf.

cd /etc/rsyslog.d
nano 70-output.conf

Человек добавит следующую конфигурацию в файл 70-output.conf.

# This line sends all lines to defined IP address at port 10514
# using the json-template format.
*.*                         @127.0.0.1:10514;json-template

Теперь пользователь настроил переадресацию журналов, создав файл 01-json-template.conf в той же папке.

nano 01-json-template.conf

Человек добавит следующую конфигурацию в файл 01-json-template.conf.

template(name="json-template"
  type="list") {
    constant(value="{")
      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")
      constant(value="\",\"@version\":\"1")
      constant(value="\",\"message\":\"")     property(name="msg" format="json")
      constant(value="\",\"sysloghost\":\"")  property(name="hostname")
      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
      constant(value="\",\"programname\":\"") property(name="programname")
      constant(value="\",\"procid\":\"")      property(name="procid")
    constant(value="\"}\n")
}

Следует перезапустить службу rsyslog и убедиться, что данные правильно направляются в Elasticsearch.

systemctl restart rsyslog
curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'

Примечание: журналы будут пересылаться с индексом в имени logstash-*.

Создание панели для входа в Kibana

Пользователю следует открыть браузер и перейти в раздел https://localhost:5601. Там он должен увидеть следующий экран.

Перейдя в раздел «Управление», человек может создать шаблон индекса logstash-* и двигаться к следующему шагу.

Пользователь определил logstash – * как свой шаблон индекса. Теперь он может задать некоторые настройки, прежде чем создавать его. В поле Time Filter field name нужновыбрать @timestamp и создать шаблон индекса.

Мониторинг записей SSH

Этот вариант немного специфический, так как пользователь может перейти на вкладку “Discover”, чтобы выстроить свою панель.

При входе на вкладку “Discover” следует выбрать logstash-*.

Там, в Filterbat, пользователь поставит фильтр запроса «programename:ssh*».

Теперь он может видеть каждый журнал, связанный с сервисом SSHd на его машине.

Как видно на картинке, теперь у пользователя есть прямой доступ ко всем журналам, связанным с сервисом SSHd. Например, он способен отслеживать незаконные попытки доступа или ввод неправильных логинов.

Точно также он может отслеживать различные попытки незаконного доступа, такие как ftp, telnet и т.д.

Например, человек получил доступ Telnet к серверу с другой машины.

Настала пора посмотреть, что происходит на панели Kibana.

Приготовиться всем!

Здорово! Теперь панель видна в личном кабинете.

Автор переведенной статьи: Vijay.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Поделиться ссылкой

Игорь Б

Об авторе Игорь Б

Автор на портале cisoclub.ru. Добавляйте ваш материал на сайт в разделе "Разместить публикацию".
Читать все записи автора Игорь Б

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

двенадцать − 9 =