LittleBeat 6.1 + Facebook OSquery Addon

Сразу две новости. Во-первых, выпущен LittleBeat на платформе ELK 6.1.3. Во-вторых, к нему выпущен Facebook OSquery Addon for Windows.
Теперь подробнее.

LittleBeat 6.1. Изменения

Почти последняя версия стека ELK. Более приятный дизайн консоли. Установка больше не выполняется с образа ISO. Прямо с GitHub. Теперь обязательно иметь в сети сервер DNS, на нем должна быть запись об адресе хоста littlebeat. Агенты ищут сервер строго по имени. Это концептуальные изменения. Теперь о плюшках.

Для установки агентов я изготовил msi пакеты littlebeat_agent_32.msi, littlebeat_agent_64.msi, что позволяет выполнять массовую установку групповыми политиками AD, и вообще делает процесс установки/удаления агентов более «приятным» для системы, ибо способ, который предлагают разработчики из elastic — ужасен. И, разумеется, есть универсальный установочный файл littlebeat_agent.exe — sfx архив с обоими пакетами и скриптом, определяющим версию системы и запускающим нужный пакет установки, это чтобы разворачивать вручную или через какое нибудь средство типа MS SCCM (в Readme проекта на GitHub есть инструкция, как использовать PSexec для централизованной установки). Чуть не забыл. При установке агент сам настраивает необходимые политики аудита системы. Если ваш контроллер домена не переопределяет политики принудительно, то считайте, что всё уже настроено.

Facebook OSquery LittleBeat Addon

И так, летом прошлого (2017) года, кажется в августе, команда разработчиков osquery выпустила версию для Windows. Это хорошо. Если вы не знаете, почему это хорошо, почитайте где-нибудь, например, на Хабре, или вот здесь. Я скрестил эту штуку с LittleBeat. При этом пришлось повозиться. Родной пакет msi пришлось полностью пересобрать. Не только из-за того, что я добавил в него дополнительные пакеты запросов и нужные мне файлы конфигурации. Пришлось еще переделать назначение прав, поскольку в родном пакете это делал wix, а он использует вместо SID имена групп и пользователей. Как понятно, в русской Windows группы с именем Users не существует. Поэтому, родной пакет просто валится по ошибке. Ну, и фиг с ним. Вкатил в пакет скрипт на powersell, который делает всё правильно, пользуя SIDы. Поскольку osquery — 32-x разрядное приложение, установочный пакет один для всех систем. Одна печалька. Сам демон osquery работает только с Windows 8 (Server 2012) и новее. На старых системах Win 7 или XP он не работает, там API другой.

Впрочем, эта печалька оказалась не единственной. Выяснилось, что osquery совсем не понимает русские кодировки. Русские строки он пишет как escaped bytes, в виде \xF1\xFA и т.п. Выглядит это ужасно. Еще хуже, что некоторые строки в кодировке windows-1251, а некоторые в utf-8. Если бы не Ruby Всемогущий, я бы сидел и плакал, глядя на эту картину. Причем здесь Ruby? Дело в том, что я конфигурирую osquery для отправки result log в его собственный канал windows_event_log. Этот канал читает LittleBeat Agent (winlogbeat) и отправляет в Logstash, а в там фильтр обрабатывает данные inliine скриптом на Ruby, который приводит всё в читаемый вид на русском языке.

Все проблемы решаются вот таким коротеньким кодом

ruby { code => "
    require 'json'
    obj = JSON.parse(event.get('[event_data][Message]'))
    event.set('[osquery_result]', obj)  
     "}
if [osquery_result][columns] {
    ruby { 
    code => "
        not_empty = 0
        columns = event.get('[osquery_result][columns]')
        columns.each do |key,value|
            if !value.to_s.empty? 
                not_empty = 1
                value = value.gsub('\\\\x', '\\ \\x')
                value = value.gsub(/\\x([\da-fA-F]{2})/) {|m| [$1].pack('H*')}
                if value.force_encoding('utf-8').valid_encoding?
                value = value.force_encoding('utf-8').encode('utf-8')                                   
                else
                value = value.force_encoding('windows-1251').encode('utf-8')
                end
                columns[key] = value
            end
        end
        if not_empty == 0
            event.set('[osquery_result][empty_flag]', 1)
        else
            event.set('[osquery_result][columns]', columns)
        end                     "       
    }
    if [osquery_result][empty_flag] { drop {} }
}

Какие запросы я включил в установочный пакет? Ну, много всяких полезных. Даже сам придумывать не стал. Форкнул себе репозиторий Palantir osquery Configuration, чуть-чуть там переделал, но почти 100% запросов оттуда. Очень хороший набор.

Теперь на консоли LittleBeat можно легко посмотреть информацию о каждой машине: Какие локальные пользователи заведены в системе?  Какие шары открыты? Какие процессы запускаются автоматически? Какие программы и патчи установлены? Какие процессы слушают входящий трафик на интерфейсах? А также есть специальные запросы показывающие наличие процессов, присутствующих в памяти машины, но не имеющих своего файла на диске, или «неправильные» значения некоторых ключей реестра.

Все исходники вы можете найти в репозитории LittleBeat на GitHub. Там же в Readme — инструкция по установке. Как обычно она очень короткая. Вся установка проходит в полуавтоматическом режиме и сопровождается серией диалоговых окон с сообщениями о ходе установки и запросами параметров (только пароли создаваемых пользователей). Никаких технических вопросов. Инструкцию по установке агентов вы увидите прямо на домашней странице https://littlebeat/.

Ответы на незаданные вопросы.

Можно ли выполнить апгрейд LittleBeat 5.5.001 до 6.1.001? Да, можно. Но пока у меня нет скриптов для автоматического апгрейда. Из-за очень серьезных изменений в ELK 6.x по сравнению с 5.x я бы предпочел апгрейд в ручном режиме по инструкции. Инструкцию скоро напишу в Wiki проекта.

Куда делся Wazuh LittleBeat Addon? Никуда не делся. Пока в стадии тестирования. Wazuh 2.x не совместим с ELK 6.1, а Wazuh 3.x также сильно переделан. Это еще один аспект сложности автоматического апгрейда. Wazuh Addon появится вскоре.

Почему я не использовал дурман (Doorman) для организации централизованного управления osquery? Использовал, точнее я с этого начал. Сначала это был Doorman Addon, но в итоге, когда всё уже было отлажено и я делал последние прокаты перед релизом, я понял, что это никуда не годится. Всё же LittleBeat предназначен для тех, у кого нет времени заниматься всякой технической ерундой и нет денег, чтобы оплачивать услуги Angara Cyber Resilience Center (это где я сейчас работаю системным архитектором). А дурман без технической ерунды никакого смысла не имеет, надо устанавливать в него пакеты, определять на какие хосты, какие пакеты устанавливать. Всё это дает больше возможностей, но, для маленьких, удобнее решения с минимальным количеством кнопок. Возможно позже я придумаю, как всё упростить и вернусь к дурману или сделаю что-то свое на его основе. Пока я решил, что готовый сконфигурированный пакет, который работает «из коробки» лучше, чем система управления конфигурациями к которой привязаны агенты. Впрочем, это не мешает энтузиастам самостоятельно добавить дурман к моей конструкции.

Вот и всё на сегодня.

 

Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s