Zabezpieczanie danych z działającego kontrolera domeny¶
Procedura opisuje sposób zabezpieczenia danych z działającego kontrolera domeny. Obejmuje artefakty charakterystyczne dla roli kontrolera domeny oraz wszystkie artefakty systemowe Windows. Każda sekcja zawiera opis artefaktu oraz polecenia jego pozyskania. Szczegółowe informacje o artefaktach znajdują się w sekcji Artefakty.
NIE URUCHAMIAJ WYŁĄCZONEGO URZĄDZENIA
Jeżeli urządzenie było połączone z zaatakowaną domeną lub siecią, mogło zostać skompromitowane. W takim przypadku nie jest zalecane uruchomienie go przed ustaleniem zakresu incydentu. Należy uznać je za skompromitowane i poddać analizie. Uruchomienie takiego urządzenia może spowodować zaszyfrowanie danych przez szkodliwe oprogramowanie, nawet jeśli urządzenie jest odłączone od sieci wewnętrznej instytucji.
Jeżeli urządzenie nie jest objęte atakiem ransomware, samo uruchomienie systemu operacyjnego może nadpisać kluczowe dla analizy dane, takie jak dzienniki zdarzeń czy pliki usunięte przez atakującego.
Zalecanym rozwiązaniem jest przekazanie dysków z takiego urządzenia lub całego urządzenia do wyspecjalizowanej instytucji, która zabezpieczy dane znajdującie się na dyskach w sposób nie nadpisujący ich zawartości, bez uruchamiania systemu.
| Zakres zabezpieczenia | Szczegóły |
|---|---|
| dzienniki zdarzeń | wszystkie dzienniki zapisywane w lokalizacji C:\Windows\System32\winevt\logs |
| informacje o kontrolerze domeny | rola FSMO, właściwości domeny, kontrolera i lasu, kluczowe do oceny incydentu w infrastrukturze korzystającej z Active Directory |
| bazy kontrolera domeny | baza danych Active Directory (NTDS.dit) wraz z hive SYSTEM, kluczowa przy analizie potencjalnych działań atakującego na kontrolerze domeny |
| konta i grupy domenowe | listy użytkowników, grup i komputerów w domenie pozwalające wykryć konta dodane przez atakującego oraz wykonane przez niego zmiany uprawnień |
| obiekty Group Policy | obiekty GPO, modyfikowane przez atakujących w celu rozprzestrzenienia zmian na całą domenę |
| podstawowe informacje o urządzeniu | nazwa hosta, wersja systemu operacyjnego, strefa czasowa oraz unikalny identyfikator urządzenia (UUID) stanowiące punkt wyjścia do dalszej analizy |
| procesy i usługi | uruchomione programy pozwalające ustalić, czy na urządzeniu uruchomiono niepożądane oprogramowanie |
| połączenia sieciowe | aktywne połączenia, nasłuchujące porty, tablica ARP, reguły zapory sieciowej i routing |
| konta i grupy | lokalne listy użytkowników i grup pozwalające wykryć konta dodane przez atakującego w celu utrzymania dostępu |
| zaplanowane zadania | wpisy harmonogramu zadań, mechanizmu pozwalającego odnawiać dostęp atakującemu do przejętego urządzenia |
| rejestry | pliki hive rejestru zawierające konfigurację systemu, kont użytkowników i uruchamianych programów |
| prefetche | pliki Prefetch wskazujące programy, które były uruchamiane w systemie wraz ze ścieżkami, liczbą uruchomień i ładowanymi bibliotekami dll. |
| historiia poleceń | pliki historii powłok użytkowników pozwalające odtworzyć polecenia wykonane przez atakującego po uzyskaniu dostępu do powłoki |
| listing plików | metadane wszystkich plików pozwalające zbudować oś czasu zmian w systemie plików i zlokalizować niepożądane pliki |
Wymagania¶
- Uruchomione urządzenie
- Dostęp do konta z uprawnieniami administratora domeny
Wymagane narzędzia¶
- Urządzenie docelowe (nośnik USB, dysk zewnętrzny), na które zostaną zabezpieczone dane.
Rozpoczęcie procedury¶
Przed rozpoczęciem procedury należy spełnić poniższe warunki:
- Terminal powłoki powershell jest uruchomiony z uprawnieniami administratora. Najszybsza metoda uruchomienia terminala to użycie skrótu klawiszowego Win + X i wybranie Windows Terminal (Administrator) i wykonanie polecenia
powershell. - Na nośniku docelowym utworzony został katalog o nazwie badanego urządzenia np.
Sekretariat-PC. - Zmienna
$nosnikwskazuje na katalog docelowy na zewnętrznym nośniku, w przeciwnym wypadku należy przypisać ją poniższym poleceniem
Należy rozpocząć nagrywanie transkryptu sesji PowerShell na nośniku docelowym. Transkrypt zapisuje wszystkie wykonywane polecenia wraz z ich wyjściem do pliku tekstowego, co dokumentuje przebieg zabezpieczania danych.
$nosnik = "<katalog docelowy na zewnętrznym nośniku>" # Przykład: $nosnik=F:\DC01
Start-Transcript -Path $nosnik\session.log -NoClobber
Dzienniki zdarzeń¶
Wszystkie dzienniki zdarzeń znajdujące się w domyślnej lokalizacji w systemie Windows.
Uwaga
Aby przekazać kompletne dzienniki zdarzeń, zalecamy postępowanie zgodnie z instrukcją. Wykorzystanie innych metod eksportu może skutkować przesłaniem niepełnych plików.
Poniższe polecenie kopiuje całą zawartość katalogu Logs (pliki .evtx) na nośnik docelowy.
Uwaga
Przed rozpoczęciem procedury podłącz czysty nośnik zewnętrzny, na który zostaną zapisane zabezpieczane dane.
Aby przeprowadzić operację zabezpieczenia dzienników zdarzeń z systemu Windows przy pomocy interfejsu graficznego, należy otworzyć eksplorator plików i przejść do katalogu z dziennikami zdarzeń systemu operacyjnego. Standardową ścieżką katalogu z dziennikami zdarzeń jest:
Następnie należy skopiować katalog o nazwie Logs do miejsca docelowego, w którym będzie możliwe utworzenie archiwum z danymi. Tę operację można przeprowadzić poprzez kliknięcie katalogu Logs prawym przyciskiem myszy oraz wybranie opcji Kopiuj, a następnie kliknięcie prawym przyciskiem w miejscu docelowym i wybranie opcji Wklej.
Eksplorator plików otwarty w katalogu
C:\Windows\System32\winevt.
Z uwagi na restrykcyjne prawa dostępu do katalogu Logs system operacyjny może poprosić o uprawnienia administratora celem przeprowadzenia operacji kopiowania. Aby to zrobić, należy zaznaczyć opcję Wykonaj dla wszystkich elementów bieżących, a następnie kliknąć Kontynuuj.
Zapytanie o uprawnienia administratora podczas kopiowania katalogu Logs
Następnie ze skopiowanego folderu zawierającego dzienniki zdarzeń systemu Windows należy utworzyć archiwum. Aby to zrobić, naciśnij prawym przyciskiem myszy na katalog z logami (znajdujący się na nośniku zewnętrznym), wybierz Wyślij do → Folder skompresowany (zip)
Zaleca się zmianę nazwy archiwum według konwencji:
Zmiana nazwy archiwum zgodnie z konwencją nazewnictwa
Informacje o kontrolerze domeny¶
Rola FSMO, właściwości domeny, kontrolera i lasu, kluczowe do oceny zasięgu incydentu w Active Directory.
Zabezpieczenie ról FSMO¶
Poniższe polecenie wypisuje role FSMO przypisane do kontrolera domeny. Wyjście polecenia zapisywane jest do pliku fsmo.txt na nośniku docelowym.
Zabezpieczenie właściwości domeny¶
Poniższe polecenie wypisuje właściwości domeny. Wyjście polecenia zapisywane jest do pliku addomain.txt na nośniku docelowym.
Zabezpieczenie właściwości kontrolera domeny¶
Poniższe polecenie wypisuje właściwości badanego kontrolera domeny. Wyjście polecenia zapisywane jest do pliku addc.txt na nośniku docelowym.
Get-ADDomainController > $nosnik\addc.txt 2>> "$nosnik\error.log"
Zabezpieczenie właściwości lasu¶
Poniższe polecenie wypisuje właściwości lasu domeny. Wyjście polecenia zapisywane jest do pliku adforest.txt na nośniku docelowym.
Baza kontrolera domeny¶
Baza danych Active Directory (NTDS.dit) wraz z hive SYSTEM, kluczowa przy analizie potencjalnych działań atakującego na kontrolerze domeny.
Utworzenie migawki woluminu¶
Poniższe polecenie tworzy migawkę woluminu C: i pobiera ścieżkę urządzenia migawki oraz jej identyfikator. Ścieżka urządzenia ma postać \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN.
$snapshot = vssadmin create shadow /for=C: 2>> "$nosnik\error.log"
$shadowDevice = (($snapshot | Select-String "Shadow Copy Volume Name:").Line -split "Shadow Copy Volume Name: ")[1].Trim()+"\"
cmd /c mklink /d C:\shadow $shadowDevice 2>> "$nosnik\error.log"
Zabezpieczenie bazy NTDS.dit¶
Poniższe polecenie kopiuje zawartość katalogu bazy danych Active Directory z migawki na nośnik zewnętrzny, do folderu NTDS.
Copy-Item "C:\shadow\Windows\NTDS\" -Destination $nosnik -Recurse -Force 2>> "$nosnik\error.log"
Zabezpieczenie hive SYSTEM¶
Poniższe polecenie kopiuje hive SYSTEM rejestru z migawki na nośnik zewnętrzny. Hive ten jest niezbędny do odszyfrowania bazy NTDS.dit w narzędziach analizy offline.
Copy-Item "C:\shadow\Windows\System32\config\SYSTEM" "$nosnik" -Force 2>> "$nosnik\error.log"
Usunięcie podlinkowanego folderu¶
Poniższe polecenie usuwa folder, do którego został zalinkowany wolumin shadow copy.
Konta i grupy domenowe¶
Listy użytkowników, grup i komputerów w domenie pozwalające wykryć konta oraz zmiany uprawnień.
Zabezpieczenie listy kont użytkowników¶
Poniższe polecenie zwraca wszystkie konta użytkowników w domenie wraz ze wszystkimi atrybutami i zapisuje je do pliku CSV na nośniku docelowym.
Get-ADUser -Filter * -Properties * | Export-Csv "$nosnik\domain_users.csv" -NoTypeInformation -Encoding UTF8 2>> "$nosnik\error.log"
Zabezpieczenie listy grup¶
Poniższe polecenie zwraca wszystkie grupy w domenie wraz z ich atrybutami i zapisuje je do pliku CSV na nośniku docelowym.
Get-ADGroup -Filter * -Properties * | Export-Csv "$nosnik\domain_groups.csv" -NoTypeInformation -Encoding UTF8 2>> "$nosnik\error.log"
Zabezpieczenie listy kont komputerów¶
Poniższe polecenie zwraca wszystkie konta komputerów w domenie wraz z ich atrybutami i zapisuje je do pliku CSV na nośniku docelowym.
Get-ADComputer -Filter * -Properties * | Export-Csv "$nosnik\domain_computers.csv" -NoTypeInformation -Encoding UTF8 2>> "$nosnik\error.log"
Zabezpieczenie członkostw w grupach¶
Poniższe polecenie wypisuje członków wszystkich grup w domenie i zapisuje je do pliku CSV na nośniku docelowym. Pozwala to odtworzyć, które konta należały do grup uprzywilejowanych w momencie zabezpieczenia.
Get-ADGroup -Filter * | ForEach-Object { $group = $_.Name; Get-ADGroupMember $group -ErrorAction SilentlyContinue | Select-Object @{N="Group";E={$group}}, Name, SamAccountName, ObjectClass } | Export-Csv "$nosnik\domain_group_members.csv" -NoTypeInformation -Encoding UTF8 2>> "$nosnik\error.log"
Obiekty Group Policy¶
Obiekty GPO, modyfikowane przez atakujących w celu rozprzestrzenienia zmian na całą domenę.
Zabezpieczenie kopii zapasowej obiektów GPO¶
Poniższe polecenie tworzy kopię zapasową wszystkich obiektów GPO w domenie w katalogu GPO na nośniku zewnętrznym.
$dst = "$nosnik\GPO"
New-Item -ItemType Directory -Path $dst -Force | Out-Null
Backup-GPO -All -Path $dst 2>> "$nosnik\error.log"
Zabezpieczenie listy obiektów GPO¶
Poniższe polecenie wypisuje wszystkie obiekty GPO w domenie wraz z ich właściwościami. Wyjście polecenia zapisywane jest do pliku gpo_list.txt na nośniku docelowym.
Podstawowe informacje o urządzeniu¶
Nazwa hosta, wersja systemu operacyjnego oraz strefa czasowa stanowiące punkt wyjścia do dalszej analizy.
Zabezpieczenie informacji o urządzeniu¶
Poniższe polecenie wypisuje informacje o urządzeniu, w tym unikalny identyfikator (UUID) pochodzący z SMBIOS. Wyjście polecenia zapisywane jest do plików win32_computersystem.txt oraz win32_computersystemproduct.txt na nośniku docelowym.
Get-WmiObject -Class Win32_ComputerSystem | Format-list * > $nosnik\win32_computersystem.txt 2>> "$nosnik\error.log"
Get-WmiObject -Class Win32_ComputerSystemProduct | Format-list * > $nosnik\win32_computersystemproduct.txt 2>> "$nosnik\error.log"
Zabezpieczenie informacji o systemie¶
Poniższe polecenie wypisuje zbiorcze informacje o systemie operacyjnym. Wyjście polecenia zapisywane jest do pliku computerInfo.txt oraz Win32_OperatingSystem.txt na nośniku docelowym.
Get-ComputerInfo > $nosnik\computerInfo.txt 2>> "$nosnik\error.log"
Get-WmiObject -Class Win32_OperatingSystem | format-list * > $nosnik\Win32_OperatingSystem.txt 2>> "$nosnik\error.log"
Procesy i usługi¶
Informacje o uruchomionych programach pozwalające ustalić, czy na urządzeniu uruchomiono niepożądane oprogramowanie.
Zabezpieczenie informacji o procesach¶
Poniższe polecenie wypisuje informacje o wszystkich uruchomionych procesach. Wyjście polecenia zapisywane jest do pliku processes.txt na nośniku docelowym.
Get-CimInstance Win32_Process | Select-Object ProcessId, ParentProcessId, Name, CommandLine, ExecutablePath, CreationDate | Format-List > $nosnik\processes.txt 2>> "$nosnik\error.log"
Zabezpieczenie informacji o usługach¶
Poniższe polecenie wypisuje informacje o wszystkich usługach zarejestrowanych w systemie. Wyjście polecenia zapisywane jest do pliku services.txt na nośniku docelowym.
Połączenia sieciowe¶
Aktywne połączenia, nasłuchujące porty, tablica ARP, reguły zapory sieciowej i routing.
Zabezpieczenie konfiguracji interfejsów sieciowych¶
Poniższe polecenie wypisuje pełną konfigurację wszystkich interfejsów sieciowych badanego urządzenia. Wyjście polecenia zapisywane jest do pliku ipconfig.txt na nośniku docelowym.
Zabezpieczenie połączeń TCP¶
Poniższe polecenie wypisuje aktywne połączenia TCP wraz z adresami i portami lokalnymi oraz zdalnymi, stanem połączenia oraz powiązanym procesem. Wyjście polecenia zapisywane jest do pliku TCP_connections.txt na nośniku docelowym.
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, @{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}}, @{Name="CommandLine";Expression={(Get-WmiObject Win32_Process -Filter "ProcessId = $($_.OwningProcess)").CommandLine}} | Sort-Object RemoteAddress -Descending | Format-Table -Wrap -AutoSize > $nosnik\TCP_connections.txt 2>> "$nosnik\error.log"
Zabezpieczenie połączeń UDP¶
Poniższe polecenie wypisuje punkty końcowe UDP nasłuchujące na urządzeniu, wraz z adresem i portem lokalnym oraz czasem utworzenia. Wyjście polecenia zapisywane jest do pliku UDP_connections.txt na nośniku docelowym.
Get-NetUDPEndpoint | Select-Object Local*, CreationTime| Format-Table -AutoSize > $nosnik\UDP_connections.txt 2>> "$nosnik\error.log"
Zabezpieczenie tablicy ARP¶
Poniższe polecenie wypisuje zawartość tablicy ARP. Wyjście polecenia zapisywane jest do pliku arp.txt na nośniku docelowym.
Zabezpieczenie tablicy routingu¶
Poniższe polecenie wypisuje tablicę routingu. Wyjście polecenia zapisywane jest do pliku routing.txt na nośniku docelowym.
Konta i grupy¶
Lokalne listy użytkowników i grup pozwalające wykryć konta dodane przez atakującego w celu utrzymania dostępu.
Zabezpieczenie listy kont lokalnych użytkowników¶
Poniższe polecenie wypisuje wszystkie konta lokalnych użytkowników wraz z ich właściwościami. Wyjście polecenia zapisywane jest do pliku local_users.txt na nośniku docelowym.
Get-LocalUser | Format-List * > $nosnik\local_users.txt 2>> "$nosnik\error.log"
Zabezpieczenie listy grup lokalnych¶
Poniższe polecenie wypisuje wszystkie lokalne grupy zdefiniowane na urządzeniu. Wyjście polecenia zapisywane jest do pliku local_groups.txt na nośniku docelowym.
Get-LocalGroup | Format-List * > $nosnik\local_groups.txt 2>> "$nosnik\error.log"
Zabezpieczenie informacji o aktywnych sesjach¶
Poniższe polecenie wypisuje aktywne sesje sieciowe nawiązane z badanym urządzeniem. Wyjście polecenia zapisywane jest do pliku sessions.txt na nośniku docelowym.
net sessions > $nosnik\sessions.txt 2>> "$nosnik\error.log"
Zaplanowane zadania¶
Wpisy harmonogramu zadań, mechanizmu pozwalającego atakującemu odnawiać dostęp do przejętego urządzenia.
Zabezpieczenie listy zadań zaplanowanych¶
Poniższe polecenie wypisuje wszystkie zaplanowane zadania zarejestrowane w harmonogramie zadań. Wyjście polecenia zapisywane jest do pliku sch_tasks.txt na nośniku docelowym.
Get-ScheduledTask | Format-List * > $nosnik\sch_tasks.txt 2>> "$nosnik\error.log"
Zabezpieczenie poleceń autostartu¶
Poniższe polecenie wypisuje polecenia uruchamiane automatycznie podczas startu systemu lub logowania użytkownika. Wyjście polecenia zapisywane jest do pliku startup_commands.txt na nośniku docelowym.
Get-WmiObject Win32_StartupCommand | Format-List * > $nosnik\startup_commands.txt 2>> "$nosnik\error.log"
Rejestry¶
Pliki hive rejestru zawierające konfigurację systemu, kont użytkowników i uruchamianych programów, modyfikowane przez atakujących w celu utrzymania dostępu.
Zabezpieczenie plików rejestrów¶
Należy zapisać kolejno cztery główne gałęzie rejestru maszyny lokalnej (HKLM): SAM, SYSTEM, SOFTWARE oraz SECURITY. Polecenie reg save odczytuje rejestry prosto z pamięci, dzięki czemu omija blokadę plików w użyciu i zabezpiecza ich aktualny stan. Ostatni krok to zabezpieczenie rejestru aktualnie zalogowanego użytkownika (HKCU).
reg save HKLM\SAM $nosnik\SAM 2>> "$nosnik\error.log"
reg save HKLM\SYSTEM $nosnik\SYSTEM 2>> "$nosnik\error.log"
reg save HKLM\SOFTWARE $nosnik\SOFTWARE 2>> "$nosnik\error.log"
reg save HKLM\SECURITY $nosnik\SECURITY 2>> "$nosnik\error.log"
reg save HKCU $nosnik\HKCU 2>> "$nosnik\error.log"
Pliki Prefetch¶
Pliki Prefetch wskazujące programy uruchamiane w systemie wraz ze ścieżkami i liczbą uruchomień.
Zabezpieczenie plików Prefetch¶
Należy skopiować wszystkie pliki z katalogu C:\Windows\Prefetch na nośnik docelowy.
$dst = "$nosnik\Prefetch";New-Item -ItemType Directory -Path $dst -Force | Out-Null;Copy-Item -Path "C:\Windows\Prefetch\*" -Destination $dst -Recurse -Force 2>> "$nosnik\error.log"
Historia poleceń¶
Pliki historii powłok użytkowników pozwalające odtworzyć kroki podjęte przez atakującego po uzyskaniu dostępu.
Zabezpieczenie historii poleceń programu PowerShell¶
Należy zabezpieczyć pliki historii PSReadLine wszystkich użytkowników urządzenia. Polecenie iteruje po katalogach profili w C:\Users, dla każdego sprawdza obecność katalogu PSReadLine i kopiuje wszystkie pliki *_history.txt na nośnik docelowy, dodając do nazwy pliku nazwę użytkownika np. jan_ConsoleHost_history.txt. Profile bez katalogu PSReadLine (np. Public) są pomijane automatycznie. Zabezpieczone pliki zapisywane są na nośniku docelowym.
foreach($u in (Get-ChildItem C:\Users -Directory -ErrorAction SilentlyContinue)){ $p = "$($u.FullName)\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine"; if(Test-Path $p){ foreach($f in (Get-ChildItem "$p\*_history.txt" -File -ErrorAction SilentlyContinue)){ Copy-Item $f.FullName "$nosnik\$($u.Name)_$($f.Name)" } } } 2>> "$nosnik\error.log"
Zabezpieczenie historii poleceń powłoki CMD¶
Polecenie doskey /history działa wyłącznie w oknie cmd, w którym wpisywano polecenia; po jego zamknięciu historia ulega usunięciu. Zmienna $nosnik nie jest dostępna w powłoce CMD, dlatego w poleceniu należy podać pełną ścieżkę nośnika docelowego (w przykładzie F:\Sekretariat-PC).
Listing plików¶
Metadane wszystkich plików pozwalające zbudować oś czasu zmian i zlokalizować niepożądane pliki.
Zabezpieczenie listingu plików¶
Poniższe polecenia zabezpieczają metadane plików na stałych wolumenach urządzenia, zasoby sieciowe, napędy oraz urządzenia przenośne są pomijane. Wynik zapisywany jest w postaci pliku CSV, co umożliwia późniejsze sortowanie, filtrowanie i budowanie osi czasu. Błędy dostępu do chronionych plików i katalogów zapisywane są osobno w dzienniku błędów error.log.
$err = @(); $files = foreach($d in (Get-Volume | Where-Object {$_.DriveLetter -and $_.DriveType -eq 'Fixed'}).DriveLetter){ Get-ChildItem -Path "${d}:\" -Recurse -File -Force -ErrorAction SilentlyContinue -ErrorVariable +err }; $files | Select-Object FullName, Length, CreationTime, LastAccessTime, LastWriteTime, Attributes | Export-Csv -Path "$nosnik\lista_plikow.csv" -NoTypeInformation -Encoding UTF8; $err | Out-File -FilePath "$nosnik\error.log" -Encoding utf8
Zakończenie procedury¶
Należy zakończyć nagrywanie transkryptu sesji PowerShell.
Należy utworzyć archiwum z zabezpieczonymi danymi, ułatwi to ich przesyłanie i przechowywanie.
Compress-Archive -Path "$nosnik\*" -DestinationPath "$nosnik\${env:COMPUTERNAME}_zabezpieczenie.zip"
Warning
Przed rozpoczęciem procedury zabezpieczania danych z kolejnego urządzenia należy przesłać archiwum zabezpieczenie.zip do analizy i wyczyścić nośnik.
Ostatnia aktualizacja artykułu: 2026-09-02.


