---
# System prepended metadata

title: Интенсив №2. Нормализация и корреляция событий информационной безопасности

---

# Интенсив №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"
```

![](https://i.imgur.com/N8V47PJ.png)

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

![](https://i.imgur.com/oQJowRC.png)


---

## 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"
```

![](https://i.imgur.com/tlnmB0t.png)

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

![](https://i.imgur.com/RbzXGyP.png)

---

## 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"
        }
```

![](https://i.imgur.com/XazTHBZ.png)

---

## 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"
    
}
```

![](https://i.imgur.com/YOOc4hq.png)

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

![](https://i.imgur.com/PwoMsbD.png)

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