0x2 The Enemy Within

cyber-theft-nsa-business-gchq

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.

Screen Shot 2016-03-23 at 11.32.28 AM

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.

Screen Shot 2016-03-19 at 10.40.22 PM

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:

  1. Membuat socket object
  2. Melakukan inisiasi IP Address dan Port untuk listening dengan fungsi bind()
  3. Mendengarkan koneksi yang masuk dengan fungsi listen()
  4. Menerima koneksi dari korban dengan fungsi accept()
  5. Mengirim perintah kepada korban dengan input raw_input() dan send()
  6. Menerima hasil eksekusi perintah dari korban dengan fungsi recv()
  7. 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.

Screen Shot 2016-03-23 at 2.03.18 PM

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:

  1. Membuat socket object
  2. Menghubungi Threat Actor dengan fungsi connect()
  3. Menerima perintah dari Threat Actor dengan fungsi recv()
  4. Menjalankan perintah dengan fungsi Popen() dari library subprocess
  5. Mengirimkan hasil pelaksanaan perintah pada Threat Actor dengan fungsi send() dan stdout()
  6. Mengirimkan pesan error apabila terjadi salah ketik pada perintah yang diterima dengan fungsi send() dan stderr() pada library Subprocess()
  7. 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.

Screen Shot 2016-03-24 at 9.18.26 AM

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:

Screen Shot 2016-03-24 at 9.24.25 AM

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.

Screen Shot 2016-03-25 at 7.17.52 PM

Gambar: Personal Firewall memblock saat pertama kali eksekusi script pada    komputer korban

Screen Shot 2016-03-25 at 7.45.38 PM

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:

Screen Shot 2016-03-25 at 7.47.07 PM

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:

Screen Shot 2016-03-23 at 2.39.13 PM

Gambar: Threat Actor listening pada port 10001

Langkah kedua, Menjalankan script pada komputer korban, akibatnya Threat Actor menerima koneksi:

Screen Shot 2016-03-23 at 2.40.49 PM

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“:

Screen Shot 2016-03-24 at 9.54.33 AM

 

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:

Screen Shot 2016-03-23 at 2.44.51 PM

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“:

Screen Shot 2016-03-24 at 9.56.23 AM

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:

Screen Shot 2016-03-23 at 2.51.56 PM

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:

Screen Shot 2016-03-24 at 9.57.23 AM

Screen Shot 2016-03-23 at 2.56.26 PM

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

Screen Shot 2016-03-24 at 9.58.24 AM

 

Gambar: Korban menerima perintah “terminate” dan mengakhiri koneksinya dengan Threat Actor

Screen Shot 2016-03-23 at 2.58.22 PM

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:

<01> 0x0 Data Exfiltration

<02> 0x1 It’s Trojan Horse