My fiancée, Mizuhara Chizuru, lent her laptop to one of her friends. Her friend downloaded files using a peer-to-peer protocol on Windows. However, not long after, one of Chizuru's important documents went missing. There's always something with my fiancée :D
Author: C2uru
file : direct-love.zip
Diberikan sebuah zip yang berisi file pcapng dengan traffic seperti berikut
Dapat dilihat bahwa traffic dalam file ini berfokus dengan protocol TCP dan ICMP. Lalu dapat kita lihat bahwa pada traffic ini berfokus pada IP 192.168.56.1 dan 192.168.56.101
lalu dicobalah analisa pada protokol TCP terlebih dahulu dengan menggunakan follow TCP stream pada salah satu paket TCP, dan disini terlihat pula bahwa terdapat total 4 TCP stream
dari sini kita dapat melihat behaviour atau sifat protokol asli pada traffic. Dapat terlihat bahwa terdapat sebuah percakapan dengan dengan menggunakan sebuah protokol tertentu, hal ini dapat dilihat dengan adanya penggunaan sebuah command unik seperti $ConnectToMe
dan $MyINFO $ALL
. Dengan dua command tersebut kita dapat mencari tahu protocol apa yang sebenarnya digunakan, dan ternyata protocol yang digunakan tersebut adalah ADC yang mirip dengan protokol NMDC yang bisa kita sebut sebagai protokol peer-to-peer (p2p).
Hal ini pun diperkuat oleh TCP Stream selanjutnya yang memuat command lainnya
Dari informasi yang kita dapatkan dapat kita simpulkan kita harus merecovery data dari traffic ADC Protokol. Untuk ADC sendiri memiliki behaviour tersendiri dalam mengirim atau menerima data. Secara singkat dapat dikatakan seperti ini
hal pertama yang dilakukan adalah mengambil data XML untuk mengetahui file apa saja yang di transfer. untuk hal tersebut kita dapat mencapainya dengan 2 cara yaitu ambil stream yang mengirimkan XML lalu kita decompress atau langsung saja kita binwalk
pcapng nya
dapat dilihat disini kita langsung mendapatkan beberapa XML sekaligus
dan berikut adalah isinya
dari file tersebut kita dapat mengetahui ada file yang menarik yaitu secret.pdf
dan contract.doc.exe
beserta TTH Hashnya, dan saat kita lihat di streamnya ternyata dua file tersebut lah yang di transfer
dan setelah dianalisa dua file tersebut berada pada TCP stream yang berbeda (pdf pada TCP stream 3, doc.exe pada TCP stream1). Dan untuk bagian file-filenya pun terstruktur, dapat dilihat pada file contract.doc.exe
pada TCP stream 1
fokus pada command $ADCGET file
yang memiliki struct seperti ini (structnya pun mirip dengan $ADCSND file
)
$ADCGET file TTH/<TTH Hash file> <start offset> <end offset> ZL1
dari situ dapat dilihat paket sudah tersedia secara sequence sehingga kita hanya perlu mengambil secara berurutan, berikut scriptnya
dan berikut hasilnya
lalu lakukan cleaning (karena kita hanya perlu packet yang menyimpan zlib compressed saja dan memuat file yang ingin kita recover) sehingga seperti ini
langsung saja kita ambil data yang memuat compressed zlibnya dan kita decompress menggunakan script berikut
dan berikut hasilnya
terlihat sepertinya file pdf tersebut sudah ter-encrypt (hal ini pun bisa kita pastikan dengan adanya extension tambahan .wkwk
pada list file nya) oleh karena itu mari kita coba recover .exe
nya terlebih dahulu
disini saya menggunakan approach berbeda dengan TCP stream 3 karena pada TCP stream 1 terdapat beberapa packet yang error dan sepertinya pyshark ignore packet tersebut
disini saya menggunakan filter pada follow TCP Stream (filter conversation dan membuat data as raw)
lalu saya save as ke datafull6
dan berikut hasilnya
cleaning terlebih dahulu lalu gunakan script sebelumnya untuk decompress zlib dan berikut hasilnya
dapat terlihat bahwa untuk file contract.doc.exe
ini tidak ter-encyrpt tidak seperti file .pdf
sebelumnya, maka bisa dipastikan kedua file ini berhubungan.
mari kita coba analisa secara singkat file exe tersebut
dari sini dapat dilihat bahwa sepertinya file exe tersebut merupakan hasil compile script python
langsung saja saya up ke pylingual dan berikut hasilnya
sepertinya file tersebut terkena obfuscated dan secara sekilas script tersebut merupakan ICMP listener yang akan mengtamper paketnya menggunakan AES mari kita coba recover AES key nya terlebih dahulu, karena terlihat seperti persamaan saja pada fungsinya sehingga kita bisa merecover tanpa deobfuscated terlebih dahulu. berikut scriptnya (seharusnya bisa menggunakan z3 tapi penulis lebih memilih cara barbar)
terdapat sebuah edge case terutama pada persamaan yang memiliki modulo sehingga kita ganti menggunakan ?
dan sepertinya kita butuh bruteforce untuk char ?
dan berikut AES Key hasil script
untuk brute AES key nya kita dapat mengambil satu packet lalu kita coba decrypt menggunakan script berikut
dan kitapun dapat full AES Key
atau dalam bentuk hex nya f001fa8dc1cd1190589a9615e43bd7f9
.
lalu kita coba deobfuscate keseluruhan scriptnya. Dan berikut hasilnya
dari sini dapat lihat lebih jelas bahwa alurnya adalah sebagai berikut
hal ini dapat disimpulkan agar kita mengetahui hasil command tersebut, dikarenakan ICMP sendiri memiliki behaviour dia akan memberikan response yang sama dengan request
oleh karena itu mari kita coba lihat ICMP requestnya terlebih dahulu dengan mendecrypt menggunakan AES dan kita decompress zlib
berikut hasilnya
disini kita mendapatkan informasi bahwa isi request tersebut adalah obfuscated powershell script, dan terdapat command block untuk enkripsi AES yang bisa kita simpulkan bahwa file secret.pdf.wkwk
merupakan hasil command block tersebut, dan kita harus merecover variable $key
terlebih dahulu.
berikut konsepnya
echo
dan iex
.iex
agar kita dapat melihat wujud sebenernya dari command tersebut.berikut hasilnya
disini kita dapat melihat bahwa command tersebut mengecek value dari $key
yang digunakan untuk meng-decrypt secret.pdf.wkwk
langsung saja kita ambil value tampered responsenya
berikut hasilnya
rapihkan terlebih dahulu, lalu kita coba bandingkan dengan command powershell untuk mendapatkan key nya
berikut hasilnya
langsung kita coba decompile file secret.pdf.wkwk
menggunakan key yang ada
kitapun mendapatkan flag
Although I managed to find out about my fiancée's missing document, I'm afraid this might be some kind of attack specifically targeting my family. So, I've been investigating several cases that more or less have indications of the same threat actor as the one who stole my fiancée's document yesterday. Using this artifact, I'm hoping to find out the conversation of one of the strong suspects who is behind all of this. Can you help me analyze some of the interesting things here?
author : c2uru
file : file
password : TWl6dWhhcmFjaGl6dXJ1e3doeV95b3VfZGVjb2RlX3RoaXM/fQ==hint : "I managed to retrieve all the message history and tried to solve the problem, but I hit a dead end," I muttered, kicking the door in frustration. Chizuru walked over and hugged me from behind. "I think you're just overthinking it, sweetheart. Take a deep breath," she whispered gently. I exhaled slowly, feeling the tension ease. "You’re right… hmm, wait a minute. If this file works the way I think it does, and the file size given by the header is correct by default, why is it bigger after being compressed?"
diberikan sebuah file zip yang ternyata isinya adalah memdump dengan ukuran 8GB
dicoba menggunakan volatility untuk mendapatkan process yang sedang berjalan
disini kita dapat melihat terdapat proses discord dan karena ini sangat berkaitan dengan deskripsi maka dapat dipastikan bahwa fokus kita adalah ke discord. hal yang pertama kita akan lakukan adalah merecover history chat
disini dicoba untuk merecover file cache pada discord untuk mendapatkan history chat nya, namun ternyata nihil karena tidak terdapat cache yang menyimpan history chat
dikarenakan cachenya tidak ada, maka kita bisa fokus pada process discord, karena pasti ada data yang nyangkut di memory
data chat pada discord disimpan dalam struct json yang unik seperti berikut
kita bisa saja mendump process discord namun disini penulis langsung menggunakan cara barbar dengan menggunakan key json channel_id
disini dapat kita lihat bahwa kita bisa merecovery history chatnya, hanya perlu beberapa parsing agar chatnya lebih bersih.
kita akan menggunakan key contentm
untuk mengambil value dari chatnya dan escape beberapa char (hal ini karena data yang kita dapat hasil string maka terdapat beberapa junk) ,dan mengambil key timestampm
untuk mengambil jam chat nya yang nantinya akan diurutkan agar terstruktur. berikut python scriptnya
berikut hasilnya
terdapat beberapa chat dan informasi seperti
lalu kita coba decrypt encrypted message tersebut dengan informasi yang kita dapatkan
dari encrypted string dapat kita lihat bahwa itu merupakan base64 atau dibawahnya maka bisa dipastikan base diatasnya, maka disimpulkan itu adalah base85, langsung saja kita coba decode
dari sini dapat kita lihat terdapat sebuah file dan kita diminta untuk recover file tersebut
setelah kita download file tersebut dapat dilihat bahwa file tersebut merupakan sebuah file zip yang corrupted
disini dapat terlihat jelas anomali pertama yaitu pada filename. kita lakukan fixing dengan mengubah sesuai dengan len filename yaitu 6
kita terkena error selanjutnya
disini dapat dilihat sepertinya ada kesalahan pada extra len sehingga local header akhirnya tidak didapatkan. dan sepertinya kita melihat bahwa extra mengambil value berlebih pada Extra ID 3
mari kita coba sesuaikan len extra yang seharusnya sampai sebelum AB6E
seharusnya extra len nya adalah 0x1c
mari kita cek kembali dan ternyata masih ada error
pada central header sepertinya terdapat anomali pada file len yang seharusnya 6
kita cek kembali ternyata terdapat anomali pada extra len sehingga tidak menemukan end of central header
yang dimana len harusnya 0x18
dan ternyata timestamp pada local header pun salah, dikarenakan menaruh tanggal dimasa depan, kita copy timestamp pada central agar membuatnya menjadi make sense
berikut detail zip yang sudah tidak reproduce error
namun sayangnya kita tidak bisa unzip archive filenya
untuk bruteforce crc sepertinya akan cukup sulit dan tidak manusiawi dalam hal file dalam archive. mari kita fokus kepada hint yang diberikan yaitu mengapa size compressed lebih besar dari uncompressed. mungkin bisa kita analisa terlebih dahulu melalui method zip yang ada dan sering digunakan
lalu dengan informasi yang ada yaitu size compressed yang lebih besar besar dari uncomprorssed maka dipastikan method yang digunakan sudah pasti 00 dan sudah benar yang ada didalam archive, namun kita pun dapat lihat di binarynya bahwa file tidak as-is berarti ada enkripsi yang diterapkan. namun apakah hal tersebut possible? hal tersebut bisa dikonfirmasi pada informasi berikut
bahwa kita bisa melakukan enkripsi pada file lalu secara uncompressed dalam archive. mari kita coba-coba terlebih dahulu, disini saya mencoba membuat file dummy dengan ukuran yang hampir mirip dengan file zip
dengan command zip yang terdapat beberapa command berikut
disini kita menggunakan parameter -0
untuk melakukan zip tanpa compress, dan kita passing param -P
untuk define passwordnya
disini penulis menemukan hal yang menarik
yaitu tentang flag general purpose dan berikut beberapa penjelasannya
untuk general purpose ini dia menggunakan bit pada value flagnya seperti 0x9 maka 1001 yang membuat bit 3 dan bit 0 true. yang berarti file tersebut terkena encrypt dan terdapat data descriptor
yang bisa kita pastikan pun ada di unknown.zip
langsung saja kita ubah value general purpose ke 0x9
dan sekarang kita sudah bisa unzip dan dimintai password
langsung saja kita gunakan john
passwordnya adalah generasi bangkit
langsung kita unzip