Analýza podozrivého súboru "Outstanding Payment.jar" - 2. časť

Ako pomocou statickej analýzy rozlúsknuť šifrovanie použité autorom malwaru, a čo všetko je možné o autorovi zistiť? Druhý diel z trojice článkov o analýze podozrivého Java súboru popisuje prienik ďalšou ochrannou vrstvou a čiastočne odhaľuje útočníka.

V minulej časti článku som začal s analýzou podozrivého súboru „Outstanding Payment.jar“. Podarilo sa mi prelomiť prvú vrstvu ochrany proti detekcii, a to najmä vďaka deobfuskácii textových reťazcov, a rozvinutiu stavového automatu tvoriaceho jadro programu.

Extrahovaná adresárová štruktúra obsahovala niekoľko Java tried (.class) a 6 binárnych súborov:

Decoded Files
Dekódované súbory

Layer II – Encrypted Files

Názvy tried (manintheskymaninthesky..., iiiiiii...) znovu naznačovali obfuskáciu. Podozrivo vyzerali aj súbory drop.box, mega.download a sky.drive.

Po chvíli hľadania som sa dopátral k nástroju AdWindDectyptor (https://github.com/mhelwig/adwind-decryptor), ktorý potvrdil domnienku, že mám naozaj dočinenia s malwarom jRAT.

Ukázalo sa, že súbor sky.drive je RSA kľúčom k súboru mega.download, ktorý je zašifrovaným AES kľúčom k poslednému súboru drop.box.

resources_decrypt.png
Schéma šifrovania použitá autorom malwaru

Použil som teda mierne upravený nástroj AdWindDecryptor a dešifroval obsah súboru drop.box:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Support: https://jrat.io</comment>
<entry key="SERVER_PATH">/h/TaL/D.qy</entry>
<entry key="PASSWORD_CRYPTED">/N/fcp/w.q</entry>
<entry key="PRIVATE_PASSWORD">/hZL/ycm/gi.U</entry>
</properties>
Dešifrovaný súbor drop.box

Išlo o konfiguračné metadáta popisujúce ďalšiu vrstvu šifrovania. Definované premenné a podobné veľkosti súborov naznačovali, že by mohlo ísť o rovnakú schému ako v predchádzajúcom kroku. Znovu som teda použil nástroj AdWindDecryptor, pričom RSA kľúčom bol v tomto prípade súbor /hZL/ycm/gi.U, AES kľúčom súbor /N/fcp/w.q a dáta boli uložené v súbore /h/TaL/D.qy.

Výsledkom dešifrovania bol JAR archív:

├── com
│   ├── DataProtector.class
│   ├── key
│   │   ├── amd64.dll
│   │   └── x86.dll
│   ├── protector
│   │   ├── amd64.dll
│   │   └── x86.dll
│   ├── Protector.class
│   ├── ProtectorException.class
│   ├── Title.class
│   └── TitleManager.class
├── META-INF
│   └── MANIFEST.MF
├── module
│   ├── api.json
│   └── Server.class
├── org
│   └── json
│       ├── CDL.class
│       ├── JSONArray.class
│       ├── ...
├── server
│   ├── b
│   │   ├── iiiiiiIiiI.class
│   │   ├── ...
│   ├── m
│   │   ├── iiiIiiIIIi.class
│   │   ├── ...
│   ├── main
│   │   └── Start.class
│   ├── resources
│   │   ├── config.json
│   │   ├── Key1.json
│   │   └── Key2.json
│   ├── t
│   │   ├── iiiiiiIiiI.class
│   │   ├── ...
│   └── y
│       ├── iiiiiiIiiI.class
│       ├── ...
└── util
    ├── generic
    │   ├── Base64.class
    │   ├── Compress.class
    │   ├── Copy.class
    │   ├── Random.class
    │   ├── RandomRange.class
    │   ├── Reader.class
    │   ├── RunFile.class
    │   ├── RunJarFile.class
    │   ├── Shell.class
    │   └── Sleep.class
    ├── mac
    │   └── MacPermission.class
    └── windows
        ├── Regedit.class
        └── WscriptProcess.class

Okrem toho sa ukázalo, že súbor /operational/iiiiiiiiii.class nie je Java trieda ale ďalší JAR/ZIP archív. Pri rozbalení vyzeral takmer úplne rovnako ako archív D.qy, s výnimkou niekoľko málo bajtov.

Layer III – Malware Core

Pravdepodobne išlo o samotné jadro malwaru jRAT. Časť súborov bola stále obfuskovaná (iiiiiiIiiI.class, iiiIiiIIIi.class, ...), bolo však možné rozoznať rôzne pomocné triedy na prácu s formátom JSON, Base64, ZIP, na vykonávanie systémových príkazov (Shell.class) alebo skriptov v jazyku VBS (WscriptProcess.class).

Otázkou ostávalo, kam sa tento malware pripája, odkiaľ je riadený. V zložke server/resources sa nachádzal konfiguračný súbor config.json, ktorý bol však zašifrovaný. Už po 3. krát bola uplatnená rovnaká schéma (Key1, Key2), použil som teda nástroj AdWindDecryptor, vďaka čomu bola konfigurácia malwaru odhalená:

{
  "DELAY_CONNECT": 2,
  "DELAY_INSTALL": 2,
  "ENCRYPT_KEY": "pxWReJbgtOOKlnnJxQbpVjaFh",
  "INSTALL": true,
  "JAR_EXTENSION": "txt",
  "JAR_FOLDER": "wert",
  "JAR_NAME": "wert",
  "JAR_REGISTRY": "wert",
  "JRE_FOLDER": "koliy",
  "MODULE_PATH": "Xmk/gVv/M.bZU",
  "NETWORK": [
    {
      "DNS": "maquicantro.duckdns.org",
      "PORT": 7790
    },
    {
      "DNS": "ldouab.ddns.net",
      "PORT": 7790
    }
  ],
  "NICKNAME": "New",
  "PLUGIN_EXTENSION": "txt",
  "PLUGIN_FOLDER": "awetuh",
  "VBOX": false,
  "VMWARE": false,
  "WEBSITE_PROJECT": "https://jrat.io"
}
Konfiguračný súbor z archívu D.qy

V prípade druhého nájdeného archívu iiiiiiiiii.class, sa po aplikovaní rovnakého postupu ukázal odlišný konfiguračný súbor:

{
  "DELAY_CONNECT": 2,
  "DELAY_INSTALL": 2,
  "ENCRYPT_KEY": "cPFjgddXIBcXBCIseEuXTZjwi",
  "INSTALL": false,
  "JAR_EXTENSION": "Vybgol",
  "JAR_FOLDER": "fUTkALeaTxM",
  "JAR_NAME": "uiylKSALYJr",
  "JAR_REGISTRY": "WLyQyhWoosi",
  "JRE_FOLDER": "HSIROD",
  "MODULE_PATH": "zS/lq/BTk.GI",
  "NETWORK": [
    {
      "DNS": "127.0.0.1",
      "PORT": 7777
    }
  ],
  "NICKNAME": "User",
  "PLUGIN_EXTENSION": "DhjWU",
  "PLUGIN_FOLDER": "DdWDtpinxpf",
  "VBOX": false,
  "VMWARE": false,
  "WEBSITE_PROJECT": "https://jrat.io"
}
Konfiguračný súbor z archívu iiiiiiiiii.class

Konfigurácia archívu iiiiiiiiii.class obsahovala len vlastnú IP adresu 127.0.0.1 – to by mohol byť lokálny server počúvajúci na porte 7777.

Zaujímavejšie informácie ponúkla konfigurácia archívu D.qy. Získané doménové názvy sa podarilo preložiť na IP adresy a lokalizovať krajiny pôvodu.

maquicantro.duckdns.org:

  • 197.211.224.186
  • Zimbabwe
ipinfo_197.211.224.186.png
maquicantro.duckdns.org

ldouab.ddns.net:

  • 188.53.34.50
  • Saudská Arábia
ipinfo_188.53.34.50.png

Pravdepodobne sa mi podarilo nájsť IP adresy serverov, kam sa malware pripája a odkiaľ získava príkazy, resp. odosiela ukradnuté informácie. Potvrdili to aj výsledky vyhľadávania:

google_ldouab.ddns.net.PNG
google_maquicantro.duckdns.org.PNG

Bohužiaľ, ani jedna IP adresa nereagovala. Neuspelo ani skenovanie portov – všetky porty vyzerali byť filtrované. Je možné, že servery boli medzičasom vypnuté – či už samotným útočníkom alebo v dôsledku protiútoku.

Inou možnosťou bolo, že servery filtrujú požiadavky a povoľujú len niektoré IP adresy, prípadne že je v hre nejaká pokročilejšia schéma, napr. port knocking,

Každopádne, podarilo sa mi rozlúsknuť druhú vrstvu šifrovania a vylúpnuť konfiguráciu malwaru obsahujúcu adresy, s ktorými program pravdepodobne komunikuje.

Ostával už len samotný kód programu, obsiahnutý v obfuskovaných triedach v priečinku server/. Tejto poslednej etape sa budem venovať v poslednej časti článku.