26. 6. 2024

CTF - CyberGame2024 - MailLeaks

V sekcii "Forensics" tohto ročníka súťaže CyberGame sa nachádzala téma "MailLeaks".

Forenzná analýza - hráči hľadajú v dátach z postihnutých počítačov digitálne stopy, ktoré ich privedú k vlajke

2.1 Destination

Pred niekoľkými dňami sme boli hacknutí, skontrolovali sme systém na malware pomocou antivírusu, ale nič sme nenašli, ale zrazu nám začala unikať pošta. Ako došlo k úniku pošty a na akú IP sa odoslala?
Vlajka je IP adresa, na ktorú boli e-maily odoslané.

Stiahol som si zo zadania súbor files.tar.gz, po rozbalení gz má tar súbor 3,1GB. Obsahuje image linuxového filesystému Ubuntu 22.04LTS.
Tento .tar sa dá bez ďalšieho rozbalenia množstva súborov priamo prechádzať napr v Midnight Commanderi.
Ako prvé preskúmam jediný používateľský adresár /home/bob. V .profile ani .bashrc nie je nič podozrivé. V .bash_history je vidieť, že tento súbor niekto vyčistil. Následne sa pozrel do /var/log/auth.log a potom zmenil svoje (bob) heslo.

Pozrel som preto /var/log/auth.log, vidieť tu opakované pokusy (slovníkový útok?) o prelomenie hesla pre bob používateľa, až po úspešné prihlásenie sa útočníka:
Mar 26 12:46:58 mail sshd[76661]: Accepted password for bob from 198.18.14.145 port 61433 ssh2

Nasledujú záznamy s pokusmi o "sudo vi /var/logs/auth.log" (preklep) a "sudo vi /var/log/auth.log" o 12:47:21.
Vyzerá, že 27.3. o 2:23 sa prihlásil skutočný majiteľ konta bob z lokálnej siete (192.168...) a spravil nález.

16. 6. 2024

CTF - CyberGame2024 - Documents

V sekcií "Malware" tohto ročníka súťaže CyberGame sa nachádzala téma "Documents".

Malvérová analýza - aby hráči získali vlajku, zisťujú, ako funguje škodlivý kód a hľadajú ďalšie spojitosti.

1.1 Categorization

Jeden z našich klientov zistil škodlivú aktivitu a podal podozrivý kód na analýzu. Tento kód, ktorý bol stiahnutý ako nástroj na kategorizáciu dokumentov v systéme.

Dostali ste za úlohu analyzovať tento súbor. Aké informácie z neho môžete zistiť?

Stiahol som si prílohu, súbor categorization.jl
import Pkg
Pkg.add("Nettle")
Pkg.add("HTTP")
using Sockets
using Nettle
using HTTP
encryption_key = hex2bytes("be59ee4cdd224bbc9b20d4f4cb958788a97595690c6338d0a736a3e287d64af5")
iv = hex2bytes("be59ee4cdd224bbc9b20d4f4cb958788")
cipherbytes = hex2bytes("5ea0928814f6a4aaad9aa4a8bd4c163f7d921146a65ff0653796860a0ab01de1c4a851c3a1361a98d71ba7da87e240b540a75e2986a60c9e88af8f3981a6a16179a7c440c1b44fe681c2667527bfefb8b86f840f68077d0158a379faff94b657e0f4d273e0fc3f9c668627e4203a50bf50b91de46cc872a169cd6cd24005afdc0cb3599584c621808c7d00211f49575cf9b20870b0578bcb6a7c2701ca9e6fef6baf07ed822e2cdde7774704e57fba30a2738a9e7679d171f26f115ce246c7e046e736cf21b91225c88ebfea5360e926f95b6c07172c861319ccbccf72a0e7835ff07e9fed0bf9cda538d60bc22391e615ace75c20923b75f5a546d488c9ad0b6e7386be372f526c71f51602dcd0bbfb05319a8f4a04584f7439ada6cbccb79ad51ee3df1e270c309ee96d83db7a91ffc6f524f04c68fa52d1829b44f6d3b9da003a52a3f2fb66d849c656265aa4f23ed6f6e99e8b8d8c41a0d4954cb1099c856d62679663f268ebd2c87bd2075097c91c435a775af079ef718083c9fa364614252f1baa2189899c94921be2e6c7222a52d8aafd13fbf460b8aec709c994f4f331388d1e0a12ee16399e7fe30ad45cdaf366baa641995b4a1b9d60791a493bafc5fc2c7ae7bf432c26d5169103adb4f407f1f8e2247692059b63415d8a0ace8dfc4a0b65424b329f153aa22bd18d754cd6d6d2997bd0365acaf468786154c7fa69772ceaad579e0afd53fd9ca74919b07357540921b5bd8b844ea5d543dee562c7a18ed2f599622d97b50eb8e3791f478288fcdd55a63b97027d3e95f60c5ad28661ee1cc755dfe7e33bac8c0ece22a52348eb8d3fae20de51933145cd8ea80ec2f457afbbcfb1726803a7603fbca1bb410c745bf8e8068cf6f8af01940c598106f2bb622189c8b3f4dbe37dfca8055a3489683bdf7c864a86f88fe432fe737eade87b394878c7e5be129efc2f634b789fb4854b1deaa7322c715d515d454d199f38582ae0e804c28a85786d3e5944ca0433d9b2731947914095a45940adb6f1b51a1e0c69205ff5cd290fc8b7415b7e6c8543f3648836f14f7ab6e5aeacd458f8fc8d3c6d3360149bead89dd414502ebb9dd4f2530d3c866e08fba31865d2538dce439a78d964cee4c35df13a222e88cdee5569b7a329bb21d97e5249b842ec7a83768037aadca5b571bb9fc1114937473db557a83df6ca5ff6ed7ebf8af274b96ffa2bc2a79d95f512d824f1ccb809a5c5cba2085c6a62a847ca989ee9544ac8d961c0acd9cc28d3d4b67d956fd121533cc4b8275297aa1dc63197c420f09950ae7a56eb0967634018ce9f439ff99b02b961afe2298a801ddce3b8ce7db862d0c623302b690c86cfac74e1e2d4f523da8ebf816901d74222f4fe1696ae7abeed2661a4db1fd903e3780e1e0503b18a")
decipherbytes = String(decrypt("AES256", :CBC, iv, encryption_key, cipherbytes))
include_string(Main, decipherbytes)

Ako vidieť, obsahuje 3 binárne reťazce zakódované pre čitateľnosť v HEX sústave a príkaz pre dešifrovanie najdlhšieho z nich cez algoritmus AES256. Pre dešifrovanie je potrebný kľúč {encryption key} a inicializačný vektor {iv} zabezpečujúci jedinečnosť, všetko teda máme.
Dešifrovaný reťazec príkazom include_string pribalí a teda pravdepodobne spustí.

Po zadaní reťazcov do CyberChef máme výstup v tvare kódu, hneď na začiatku je vlajka.
flag = "SK-CERT{3ncryp73d_jul14}"

response = HTTP.get("https://api.ipify.org/")
dat = String(response.body)
if occursin("198.18.2.2", dat)
	s = UInt8[
	    0x97, 0x8c, 0x8d, 0x8e, 0xc9, 0xcb, 0xca, 0x93, 
        ...