1 poin oleh GN⁺ 2025-05-13 | 1 komentar | Bagikan ke WhatsApp
  • Berbagi pengalaman proses pengembangan defendnot, alat untuk menonaktifkan Windows Defender dengan memanfaatkan Windows Security Center(WSC) service API secara langsung
  • Proyek ini dimulai dari upaya mengatasi keterbatasan teknis dan masalah hukum pada proyek no-defender sebelumnya
  • Reverse engineering dan debugging dilakukan di tengah berbagai hambatan seperti lingkungan khusus (MacBook arm64, debugging jarak jauh, latensi tinggi)
  • Menganalisis bypass pendaftaran Defender dan mekanisme verifikasi proses, lalu meningkatkannya agar bekerja stabil setelah berbagai kegagalan dan percobaan
  • Pada akhirnya berhasil menyelesaikan fitur autorun sekaligus merefleksikan betapa beratnya proses proyek tersebut

Pengantar

  • Berbagi pengalaman perjalanan implementasi alat defendnot untuk menonaktifkan Windows Defender
  • Alih-alih menjelaskan detail teknis utama, tulisan ini dirangkum dengan fokus pada masalah nyata di lapangan dan pengalaman trial-and-error
  • Dokumentasi resmi dan penjelasan teknis akan dipublikasikan terpisah di kemudian hari

Kilas balik 1 tahun lalu

  • Sekitar 1 tahun lalu, penulis merilis proyek bernama no-defender, yang memanfaatkan mekanisme nonaktifnya Windows Defender melalui WSC API
  • Proyek ini merujuk kode pihak ketiga dari vendor antivirus untuk menipu sistem seolah-olah antivirus lain telah terdaftar
  • Setelah dirilis, proyek ini mendapat perhatian besar dan meraih sekitar 1.500 Star, tetapi karena permintaan penghapusan DMCA dari perusahaan antivirus terkait, sumber kode dihapus dan proyek diputuskan untuk dihentikan

Alasan memulai proyek

  • Saat tulisan ini dibuat, penulis sedang tinggal di Airbnb di Seoul
  • Lingkungan pengembangan utama adalah M4Pro MacBook, dan penulis tidak membawa perangkat terpisah yang diperlukan untuk reverse engineering x86
  • Karena kompetisi CTF dan jadwal perjalanan, muncul situasi yang memaksa pekerjaan dilakukan tanpa perangkat x86
  • Sambil meninjau kemungkinan implementasi no-defender yang lebih “normal”, penulis mulai mengeksplorasi apakah implementasi mandiri tanpa bergantung pada AV memungkinkan

Investigasi awal (hari 1)

  • Dengan bantuan seorang teman, penulis mendapatkan binary WSC dan mencoba mengimplementasikan ulang pendaftaran WSC dengan struktur serupa proyek sebelumnya
  • Implementasi dibuat menggunakan COM API milik WSC, tetapi muncul error Access Denied
  • Penyebab error ditelusuri pada proses verifikasi tanda tangan dan autentikasi yang dilakukan WSC terhadap proses pemanggil API
  • Saat mencoba mendaftarkan melalui injeksi modul ke proses AV, AV berhasil terdaftar

Mengganti binary AV dan eksperimen tambahan (hari 1)

  • Penulis mencoba menjalankan alat melalui proses sistem bertanda tangan (seperti cmd.exe), tetapi gagal pada verifikasi PPL(Protected Process Light)
  • Setelah itu pekerjaan dihentikan sementara sambil menunda disassembly dan pelacakan yang lebih rinci

Membangun lingkungan kerja (hari 2)

  • Karena keterbatasan lingkungan MacBook arm64, debugging Windows x86 menjadi sangat sulit
  • Penulis memakai PC temannya yang tinggal di Amerika secara jarak jauh (Parasec, Anydesk, dll.) untuk melakukan debugging dan eksperimen dalam lingkungan berlatensi tinggi
  • Dalam proses build kode dan debugging VM yang saling bersilangan dengan rumit, penulis mengalami perlambatan dan kebingungan

Debugging layanan WSC (hari 2)

  • Dikonfirmasi bahwa layanan WSC berbentuk DLL yang dijalankan oleh svchost
  • Untuk melepas perlindungan PPL, diterapkan bypass dengan driver khusus, lalu dipastikan debugger dapat masuk ke fungsi target
  • Terungkap bahwa layanan tersebut melakukan pemeriksaan token SID WinDefend di dalamnya
  • Dari sini disusun teori bahwa prosedur autentikasi bisa dibypass dengan meniru proses yang memiliki SID WinDefend

Meniru SID WinDefend (hari 2)

  • Penulis mempelajari lebih lanjut struktur token Windows dan prinsip cara kerjanya
  • Setelah mengimplementasikan dan menjalankan kode peniruan SID WinDefend, semua pemanggilan COM mengembalikan SUCCESS, tetapi AV ternyata tetap tidak benar-benar terdaftar

Merekonstruksi algoritma verifikasi (hari 3)

  • Penulis menganalisis ulang dengan hati-hati apakah pengecekan SID benar-benar lolos pada binary AV
  • Jika pengecekan SID gagal, layanan ternyata juga memeriksa status eskalasi hak akses, tanda tangan binary, serta flag DllCharacteristics(ForceIntegrity) pada PE
  • Fungsi yang menjalankan struktur tersebut direproduksi, lalu eksperimen dilakukan dengan menerapkannya pada binary core di dalam sistem

Memanfaatkan proses Taskmgr (hari 3)

  • Eksperimen ulang dilakukan dengan Taskmgr.exe sebagai proses target, tetapi WSC menolak permintaan karena kesalahan pada proses pengiriman nama dan bug IPC
  • Setelah memperbaiki inferensi path file dan cara penyampaian nama AV, dipastikan bahwa semuanya berjalan normal

Merapikan kode (hari 3)

  • Fitur-fitur dirapikan dan penulis mencoba mengimplementasikan fitur autorun
  • Saat mengelola autorun, sesekali terjadi kegagalan, sehingga penulis berulang kali memeriksa kode dan lingkungan untuk mencari penyebabnya

Implementasi autorun (hari 4)

  • Penulis memastikan bahwa penyebabnya adalah opsi di Task Scheduler yang mencentang agar task tidak dijalankan saat laptop tidak terhubung ke daya AC
  • Setelah pengaturan itu dimatikan, autorun berjalan normal
  • Sebagai penutup, dilakukan pembersihan kode dan pengujian

Kesimpulan

  • Pekerjaan reverse engineering dalam lingkungan yang terbatas dan tidak nyaman merupakan pengalaman yang sangat berat secara mental maupun fisik
  • Dokumen implementasi WSC yang lebih rinci akan dipublikasikan terpisah di masa mendatang

Ucapan terima kasih

  • Pindos: teman yang meminjamkan PC pada malam hari untuk membantu debugging dan menghangatkan kamar
  • MrBruh: rekan yang memicu dimulainya eksplorasi proyek ini serta memberi ide dan masukan
  • Juga kepada orang-orang terdekat yang terus berkomunikasi dan memberi semangat selama proyek berlangsung
  • Penulis mengaku mencintai kimchi
  • Terima kasih juga kepada seniman yang meninggalkan grafiti di dinding kami

1 komentar

 
GN⁺ 2025-05-13
Komentar Hacker News
  • Cara paling ampuh tetapi juga paling invasif untuk menonaktifkan Defender adalah dengan boot dari live Linux USB, mengganti nama folder C:\ProgramData\Microsoft\Windows Defender, lalu membuat file kosong di lokasi itu
    • Group Policy bekerja terlalu baik, jadi saya menaruh controller di homelab dan menyiapkan lingkungan domain lokal yang otomatis mengubah kebijakan Defender untuk semua pengguna
    • Aneh rasanya bahwa Windows tidak memiliki manifest bertanda tangan untuk mendeteksi modifikasi semacam itu
    • Produk populer juga pada dasarnya melakukan hal seperti itu, dan pernah menjatuhkan sekitar 25% internet secara keseluruhan
  • Proyek ini sempat sangat ramai dan mendapat sekitar 1,5k bintang, lalu setelah itu pengembang antivirus yang saya pakai mengirim permintaan DMCA. Saya tidak paham apa yang dimaksud dengan "antivirus yang saya pakai", atau kenapa orang ini yang mengirim DMCA. Mungkin penulis melakukan reverse engineering antivirus lain lalu memasukkannya ke open source, atau setidaknya terkait dengan meniru WinDefend. Sepertinya memang ada masalah hak cipta
    • Menurut pemahaman saya, ini tampaknya memanfaatkan cangkang alat antivirus lain untuk melewati persyaratan signature. Ini cukup transformatif sehingga mungkin masuk akal (saya bukan ahli hukum), tetapi tetap area abu-abu
    • Ya, ini melanggar hukum hak cipta dengan menyalin sebagian program antivirus yang sudah ada. Bahkan paragraf tepat di atas kutipan itu menjelaskan bahwa proyek tersebut menggunakan kode pihak ketiga dari antivirus yang sudah ada untuk mendaftarkan AV ke WSC
  • Sebagai referensi, WSC adalah singkatan dari Windows Security Center
    • Terima kasih atas bantuannya. Sangat menjengkelkan kalau singkatan pertama kali muncul tanpa penjelasan
  • Ini benar-benar aneh: https://github.com/es3n1n/defendnot/… Kalau penasaran apa yang sebenarnya terjadi, lihat di sini: https://github.com/es3n1n/defendnot/…
    • Saya penasaran apakah ada yang bisa menjelaskan sihir CPP ini dan mengapa kode ini dianggap aneh
    • Saya tidak melihat apa yang aneh. Saya cukup sering memakai pola ini di berbagai tempat dalam kode. Tanda tangannya memang berbeda di sisi pemanggilnya, tapi itu selera pribadi. Sebagai catatan, bahasa D punya sintaks bawaan yang terpicu saat keluar dari scope
    • Saya sedang kekurangan waktu dan malas menerapkan pola RAII sendiri untuk semua komponen COM. Akan saya ubah di pembaruan berikutnya
    • "Kode itu seperti cara Anda memperlakukan rekan kerja" - Michael Feather Singkatnya, ini bukan AI Kode itu berfungsi menunda pemanggilan fungsi saat scope suatu objek berakhir. Ia memakai makro C untuk menyederhanakan definisi lambda/fungsi anonim C yang rumit serta pembuatan nama variabel unik. Namun, karena makronya tidak ditulis dengan huruf besar dan terlihat seperti pemanggilan fungsi, orang yang belum terbiasa bisa bingung. Bagi sebagian orang, pola ini cukup berguna hingga dianggap idiomatik. Penjelasan teknisnya bisa dilihat di tautan komentar lain
  • Tahun lalu saya sangat menikmati liburan sambil melakukan reverse engineering virtual desktop Windows, dan itu jadi kenangan yang keren. Reverse engineering memang sangat menyenangkan. Saya belajar banyak hal menarik, misalnya bahwa ada mekanisme komunikasi pesan tak terdokumentasi di dalam Windows RPC: https://csandker.io/2022/05/24/Offensive-Windows-IPC-3-ALPC.html
  • Saya baru-baru ini membaca https://nostarch.com/windows-security-internals, dan itu membuat tulisan ini terasa makin relevan. Saya sudah cukup paham bagaimana backend di Windows bekerja, tetapi bab terakhir buku itu menjelaskan token dan SID sedetail pembahasan penulis di sini
  • Saya penasaran mengapa orang ingin menonaktifkan WSC
    • Mungkin karena performa, pengembangan malware, peretasan, dan sebagainya
    • Jika Anda pelaku ancaman, Anda mungkin beruntung bila tidak ada produk EDR (endpoint detection and response) lain yang terpasang. Tetapi jika ada, hampir pasti Anda akan diblokir. Jika Anda vendor EDR, ini bisa dipakai sebagai pemanggilan API yang diobfusikasi untuk menonaktifkan Windows Firewall. Produk seperti CrowdStrike juga bisa memakai firewall mereka sendiri atau menggantikan Windows Firewall
    • Semua perangkat lunak antivirus setidaknya adalah powervirus. Saya tidak suka ada yang mengawasi dengan logika seperti tidak boleh memakai netcat.exe
    • Ini perangkat keras saya, jadi akan saya pakai sesuka saya. Sesederhana itu
    • Saya justru heran kenapa orang ingin sengaja menanam rootkit di sistemnya sendiri
  • Yang lebih buruk bagi saya adalah Check Point Harmony sama sekali tidak memanfaatkan antarmuka yang dibuat untuk Defender, dan malah menyuruh pengguna menonaktifkan Defender secara langsung lewat artikel knowledge base
  • Kalau ada yang penasaran: WSC adalah singkatan dari Windows Security Center. Saya juga harus mencarinya
    • Frasa "Windows Security Center-WSC-lah yang mengelola semua ini" memang ada di artikelnya
  • Menanggapi tulisan "Saya sedang bekerja di arm64 macbook dan saat ini tidak ada cara yang benar-benar layak untuk mengemulasikan x86 Windows di arm macbook", ada yang bertanya tentang UTM dan menyebut Parallels baru-baru ini mulai mendukung Intel VM
    • Saya sudah mencoba UTM, dan untuk x86 Windows performanya sangat buruk sampai nyaris tidak bisa dipakai. Linux command line mungkin masih bisa diterima meski lambat, tetapi di lingkungan GUI tidak memungkinkan. arm64 Windows berjalan baik, tetapi itu bukan x86 Windows, jadi tidak berguna untuk reverse engineering komponen sistem x86
    • Sistem dynamic recompilation milik QEMU tidak seefisien sistem native di Windows atau macOS (Rosetta 2). x86 Windows memang bisa berjalan di UTM, tetapi performanya sangat buruk. Dalam praktiknya, menjalankan aplikasi x86 di ARM Windows VM lewat dynamic recompiler Windows, atau memakai WINE yang berbasis subsistem kode native, terasa lebih baik. Untuk pekerjaan sederhana yang mendesak mungkin masih cukup. Jika yang dimaksud OP dengan "layak" mencakup performa, saya paham posisinya
    • Tolong koreksi kalau saya salah, tetapi sepertinya emulasi CPU dengan MMU pada dasarnya memang lambat dan sulit dioptimalkan. Teknologi Apple Rosetta dan padanannya dari Microsoft bisa cepat karena hanya menjalankan kode user-space. Mereka menghindari emulasi MMU sistem secara penuh