Alat pembangun · Pengekod & penyahkod Base64
Bagaimana untuk menyahkod arahan Base64 PowerShell yang mencurigakan tanpa menjalankannya
· Mengapa ia penting
asas64 keselamatan
Penyerang menggunakan Base64 untuk menyembunyikan skrip daripada pemeriksaan biasa. Siaran ini menunjukkan cara untuk menyahkod muatan -EncodedCommand tanpa melaksanakannya, sebab output mungkin kelihatan ganjil dalam penyahkod UTF-8 dan perkara yang perlu dicari.
Tugas berjadual dengan hujah 2,000-character — tempat arahan yang dikodkan muncul dan sebab ia adalah bendera merah
Sysadmin menemui tugas berjadual dengan hujah 2,000-character -EncodedCommand yang kelihatan mencurigakan. Tugas itu dijalankan di bawah akaun perkhidmatan dengan keistimewaan yang tinggi.
Godaan untuk menampal arahan ke dalam PowerShell dan menjalankannya untuk melihat apa yang dilakukannya adalah berbahaya; jika arahan itu berniat jahat, melaksanakannya menjejaskan sistem. Pendekatan yang lebih selamat adalah untuk menyahkod Base64 secara tempatan dan membaca output sebagai teks sebelum memutuskan sama ada untuk menjalankan apa-apa. Siaran ini menerangkan cara untuk menyahkod perintah PowerShell dengan selamat tanpa melaksanakannya, sebab output mungkin kelihatan bercelaru dalam penyahkod UTF-8 standard, dan perkara yang perlu dicari untuk menilai sama ada arahan itu selamat atau mencurigakan.
Nyahkod, jangan sesekali laksana — peraturan yang memastikan analisis selamat dan sebab penyahkod pelayar sahaja sesuai
Wawasan utama ialah PowerShell menggunakan pengekodan UTF-16LE untuk -EncodedCommand, bukan UTF-8, jadi setiap bait lain ialah sifar yang ditafsirkan oleh alat standard sebagai penamat nol. Peraturan untuk menganalisis sebarang kod yang mencurigakan adalah mudah: nyahkod, jangan sekali-kali dilaksanakan. Ini terpakai pada perintah berkod Base64, skrip termampat, skrip daripada sumber yang tidak dipercayai dan apa-apa sahaja dalam rangkaian pengekodan yang tidak dikenali. Melaksanakan skrip adalah titik tiada pulangan; sebaik sahaja ia berjalan, perubahan pada sistem telah berlaku, akses telah diberikan dan data telah dieksfiltrasi.
Menyahkod dan membaca skrip sebagai teks membolehkan anda menilainya sebelum langkah yang tidak boleh diubah. Peraturan kedua ialah menggunakan alat yang berjalan secara setempat dan tidak membuat permintaan rangkaian. Penyahkod berasaskan pelayar sangat sesuai kerana ia mudah alih, tidak memerlukan perisian tambahan dan menyimpan muatan yang mencurigakan pada peranti anda tanpa memuat naiknya ke mana-mana pelayan. Jika alat itu adalah jenis yang menyiarkan ke perkhidmatan penyahkod jauh, jangan gunakannya; muatan kemudiannya terdedah kepada perkhidmatan itu. Parameter PowerShell -EncodedCommand menerima rentetan Base64 yang, apabila dinyahkod, mengandungi skrip PowerShell.
Mengapa bait yang dinyahkod kelihatan tidak seperti teks UTF-8 — periksa corak bait UTF-16LE dalam hex dan bukannya meminta alat teks UTF-8 ini untuk mentafsirnya
Walau bagaimanapun, PowerShell tidak menggunakan UTF-8 pengekodan untuk ini; ia menggunakan UTF-16LE (kecil-endian UTF-16). Dalam UTF-16, setiap ASCII aksara diwakili sebagai dua bait: kod aksara diikuti dengan bait sifar. Huruf A ialah 41 00 dalam hex. Huruf B ialah 42 00. Rentetan seperti Hello muncul sebagai 48 00 65 00 6C 00 6C 00 6F 00 dalam UTF-16LE bait. Apabila ini dikodkan Base64, hasilnya mengandungi bentuk yang dikodkan bagi semua bait tersebut, termasuk semua sifar. Penyahkodan dengan standard UTF-8 penyahkod menghasilkan teks bercelaru atau memotong pada bait sifar pertama kerana UTF-8 merawat bait nol sebagai penamat rentetan.
Output kelihatan seperti H e l o bukannya Hello, dengan aksara yang kelihatan rawak atau teks yang tiada. Contoh yang berfungsi menunjukkan masalah dan penyelesaiannya. Katakan arahan PowerShell mengekod rentetan ringkas Write-Host Hello. PowerShell UTF-16LE-mengekod ini kepada bait termasuk semua sifar, Base64-mengekodkan bait dan menghasilkan rentetan panjang seperti VwByAGkAdABlAC0ASwBvAHMAaAAgACIASABlAGwAbABvACIA. Salin rentetan ini ke dalam pengekod & penyahkod Base64 dalam pelayar anda dan klik Nyahkod. Penyahkod lalai akan cuba mentafsirkan hasilnya sebagai teks UTF-8 dan menghasilkan output rosak atau dipotong kerana sifar terbenam.
Contoh yang berkesan: menyahkod perintah yang dikodkan sampel tidak berbahaya — membaca teks melepasi bait sifar yang dijalin
Penyelesaiannya adalah dengan menggunakan pandangan hex sebaliknya. Beralih kepada paparan hex dan anda melihat bait: 57 00 72 00 69 00 74 00 65 00 2D 00 4B 00 6F 00 73 00 68 00 20 00 22 00 48 00 65 00 6C 00 6C 00 6F 00 22 00. Membaca bait tersebut sebagai UTF-16LE pasangan menghasilkan W-r-i-t-e---K-o-s-h---H-e-l-l-o-. Dengan pengalaman anda boleh membaca UTF-16LE hex secara langsung, atau anda boleh menulis bait pada fail dan menyahkodnya dengan skrip PowerShell atau Python yang dijalankan secara setempat.
Pendekatan praktikal adalah untuk mencatat corak dan ingat bahawa PowerShell menggunakan UTF-16LE. Apabila anda menyahkod PowerShell -EncodedCommand dalam pelayar dan output kelihatan salah, lihat pada paparan hex dan bukannya paparan teks. Paparan hex menunjukkan setiap bait secara individu. Setiap aksara ASCII muncul sebagai dua bait dengan sifar di antaranya. Jika bait menyatakan perintah berniat jahat seperti New-AdminAccount, carian dns terbalik atau eksport bukti kelayakan keselamatan, arahan itu mencurigakan. Jika bait menyatakan sesuatu yang tidak berbahaya seperti penyenaraian direktori atau skrip ringkas, arahan itu mungkin tidak berbahaya.
Pengekodan dan pemampatan bersarang — Base64 di dalam Base64, dan aliran gzip yang anda tidak boleh baca sebagai teks
Paparan hex lebih sukar dibaca daripada teks biasa, tetapi ia lebih selamat daripada meneka daripada output UTF-8 yang rosak. Pengekodan dan pemampatan bersarang menambah kerumitan pada analisis perisian hasad. Perintah PowerShell mungkin Base64-mengekodkan rentetan Base64 yang lain, atau memampatkan skrip dengan gzip dan kemudian Base64-mengekodkan hasilnya. Dalam senario bersarang anda menyahkod Base64 luar, baca hasilnya dan temui ia sendiri base64. Nyahkod itu juga dan teruskan sehingga anda menemui teks yang boleh dibaca atau format binari yang anda tidak boleh tafsirkan. Gzip dan format mampatan lain bermula dengan bait ajaib (1F 8B untuk gzip) kelihatan dalam paparan hex.
Jika anda menyahkod Base64 dan paparan hex bermula dengan 1F 8B, bait ialah aliran termampat yang memerlukan penyahmampatan. Pengekod & penyahkod Base64 menunjukkan kepada anda heks, membantu anda mengenal pasti corak ini tanpa melaksanakan apa-apa. Muatan yang dimampatkan atau dikodkan lebih lanjut adalah mencurigakan kerana ia menambah lapisan pengeliruan.
Perkara yang perlu direkodkan untuk laporan insiden — teks yang dinyahkod, sumber dan cincangan berbanding muatan itu sendiri
Perintah yang sah jarang memerlukan beberapa langkah pengekodan. Merekod penemuan untuk laporan insiden memerlukan disiplin dan ketepatan. Tulis rentetan Base64 tepat yang anda analisis, tempat anda menemuinya dan bila. Jika anda menyahkodnya dan menemui arahan yang mencurigakan, huraikan arahan itu tetapi jangan masukkan skrip penuh dalam laporan lagi; skrip mungkin rumit atau panjang.
Sertakan cincang (SHA-256) skrip yang dinyahkod supaya penemuan boleh disahkan dan dijejaki. Jika arahan itu jelas berniat jahat atau menggunakan teknik eksploitasi yang diketahui, libatkan respons insiden dan pasukan keselamatan sebelum mengambil sebarang tindakan. Jangan sekali-kali melaksanakan perintah itu sendiri untuk melihat apa yang dilakukannya. Jika responden insiden perlu melaksanakannya untuk ujian, mereka melakukannya dalam persekitaran kotak pasir di mana sebarang kerosakan terkandung. Tugas anda adalah untuk menyahkod dan menilai risiko pada jarak yang selamat. Artikel ini tidak merangkumi skop penuh analisis perisian hasad, persekitaran kotak pasir atau atribusi serangan.
Perkara ini tidak meliputi — pelaksanaan kotak pasir, alat analisis perisian hasad dan atribusi
Itu adalah topik untuk profesional keselamatan dan pasukan tindak balas insiden. Skop di sini tertumpu secara sempit pada menyahkod perintah PowerShell yang dikodkan dengan selamat tanpa melaksanakannya, supaya anda boleh membaca skrip dan menilai sama ada ia patut disiasat lebih lanjut. Pengekodan Base64 adalah kekeliruan, bukan perlindungan. Sesiapa sahaja yang mempunyai pengekodan dan penyahkod boleh mengekstrak skrip. Penyerang menggunakan Base64 untuk mengelakkan pengesanan asas dan untuk mengelakkan pemeriksaan biasa, bukan untuk menyembunyikan niat mereka daripada analisis. Perintah PowerShell yang dinyahkod yang mengambil dan melaksanakan skrip jauh adalah berniat jahat sama ada anda menyahkodnya sendiri atau alat keselamatan melakukannya.
Langkah praktikal seterusnya selepas menyahkod perintah yang mencurigakan ialah melaporkannya kepada pasukan yang sesuai. Jika ia adalah sistem anda sendiri, tentukan sama ada tugas itu dibuat dengan sengaja dan oleh siapa. Semak tarikh penciptaan dan akaun yang menjadualkannya. Jika tugas itu tidak dibenarkan, lumpuhkannya, simpan butiran untuk forensik dan siasat cara penyerang mendapat keistimewaan untuk menciptanya. Jika arahan itu mengandungi permintaan rangkaian atau mekanisme kegigihan seperti perubahan pendaftaran atau penciptaan tugas berjadual, ia hampir pasti berniat jahat.
Bawa pulang: Base64 adalah kekeliruan, bukan perlindungan — cara pengekod & penyahkod Base64 menyahkod muatan secara setempat tanpa ia meninggalkan mesin anda
Jika ia melaksanakan fungsi pentadbiran yang sah dan butiran penciptaan adalah normal, ia mungkin skrip pentadbiran yang sah yang kebetulan dikodkan atas sebab yang berkaitan dengan dasar keselamatan atau penyepaduan dengan alat automasi yang lebih besar. Jangan laksanakannya dengan cara sama ada; biarkan penilaian anda terhadap teks yang dinyahkod memberitahu keputusan anda. Penyahkodan selamat bagi arahan Base64 PowerShell yang mencurigakan mengikut proses yang mudah. Gunakan pengekod & penyahkod Base64 untuk menyahkod rentetan tanpa memuat naiknya atau melaksanakan apa-apa. Lihat pada paparan hex untuk memahami apa yang diwakili oleh bait.
Jika anda melihat corak UTF-16LE (sifar bait bersilang) ingat bahawa PowerShell menggunakan UTF-16LE dan baca dengan sewajarnya. Kenal pasti sebarang corak yang mencurigakan seperti permintaan rangkaian, peningkatan keistimewaan atau mekanisme kegigihan. Catatkan butiran dengan tepat untuk laporan kejadian anda, termasuk rentetan Base64 asal dan cincangnya. Jangan sekali-kali melaksanakan perintah itu sendiri; serahkan kepada responden insiden dalam persekitaran terkawal. Percayai penyahkodan tempatan anda dan penilaian anda terhadap teks biasa, dan biarkan ia membimbing tindakan anda yang seterusnya.