Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Weryfikacja bezpieczeństwa Windows z wykorzystaniem wmic

08 kwietnia 2013, 08:40 | Narzędzia, Teksty | komentarzy 6
Tagi: ,

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)

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. p

    To narzędzie daje zdecydowanie za dużo informacji użytkownikowi bez uprawnień administracyjnych.

    Odpowiedz
  2. P: zaaplikuj grseca ;p

    Odpowiedz
  3. trash

    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ę „ť”

    Odpowiedz
  4. kedaR

    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

    Odpowiedz
    • Tak też AFAIR nie działało :/

      Odpowiedz
      • Shogun

        A może wystarczy zmienić czcionkę na właściwą?

        Odpowiedz

Odpowiedz