Windows и Linux — это музеи со стеклянными стенами, где каждый шаг, каждый клик, каждое открытие файла оставляет своеобразный отпечаток. Если вы администратор, системный инженер или просто хотите узнать, что происходило на вашей машине, когда вы не были рядом — у вас есть на это право. А инструментов для этого в системе достаточно, правда, не все знают, где их искать и как ими пользоваться правильно.
Эта статья посвящена аудиту локальной активности: как отследить процессы, сетевые соединения, доступ к файлам и даже попытки несанкционированного входа. Буду говорить о Windows 11, Windows Server 2022 и современном Linux — актуальных на 2025 год. Все методы основаны на официальной документации и форумах разработчиков, без магии и вымысла.
Важное предупреждение: эта информация предназначена для собственных систем, систем под вашей ответственностью и при соблюдении законодательства РФ об информационной безопасности (ФЗ-149 "Об информации, информационных технологиях и защите информации"). Для мониторинга сторонних систем нужны разрешения.
Как это работает: механика аудита
Windows: уровни логирования
Windows использует многоуровневую систему логирования, которая работает параллельно:
- Event Tracing for Windows (ETW) — это древо жизни системы. ETW перехватывает события на уровне ядра. Это работает так: процесс создаёт событие, ETW добавляет к нему метаданные (время, PID, TID, расход CPU), и информация попадает в буфер. ETW может логировать всё: создание процессов, загрузку DLL, сетевые соединения, обращение к реестру и диску. Встроенные инструменты вроде logman и Windows Performance Recorder говорят с ETW напрямую через специальные GUID провайдеров.
- Windows Event Log (журнал событий) — более высокоуровневое хранилище. Здесь лежат события безопасности (4624 — успешный вход, 4663 — доступ к файлам), системные события (сбои, перезагрузки), приложения. Журнал разделен на категории: Security, Application, System.
- Registry (реестр) — хранилище конфигурации, но также источник форензических артефактов. Здесь лежат: MRU-списки (последние файлы), AppCompatCache (Shimcache — запущенные программы), Prefetch ссылки.
- Файловая система и метаданные — временные метки (NTFS: Created, Modified, Accessed), Jump Lists (последние открытые документы), Prefetch файлы.
На Linux: auditd слушает системные вызовы (syscalls), /var/log хранит логи, /var/run/utmp и /var/log/wtmp логируют сессии.
Пошаговая инструкция: Windows
Шаг 1: Включение расширенного аудита безопасности
✅ Правильный подход: включить аудит там, где он действительно нужен.
Откройте командную строку от администратора и выполните:
# Проверить текущие настройки
AuditPol.exe /get /category:*
# Включить аудит создания процессов
AuditPol.exe /set /subcategory:"Process Creation" /success:enable /failure:enable
# Включить аудит доступа к объектам (файлам)
AuditPol.exe /set /subcategory:"File System" /success:enable
# Включить аудит входов в систему
AuditPol.exe /set /subcategory:"Logon" /success:enable /failure:enable
# Включить аудит сетевых соединений (для Sysmon)
AuditPol.exe /set /subcategory:"SAM" /success:enable /failure:enable
Это только первый уровень. На мой взгляд, здесь стоит добавить аудит через Group Policy Editor (gpedit.msc):
Путь: Computer Configuration → Policies → Windows Settings → Security Settings → Advanced Audit Policy Configuration → System Audit Policies.
Здесь включите:
- Account Logon → Credential Validation — узнаете, когда кто-то пытался войти.
- Detailed Tracking → Process Creation — каждый запущенный процесс.
- Object Access → File System — доступ к файлам.
- Object Access → Removable Storage — подключение USB.
- Logon/Logoff → Logon Events — вход и выход.
❌ Частая ошибка: включить всё подряд. Это убьёт диск логами и серьёзно замедлит систему. Сосредоточьтесь на том, что действительно важно.
🔖Дорогие гости и подписчики канала. Если наши материалы приносят вам пользу, вы всегда можете поддержать команду символическим переводом. Любая помощь мотивирует писать для Вас больше полезного и качественного контента безо всяких подписок.🙏🤝🙏🤝🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по QR-коду через СБП. Быстро, безопасно и без комиссии.(Александр Г.)
С уважением, Команда "Т.Е.Х.Н.О Windows & Linux".
Шаг 2: Event Tracing for Windows (ETW) для мониторинга в реальном времени
ETW — это мощный инструмент, который встроен в Windows. Вот как за ним наблюдать через PowerShell:
# Просмотр всех активных ETW сессий
logman query -ets
# Создать трассировку процессов (запустится в реальном времени)
logman start "ProcessTrace" -p "Windows Kernel Trace" "(process,thread)" -ets -o C:\traces\process.etl -mode circular -max 200
# Подождать несколько минут, потом остановить
logman stop "ProcessTrace" -ets
# Конвертировать ETL в читаемый CSV
tracerpt C:\traces\process.etl -o C:\traces\process.csv
Что даст эта трассировка? Вы увидите каждый запущенный процесс, родителя, команду, время. Это помощнее, чем Event Log, потому что захватывает всё, что было раньше, чем системе хватило ресурсов на логирование.
Шаг 3: Sysmon — инструмент кибербезопасности для мониторинга
Sysmon — это системный монитор от Sysinternals (Microsoft), который логирует события в Windows Event Log с огромной детализацией. Скачайте с официального репозитория Sysinternals.
Установка:
# Скачать Sysmon и конфиг
# https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon
sysmon.exe -accepteula -i
# Проверить установку
Get-Service Sysmon | Select-Object Status
После установки Sysmon логирует события в Windows Logs → Applications and Services Logs → Microsoft-Windows-Sysmon → Operational. Вот ключевые Event ID:
- Event ID 1 — Process Create. Видите PID, PPID, имя процесса, командную строку.
- Event ID 3 — Network Connection. IP адреса, порты, протоколы.
- Event ID 5 — Process Terminated.
- Event ID 7 — Image Loaded (загрузка DLL).
- Event ID 12/13 — Registry modifications.
- Event ID 22 — DNS queries.
Пример: искать все подключения на порт 443:
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=3; Message='*443*'} | Select-Object TimeCreated, Message | Sort-Object TimeCreated
Шаг 4: Анализ журналов безопасности через PowerShell
Вот скрипт, который вытащит все интересующие вас события за последний день:
$OneDayAgo = (Get-Date).AddDays(-1)
# Все входы в систему
$Logins = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624; StartTime=$OneDayAgo} |
Select-Object TimeCreated,
@{Name='User'; Expression={$_.Properties.Value}},
@{Name='LogonType'; Expression={$_.Properties.Value}},
@{Name='SourceIP'; Expression={$_.Properties.Value}}
# Все выходы
$Logoffs = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4634; StartTime=$OneDayAgo} |
Select-Object TimeCreated,
@{Name='User'; Expression={$_.Properties.Value}}
# Доступ к файлам (если включен аудит)
$FileAccess = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4663; StartTime=$OneDayAgo} |
Select-Object TimeCreated,
@{Name='User'; Expression={$_.Properties.Value}},
@{Name='FileName'; Expression={$_.Properties.Value}}
# Экспортировать в CSV
$Logins | Export-Csv -Path C:\Audit\logins.csv -NoTypeInformation
$Logoffs | Export-Csv -Path C:\Audit\logoffs.csv -NoTypeInformation
$FileAccess | Export-Csv -Path C:\Audit\fileaccess.csv -NoTypeInformation
Write-Host "Экспортировано записей входа: $($Logins.Count)"
Write-Host "Экспортировано записей выхода: $($Logoffs.Count)"
Write-Host "Экспортировано записей доступа к файлам: $($FileAccess.Count)"
⚠️ Важно: убедитесь, что аудит доступа к файлам включен через GPO, иначе Event ID 4663 не будет логироваться.
Шаг 5: Forensic артефакты — Prefetch и AppCompatCache
Prefetch — это файлы в C:\Windows\Prefetch\. Каждый Prefetch файл содержит:
- Имя программы.
- Когда она в последний раз запускалась (до 8 временных меток на Windows 8+).
- Сколько раз запускалась.
- Какие файлы программа открывала.
Пример парсинга (через PowerShell с библиотекой):
# Скачайте инструмент PECmd от Eric Zimmerman
# https://ericzimmerman.github.io/
# Парсинг всех Prefetch файлов
.\PECmd.exe -d "C:\Windows\Prefetch" -o .\output --csv
# CSV загрузится в output папку, откройте в Excel
Что видите? Все программы, которые когда-либо запускались на этой машине, и когда именно. Даже если человек потом удалил программу, Prefetch остаётся.
AppCompatCache (Shimcache) находится в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache
Вытащить можно через Registry Explorer от Eric Zimmerman или скриптом PowerShell:
# Получить путь к SYSTEM хиву
$RegPath = 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\AppCompatCache'
# Парсинг требует специализированного инструмента
# Используйте AppCompatCacheParser от Eric Zimmerman:
# https://ericzimmerman.github.io/
.\AppCompatCacheParser.exe -r "C:\Windows\System32\config\SYSTEM" -o .\shimcache.txt
Shimcache иначе называют "последняя надежда" форензики, потому что:
- Обновляется при перезагрузке.
- Хранит до 1024 записей (новые перезаписывают старые).
- Даже если файл удалён, Shimcache помнит о его существовании.
Документация говорит: в Windows 7+ AppCompatCache обновляется только при выключении/перезагрузке. На работающей системе новые записи есть только в памяти.
Шаг 6: Jump Lists и MRU — последние файлы
Jump Lists хранятся в:
%UserProfile%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\
Это бинарные файлы с расширением .automaticDestinations-ms. Они содержат LNK streams с информацией о последних открытых файлах и папках для каждого приложения.
Парсер JLECmd вытащит оттуда всё:
# Скачайте JLECmd от Eric Zimmerman
.\JLECmd.exe -d "C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Recent" --csv .\output
# Результаты в output\AutomaticDestinations.csv
В CSV вы увидите:
- Когда открывался файл (Last Modified в Jump List).
- Полный путь к файлу.
- Какая программа его открывала.
На мой взгляд, Jump Lists — это самый надёжный способ узнать, с какими именно документами работал пользователь.
Шаг 7: Сетевой мониторинг в реальном времени
Для Windows рекомендую Wireshark или встроенный netstat:
# Список всех активных соединений
netstat -ano | findstr "ESTABLISHED"
# Или через современную команду ss (если установлена)
ss -tuln | grep ESTABLISHED
# Узнать, какой процесс открыл соединение
Get-NetTCPConnection -State Established | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, @{Name='ProcessName'; Expression={(Get-Process -ID $_.OwningProcess).ProcessName}}
Для углубленного анализа:
# Через Sysmon (Event ID 3)
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=3} |
Select-Object TimeCreated,
@{Name='Image'; Expression={$_.Properties.Value}},
@{Name='RemoteIP'; Expression={$_.Properties.Value}},
@{Name='RemotePort'; Expression={$_.Properties.Value}} |
Sort-Object TimeCreated
Или через Wireshark:
# Запустить захват трафика
wireshark -i Ethernet -k &
# Или из командной строки
# Фильтр для всего трафика на порт 443
tshark -i Ethernet -f "tcp port 443" -c 100
Пошаговая инструкция: Linux
Шаг 1: Auditd — встроенный аудит ядра
auditd — это служба аудита ядра Linux. Она слушает системные вызовы и логирует их в /var/log/audit/audit.log.
Установка и включение (Ubuntu/Debian):
# Установить auditd
sudo apt update
sudo apt install auditd audispd-plugins
# Запустить сервис
sudo systemctl start auditd
sudo systemctl enable auditd
# Проверить статус
sudo service auditd status
Добавление правил аудита. Правила пишут в /etc/audit/rules.d/audit.rules:
# Отследить все вызовы execve (запуск процессов)
sudo auditctl -a always,exit -F arch=b64 -S execve -k process_execution
# Отследить открытие и модификацию файлов в /etc
sudo auditctl -w /etc/ -p wa -k etc_changes
# Отследить вход пользователей (PAM аудит)
sudo auditctl -w /var/log/faillog -p wa -k faillog_changes
sudo auditctl -w /var/log/lastlog -p wa -k lastlog_changes
# Отследить доступ к сетевым сокетам
sudo auditctl -a always,exit -F arch=b64 -S socket -S connect -k network_events
# Просмотр установленных правил
sudo auditctl -l
# Для постоянных правил добавьте в /etc/audit/rules.d/audit.rules и перезагрузитесь
sudo systemctl restart auditd
Чтение логов:
# Просмотр логов в реальном времени (последние 50 строк)
sudo tail -50 /var/log/audit/audit.log
# Поиск запусков процессов
sudo ausearch -k process_execution -ts today
# Поиск изменений в /etc
sudo ausearch -k etc_changes -ts today
# Отчёт по аудиту
sudo aureport -p
sudo aureport -f # файлы
sudo aureport -l # входы
Канал «Каморка Программиста» — это простые разборы программирования, языков, фреймворков и веб-дизайна. Всё для новичков и практиков.
Присоединяйся прямо сейчас.
Шаг 2: Логи сессий — wtmp, btmp, lastlog
На Linux три файла логируют активность входа:
- utmp (/var/run/utmp) — текущие активные сессии.
- wtmp (/var/log/wtmp) — история всех входов и выходов.
- btmp (/var/log/btmp) — история неудачных попыток входа.
- lastlog (/var/log/lastlog) — последний вход для каждого пользователя.
Просмотр:
# Текущие пользователи (из utmp)
who
# История входов и выходов
last -f /var/log/wtmp | head -50
# Неудачные попытки входа
lastb -f /var/log/btmp | head -50
# Последний вход конкретного пользователя
lastlog -u username
# Все пользователи и их последний вход
lastlog
Важно: эти файлы бинарные и кодируются специальным образом. На некоторых системах вас ждёт Y2038 issue (переполнение временной метки в 2038 году). Убедитесь, что система использует 64-битные временные метки. На мой взгляд, современные Debian/Ubuntu/Fedora уже это поддерживают.
Шаг 3: Systemd journal — логи приложений
Если система использует systemd (а это почти все современные дистрибутивы), логи хранятся в journald:
# Все логи за последний час
journalctl --since "1 hour ago"
# Логи конкретного сервиса (например, SSH)
journalctl -u ssh.service --since "1 day ago"
# Логи в реальном времени
journalctl -f
# Экспортировать в JSON
journalctl -o json-pretty --since "today" | head -100
# Поиск ошибок аутентификации
journalctl -p err --since "1 day ago"
# Всё про пользователя
journalctl _UID=1000 --since "today"
Шаг 4: Процессы и сетевые соединения
# Список всех запущенных процессов с PID и статусом
ps auxf
# Список открытых портов и соединений (lsof)
sudo lsof -i -P -n | grep ESTABLISHED
# Или через ss (более быстро)
ss -tuln | grep ESTABLISHED
# Какие процессы слушают на портах
sudo netstat -tulpn 2>/dev/null | grep LISTEN
# Процессы конкретного пользователя
ps -u username -f
# История команд пользователя
cat ~/.bash_history
# История bash во время сессии (HISTFILE)
history
Шаг 5: Osquery — запросы к системе через SQL
Osquery превращает систему в БД, которую можно запрашивать SQL:
# Установка (Ubuntu)
sudo apt install osquery
# Интерактивный режим
osqueryi
# Примеры запросов:
Внутри osqueryi:
sql-- Все процессы
SELECT pid, name, path FROM processes;
-- Процессы с сетевыми соединениями
SELECT p.pid, p.name, c.remote_address, c.remote_port
FROM process_open_sockets c
JOIN processes p ON c.pid = p.pid;
-- Пользователи в системе
SELECT * FROM users;
-- Установленные пакеты
SELECT name, version FROM packages;
-- Файлы в директории /home
SELECT * FROM file WHERE path LIKE '/home/%';
-- SSH ключи
SELECT * FROM ssh_keys;
Для постоянного мониторинга создайте конфиг /etc/osquery/osquery.conf:
json{
"schedule": {
"processes": {
"query": "SELECT pid, name, path FROM processes;",
"interval": 300
},
"connections": {
"query": "SELECT * FROM process_open_sockets WHERE remote_address NOT IN ('0.0.0.0', '127.0.0.1');",
"interval": 60
}
}
}
И запустите daemon:
sudo systemctl start osqueryd
sudo systemctl enable osqueryd
# Логи
tail -f /var/log/osquery/osqueryd.results.log
Практические советы из опыта
🚀 Оптимизация: Не логируйте всё подряд. На busy-сервере аудит буферов может переполниться, и вы потеряете критические события. Выберите конкретные категории: процессы, сетевые соединения, доступ к критичным файлам.
Корреляция во времени: Если вы нашли подозрительный процесс в Prefetch, посмотрите Event Log 4688 (Process Creation) в то же время. Если есть совпадение — это был реальный запуск, а не ошибка.
Резервное копирование логов: Windows Event Log по умолчанию хранит 20 МБ на категорию. Экспортируйте логи регулярно, иначе старые события перезапишутся.
На Linux используйте logrotate для ротации журналов:
sudo vim /etc/logrotate.d/audit
# Добавьте:
/var/log/audit/audit.log {
daily
rotate 30
compress
delaycompress
notifempty
create 0640 root adm
}
Безопасность и откат
⚠️ Будьте осторожны с Enable-PSRemoting — это открывает WinRM на портах 5985/5986. Если вы случайно включили удалённое управление PowerShell, отключите:
Disable-PSRemoting -Force
Отключение аудита (если что-то пошло не так):
# Windows
AuditPol.exe /clear /y
# Или через GPO: отключить все политики аудита
Linux:
# Отключить auditd
sudo systemctl stop auditd
sudo systemctl disable auditd
# Очистить логи (ВНИМАНИЕ! Безвозвратно)
sudo truncate -s 0 /var/log/audit/audit.log
Документация Microsoft говорит: изменения в аудит политике вступают в силу сразу на работающей системе, но для некоторых подсистем нужна перезагрузка.
Производительность и метрики
Сколько ресурсов жрёт активное логирование? Вот реальные числа на базовой машине (8 ГБ RAM, SSD):
Узкое место: диск. Если вы логируете 500 МБ в час, за месяц накопится 360 ГБ. Используйте сжатие (gzip для Linux) и отправляйте логи на SIEM, если это критично.
Совет: для долгосрочного мониторинга используйте selective logging — логируйте только интересующие события.
Код и конфиги
PowerShell: полная функция для экспорта событий
function Export-SecurityAudit {
param(
[int]$Days = 7,
[string]$OutputPath = "C:\Audit"
)
if (!(Test-Path $OutputPath)) { New-Item -ItemType Directory -Path $OutputPath -Force | Out-Null }
$StartTime = (Get-Date).AddDays(-$Days)
Write-Host "[*] Экспортирование событий за последние $Days дней..."
# Логины
$Logins = Get-WinEvent -FilterHashtable @{
LogName='Security'
ID=4624
StartTime=$StartTime
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated,
@{N='User'; E={$_.Properties.Value}},
@{N='LogonType'; E={$_.Properties.Value}},
@{N='SourceIP'; E={$_.Properties.Value}}
$Logins | Export-Csv "$OutputPath\Logins.csv" -NoTypeInformation
Write-Host "[+] Экспортировано логинов: $($Logins.Count)"
# Процессы (если Sysmon установлен)
$Processes = Get-WinEvent -FilterHashtable @{
LogName='Microsoft-Windows-Sysmon/Operational'
ID=1
StartTime=$StartTime
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated,
@{N='Process'; E={$_.Properties.Value}},
@{N='CommandLine'; E={$_.Properties.Value}},
@{N='ParentProcess'; E={$_.Properties.Value}}
$Processes | Export-Csv "$OutputPath\Processes.csv" -NoTypeInformation
Write-Host "[+] Экспортировано процессов: $($Processes.Count)"
# Сетевые соединения (Sysmon)
$Network = Get-WinEvent -FilterHashtable @{
LogName='Microsoft-Windows-Sysmon/Operational'
ID=3
StartTime=$StartTime
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated,
@{N='Process'; E={$_.Properties.Value}},
@{N='RemoteIP'; E={$_.Properties.Value}},
@{N='RemotePort'; E={$_.Properties.Value}}
$Network | Export-Csv "$OutputPath\Network.csv" -NoTypeInformation
Write-Host "[+] Экспортировано соединений: $($Network.Count)"
Write-Host "[✓] Аудит завершён. Файлы сохранены в $OutputPath"
}
# Использование
Export-SecurityAudit -Days 7 -OutputPath "C:\Audit"
Bash: скрипт для Linux мониторинга
#!/bin/bash
# audit_report.sh — генерация отчёта по активности
OUTPUT_DIR="/tmp/audit_report"
HOURS=24
mkdir -p $OUTPUT_DIR
echo "[*] Сбор аудита за последние $HOURS часов..."
# Входы в систему
echo "=== Входы ===" > $OUTPUT_DIR/logins.txt
lastlog | head -20 >> $OUTPUT_DIR/logins.txt
# Неудачные попытки
echo "=== Неудачные входы ===" > $OUTPUT_DIR/failed_logins.txt
lastb -t -$HOURS:00 >> $OUTPUT_DIR/failed_logins.txt
# Запущенные процессы (из auditd)
echo "=== Процессы ===" > $OUTPUT_DIR/processes.txt
sudo ausearch -k process_execution -ts recent >> $OUTPUT_DIR/processes.txt 2>/dev/null
# Изменения конфигов
echo "=== Изменения в /etc ===" > $OUTPUT_DIR/etc_changes.txt
sudo ausearch -k etc_changes -ts recent >> $OUTPUT_DIR/etc_changes.txt 2>/dev/null
# Сетевые соединения
echo "=== Активные соединения ===" > $OUTPUT_DIR/network.txt
ss -tulpn >> $OUTPUT_DIR/network.txt
# История команд
echo "=== История bash ===" > $OUTPUT_DIR/bash_history.txt
cat ~/.bash_history | tail -100 >> $OUTPUT_DIR/bash_history.txt
# Systemd события
echo "=== Systemd события ===" > $OUTPUT_DIR/systemd.txt
journalctl --since "$HOURS hours ago" -p err >> $OUTPUT_DIR/systemd.txt
echo "[✓] Отчёт сохранён в $OUTPUT_DIR"
echo "Файлы:"
ls -lh $OUTPUT_DIR/
Использование:
chmod +x audit_report.sh
./audit_report.sh
Типичные ошибки и диагностика
❌ Ошибка: "Event ID 4663 не появляется в логах"
Решение: проверьте, включен ли аудит доступа к объектам:
AuditPol.exe /get /subcategory:"File System"
# Должно быть: Success и/или Failure
Если нет, включите:
AuditPol.exe /set /subcategory:"File System" /success:enable
❌ Ошибка: "Sysmon логирует слишком много, диск переполнен"
Решение: отредактируйте конфиг Sysmon, чтобы исключить шумные события:
XML:
<!-- C:\ProgramData\Sysmon\config.xml -->
<Sysmon schemaversion="4.81">
<EventFiltering>
<!-- Исключить System.exe из логирования -->
<ProcessCreate onmatch="exclude">
<Image condition="is">C:\Windows\System32\System32.exe</Image>
</ProcessCreate>
</EventFiltering>
</Sysmon>
Перезагрузить Sysmon:
sysmon.exe -c C:\ProgramData\Sysmon\config.xml
❌ Ошибка: "ausearch на Linux возвращает пустой результат"
Решение: проверьте, запущена ли служба и добавлены ли правила:
sudo service auditd status
sudo auditctl -l
Если список правил пустой, добавьте их и перезагрузитесь:
sudo auditctl -a always,exit -F arch=b64 -S execve -k process_execution
sudo systemctl restart auditd
❌ Ошибка: "Jump Lists показывают неправильные даты"
Причина: временные метки в Jump Lists могут быть смещены на +10 секунд (время, которое Prefetch отслеживает процесс). Это нормально.
❌ Ошибка: "Prefetch файлы старше месяца исчезают"
Причина: Windows по умолчанию удаляет Prefetch файлы старше 30 дней. Если нужно больше истории, отключите это через реестр:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" -Name "SfTraceDisable" -Value 0
Или используйте archiveprefetchfiles (требует перезагрузки).
Чек-лист применения
Перед внедрением полного аудита проверьте:
✅ Достаточно ли на диске места (минимум 10% свободно).
✅ Включена ли архивация логов (Event Log настроена на циклическую запись).
✅ Нет ли уже работающих конфликтующих агентов (EDR, SIEM).
✅ Определены ли ключевые события для вашей организации (не логируйте весь шум).
✅ Настроен ли экспорт логов на централизованное хранилище (если требуется).
✅ Обучены ли нужные люди читать логи и реагировать на инциденты.
✅ Задокументирована ли процедура активации/деактивации аудита.
✅ Протестирована ли процедура восстановления из логов (знаете ли вы, как это делается?).
FAQ
Практические примеры из опыта
Случай 1: Подозрение на несанкционированный доступ
Нашли странный процесс updater.exe в панели задач. Что делать?
- Запустите tasklist /v | findstr "updater" — найдёте PID и время запуска.
- Ищите в Event Log событие 4688 с этим временем и PID.
- Посмотрите родителя процесса (ParentProcessId) в том же событии.
- Проверьте Prefetch файл для этого процесса: C:\Windows\Prefetch\UPDATER.EXE-*.pf. Если его там нет, значит, это первый запуск после последней переиндексации.
- Ищите в Sysmon Event ID 1 (Process Create) с именем updater.exe.
- Получили сетевые соединения? Ищите в Sysmon Event ID 3 или через netstat -ano.
Результат: собрали timeline из 5+ источников. Если все события совпадают по времени, это был реальный запуск. Если есть несовпадения — возможна попытка манипулирования временными метками.
Случай 2: Утечка данных через USB
Нужно узнать, что человек копировал на флешку.
- Включите аудит Removable Storage:
- AuditPol.exe /set /subcategory:"Removable Storage" /success:enable
- Ищите Event ID 4663 (доступ к файлам) с фильтром по букве диска USB (обычно E:, F:, G:, но может быть любая):
- Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4663; Message='*E:*'}
- В сообщении события увидите: кто копировал (User), какой файл (Object Name), в какой момент (Time Created).
- Дополнительно: проверьте USB в Device Manager или Event ID 6416 (в Microsoft-Windows-DriverFrameworks-UserMode/Operational), чтобы узнать, когда флешка подключалась.
Результат: полная карточка утечки: когда подключена флешка, какие файлы копировались, когда отключена.
Случай 3: Анализ брута SSH на Linux сервер
# Смотрим неудачные попытки входа за последние сутки
sudo lastb -t -24:00 | head -100
# Если их много, ищем IP источники
sudo lastb -t -24:00 | awk '{print $3}' | sort | uniq -c | sort -rn | head -10
# Более детальный анализ через journalctl
sudo journalctl _SYSTEMD_UNIT=sshd.service -p err --since "24 hours ago" | grep "Invalid user\|Failed password"
# Посмотреть, какие IP попытались подключиться
sudo journalctl _SYSTEMD_UNIT=sshd.service --since "24 hours ago" | grep "sshd\[" | grep "port" | awk '{print $(NF-2)}' | sort | uniq -c | sort -rn | head
# Если нужны все детали (user, IP, попытка, время)
sudo journalctl _SYSTEMD_UNIT=sshd.service --since "24 hours ago" -o json-pretty | jq '.MESSAGE' | grep -E "(Invalid|Failed|Accepted)"
Результат: список IP адресов, которые пытались подобрать пароль, и сколько попыток было.
Вывод
Мониторинг активности компьютера — это не магия, а вполне строгая наука, основанная на официальных API систем. Windows и Linux специально оставляют нам следы своей деятельности, потому что без них было бы невозможно отладить систему, ловить хакеров и соблюдать compliance.
Ключ к успеху — знать, где искать и что искать. Event Log, ETW, Sysmon, Prefetch на Windows; auditd, wtmp, journalctl на Linux — это ваши лучшие друзья.
На мой взгляд, идеальный setup для критичной системы — это комбинация Sysmon (Windows) / auditd (Linux) + централизованный SIEM (даже ELK stack на своём сервере). Это даст вам и историю, и real-time detection, и защиту логов от удаления.
Помните: логи — это не просто цифры, это рассказ о том, что произошло на вашей машине. Научитесь их читать, и вы больше никогда не будете гадать, кто и что делал.
Если у вас есть вопросы по специфике вашей среды или нужна помощь с практической реализацией — добро пожаловать в комментарии. Буду рад помочь с диагностикой конкретных ситуаций.
Подписывайтесь на канал T.E.X.H.O Windows & Linux на Яндекс.Дзене для новых материалов по системной администрации, forensics и кибербезопасности.
#WindowsAudit #Linux #Forensics #EventLog #Sysmon #Auditd #Security #SystemAdministration #Troubleshooting #ActiveDirectory #Compliance #DigitalForensics #NetworkMonitoring #LogAnalysis #TechBlog #WindowsSecurity #LinuxSecurity #PowerShell #Bash #Monitoring #IncidentResponse #CyberSecurity #AdminTools #Wireshark #ETW #Prefetch #JumpLists #SSH #RDP #SIEM #DataAnalysis