References: The Enemy Within
Untuk menjelaskan topik tentang Data Exfiltration yang dibahas pada artikel sebelumnya ( 0x0 Data Exfiltration) serta melakukan simulasi berdasarkan skenario pada artikel 0x1 It’s Trojan Horse, maka kita akan membuat trojan sederhana dengan konsep reverse shell. Sebagaimana kita ketahui bahwa Trojan berupaya menghindari cara-cara yang mengundang kecurigaan korban, sejak pertama kali memasuki jaringan komputer hingga melakukan Data Exfiltration.
Pembahasan dimulai dengan pengertian shell, reverse shell, konsep script dan simulasi dimana komputer korban “dipaksa” menghubungi Threat Actor dan mengikuti perintah-perintahnya tanpa mengundang kecurigaan korban maupun anti-virus.
Apakah Shell itu?
Shell adalah “user interface” untuk melakukan akses dan interaksi dengan sistem operasi, untuk melakukan berbagai aktivitas rutin. Contoh-contoh aktifitas tersebut antara lain, mencari file, meng-copy file, menghapus file, mengubah nama file, menjalankan aplikasi hingga yang memerintahkan sistem operasi untuk mem-format hard disk.
Reference: Interaction among End User, Software & Hardware
Ada dua jenis shell, yaitu shell dalam bentuk “command line” dan yang kedua adalah shell dalam bentuk “graphical user interface“. Microsoft Windows, Linux maupun MacOS menyediakan kedua jenis shell tersebut sekaligus. Namun, ada juga beberapa sistem operasi yang menjadikan “command line” saja, sedangkan untuk menggunakan jenis shell “graphical user interface” harus di-install lagi kemudian. Ubuntu server adalah salah satu contohnya.
Sejarah komputer diawali oleh shell jenis pertama, yaitu “command line“. Hingga kini pun ia tetap tidak tergantikan popularitasnya dibandingkan jenis kedua. Pengguna memberikan instruksi kepada komputer dalam bentuk teks. Selanjutnya sistem operasi menerjemahkan perintah berbentuk teks ini ke dalam instruksi-instruksi yang dipahami oleh software dan hardware. Shell digunakan secara luas, mulai dari instruksi yang bersifat lokal hingga instruksi untuk akses jarak jauh.
Reverse Shell
Reverse Shell adalah program yang memberikan instruksi pada shell di komputer lokal agar menghubungi dan berkoordinasi dengan Threat Actor yang berada di luar “security perimeter” dari organisasi. Sebagaimana diketahui bahwa “security perimeter” adalah sekelompok perangkat keras dan perangkat lunak yang berfungsi sebagai akses kontrol antara jaringan komputer internal dengan internet, bahkan kini perannya semakin kompleks dengan adanya berbagai fungsi proteksi seperti anti virus, threat prevention dan seterusnya.
References: Reverse Shell ~ Anatomy of Buffer Over Flow
Untuk melakukan hal ini, program “reverse shell” dapat menggunakan berbagai protocol yang legitimate menurut “security perimeter“. Beberapa contoh network protocol yang pasti diperbolehkan keluar dari jaringan internal ke internet antara lain adalah: http (port 80), https (port 443), dns (tcp/udp port 53), smtp (port 25) dan untuk kebutuhan troubleshooting jaringan, yaitu ICMP (icmp echo request dan icmp echo reply).
Seluruh network protocol tersebut merupakan “hajat hidup” organisasi, dan tidak mungkin untuk di-block atau dilarang keluar oleh “security perimeter“.
Threat Actor memanfaatkan situasi ini untuk melakukan Data Exfiltration, yaitu transfer data secara tidak sah dari dalam jaringan ke komputer miliknya tanpa dicurigai oleh “security perimeter“.
Jadi dengan menggunakan program reverse shell tersebut, Threat Actor “memaksa” komputer korban untuk menghubunginya, menerima perintah-perintahnya dan melakukan Data Exfiltration menggunakan legitimate traffic yang merupakan hajat hidup organisasi. Hal ini tentu tidak mudah dicegah oleh perangkat “security perimeter“.
Konsep pada script
Kita akan membuat dua buah script, script pertama milik Threat Actor yang akan berperan sebagai server dan akan memberikan instruksi kepada korban. Script kedua untuk korban yang akan “dipaksa” menghubungi Threat Actor dan mengerjakan perintah-perintah yang diterimanya. Script ini akan menggunakan TCP, artinya komunikasi antara Threat Actor dan korban akan menggunakan protocol layer ke empat dari OSI Layers.
Script pada Threat Actor
Script pada Threat Actor secara prinsip berfungsi sebagai server dengan tambahan fungsi untuk mengirim dan menerima perintah. Berikut ini adalah langkah-langkahnya:
- Membuat socket object
- Melakukan inisiasi IP Address dan Port untuk listening dengan fungsi bind()
- Mendengarkan koneksi yang masuk dengan fungsi listen()
- Menerima koneksi dari korban dengan fungsi accept()
- Mengirim perintah kepada korban dengan input raw_input() dan send()
- Menerima hasil eksekusi perintah dari korban dengan fungsi recv()
- Mengakhiri koneksi dengan korban dengan perintah “terminate” dengan fungsi send()
Berikut ini adalah gambar python script pada Threat Actor yang menggunakan sistem operasi Kali Linux.
Gambar: Python Script pada Threat Actor
Script pada Korban
Script pada korban secara prinsip berfungso sebagai client dengan tambahan fungsi untuk menerima, melaksanakan perintah dan mengirim hasilnya pada Threat Actor. Berikut ini adalah langkah-langkahnya:
- Membuat socket object
- Menghubungi Threat Actor dengan fungsi connect()
- Menerima perintah dari Threat Actor dengan fungsi recv()
- Menjalankan perintah dengan fungsi Popen() dari library subprocess
- Mengirimkan hasil pelaksanaan perintah pada Threat Actor dengan fungsi send() dan stdout()
- Mengirimkan pesan error apabila terjadi salah ketik pada perintah yang diterima dengan fungsi send() dan stderr() pada library Subprocess()
- Mengakhiri koneksi setelah menerima perintah “terminate” dari Threat Actor dengan fungsi close()
Berikut ini adalah gambar python script pada komputer korban yang menggunakan sistem operasi windows.
Gambar: Python Script pada Komputer Korban
Eksekusi Script Secara Umum
Untuk mengeksekusi kedua script tersebut, maka kita akan mengeksekusinya pada komputer korban maupun komputer Threat Actor.
Pada sisi korban kita akan menjalankan antivirus “AVAST”. Setelah script dieksekusi terlihat bahwa antivirus tidak mendeteksi adanya “Malicious Activity”. Gambar berikut ini menjelaskan hasil eksekusi sript tersebut pada komputer korban:
Gambar: Anti Virus tidak mendeteksi adanya “Malicious Activity” dari Python Script pada komputer korban
Untuk meningkatkan pertahanan pada komputer korban, maka kita pasang personal firewall “Zone Alarm”, yang merupakan personal firewall papan atas dari perusahaan yang berbasis di Israel, yaitu: Checkpoint. Serupa seperti anti-virus “AVAST”, kita memasangnya dengan “Default Setting”, maksudnya terpasang apa adanya.
Ketika korban menjalankan script pertama kali, nampaknya “Zone Alarm” curiga dan tidak mengizinkan melanjutkan koordinasi ke Threat Actor. Namun ketika, korban menjalankan script python untuk kedua kalinya, “Zone Alarm” mengizinkan untuk berkomunikasi dengan Threat Actor. Berikut ini adalah kedua gambar hasil eksekusi dari komputer korban.
Gambar: Personal Firewall memblock saat pertama kali eksekusi script pada komputer korban
Gambar: Personal Firewall membiarkan saat kedua kalinya eksekusi script pada komputer korban
Sedangkan hasil eksekusi script pada sisi Threat Actor menunjukkan hasil-hasil eksekusi perintah yang dilakukan oleh korban yang kemudian dikirimkan ke Threat Actor. Adapun hasil eksekusi script pada komputer Threat actor adalah sebagaimana gambar berikut dibawah ini:
Gambar: Hasil eksekusi script yang dikirim oleh komputer korban kepada komputer milik Threat Actor
Eksekusi Script Langkah demi langkah
Untuk memahami langkah demi langkah eksekusi kedua script tersebut, maka berikut ini adalah uraian langkah demi langkah untuk mengeksekusi script tersebut:
Langkah pertama, menjalankan script pada Threat Actor, yaitu:
Gambar: Threat Actor listening pada port 10001
Langkah kedua, Menjalankan script pada komputer korban, akibatnya Threat Actor menerima koneksi:
Gambar: Threat Actor menerima koneksi dari korban
Langkah ketiga, setelah menerima koneksi dari komputer korban, maka Threat Actor mengirimkan perintah “dir” pada komputer korban. Gambar berikut ini memperlihatkan komputer korban telah menerima perintah “dir“:
Gambar: Korban menerima perintah “dir” dari Threat Actor
Selanjutnya, komputer korban mengeksekusi perintah “dir” dan mengirimkan hasil eksekusi perintah tersebut pada Threat Actor. Gambar berikut ini menunjukkan hasil eksekusi perintah yang dikirm ke Threat Actor:
Gambar: Threat Actor menerima hasil eksekusi perintah “dir”
Langkah keempat, mengirimkan perintah “ipconfig” pada korban. Gambar berikut ini memperlihatkan komputer korban telah menerima perintah “ipconfig“:
Gambar: Korban menerima perintah “ipconfig” dari Threat Actor
Selanjutnya, komputer korban mengeksekusi perintah “ipconfig” dan mengirimkan hasil eksekusi perintah tersebut pada Threat Actor. Gambar berikut ini menunjukkan hasil eksekusi perintah yang dikirm ke Threat Actor:
Gambar: Threat Actor menerima hasil eksekusi perintah “ipconfig” dari korban
Langkah kelima, apabila Threat Actor salah dalam mengirimkan perintah, maka komputer korban akan mengirimkan pesan error sebagaimana gambar berikut:
Gambar: Terkadang Threat Actor melakukan kesalahan dalam memberikan perintah, maka dia akan menerima pesan error dari korban.
Langkah keenam, akhirnya Threat Actor mengakhiri koneksi dengan perintah “Terminate”, hasilnya pada komputer korban dan komputer Threat Actor berturut-turut sebagaimana berikut ini
Gambar: Korban menerima perintah “terminate” dan mengakhiri koneksinya dengan Threat Actor
Gambar: Threat Actor menerima hasil eksekusi dari perintah “terminate” untuk mengakhiri koneksi dengan korban
Adapun kedua script, baik pada Threat Actor maupun pada komputer korban, dapat dilihat pada link sebagaimana berikut ini:
<01> Script Reverse Shell TCP – Simple C & C
<02> Script Reverse Shell – Simple Trojan
Beberapa artikel terdahulu yang terkait dengan pembahasan ini adalah: