System Monitor (Sysmon) to wszechstronne narzędzie diagnostyczne i bezpieczeństwa opracowane przez Microsoft, zaprojektowane do szczegółowego śledzenia zdarzeń na poziomie systemu operacyjnego. Działa jako usługa systemowa i sterownik urządzenia, rejestrując kluczowe zdarzenia związane z tworzeniem procesów, połączeniami sieciowymi, modyfikacjami plików oraz aktywnością rejestru. Jego architektura opiera się na mechanizmach kernel-mode i user-mode, co pozwala na przechwytywanie danych nawet podczas wczesnych etapów rozruchu systemu.
Architektura i mechanizmy działania Sysmon
Komponenty systemowe
Sysmon składa się z dwóch głównych elementów: sterownika urządzenia (driver) działającego w trybie jądra oraz usługi systemowej (service) działającej w trybie użytkownika. Sterownik przechwytuje zdarzenia na niskim poziomie, takie jak operacje na procesach czy dostęp do dysku, podczas gdy usługa odpowiada za przetwarzanie i zapisywanie tych zdarzeń w dzienniku zdarzeń Windows (Event Log).
Integracja z jądrem systemu
Sterownik Sysmon wykorzystuje mechanizmy Event Tracing for Windows (ETW) oraz filtering platform do monitorowania wywołań systemowych. Przechwytuje takie zdarzenia jak:
- NtCreateProcess – tworzenie nowych procesów,
- NtCreateFile – operacje na plikach,
- NtDeviceIoControlFile – komunikacja z urządzeniami.
Dane te są przekazywane do usługi poprzez Alpc porty, zapewniając izolację od potencjalnych manipulacji ze strony oprogramowania działającego w trybie użytkownika.
Proces rejestracji zdarzeń
Każde zdarzenie generowane przez Sysmon zawiera rozbudowane metadane, w tym:
- Identyfikator GUID procesu – umożliwia śledzenie relacji rodzic-dziecko nawet przy ponownym wykorzystaniu PID,
- Skróty kryptograficzne (SHA1, SHA256) plików wykonywalnych,
- Sygnatury cyfrowe modułów ładowanych do pamięci.
Przykładowy schemat zdarzenia procesu:
„`xml
## Kluczowe funkcje monitorowania ### Śledzenie tworzenia procesów (Event ID 1) Sysmon rejestruje każdy nowy proces z pełną ścieżką wykonywalną, argumentami wiersza poleceń oraz skrótami kryptograficznymi. Pozwala to na wykrywanie: - **Iniekcji kodu** poprzez analizę niestandardowych ścieżek rodzic-dziecko, - **Living-off-the-land** (LOLBin) – wykorzystania legalnych narzędzi systemowych do złośliwych celów, - **Podmianę plików wykonywalnych** poprzez porównanie skrótów z bazą znanych wartości. ### Monitorowanie połączeń sieciowych (Event ID 3) Narzędzie rejestruje: - Adresy IP źródłowe i docelowe, - Numery portów z odwzorowaniem na nazwy usług (np. 443 → HTTPS), - Identyfikator procesu inicjującego połączenie. Dane te umożliwiają wykrywanie komunikacji z podejrzanymi domenami C2 (Command and Control) oraz analizę ruchu lateralnego w sieci. ### Detekcja manipulacji plikami (Event ID 2, 11) Sysmon identyfikuje: - Zmiany znaczników czasowych plików (timestamp forgery), - Tworzenie plików w lokalizacjach systemowych, - Operacje zapisu do pamięci masowej z pominięciem cache (raw disk access). ### Nadzór nad rejestrem systemowym (Event ID 12-14) Monitorowane klucze rejestru obejmują: - `HKLM\Software\Microsoft\Windows\CurrentVersion\Run` – autostart aplikacji, - `HKCR\batfile\shell\open\command` – asocjacje plików, - `HKLM\SYSTEM\CurrentControlSet\Services` – sterowniki kernel-mode. ## Konfiguracja i dostosowywanie ### Schemat pliku XML Konfiguracja Sysmon opiera się na pliku XML zdefiniowanym zgodnie ze schematem:
xml
#### Operatory filtrowania - **contains** – częściowe dopasowanie ciągu znaków, - **begin with** – prefiks, - **end with** – sufiks, - **is** – dokładne dopasowanie, - **any** – lista wartości rozdzielonych przecinkami. ### Implementacja zaawansowanych reguł Przykład reguły wykrywającej podejrzane aktywności:
xml
## Integracja z systemami SIEM ### Parsowanie danych w Splunku Przykład transformacji danych dla Splunk:
sql index=epintel EventID=1 | eval ProcessGuid=substr(ProcessGuid, 2, 36) | lookup process_mapping.csv ProcessGuid OUTPUT ParentProcessGuid | stats count by Image, CommandLine
### Korelacja zdarzeń w ELK Stack Filtry Logstash dla Sysmon:
ruby filter { if [event][dataset] == „sysmon” { grok { match => { „message” => „%{SYSMONEVENT}” } } fingerprint { source => „[process][hash]” target => „[process][hashfp]” method => „SHA256” } } } „`
Analiza przypadków użycia
Wykrywanie ataków ransomware
- Monitorowanie masowego tworzenia plików z rozszerzeniem
.encrypted(Event ID 11), - Identyfikacja procesów modyfikujących MFT (Master File Table),
- Korelacja z połączeniami do TOR exit nodes (Event ID 3).
Badanie incydentów APT
- Rekonstrukcja łańcucha procesów z wykorzystaniem ProcessGuid,
- Analiza czasowa zdarzeń z wykorzystaniem SessionGuid,
- Wykrywanie DLL side-loading poprzez Event ID 7.
Ograniczenia i środki zaradcze
Ryzyka związane z wydajnością
- Nadmierne wykorzystanie CPU przy>50,000 zdarzeń/minutę – rozwiązanie: optymalizacja reguł filtrowania,
- Wzrost rozmiaru dzienników >10 GB/dzień – implementacja rotacji plików EVTX.
Techniki unikania wykrycia
- Manipulacja Event Tracing poprzez narzędzia typu TamperETW,
- Usuwanie sterownika Sysmon z użyciem rootkitów kernel-mode – przeciwdziałanie: tryb Protected Process.
Perspektywy rozwojowe
Rozszerzenia dla systemu Linux
Wersja Sysmon dla Linux wykorzystuje framework eBPF do monitorowania:
- Wywołań systemowych (syscall hooking),
- Operacji na namespace’ach kontenerów,
- Modyfikacji plików konfiguracyjnych systemu.
Integracja z chmurą hybrydową
- Logowanie zdarzeń z maszyn wirtualnych Azure/AWS do centralnego SIEM,
- Korelacja z danymi z usług cloudowych (Azure Activity Log, AWS CloudTrail).
Podsumowanie
Sysmon stanowi kluczowy element współczesnych systemów wykrywania i reagowania na incydenty (EDR). Jego zdolność do rejestrowania szczegółowych danych o aktywności systemowej, połączona z elastycznymi mechanizmami konfiguracyjnymi, czyni go niezastąpionym narzędziem w arsenale specjalistów bezpieczeństwa. Wdrożenie efektywnej strategii monitorowania wymaga jednak głębokiego zrozumienia zarówno możliwości samego narzędzia, jak i specyfiki badanych środowisk IT.