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

Дата: 21.08.2020. Автор: Игорь Б. Категории: Статьи по информационной безопасности
Threat Hunting: установка лаборатории мониторинга журналов с ELK

В этой статье пойдет речь об установке и настройке лаборатории мониторинга журналов с 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.
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

apt install -y openjdk-11-jdk wget apt-transport-https curl
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –
Threat Hunting: установка лаборатории мониторинга журналов с ELK

После он добавит репозиторий 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
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

apt update

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

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

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

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

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

nano /etc/elasticsearch/elasticsearch.yml
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

network.host: localhost
http.port: 9200
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

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

systemctl status elasticsearch
curl -X GET "localhost:9200"
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

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

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

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

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

openssl version -a
apt install logstash -y
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

Здесь: 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
Threat Hunting: установка лаборатории мониторинга журналов с ELK

Теперь он собирается создать новые конфигурационные файлы для 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"
  }
}
Threat Hunting: установка лаборатории мониторинга журналов с ELK

Для обработки данных системного журнала человек будет использовать плагин фильтра под названием «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" ]
    }
  }
}
Threat Hunting: установка лаборатории мониторинга журналов с ELK

И, наконец, пользователь создаст файл конфигурации «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]}"
  }
}
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

systemctl start logstash
systemctl enable logstash
systemctl status logstash
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

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

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

nano /etc/kibana/kibana.yml
Threat Hunting: установка лаборатории мониторинга журналов с ELK

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

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

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

systemctl enable kibana
systemctl start kibana
blank

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

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

apt install nginx apache2-utils -y
blank

Он создаст новый файл виртуального хоста с именем 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;
    }
}
blank

Настало время создать необходимую аутентификацию для панели мониторинга 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х
blank

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

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

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

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

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

sudo dpkg -i filebeat-6.8.11-amd64.deb
blank

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

nano /etc/filebeat/filebeat.yml

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

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

blank

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

output.elasticsearch:

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

Включить и настроить модуль 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
blank

Маршрутизация журналов 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" ]                                                         
    }                                                                                       
  }
  }
blank

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

systemctl restart logstash

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

netstat -na | grep 10514
blank

Маршрутизация журналов из 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
blank

Теперь пользователь настроил переадресацию журналов, создав файл 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'
blank

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

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

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

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

blank

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

blank

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

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

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

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

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

blank

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

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

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

blank

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

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

blank

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

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

Игорь Б

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

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

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

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