Подробный гайд по аудиту SMB-трафика из PCAP через Python и Scapy - Часть 2
3. Настройка SMB-аудита в Windows Event Log
Это более правильный способ для аудита доступа к сетевым шарам и файлам.
3.1. Что именно будем аудировать
Для файлового сервера обычно важны:
- Успешные и неудачные сетевые входы.
- Подключения к общим папкам.
- Доступ к конкретным файлам.
- Отказы в доступе.
- Изменение прав и удаление объектов, если нужно.
Основные источники:
- 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 на файловой системе.
Через проводник
- Открыть свойства папки.
Security.Advanced.Auditing.Add.- Выбрать пользователя или группу.
- Указать тип аудита:
Success,Failureили оба. - Выбрать действия: чтение, запись, удаление и т.д.
- Применить к папке, подпапкам и файлам.
Через 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
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.