# Интенсив №2. Нормализация и корреляция событий информационной безопасности
## 2.1 Правило нормализации события чтения системного файла
События мы получаем с системы IBM AIX, поэтому будем использовать документации по аудиту данной системы:
https://www.redbooks.ibm.com/redbooks/pdfs/sg246396.pdf
Поток событий доступа к системным файлам:
```syslog=
May 19 09:50:06 aix53 local0:info audit: OS_CONF_READ mp OK cat audit object read event detected /etc/shadow
```
```syslog=
Jun 3 00:10:05 aix53 local0:info audit: OS_CONF_READ mp OK cat audit object read event detected /etc/ssh/sshd_config
```
Правило нормализации события доступа к системному файлу
```bash=
TEXT = '{time = DATETIME} {event_src.hostname = WORD?} {datafield1 = WORD}:{datafield2 = WORD} {event_src.rule = WORD}: {msgid = "OS_CONF_READ"} {subject.account.name = WORD} {datafield3 = STRING} {subject.process.name = STRING} audit object read event detected {object.path = STRING}'
action = "access"
subject = "account"
object = "configuration"
status = "failure" # по умолчанию считаем чтение объекта неудачным
# datafield1 используется для сохранения локали
# datafield2 используется для определения важности события
# datafield3 используется для определения успешности события
# если поле datafield3 содержит "OK" то событие чтения удачное
if datafield3 == "OK" then
status = "success"
endif
# исходя из документации на аудит AIX устанавливаем важность события
switch datafield2
case "info"
importance = "info"
case "emerg"
importance = "high"
case "alert"
importance = "medium"
case "crit"
importance = "high"
case "err"
importance = "high"
case "warning"
importance = "medium"
case "notice"
importance = "info"
case "debug"
importance = "info"
endswitch
event_src.vendor = "IBM"
event_src.title = "AIX"
event_src.category = "Operating system"
event_src.subsys = "AIX audit sysbsystem"
id = "IBM_AIX_audit_OS_CONF_READ_Object_read_event_detected"
```

Локализация правила

---
## 2.2. Правило нормализации входа пользователя
Поток ненормализованных событий входа:
```syslog=
<134>Sep 22 05:01:48 Message forwarded from sovma131: audit: USER_Login root OK sshd user: ektest tty: ssh
```
```syslog=
<134>Sep 22 04:54:46 audit: USER_Login root OK sshd user: ektest tty: ssh
```
Правило номализации события входа пользователя:
```bash=
TEXT = '<{NUMBER}>{time = DATETIME} {"Message forwarded from"?} {src.hostname = WORD?}{":"?} {event_src.rule = WORD}: {msgid = "USER_Login"} {subject.account.privileges = WORD} {datafield1 = WORD} {subject.process.cmdline = STRING } user: {subject.account.name = WORD} tty: {logon_service = WORD}'
subject = "account"
action = "access"
object = "system"
status = "failure" # по умолчанию логин неудачный
# значания по умолчанию
logon_auth_method = "local" # считаем что логин локальный
protocol = "-" # локальный - нет сетевого протокола
protocol.layer7 = "-" # локальный - нет сетевого протокола
logon_auth_method = "local" # аутентификация локальная
# поле datafield1 используется для определения успешности события
if datafield1 == "OK" then
status = "success"
endif
# определяем сервис через, который произошел логон, нас интересует ssh
# переопределяем умолчания
if logon_service == "ssh" then
protocol = "tcp"
protocol.layer7 = logon_service
logon_auth_method = "remote"
endif
importance = "high"
event_src.vendor = "IBM"
event_src.title = "AIX"
event_src.category = "Operating system"
event_src.subsys = "AIX audit sysbsystem"
id = "IBM_AIX_audit_USER_Login_SSH_Login_success"
```

Локализация правила:

---
## 2.3. Правило обогащения события входа пользователя
События входа не содержат имя источника события, однако мы наверняка знаем имя AIX системы. Поэтому обогатим события входа именем системы aix53.
Нормализованные события входа:
```jsonld=
{"subject": "account","action": "access","object": "computer","status": "success","datafield1": "OK","event_src.category": "Operating system","event_src.rule": "audit","event_src.subsys": "AIX audit sysbsystem","event_src.title": "AIX","event_src.vendor": "IBM","id": "IBM_AIX_audit_USER_Login_SSH_Login_success","importance": "high","logon_auth_method": "remote","logon_service": "ssh","msgid": "USER_Login","protocol": "tcp","protocol.layer7": "ssh","src.hostname": "sovma131","subject.account.name": "ektest","subject.account.privileges": "root","subject.process.cmdline": "sshd","time": "2022-09-22T05:01:48Z"}
```
```jsonld=
{"subject": "account","action": "access","object": "computer","status": "success","datafield1": "OK","event_src.category": "Operating system","event_src.rule": "audit","event_src.subsys": "AIX audit sysbsystem","event_src.title": "AIX","event_src.vendor": "IBM","id": "IBM_AIX_audit_USER_Login_SSH_Login_success","importance": "high","logon_auth_method": "remote","logon_service": "ssh","msgid": "USER_Login","protocol": "tcp","protocol.layer7": "ssh","subject.account.name": "ektest","subject.account.privileges": "root","subject.process.cmdline": "sshd","time": "2022-09-22T04:54:46Z"}
```
Правило обогащения
```bash=
# события логона не содержат имя машины, мы знаем как называется наша система AIX
# поэтому обогатим событие логона именем источника события - aix53
event AIX_Login_access:
filter {
event_src.vendor == "IBM" and
event_src.title == "AIX" and
event_src.category == "Operating system" and
event_src.subsys == "AIX audit sysbsystem" and
msgid == "USER_Login"
}
enrichment Add_AIX_event_src_hostname
enrich AIX_Login_access:
enrich_fields {
event_src.hostname = "aix53"
}
```

---
## 2.4. Правило корреляции событий
Поток номализованных событий:
```jsonld=
{"subject": "account","action": "access","object": "configuration","status": "success","datafield1": "local0","datafield2": "info","datafield3": "OK","event_src.category": "Operating system","event_src.hostname": "aix53","event_src.rule": "audit","event_src.subsys": "AIX audit sysbsystem","event_src.title": "AIX","event_src.vendor": "IBM","id": "IBM_AIX_audit_OS_CONF_READ_Object_read_event_detected","importance": "info","msgid": "OS_CONF_READ","object.path": "/etc/shadow","subject.account.name": "mp","subject.process.name": "cat","time": "2022-10-19T09:50:06Z"}
{"subject": "account","action": "access","object": "configuration","status": "success","datafield1": "local0","datafield2": "info","datafield3": "OK","event_src.category": "Operating system","event_src.hostname": "aix53","event_src.rule": "audit","event_src.subsys": "AIX audit sysbsystem","event_src.title": "AIX","event_src.vendor": "IBM","id": "IBM_AIX_audit_OS_CONF_READ_Object_read_event_detected","importance": "info","msgid": "OS_CONF_READ","object.path": "/etc/ssh/sshd_config","subject.account.name": "mp","subject.process.name": "cat","time": "2022-10-19T09:51:05Z"}
{"action": "access", "datafield1": "OK", "event_src.category": "Operating system", "event_src.rule": "audit", "event_src.subsys": "AIX audit sysbsystem", "event_src.title": "AIX", "event_src.vendor": "IBM", "id": "IBM_AIX_audit_USER_Login_SSH_Login_success", "importance": "high", "logon_auth_method": "remote", "logon_service": "ssh", "msgid": "USER_Login", "object": "computer", "protocol": "tcp", "protocol.layer7": "ssh", "src.hostname": "sovma131", "status": "success", "subject": "account", "subject.account.name": "ektest", "subject.account.privileges": "root", "subject.process.cmdline": "sshd", "time": "2022-10-19T09:52:48Z", "uuid": "2d4b5643-21f4-4bdf-8eec-460089687551", "count": 1, "event_src.hostname": "aix53"}
{"action": "access", "datafield1": "OK", "event_src.category": "Operating system", "event_src.rule": "audit", "event_src.subsys": "AIX audit sysbsystem", "event_src.title": "AIX", "event_src.vendor": "IBM", "id": "IBM_AIX_audit_USER_Login_SSH_Login_success", "importance": "high", "logon_auth_method": "remote", "logon_service": "ssh", "msgid": "USER_Login", "object": "computer", "protocol": "tcp", "protocol.layer7": "ssh", "status": "success", "subject": "account", "subject.account.name": "ektest", "subject.account.privileges": "root", "subject.process.cmdline": "sshd", "time": "2022-09-19T09:53:46Z", "uuid": "2e261534-56ce-4600-883e-5bad150e67e9", "count": 1, "event_src.hostname": "aix53"}
```
Правило корреляции:
```bash=
event AIX_file_shadow_read_success:
key:
event_src.hostname
filter {
correlation_name == null
and event_src.vendor == "IBM"
and event_src.title == "AIX"
and event_src.category == "Operating system"
and event_src.subsys == "AIX audit sysbsystem"
and msgid == "OS_CONF_READ"
and action == "access"
and object == "configuration"
and status == "success"
and object.path == "/etc/shadow"
}
event AIX_login_success:
key:
event_src.hostname
filter {
correlation_name == null
and event_src.vendor == "IBM"
and event_src.title == "AIX"
and event_src.category == "Operating system"
and event_src.subsys == "AIX audit sysbsystem"
and msgid == "USER_Login"
and action == "access"
and object == "computer"
and status == "success"
}
rule AIX_user_read_shadow_file_then_another_user_log_in_system: (AIX_file_shadow_read_success -> AIX_login_success)with different subject.account.name within 5m
init {
$first_event = true
}
on AIX_file_shadow_read_success {
$datafield1 = msgid # msgid начального события цепочки
$datafield2 = subject.account.name # subject.account.name начального события цепочки
$datafield3 = subject.process.name # subject.process.name начального события цепочки
$object.path = object.path
}
on AIX_login_success {
$datafield4 = msgid # msgid конечного события в цепочке
$subject.account.name = subject.account.name
$subject.account.privileges = subject.account.privileges
$logon_auth_method = logon_auth_method
$protocol = protocol
$protocol.layer7 = protocol.layer7
$logon_service = logon_service
$logon_auth_method = logon_auth_method
$subject.process.cmdline = subject.process.cmdline
}
emit {
$correlation_type = "incident"
$subject = "account"
$action = "access"
$object = "system"
$status = "success"
$importance = "high"
$category.generic = "Access"
$category.high = "Authentication"
$category.low = "Remote"
}
```

Локализация правила корреляции:

Архив с файлами приложен к письму.
На этом данная работа завершена.