Zabezpieczanie danych z działającego systemu Windows¶
Procedura opisuje sposób zabezpieczenia danych z działającego systemu Windows. Każda sekcja zawiera opis artefaktu oraz polecenia służące do 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 |
| podstawowe informacje o urządzeniu | nazwa hosta, wersja systemu operacyjnego, strefa czasowa oraz unikalny identyfikator urządzenia (UUID) |
| procesy i usługi | uruchomione procesy i usługi, które mogą pomóc w ustaleniu, 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 | listy użytkowników i grup pozwalające wykryć dodane przez atakującego konta i zmodyfikowane lub dodane grupy |
| zaplanowane zadania | wpisy harmonogramu zadań, mechanizmu pozwalającego regularnie odnawiać dostęp do przejętego urządzenia |
| rejestry | pliki rejestru zawierające konfigurację systemu, kont użytkowników i uruchamianych programów |
| pliki prefetch | pliki prefetch wskazujące programy które były uruchomione w systemie, wraz ze ścieżkami, liczbą uruchomień i wczytanymi bibliotekami dll |
| historia poleceń | pliki historii powłok użytkowników pozwalające odtworzyć kroki podjęte 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
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 w celach diagnostycznych przebieg zabezpieczania danych.
$nosnik = "<katalog docelowy na zewnętrznym nośniku>" # Przykład: $nosnik=F:\Sekretariat-PC
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
Podstawowe informacje o urządzeniu¶
Nazwa hosta, wersja systemu operacyjnego oraz strefa czasowa stanowią 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¶
Listy użytkowników i grup pozwalające wykryć konta dodane 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ń, pozwalające regularnie 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.


