Подробный гайд по аудиту SMB-трафика из PCAP через Python и Scapy - Часть 2

Практический гайд по аудиту SMB-трафика из PCAP через Python и Scapy, а также настройке детального аудита файловых шар в Windows Event Log.

2026.09.29                  


Подробный гайд по аудиту SMB-трафика из PCAP через Python и Scapy - Часть 2Подробный гайд по аудиту SMB-трафика из PCAP через Python и Scapy - Часть 2

3. Настройка SMB-аудита в Windows Event Log

Это более правильный способ для аудита доступа к сетевым шарам и файлам.


3.1. Что именно будем аудировать

Для файлового сервера обычно важны:

  1. Успешные и неудачные сетевые входы.
  2. Подключения к общим папкам.
  3. Доступ к конкретным файлам.
  4. Отказы в доступе.
  5. Изменение прав и удаление объектов, если нужно.

Основные источники:

  • Security — основной журнал безопасности.
  • Microsoft-Windows-SMBServer/Operational — операционные события SMB-сервера.
  • Microsoft-Windows-SMBClient/Operational — клиентские события, если нужно аудировать исходящие SMB-подключения.



3.2. Ключевые события безопасности

Event ID Назначение
4624 Успешный вход. Для сетевого доступа важен LogonType=3
4625 Неудачный вход
4634/4647 Выход/завершение сессии
4672 Назначение специальных привилегий новому входу
5140 Доступ к сетевой шаре
5142 Создание общей папки
5143 Изменение общей папки
5144 Удаление общей папки
5145 Детальная проверка доступа к объекту сетевой шары
4663 Попытка доступа к объекту файловой системы, если настроен SACL
4660 Удаление объекта
4670 Изменение разрешений объекта
4776 Проверка учетных данных через NTLM, обычно на контроллере домена
4768/4769/4771 События Kerberos, обычно на контроллере домена

Для SMB-аудита файловых шар особенно важны:

  • 5140 — факт обращения к шаре;
  • 5145 — детальный доступ, включая относительный путь к файлу;
  • 4624/4625 — сетевой вход и ошибки входа.

3.3. Включение расширенной политики аудита

Лучше делать через доменную GPO. Локально — можно через auditpol, но в домене групповая политика может перезаписать локальные настройки.

Просмотр текущей политики

auditpol /get /category:*

Просмотр подкатегорий:

auditpol /list /subcategory:*

На русскоязычной Windows имена подкатегорий могут быть локализованы. Используйте auditpol /list /subcategory:*, чтобы увидеть актуальные имена или GUID.


3.4. Рекомендуемые подкатегории аудита

Доступ к объектам

Нужно включить:

  • File Share
  • Detailed File Share
  • File System — опционально, если нужен аудит конкретных файлов и папок через SACL.

Пример для англоязычной Windows:

auditpol /set /subcategory:"File Share" /success:enable /failure:enable
auditpol /set /subcategory:"Detailed File Share" /success:enable /failure:enable
auditpol /set /subcategory:"File System" /success:enable /failure:enable

Вход и выход

auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Logoff" /success:enable
auditpol /set /subcategory:"Special Logon" /success:enable
auditpol /set /subcategory:"Account Lockout" /failure:enable

Проверка учетных данных

Для доменной инфраструктуры полезно включить на контроллерах домена:

auditpol /set /subcategory:"Credential Validation" /success:enable /failure:enable
auditpol /set /subcategory:"Kerberos Authentication Service" /success:enable /failure:enable
auditpol /set /subcategory:"Kerberos Service Ticket Operations" /success:enable /failure:enable

Kerberos-события обычно генерируются на контроллере домена, а не на файловом сервере.


3.5. Настройка через GPO

Путь в редакторе групповой политики:

Computer Configuration
  -> Policies
    -> Windows Settings
      -> Security Settings
        -> Advanced Audit Policy Configuration
          -> Object Access

Включить:

Audit File Share
Audit Detailed File Share
Audit File System

Также полезно:

Computer Configuration
  -> Policies
    -> Windows Settings
      -> Security Settings
        -> Local Policies
          -> Security Options

Параметр:

Audit: Force audit policy subcategory settings (Windows Vista or later) to override audit policy category settings

Рекомендуется:

Enabled

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


3.6. Настройка SACL для конкретных папок



Если вам нужен аудит не просто подключений к шаре, а доступа к конкретным файлам и папкам, настройте SACL на файловой системе.

Через проводник

  1. Открыть свойства папки.
  2. Security.
  3. Advanced.
  4. Auditing.
  5. Add.
  6. Выбрать пользователя или группу.
  7. Указать тип аудита: Success, Failure или оба.
  8. Выбрать действия: чтение, запись, удаление и т.д.
  9. Применить к папке, подпапкам и файлам.

Через PowerShell

Пример аудита доступа доменных пользователей к папке:

$path = "C:\Shares\Docs"

$acl = Get-Acl $path

$rights = [System.Security.AccessControl.FileSystemRights]::ReadData -bor
          [System.Security.AccessControl.FileSystemRights]::WriteData -bor
          [System.Security.AccessControl.FileSystemRights]::Delete

$rule = New-Object System.Security.AccessControl.FileSystemAuditRule(
    "DOMAIN\Domain Users",
    $rights,
    "ContainerInherit,ObjectInherit",
    "None",
    "Success,Failure"
)

$acl.AddAuditRule($rule)

Set-Acl -Path $path -AclObject $acl

Запускать от имени администратора. Для настройки аудита нужны права на изменение SACL, обычно SeSecurityPrivilege.


3.7. Важность 5140 и 5145

Событие 5140

Фиксирует доступ к сетевой шаре.

Обычно содержит:

  • пользователя;
  • домен;
  • имя шары;
  • путь шары;
  • IP-адрес клиента;
  • порт клиента.

Хорошо подходит для понимания, кто и к какой шаре подключался.


Событие 5145

Более детальное.

Обычно содержит:

  • пользователя;
  • имя шары;
  • путь шары;
  • относительный путь к файлу;
  • запрошенные права;
  • маску доступа;
  • причину решения;
  • статус, например SUCCESS или ACCESS_DENIED.

Именно 5145 часто нужен для расследований:

  • кто открывал файл;
  • кто пытался открыть файл без прав;
  • был ли доступ к конфиденциальным документам;
  • было ли массовое чтение файлов.

3.8. Типичные поля события 5145

Поле Описание
SubjectUserName Пользователь, который запросил доступ
SubjectDomainName Домен пользователя
SubjectLogonId Идентификатор входа
IpAddress IP-адрес клиента
IpPort Порт клиента
ShareName Имя общей папки
SharePath Локальный путь шары
RelativeTargetName Относительный путь к файлу внутри шары
AccessMask Маска запрошенного доступа
AccessList Список запрошенных прав в человекочитаемом виде
AccessReason Причина решения
Status NTSTATUS

3.9. Расшифровка AccessMask

Часто встречаемые значения:

Маска Значение
0x1 ReadData
0x2 WriteData
0x4 AppendData
0x8 ReadEA
0x10 WriteEA
0x20 Execute/Traverse
0x40 DeleteChild
0x80 ReadAttributes
0x100 WriteAttributes
0x10000 Delete
0x20000 ReadControl
0x40000 WriteDAC
0x80000 WriteOwner
0x100000 Synchronize
0x01000000 Access System Security

3.10. Распространенные NTSTATUS

Статус Описание
0x00000000 Успех
0xC0000022 Access denied
0xC0000034 Object name not found
0xC000003A Path not found
0xC0000043 Sharing violation
0xC000006D Logon failure
0xC0000071 Password expired
0xC0000072 Account disabled

3.11. Настройка размера журналов

Аудит файлового сервера может генерировать очень много событий. Особенно 5145.

Для Security-лога лучше задавать размер через GPO:

Computer Configuration
  -> Administrative Templates
    -> Windows Components
      -> Event Log Service
        -> Security

Параметр:

Specify the maximum log file size (KB)

Локально можно попробовать через wevtutil:

wevtutil sl Security /ms:1073741824 /retention:true


Где 1073741824 байт = 1 ГБ.

Для SMB-операционных журналов:

wevtutil sl Microsoft-Windows-SMBServer/Operational /e:true /ms:268435456
wevtutil sl Microsoft-Windows-SMBClient/Operational /e:true /ms:268435456

3.12. Проверка включенного аудита

Проверить текущие настройки:

auditpol /get /subcategory:"File Share"
auditpol /get /subcategory:"Detailed File Share"
auditpol /get /subcategory:"File System"
auditpol /get /subcategory:"Logon"

Посмотреть события в журнале безопасности:

Get-WinEvent -LogName Security -MaxEvents 50

Посмотреть только события 5140 и 5145:

Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    ID = 5140, 5145
} -MaxEvents 50

Посмотреть события за последние 24 часа:

Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    ID = 5140, 5145
    StartTime = (Get-Date).AddHours(-24)
}

3.13. Тестирование аудита

Создайте тестовую шару:

New-Item -Path C:\Shares\Docs -ItemType Directory -Force

New-SmbShare -Name Docs `
    -Path C:\Shares\Docs `
    -FullAccess "DOMAIN\FileServerAdmins" `
    -ReadAccess "DOMAIN\Domain Users" `
    -Description "Test SMB audit share"

С клиента подключитесь к шаре:

net use \\fileserver\Docs /user:DOMAIN\TestUser

Попробуйте открыть файл:

type \\fileserver\Docs\test.txt

Затем на сервере проверьте события:

Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    ID = 5140, 5145, 4624
} -MaxEvents 100 |
Select-Object TimeCreated, Id, MachineName, Message |
Format-List

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


3.14. PowerShell-скрипт для извлечения событий 5140/5145/4624/4625 в CSV

Сохраните как Export-SmbAuditEvents.ps1:

param(
    [string]$OutputCsv = "C:\audit\smb_audit_events.csv",
    [int]$DaysBack = 1
)

$ids = 5140, 5145, 4624, 4625

$startTime = (Get-Date).AddDays(-$DaysBack)

$filter = @{
    LogName   = "Security"
    ID        = $ids
    StartTime = $startTime
}

$events = Get-WinEvent -FilterHashtable $filter -ErrorAction SilentlyContinue

if (-not $events) {
    Write-Warning "No events found for IDs: $($ids -join ', ')"
    return
}

$rows = foreach ($evt in $events) {
    $xml = [xml]$evt.ToXml()

    $data = @{}

    foreach ($item in $xml.Event.EventData.Data) {
        if ($item.Name) {
            $data[$item.Name] = [string]$item.'#text'
        }
    }

    [PSCustomObject]@{
        TimeCreated     = $evt.TimeCreated
        EventID         = $evt.Id
        Computer        = $evt.MachineName
        User            = if ($data.SubjectUserName) { $data.SubjectUserName } else { $data.TargetUserName }
        Domain          = if ($data.SubjectDomainName) { $data.SubjectDomainName } else { $data.TargetDomainName }
        LogonType       = $data.LogonType
        IpAddress       = $data.IpAddress
        IpPort          = $data.IpPort
        ShareName       = $data.ShareName
        SharePath       = $data.SharePath
        RelativePath    = $data.RelativeTargetName
        AccessMask      = $data.AccessMask
        AccessList      = $data.AccessList
        AccessReason    = $data.AccessReason
        Status          = $data.Status
        AuthPackage     = $data.AuthenticationPackageName
        LogonProcess    = $data.LogonProcessName
        ProcessName     = $data.ProcessName
    }
}

$rows | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8

Write-Output "Exported $($rows.Count) events to $OutputCsv"



Запуск от администратора:

.\Export-SmbAuditEvents.ps1 -OutputCsv C:\audit\smb_audit_events.csv -DaysBack 1

Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта