Purple Team Series : Offensive and Defensive C#

Rahmat Nurfauzi
4 min readDec 23, 2020

--

Dalam beberapa tahun terakhir aktivitas post-exploitation menggunakan teknik Living off the Land dengan memanfaatkan alat yang sah didalam sistem windows seperti PowerShell merupakan yang paling sering digunakan oleh banyak penyerang dengan tujuan untuk melewati deteksi antivirus dan application whitelisting.

Seiring dengan berjalannya waktu trend penggunaan powershell semakin menurun, banyak vendor antivirus yang sudah semakin aware dengan ancaman penyalahgunaan powershell, terutama penggunaan offensive powershell tools seperti PowerSploit dan PowerShell Empire yang sering disalah gunakan oleh Advanced Persistence Threat (APT) ataupun Ransomware Group.

Banyak laporan serangan siber yang melibatkan powershell menyebabkan Microsoft terus menambahkan fitur keamanan yang lebih cangih terutama pada Powershell versi 5 seperti Constrained Language, Transcript Logging, Script Block Logging dan mengembangkan Antimalware Scan Interface (AMSI) untuk memberikan perlindungan malware berbasis skrip dinamis yang dapat diintegrasikan ke dalam aplikasi.

https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal

Berikut ini beberapa komponen yang dapat diintegrasikan dengan AMSI :

  • User Account Control (UAC)
  • PowerShell
  • Windows Script Host (wscript.exe, cscript.exe)
  • JavaScript & VBScript
  • Office VBA macros
  • .NET Framework 4.8

Sebagai seorang penyerang ini merupakan mimpi buruk, hal ini menjadikan sebuah tantangan untuk terus berinovasi mencari teknik baru yang dapat melewati deteksi dan proteksi seiring dengan berkembangannya teknologi keamanan.

Pada tahun 2018 Nathan Kirk memperkenalkan teknik Bring Your Own Land (BYOL) yang diadopsikan pada Cobalt Strike versi 3.11 membolehkan penyerang untuk menjalankan .NET program dari memori tanpa menyentuh disk dengan memanfaatkan method Assembly.load pada C#.

.NET Tradecraft merupakan teknik favorit yang sering dipakai dalam beberapa kasus serangan siber akhir-akhir ini, sebagai contoh nyata digunakan oleh ransomware group seperti Maze dan Wizard Spider memanfaatkan GhostPack Rubeus untuk melakukan Active Directory Kerberos Attack dan aktifitas spionase yang menargetkan organisasi swasta dan pemerintah di Asia Tenggara terdeteksi dilakukan oleh Chinese State Sponsored Hacking Group APT10 mengabungkan SharpSploit ke dalam Quasar RAT.

Menggunakan teknik ini penyerang dapat dengan mudah melewati deteksi AMSI dan offensive tool developer dapat menyesuaikan PowerShell Script ke dalam .NET dengan menggunakan fungsi C# yang secara fungsionalitas sama.

Sebagai offensive developer tentunya mempertimbangkan penulisan program merupakan hal yang terpenting tidak hanya mencapai eksekusi kode saja tetapi program dijalankan dengan cara tetap tidak terdeteksi.

Dalam pengembangan .NET Program mendukung dua jenis pengkodean diantaranya Managed Code dan Unmanaged Code. Untuk keperluan pengembangan offensive tool pada C# disarankan menggunakan pengkodean Unmanaged Code. Unmanaged Code merupakan aplikasi yang tidak berjalan dibawah kendali Common Language Runtime (CLR) dapat mengakses langsung low level pada sistem operasi.

Untuk mempermudah pemanggilan native Windows API pada Managed Code menggunakan teknik P/Invoke. P/Invoke adalah teknologi yang dapat mengakses struct, callback, dan fungsi pada library terdapat dua namespaces P/Invoke yang umum digunakan pada C# yaitu System dan System.Runtime.InteropServices.

Umumnya Antivirus dan Endpoint Detection and Response (EDR) dapat memonitor pemanggilan fungsi API dengan menggunakan teknik hooking melalui user-mode artinya setiap pemanggilan fungsi API pada P/Invoke akan diblokir atau terdeteksi.

Untuk menghindari hal tersebut dapat menggunakan teknik D/Invoke (Dynamic Invoke) sebagai alternative untuk memanggil native Windows API melalui cara mengganti atribut DllImport dengan deklarasi UnmanagedFunctionPointer, adapun cara lain untuk melewati deteksi EDR dengan langsung memanggil System Calls.

Managed Code (P/Invoke)

[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

Unmanaged Code (D/Invoke)

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

Offensive C# Projects

Saat ini semakin banyak yang mengembangkan offensive c# tools dengan tujuan bermacam teknik sebagian besar dikembangkan berawal dari offensive powershell script.

Defense & Detection

Strategi deteksi dan pertahanan merupakan hal terpenting, sebagai seorang threat hunter tentunya .NET Tradecraft merupakan suatu ancaman untuk itu selalu memonitor penggunaan .NET melalui Event Tracing for Windows (ETW) menyediakan pelacakan tingkat kernel yang efisien memungkinkan mencatat kernel atau event dengan data yang lebih baik. Salah satu tools yang membantu untuk memonitor ETW dapat menggunakan SilkETW yang dijadikan sebagai service untuk mengkonsumsi event ETW secara real-time melalui event log yang nantinya dapat dikirim ke SIEM.

Saat ini kebanyakan serangan siber menggunakan Cobalt Strike, tentunya penggunaan beacon execute-assembly pasti digunkan oleh penyerang, execute-assembly menggunakan teknik process injection untuk menjalankan CLR ini bisa dideteksi melalui Sysmon Event ID 8 (CreateRemoteThread).

Untuk mencegah malicious CLR sejak .NET Framework versi 4.8 Microsoft telah menambahkan AMSI khususnya pada method Assembly.Load untuk memastikan semua assemblies dapat dijalankan dengan aman, sebagai alternative lain dapat menggunakan CLRGuard.

Referensi

--

--

Rahmat Nurfauzi
Rahmat Nurfauzi

Written by Rahmat Nurfauzi

Red Teamer, Threat Hunter & Security Researcher. Contributors of Mitre ATT&CK Framework, PS Empire, LOLBins, Atomic Red Team and more.

No responses yet