Wykonanie złośliwego kodu na Microsoft Windows 10 lub na wersjach systemów serwerowych Windows 2016/2019 nie należy do łatwych zadań, w szczególności, gdy posiadamy włączoną ochronę antywirusową (np. Windows Defender) i blokowane jest uruchomienie przez użytkownika niedozwolonych aplikacji (stosowana jest funkcja AppLocker). W tym artykule dowiesz się, jak za pomocą przygotowanego przez nas pliku panelu sterowana (apletu z rozszerzeniem *cpl) będzie można wywołać dowolny kod i wszczepić go do procesu w pamięci komputera (np. lsass.exe).


Aplet panelu sterowania

Panel sterowania to komponent, który zagościł w Windows już od pierwszej jego wersji, czyli 1.0. Z pewnością bardzo dobrze jest Ci znany, ponieważ za jego pomocą użytkownicy najczęściej konfigurują system. Od wersji 3.1 otrzymał interfejs graficzny, a wszystkie zadania konfiguracyjne wykonują się w nim za pomocą oddzielnych modułów o rozszerzeniu CPL zwanych apletami. Standardowe aplety umieszczone są na dysku w katalogu systemowym Windows. Dla ambitnych osób (w szczególności dla firm trzecich) Microsoft stworzył możliwość dodawania do Panelu sterowania własnych apletów, za których pomocą mogą udostępniać użytkownikom możliwość konfiguracji ustawień własnych komponentów systemowych.
Nic nie dzieje się bez przyczyny, dlatego możliwość tworzenia apletów zainteresowała również cyberprzestępców, którzy za ich pomocą próbują omijać zabezpieczenia Windows i wykonywać w nich złośliwy kod.
Postanowiliśmy stworzyć taki plik na cele dzisiejszego artykułu i sprawdzić na najnowszym Windows 10, czy uda nam się wykonać złośliwy kod w postaci własnej biblioteki dll.


Biblioteka DLL w C++ jako kod apletu

W celu utworzenia pliku o *.cpl stworzyliśmy kod w bibliotece DLL reprezentujący element Panelu Sterowania. Warunkiem jaki musi spełniać taki plik, aby system Windows mógł go rozpoznać jako element Panelu sterowania, to implementacja funkcji CplApplet().
Poniżej zamieściliśmy kawałek kodu naszej biblioteki apletu „Panel.dll”, która w swoim wywołaniu ładuje zewnętrzną bibliotekę „kapitanhack.dll” (opisaną w artykule tutaj) umieszczoną na dysku lokalnym w katalogu „C:\temp\”. Dzięki załadowanej do pamięci bibliotece „kapitanhack.dll”, będziemy mogli wyciągać hasła użytkowników logujących się do komputera.

Po skompilowaniu powyższej biblioteki do pliku „Panel.dll” i zmianie jej nazwy na „*.CPL” możemy ją dwukrotnie kliknąć w zwykły plik wykonywalny systemu Windows.


Inne metody uruchomienia apletu

W systemie Windows istnieją 2 metody na uruchomienie pliku apletu poprzez użycie wbudowanego w Windows programu:

  • Control.exe
    Uruchomienie w postaci:
    – Control.exe Panel.cpl
  • Rundll32.exe
    Uruchomienie w postaci:
    – rundll32 shell32, Control_RunDLL C:\Temp\Panel.cpl

Poniżej prezentujemy wynik wywołania z linii komend apletu „Panel.cpl” za pomocą programu „Control.exe”.

Poniżej prezentujemy wynik wywołania z linii komend apletu „Panel.cpl” za pomocą programu „Rundll32.exe”.

Demo całego scenariusza możesz obejrzeć na poniższym filmie:


Podsumowanie

O metodach obejścia blokad Windows pisaliśmy wcześniej na Kapitanie Hack’u tutaj. Metoda opisywana powyżej, czyli ładowania apletu cpl przy użyciu wbudowanej w Windows komendy (control.exe lub rundll32.exe) nie należy do najnowszych odkryć w dziedzinie cyberbezpieczeństwa, ale nowy jest sposób jej adaptacji. Na zabezpieczonym komputerze z Windows 10 udało nam się ja wykonać i dodatkowo załadować z niej do pamięci złośliwy kod – drugą bibliotekę „kapitanhack.dll”. Możemy chronić się przed tego typu sytuacją, ale pamiętajmy, że na blokadę zawsze znajdzie się jakiejś obejście.