Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Weryfikacja bezpieczeństwa Windows z wykorzystaniem wmic
Często podczas weryfikacji bezpieczeństwa konfiguracji systemu Windows zmuszeni jesteśmy do „klikania” w narzędziach administracyjnych i tworzenia zrzutów ekranowych, w celu analizy oraz dokumentowania konfiguracji. Samo zbieranie oraz analiza tego typu danych może być dość czasochłonna – klasycznym przykładem może być wylistowanie usług automatycznie uruchamianych przy starcie Windows czy typów systemów plików (NTFS vs FAT), na aktualnie dostępnych dyskach.
Okazuje się, że tego typu informacje można uzyskać w systemie Windows jednym narzędziem: wmic.
Wstęp
Samo polecenie wmic stanowi konsolowe narzędzie do komunikacji z WMI (Windows Management Instrumentation). Informacje na stronach Microsoft o WMI/wmic są dość enigmatyczne. Część funkcji była czy nadal jest słabo udokumentowana. Jednocześnie narzędzie wmic, jest standardowym elementem systemu Windows poczynając od Windows XP (we wcześniejszych wersjach XP być może wymagane będzie doinstalowanie nowszego service pack-u). Wmic dostępne jest również od dawna w wersjach serwerowych Windowsów.
Na potrzeby artykułu, wystarczy wiedzieć, że narzędzie konsolowe wmic umożliwia między innymi wyświetlenie znacznej części konfiguracji systemu Windows.
Dalszy ciąg tekstu zawierał będzie konkretne przykłady korzystania wmic, w kontekście audytu bezpieczeństwa konfiguracji systemu windows. Nie przedstawiamy systematycznego opisu parametrów udostępnianych przez to narzędzie – odkrywanie możliwości wmic pozostawiamy Czytelnikowi po zapoznaniu się z poniższymi przykładami.
Listowanie typu zamontowanych systemów plików
Jednym z częstych zaleceń przy audycie bezpieczeństwa konfiguracji systemu Windows jest weryfikacja dostępności partycji NTFS (vs FAT, który nie umożliwia odpowiedniego narzucenia uprawnień na poziomie systemu plików). Sposobem na wylistowanie dostępności określonego rodzaju partycji jest wykonanie polecenia:
C:\> wmic logicaldisk get caption,volumename,filesystem Caption FileSystem VolumeName C: NTFS D: CDFS Driver O: FAT32 P: FAT32 Q: FAT32 R: FAT32 S: NTFS X: FAT32 Z: FAT32
Listowanie share-ów (w tym ukrytych)
Kolejnym elementem, który może wpłynąć na bezpieczeństwo systemu Windows są tzw, 'share-y’ czyli wydzielone fragmenty najczęściej systemu plików – dostępne poprzez sieć. Co więcej część sharów może być jest ukryta (niewidoczna w większości standardowych narzędzi listujących Windows) – takie zasoby oznaczane są znakiem $ na końcu nazwy share. Poniższe polecenie listuje wszystkie tego typu elementy w systemie:
C:\> wmic share get caption,name,path Caption Name Path Administracja zdalna ADMIN$ C:\Windows Domyślny udział C$ C:\ Zdalne wywołanie IPC IPC$
Listowanie wystartowanych usług lub startowanych automatycznie
Kolejnym zaleceniem zwiększającym bezpieczeństwo systemu operacyjnego (nie tylko Windows) jest minimalizacja uruchomionych usług systemowych. Tego typu usługi można z wyświetlić poleceniem:
C:\>wmic service where (started='TRUE' or startmode='AUTO') get caption,description,pathname,name,startname,started,state, processid,startmode /value ... ... Description=Umożliwia wykrywanie, pobieranie i instalowanie aktualizacji systemu Windows i innych programów. Wyłączenie tej usługi spowoduje, że użytkownicy tego komputera nie będą mogli używać rozszerzenia Windows Update ani funkcji automatycznego aktualizowania, a programy nie będą mogły używać funkcji API Windows Update Agent (WUA). Name=wuauserv PathName=C:\Windows\system32\svchost.exe -k netsvcs ProcessId=1040 Started=TRUE StartMode=Auto StartName=LocalSystem State=Running Caption=Windows Driver Foundation - User-mode Driver Framework Description=Zarządza procesami hosta sterowników trybu użytkownika. Name=wudfsvc PathName=C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted ProcessId=992 Started=TRUE StartMode=Auto StartName=LocalSystem State=Running ... ...
Zauważmy że polecenie to wyświetla kilka ciekawych wartości jak:
- Opis danej usługi
- PID danej usługi
- Użytkownika z uprawnieniami którego działa usługa
- Ścieżka do pliku binarnego – z parametrami wykonania usługi
Szczególnie ta ostatnia wartość może być przydatna – często bowiem w systemach Windows różne usługi uruchamiane są poprzez uruchomienie jednego, określonego pliku binarnego (w przykładzie powyższym jest to svchost.exe). Powyższe wywołanie pozwala więc na wylistowanie szczegółów usług uruchamianych z takiego samego pliku binarnego – podczas gdy w przypadku popularnego Menadżera Zadań Windows widzimy jedynie nazwę obrazu bez parametrów (svchost.exe).
Listowanie użytkowników lokalnych
Kolejnym ważnym elementem mogącym pomóc nam w uszczelnianiu bezpieczeństwa systemu jest wylistowanie użytkowników oraz ich konkretnych ustawień (typ użytkownika, wymagalność hasła, ewentualne zablokowanie logowania się użytkownika, itd)
C:\>wmic useraccount list full AccountType=512 Description=Wbudowane konto do administrowania komputerem/domeną Disabled=TRUE Domain=xxxx FullName= InstallDate= LocalAccount=TRUE Lockout=FALSE Name=Administrator PasswordChangeable=TRUE PasswordExpires=FALSE PasswordRequired=TRUE SID=S-1-5-21-4123123123-1123123123-1123123123-500 SIDType=1 Status=Degraded AccountType=512 Description=Wbudowane konto do dostępu do komputera/domeny dla gościa Disabled=TRUE Domain=xxxx FullName= InstallDate= LocalAccount=TRUE Lockout=FALSE Name=Gość PasswordChangeable=FALSE PasswordExpires=FALSE PasswordRequired=FALSE SID=S-1-5-21-4123123123-1123123123-1123123123-501 SIDType=1 Status=Degraded
w analogiczny sposób można wygenerować informacje o grupach:
c:> wmic group list full ...
Inne użyteczne informacje
Z wykorzystaniem wmic możemy pobrać niemal każdą interesującą nas wartość konfiguracyjną systemu. Poniżej wskazujemy dalsze wywołania tego typu – do samodzielnego wykonania przez Czytelnika:
C:\>wmic nic list brief C:\>wmic bios list brief C:\>wmic computersystem list full
Aby uzyskać pełną listę parametrów obsługiwanych przez wmic wystarczy wydać polecenie:
C:\>wmic /? ... The following alias/es are available in the current role: ALIAS - Access to the aliases available on the local system BASEBOARD - Base board (also known as a motherboard or system board) management. BIOS - Basic input/output services (BIOS) management. BOOTCONFIG - Boot configuration management. CDROM - CD-ROM management. COMPUTERSYSTEM - Computer system management. CPU - CPU management. CSPRODUCT - Computer system product information from SMBIOS. DATAFILE - DataFile Management. DCOMAPP - DCOM Application management. DESKTOP - User's Desktop management. DESKTOPMONITOR - Desktop Monitor management. DEVICEMEMORYADDRESS - Device memory addresses management. DISKDRIVE - Physical disk drive management. DISKQUOTA - Disk space usage for NTFS volumes. DMACHANNEL - Direct memory access (DMA) channel management. ENVIRONMENT - System environment settings management. FSDIR - Filesystem directory entry management. GROUP - Group account management. ...
Dalsze informacje można uzyskiwać, sukcesywnie stosując przełącznik /? np.:
C:\>wmic cpu /?
Skryptowanie z wmic na potrzeby audytu bezpieczeństwa
Jeśli chcemy w szybki sposób uzyskać konfigurację systemu Windows – np. na potrzeby dalszej analizy bezpieczeństwa konfiguracji, możemy pokusić się wykonanie prostych skryptów .bat zawierających wywołania wmic oraz innych narzędzi konsolowych Windows. Skrypt taki może przekierowywać wyniki poleceń do pliku, który następnie możemy poddać analizie.
W tym przypadku możemy napotkać pewną niedogodność, mianowicie przekierowanie wyniku z tego typu skryptu do pliku tekstowego, może ujawnić problemy z kodowaniem znaków. Jeśli stworzymy plik test.bat i uruchomimy go w następujący sposób:
Zawartość audyt.bat: wmic service list full Uruchomienie audyt.bat: C:\> test.bat > wynik.txt
to otrzymamy wynik.txt z nieprawidłowym kodowaniem znaków (uniemożliwiającym ręczny odczyt i analizę wyników). Autorowi nie udało się odszukać racjonalnego powodu takiego działania systemu Windows (samo przekierowanie wyniku z konsolowego polecania wmic daje 'dobry’ wynik). Rozwiązaniem tego problemu może być następujący sposób uruchomienia skryptu:
C:\> test.bat | more > wynik.txt
Z kolei przykład bardziej zaawansowanego skryptowania z wykorzystaniem wmic może wyglądać następująco:
echo ############################ SZCZEGOLY PROCESOW (TCP) @echo off for /F "tokens=2,5" %%A in ('netstat -ano ^| find "LIS"') DO ( echo *********** PORT: %%A PID: %%B tasklist /FI "PID eq %%B" wmic service where processid=%%B get caption,description, pathname,startname,started /VALUE )
W przykładzie tym listujemy w pętli porty nasłuchujące TCP (w polskiej wersji Windows należy „LIS” zastąpić „NAS”), oraz listujemy szczegóły usługi, która nasłuchuje na tym porcie. Stosowną informację otrzymamy, jeśli na danym porcie nasłuchuje usługa a nie np. izolowany proces. Powiązanie port nasłuchujący <-> usługa następuje poprzez identyfikator PID.
Podsumowanie
Konsolowe narzędzie wmic, może stanowić nieocenioną pomoc, przy tworzeniu skryptów pobierających konfigurację systemów (czy to na potrzeby audytu bezpieczeństwa czy rutynowych czynności administratorskich). W szczególności, w połączeniu z innymi narzędziami konsolowymi, dostępnymi w Windows takimi jak: netstat, tasklist, reg, net, find czy cacls – umożliwia zminimalizować nakład pracy związany z „klikaniem” w narzędziach administracyjnych Windows.
Jednocześnie zaznaczamy, że w tekście zostały jedynie wskazane wybrane elementy konfiguracji Windows związane z bezpieczeństwem. Niemniej jednak powyższe przykłady mogą stanowić dobry początek do przygotowania przez Czytelnika pełnego skryptu, pobierającego odpowiednie w danym kontekście dane.
–Michał Sajdak (michal.sajdak<at>securitum.pl)
To narzędzie daje zdecydowanie za dużo informacji użytkownikowi bez uprawnień administracyjnych.
P: zaaplikuj grseca ;p
Narzędzie świetne, nie znałem. Co do ogonków, to winno się je zlikwidować. ;] IMHO cała dziedzina, gałąź IT odpadła by wtedy, pewnie nie wynaleziono by kodowania UTF etc.
Co do przesyłania przez pipe’a (czy przekierowania) to też mam z tym problem. Korzystam z narzędzi gnu dla windows i jeśli chcę wygrepować wynik polecenia netstata, aby zobaczyć, jakie procesy nasłuchują na jakich portach, to tak samo jak w artykule muszę użyć „NAS” albo „UCHIWANIE”, bo zamiast „Ł” wyświetla się „ť”
Jak na moje – z kodowaniem – pomóc może dodanie przekierowania bezpośrednio w *.bat:
Zawartość audyt.bat:
wmic service list full > wynik.txt
Uruchomienie audyt.bat:
C:\> test.bat
Tak też AFAIR nie działało :/
A może wystarczy zmienić czcionkę na właściwą?