Source: JPCERT/CC — L’analyse couvre des incidents observés entre septembre et décembre 2024, montrant l’usage de CrossC2 pour générer des Beacons Cobalt Strike sur Linux/macOS, accompagnés d’un loader Nim (ReadNimeLoader) et d’autres outils offensifs, avec des indices d’une campagne active au Japon et dans d’autres pays.

CrossC2 (Beacon non officiel): compatible Cobalt Strike ≥ 4.1, ciblant Linux (x86/x64) et macOS (x86/x64/M1). À l’exécution, le binaire fork et le processus enfant gère la logique. Le C2 est lu dans la configuration (décryptée en AES128‑CBC) et peut aussi être défini via les variables d’environnement CCHOST/CCPORT. Le binaire contient de nombreux anti‑analyses (chaînes XOR mono‑octet, injections de junk code faciles à neutraliser en NOP sur une séquence d’octets donnée). Le builder public sur GitHub crée des Beacons packés UPX; pour les unpacker, il faut d’abord retirer le bloc de configuration en fin de fichier, puis le réinsérer après UPX.

Chaîne d’exécution Cobalt Strike (Windows): un java.exe légitime lancé par une tâche planifiée charge jli.dll par DLL sideloading. Cette DLL est ReadNimeLoader (langage Nim), qui lit readme.txt, le déchiffre et exécute en mémoire un loader OdinLdr (ou, selon les échantillons, le Beacon directement). Tous les fichiers liés (ReadNimeLoader, etc.) ont été trouvés sous **C:$recycle.bin**. Un chemin PDB observé: D:\BuildServer\bna-4\work-git\phoenix-repository\phoenix\Release\Battle.net Launcher.exe.pdb.

ReadNimeLoader (anti‑analyse et déchiffrement): quatre techniques de détection de debug (BeingDebugged du PEB, registres de debug, mesure temporelle, exception/SEH). Une partie de la clé de déchiffrement d’OdinLdr est disséminée dans ces fonctions, exigeant leur exécution pour obtenir la clé correcte. Chaînes encodées via XOR (deux fonctions de décodage). Le payload est déchiffré en AES256‑ECB avec une clé construite à partir de chaînes décodées, transformées en hex, uppercase et zero‑padded.

OdinLdr: déchiffre et exécute en mémoire le Beacon Cobalt Strike, puis ré‑chiffre périodiquement le Beacon avec une clé XOR aléatoire et le stocke dans un nouvel heap, reconnaissable par la signature “OdinLdr1337”. Deux variantes observées: exécution via OdinLdr ou exécution directe du Beacon.

Outils et attribution: usage de SystemBC (ELF), PsExec (mouvement latéral), Plink (SSH), GetNPUsers.py (AS‑REP Roasting) et outils d’élévation de privilèges Windows. Des similarités (domaine C2, fichiers jli.dll/readme.txt, SystemBC, AS‑REP sur AD) suggèrent un lien potentiel avec BlackBasta. JPCERT/CC publie aussi un parseur de configuration CrossC2: github.com/JPCERTCC/aa-tools/parse_crossc2beacon_config.py. L’article met en avant l’usage de CrossC2 pour compromettre des serveurs Linux internes souvent sans EDR.

🔎 IOCs réseau (extraits)

  • IP: 64.52.80[.]62:443; 64.95.10[.]209:443; 67.217.228[.]55:443; 137.184.155[.]92:443; 159.65.241[.]37:443; 162.33.179[.]247:8443; 165.227.113[.]183:443; 179.60.149[.]209:443; 192.241.190[.]181:443
  • Domaines: api.glazeceramics[.]com:443; doc.docu-duplicator[.]com:53; doc2.docu-duplicator[.]com:53; comdoc1.docu-duplicator[.]com:53

🧪 Hashes (exemples)

  • java.exe (légitime): 16b1819186f0803b9408d9a448a176142f8271a4bc0b42cdb78eb4489bce16fe
  • ReadNimeLoader jli.dll: 56b941f6dcb769ae6d6995412559012abab830f05d5d8acf2648f7fa48c20833; dfe79b9c57cfb9fc10597b43af1c0a798991b6ceeec2af9b1e0ed46e6a8661c8; 3f96b6589996e57abc1c4d9b732528d2d11dea5c814f8241170c14ca2cd0281d; 0ab709728666f8759ad8db574d4009cf74ebce36ef2572ef52b058997a9b2a25; ecca3194613b0bab02059c3544fdc90f6d4af5a4c06518c853517eb1d81b9735
  • Cobalt Strike readme.txt: 6246fb5c8b714707ac49ade53e6fe5017d96442db393b1c0ba964698ae24245d; acdf2a87ed03f2c6fe1d9899e8a74e8b56f7b77bb8aed5adf2cc374ee5465168; 6b80d602472c76b1d0f05bcce62e0a34de758232d9d570ba61b540784c663c01; 3079a29575a0adff91f04c5493a7f3e1c89795e3a90cf842650cd8bd45c4e1bc; 70b3b8e07752c1f3d4a462b2ab47ca3d9fb5094131971067230031b8b2cd84f2
  • CrossC2: gds 28d668f3e1026a56d55bc5d6e36fad71622c1ab20ace52d3ab12738f9f8c6589; gss 9e8c550545aea5212c687e15399344df8a2c89f8359b90d8054f233a757346e7
  • ELF-SystemBC: 74a33138ce1e57564baa4ea4db4a882d6bf51081b79a167a6cb2bf9130ddad7f; 7ccff87db7b4e6bc8c5a7e570f83e26ccb6f3a8f72388210af466048d3793b00

🛠️ TTPs observés

  • Persistence/Execution: Tâche planifiée lançant java.exe; DLL sideloading (jli.dll)
  • Defense Evasion/Anti‑analyse: Junk code massif, chaînes XOR, checks BeingDebugged/CONTEXT_DEBUG_REGISTER, exception/SEH, time‑based checks; configuration AES128‑CBC; payload AES256‑ECB; Beacon ré‑chiffré périodiquement en mémoire
  • Lateral Movement: PsExec; Plink (SSH)
  • Credential Access/AD: AS‑REP Roasting via GetNPUsers.py
  • C2/Tooling: SystemBC (ELF); CrossC2 pour Beacons Linux/macOS; Malleable C2 surfant sur un user‑agent Microsoft Teams

Conclusion: Il s’agit d’une analyse technique détaillant une campagne multi‑plateforme autour de CrossC2/Cobalt Strike, documentant la chaîne d’infection, les anti‑analyses, les IOCs et un outil d’aide à l’analyse.

🧠 TTPs et IOCs détectés

TTP

[‘Persistence/Execution: Tâche planifiée lançant java.exe’, ‘Persistence/Execution: DLL sideloading (jli.dll)’, ‘Defense Evasion/Anti-analyse: Junk code massif’, ‘Defense Evasion/Anti-analyse: Chaînes XOR’, ‘Defense Evasion/Anti-analyse: Checks BeingDebugged/CONTEXT_DEBUG_REGISTER’, ‘Defense Evasion/Anti-analyse: Exception/SEH’, ‘Defense Evasion/Anti-analyse: Time-based checks’, ‘Defense Evasion/Anti-analyse: Configuration AES128-CBC’, ‘Defense Evasion/Anti-analyse: Payload AES256-ECB’, ‘Defense Evasion/Anti-analyse: Beacon ré-chiffré périodiquement en mémoire’, ‘Lateral Movement: PsExec’, ‘Lateral Movement: Plink (SSH)’, ‘Credential Access/AD: AS-REP Roasting via GetNPUsers.py’, ‘C2/Tooling: SystemBC (ELF)’, ‘C2/Tooling: CrossC2 pour Beacons Linux/macOS’, ‘C2/Tooling: Malleable C2 surfant sur un user-agent Microsoft Teams’]

IOC

{‘hashes’: [‘16b1819186f0803b9408d9a448a176142f8271a4bc0b42cdb78eb4489bce16fe’, ‘56b941f6dcb769ae6d6995412559012abab830f05d5d8acf2648f7fa48c20833’, ‘dfe79b9c57cfb9fc10597b43af1c0a798991b6ceeec2af9b1e0ed46e6a8661c8’, ‘3f96b6589996e57abc1c4d9b732528d2d11dea5c814f8241170c14ca2cd0281d’, ‘0ab709728666f8759ad8db574d4009cf74ebce36ef2572ef52b058997a9b2a25’, ’ecca3194613b0bab02059c3544fdc90f6d4af5a4c06518c853517eb1d81b9735’, ‘6246fb5c8b714707ac49ade53e6fe5017d96442db393b1c0ba964698ae24245d’, ‘acdf2a87ed03f2c6fe1d9899e8a74e8b56f7b77bb8aed5adf2cc374ee5465168’, ‘6b80d602472c76b1d0f05bcce62e0a34de758232d9d570ba61b540784c663c01’, ‘3079a29575a0adff91f04c5493a7f3e1c89795e3a90cf842650cd8bd45c4e1bc’, ‘70b3b8e07752c1f3d4a462b2ab47ca3d9fb5094131971067230031b8b2cd84f2’, ‘28d668f3e1026a56d55bc5d6e36fad71622c1ab20ace52d3ab12738f9f8c6589’, ‘9e8c550545aea5212c687e15399344df8a2c89f8359b90d8054f233a757346e7’, ‘74a33138ce1e57564baa4ea4db4a882d6bf51081b79a167a6cb2bf9130ddad7f’, ‘7ccff87db7b4e6bc8c5a7e570f83e26ccb6f3a8f72388210af466048d3793b00’], ‘domains’: [‘api.glazeceramics[.]com:443’, ‘doc.docu-duplicator[.]com:53’, ‘doc2.docu-duplicator[.]com:53’, ‘comdoc1.docu-duplicator[.]com:53’], ‘ips’: [‘64.52.80[.]62:443’, ‘64.95.10[.]209:443’, ‘67.217.228[.]55:443’, ‘137.184.155[.]92:443’, ‘159.65.241[.]37:443’, ‘162.33.179[.]247:8443’, ‘165.227.113[.]183:443’, ‘179.60.149[.]209:443’, ‘192.241.190[.]181:443’]}


🔗 Source originale : https://blogs.jpcert.or.jp/en/2025/08/crossc2.html