MS FEP плагин для OSSIM

Это техническая заметка о том, как написать плагин для сбора на OSSIM журнала событий MS System Center Endpoint Protection.

Вы можете понять ее содержание, если вы знаете хотя бы часть из этого списка:

  • Что такое OSSIM (Open Source SIEM);
  • Что такое Debian Linux и кто такая FreeTDS;
  • Что такое Microsoft System Center и Microsoft System Center Endpoint Protection aka Forefront Endpoint Protection (MS FEP);
  • Что такое Microsoft SQL Server.

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

Подготовка базы данных System Center.

Прежде всего необходимо создать в базе данных подходящее представление (вьюху) с нужными данными от FEP. Какое подходящее? Чтобы не мучиться я скоммуниздил его из документации на IBM Q-Radar (это ведь тоже какой-никакой SIEM).

create view dbo.MalwareView as select
 n.Type
 , n.RowID
 , n.Name
 , n.Description
 , n.Timestamp
 , n.SchemaVersion
 , n.ObserverHost
 , n.ObserverUser
 , n.ObserverProductName
 , n.ObserverProductversion
 , n.ObserverProtectionType
 , n.ObserverProtectionVersion
 , n.ObserverProtectionSignatureVersion
 , n.ObserverDetection
 , n.ObserverDetectionTime
 , n.ActorHost
 , n.ActorUser
 , n.ActorProcess
 , n.ActorResource
 , n.ActionType
 , n.TargetHost
 , n.TargetUser
 , n.TargetProcess
 , n.TargetResource
 , n.ClassificationID
 , n.ClassificationType
 , n.ClassificationSeverity
 , n.ClassificationCategory
 , n.RemediationType
 , n.RemediationResult
 , n.RemediationErrorCode
 , n.RemediationPendingAction
 , n.IsActiveMalware
 , i.IP_Addresses0 as 'SrcAddress'
 from v_AM_NormalizedDetectionHistory n
 , System_IP_Address_ARR i
 , v_RA_System_ResourceNames s
 , Network_DATA d
 where n.ObserverHost = s.Resource_Names0
 and s.ResourceID = d.MachineID
 and d.IPEnabled00 = 1
 and d.MachineID = i.ItemKey
 and i.IP_Addresses0 like '%.%.%.%';
 

Сразу замечу, что в этой вьюхе гораздо больше полей, чем я использую в плагине. Ну, может потом пригодятся.

Кроме вьюхи, надо создать пользователя базы данных (с именем входа), который будет иметь право чтения на вьюху. И лучше включить смешанную аутентификацию на сервере MS SQL. С доменной тоже теоретически должно работать, но это вопрос дополнительных экспериментов. При первоначальном тестировании подключения утилитой tsql от FreeTDS с доменной аутентификацией прицепиться не удалось.

Параметры, которые понадобятся для дальнейшей работы:

  • FQDN или IP адрес сервера MS SQL с базой данных System Center;
  • TCP порт подключения к этому экземпляру SQL сервера;
  • Имя пользователя и пароль;
  • Имя базы данных.

Русские буковки.

Если вы настоящий русский, то вам надо поправить файл конфигурации FreeTDS на сервере OSSIM. Иначе будут вопросы. В смысле в тексте сообщений вместо русских буковок будут вопросительные знаки.

 #nano /etc/freedts/freetds.conf
 [global]
 tds version = 7.0
 client charset = UTF-8
 

Разумеется, все будет хорошо с русскими буковками если раньше вы уже «русифицировали» OSSIM. Если нет – смотрите в конце статьи.

Теперь можно заделать сам плагин

#nano /etc/ossim/agent/plugins/msfep.cfg
 # Alienvault plugin
 # Author: Eugene Sokolov esguardian@outlook.com
 # Plugin MS SCCM Endpoint Protection id:9003 version: 0.0.1
 # Last modification: 2015-05-18
 #
 [DEFAULT]
 plugin_id=9003

 [config]
 type=detector
 enable=yes
 source=database
 source_type=mssql
 # connection parameters
 source_ip=FQDN
 source_port=1433
 user=usernama
 password=userpass
 db=databaseName
 # -----
 sleep=60
 process=
 start=no
 stop=no

[start_query]
 query="SELECT TOP 1 Timestamp FROM dbo.MalwareView ORDER BY Timestamp DESC"
 regexp=

[query]
 query="SELECT Timestamp, TargetHost, TargetUser, TargetProcess, TargetResource, ClassificationType, ClassificationSeverity, ClassificationCategory, RemediationType, RemediationResult, RemediationPendingAction, SrcAddress FROM dbo.MalwareView where DateDiff(second,'$1',Timestamp) > 0 ORDER BY Timestamp"
 regexp=
 ref=0
 date=
 plugin_sid=1
 src_ip={$11}
 dst_ip=
 username={$2}
 userdata1={$1}
 userdata2={$3}
 userdata3={$5}
 userdata4={$6}
 userdata5={$7}
 userdata6={$8}
 userdata7={$9}
 userdata8={$10}
 userdata9={$4}
 # Payload
 log=Date: {normalize_date($0)}, Host: {$1}, User: {$2}, Process: {$3}, Resource: {$4}, Malware: {$5}, Severity: {$6}, Category: {$7}, Action {$8}, Result: {$9}, TODO: {$10}, SRC IP: {$11}

Некоторые пояснения.

В отличие от сложившейся среди пользователей OSSIM традиции, я использую метку времени записи, а не номер записи, в качестве критерия выбора. Видимо это осталось от привычки к IBM Q-Radar. Там такая традиция. И да, поле Timestamp имеет тип datetime и содержит время. Не надо его путать с типом timestamp, который в нынешних SQL серверах от MS называется RowVersion.

Еще, особо внимательные могли заметить, что плагин не записывает значение date=. Это по причине лени. Надо конвертировать время с учетом зоны, проще подставить системное. Понятно, что это жульничество, но в данном случае не принципиально, будет в логе настоящее время или время записи в лог. Радиус в 60 секунд погоды не делает, а плагин все равно работает в реальном времени. То есть если он временно будет отключен, то записи за этот период он прощелкает, поскольку указатель начала «отбора записей» при старте плагина устанавливается в последнюю по времени запись. Это вы видите в секции [start query]. Позже я собираюсь это переделать, чтобы последняя обработанная отметка времени сохранялась где-нибудь в файле, а потом считывалась при старте. Вот тогда и будем писать настоящее время.

Запись информации о плагине в ossim-db

Ну и последнее это текст для модификации базы данных OSSIM для записи информации о плагине. Я обычно храню эти штуки в /etc/my_ossim/.

#nano /etc/my_ossim/msfep.sql
-- MSFEP
 -- plugin_id: 9003
 DELETE FROM plugin WHERE id = "9003";
 DELETE FROM plugin_sid where plugin_id = "9003";
INSERT IGNORE INTO plugin (id, type, name, description) VALUES (9003, 1, 'MSFEP', 'MSFEP Malware');
INSERT IGNORE INTO plugin_sid (plugin_id, sid, category_id, class_id, name, priority, reliability) VALUES (9003, 1, NULL, NULL, 'MSFEP Malware', 1, 3);

Если кто забыл, в базу это отправляется командой
#cat msfep.sql | ossim-db
И не забыть перезапустить сервер
#/etc/init.d/ossim-server restart

Обратите внимание на то, что параметры category_id и class_id не заданы совсем, а параметры priority и reliability заданы от балды. Это потому, что решение о роли и месте плагина в SIEM я еще не принял.

Всё.

И в дополнение о русских буковках в OSSIM. Фрагмент из моей записи на их Product Forum.

Summary:
 0. use dpkg-reconfigure locales from console for generate ru_RU.cp1251 and UTF-8 locales (missing by deafault in OS)
 1. modify /etc/mysql/my.cnf
  [client]
  port=3306 socket=/var/run/mysqld/mysqld.sock
  default-character-set=utf8
  [mysqld]
  collation-server = utf8_unicode_ci
  init-connect='SET collation_connection = utf8_unicode_ci'
  init_connect='SET NAMES utf8'
  character-set-server = utf8
2. modify /usr/share/alienvault/ossim-agent/TailFollowBookmark.py
2.1. in section def __init__     def __init__(self, filename, track=1, bookmark_dir="", encoding='utf8'):
 self.encode = 'utf8'
2.2. in section def _open_file
  if "alerts.log" in self.filename:
             self.encode = 'cp1251'
         else:
             self.encode = 'utf8'
 logger.info("Opening log file with codification:%s"% self.encode)
 self._current_file = codecs.open(self.filename, 'r', encoding=self.encode)
 .....
2.3. That's all. You don't need to decode variable 'line' to utf8 in section 'def next'  before string  'return line'.
3. Reboot server.
 Now you can see ossec events from russian windows system like this
"[INIT]2015 Mar 03 14:23:33 WinEvtLog: Application: ERROR(2003): Microsoft Security Client: (no user): no domain: 
sokolov-ey.inbank.msk: Произошла ошибка 0x800106f7 при создании экземпляра инструментария WMI состояния работоспособности 
для антивредоносной программы.[END]";

 

Реклама

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

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

Логотип WordPress.com

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

Google+ photo

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

Фотография Twitter

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

Фотография Facebook

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

Connecting to %s