Dekripsi traffic HTTPS Malware menggunakan PolarProxy

Ini adalah post lanjutan dari membangun lab untuk analisa malware yang bisa kamu aplikasikan untuk men-decrypt traffic HTTPS malware dari REMnux.

PolarProxy adalah transparent SSL/TLS proxy yang di desain untuk meng-intercept dan men-decrypt traffic TLS, dan menyimpannya dalam format PCAP sehingga bisa kita analisa lebih lanjut menggunakan Wireshark. PolarProxy juga sudah ter-install secara default di REMnux.

VM Configuration

REMnux

PolarProxy akan listen pada port 10443, untuk itu kita harus me-redirect traffic 443 ke 10443. Untuk melakukannya kita harus membuat beberapa rule iptables. ens37 di sini adalah interface Host-only saya, kamu bisa menyesuaikannya sendiri:

sudo iptables -A INPUT -i ens37 -p tcp --dport 10443 -m state --state NEW -j ACCEPT
sudo iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 443 -j REDIRECT --to 10443

Setelah rule dibuat, untuk menjalankan PolarProxy kamu bisa menggunakan command berikut ini:

sudo polarproxy -v -p 10443,80,443 --certhttp 10080 -w ~/polarproxy.pcap

Kamu bisa menyesuaikan lokasi tujuan file PCAP, dalam kasus ini saya menyimpannya pada direktori user bernama “polarproxy.pcap“.

Windows

Selanjutnya kamu perlu menginstall root CA certificate dari PolarProxy di VM Windows kamu. Untuk itu kamu harus mendownload file certificate nya terlebih dahulu dengan mengunjungi alamat VM REMnux berikut, misalkan dalam kasus saya: http://192.168.126.100:10080/, lalu file polarproxy.cer akan otomatis terdownload.

Windows:

Certificate Import Wizard
Certificate Import Wizard
  • Double klik file polarproxy.cer tersebut dan klik [Install Certificate…]
  • Klik [Next] lalu pilih “Place all certificates in the following store
  • Klik [Browse] dan pilih “Trusted Root Certification Authorities” dan klik [OK]
  • Klik [Next] dan [Finish]

Firefox:

Firefox Certificate Manager
Firefox Certificate Manager
  • Masuk ke [Options > Privacy & Security]
  • Dibagian Certificates klik [View Certificates…]
  • Pada tab Authorities klik tombol [Import…] dan pilih file polarproxy.cer tersebut
  • Centang pada “Trust this CA to identify websites” dan klik [OK]

Sebagai tambahan kita juga dapat menonaktifkan certificate revocation check:

Internet Properties
Internet Properties
  • Di kotak Run jalankan: inetcpl.cpl
  • Klik tab [Advanced] dan scroll ke bagian bawah bernama [Security]
  • Hapus centang pada “Check for server certificate revocation” lalu klik [OK]
  • Dan restart VM tersebut.

Jika semuanya sudah berjalan dengan lancar, kini kamu dapat membuat snapshot VM tersebut. Konfigurasi pada VM ini juga bisa diterapkan pada VM kamu yang lainnya.

Catatan Pribadi: Membangun Lingkungan Lab Analisa Malware

Dalam melakukan analisa malware, kita harus memastikan bahwa lingkungan yang kita gunakan itu benar-benar aman dan terkontrol. Ini dilakukan untuk mengisolasi mesin lab kita agar tidak mempengaruhi atau bahkan menginfeksi jaringan sekitar, selain itu juga untuk mencegah agar tidak ada data atau informasi kita yang bocor dan masuk ke dalam mesin lab ini.

Requirements

Lab yang akan kita bangun kali ini menggunakan sistem virtualisasi, jadi kita tidak memerlukan banyak hardware, hanya satu buah PC atau Laptop saja cukup:

  • PC/Laptop dengan OS Windows 10 (sebagai Host)
  • Disarankan memiliki RAM yang cukup besar >8GB
  • Ruang penyimpanan yang memadai (disarankan menggunakan SSD)
  • VMware Workstation (kamu bisa juga menggunakan software virtualization lainnya seperti VirtualBox, karena secara umum metode nya sama, dan kamu cukup mengadopsinya saja)
  • REMnux VM
  • VPN (opsional, tapi disarankan)

Pastikan Windows sudah di update ke yang terbaru. Dan saya menggangap bahwa kamu juga sudah menginstall VMware Workstation.

Untuk Guest machine, setidaknya nanti kita akan memiliki 2 virtual machine, yakni VM berbasis Linux menggunakan distro REMnux dan VM berbasis Windows, tentu kamu bisa juga meng-install beberapa VM lagi sesuai kebutuhan.

REMnux adalah sebuah distro yang memang dibuat khusus untuk keperluan analisa malware yang sudah terpasang berbagai macam tools, dan kamu bisa men-download image nya dari alamat berikut ini: https://docs.remnux.org/install-distro/get-virtual-appliance. Image yang di download tersebut sudah dalam format OVA (Open Virtualization Format), jadi kamu tidak perlu meng-install nya dari awal dan cukup meng-import nya saja ke dalam VMware Workstation kamu.

Untuk VM Windows, kamu bisa menggunakan Windows 7 atau bahkan Windows 10, dan disarankan menggunakan versi 64-bit, jadi ia bisa meng-cover malware baik 32 maupun 64-bit. Jika dirasa Windows 10 terlalu berat, kamu bisa menggunakan Windows 7 saja dan itu juga sudah lebih dari cukup.

Network Configuration

Selain untuk analisa malware, REMnux juga akan kita gunakan sebagai gateway bagi VM lain. Jadi traffic dari VM lain akan melewati REMnux terlebih dahulu, lalu di forward ke jaringan NAT yang ada di REMnux agar ia bisa mengakses internet. Pada REMnux ini kita juga bisa capture traffic yang lewat untuk analisa lebih lanjut.

Host

Seperti yang kita ketahui VMware Workstation mendukung beberapa connection mode seperti Bridged, NAT, dan Host-only. Untuk VM kita nanti sebagian besar akan menggunakan konfigurasi jaringan Host-only. Konfigurasi Bridged tidak disarankan, karena VM kamu akan berada di jaringan yang sama dengan Host, jadi siapapun dapat mengakses jaringan tersebut.

Konfigurasi jaringan yang saya gunakan adalah sebagai berikut:

Local Area Network192.168.10.0/24
NAT Network (VM)192.168.246.0/24
Custom Host-Only Network (VM)192.168.250.0/24

Kamu bisa melihat informasi jaringan VM kamu melalui Virtual Network Editor.

VMware Virtual Network Editor
VMware Virtual Network Editor

Disini kita akan menambahkan satu lagi VMnet berbasis Host Only, caranya sebagai berikut:

  • Pada Virtual Network Editor, klik tombol [Add Network…].
  • Pada jendela yang muncul, di bagian “Select a network to add:” pilih misalkan [VMnet2].
  • Selanjutnya pilih network tersebut pada tabel dan pilih “Host-only (connect VMs internally in private network)
  • Di bagian “Subnet IP:”, kamu bisa mengubah nya sesuai yang kamu inginkan, dalam hal ini saya menggunakan “192.168.250.0” untuk “Subnet IP” dan “255.255.255.0” untuk “Subnet mask“.
VMware Virtual Network Editor

Sebagai tambahan, jika diinginkan kamu juga dapat sepenuhnya mengisolasi jaringan Host-only dengan memutuskannya dari Host, melalui Virtual Network Editor dengan menonaktifkan opsi “Connect a host virtual network adapter to this network” untuk adapter Host-only.

REMnux VM

Secara default VM ini hanya menggunakan satu buah Network Adapter, disini kita perlu menambahkan satu lagi network adapter dan menyesuaikan connection mode nya.

REMnux Virtual Machine Settings

Caranya sebagai berikut:

  • Masuk ke bagian Virtual Machine Settings melalui [VM > Settings].
  • Ubah network connection mode nya ke NAT.
  • Tambahkan satu lagi network adapter dengan mengklik tombol [Add], pilih [Network Adapter], dan klik [Finish].
  • Klik pada [Network Adapter 2] dan ubah network connection mode nya ke [Custom: Specific virtual network], dan pilih [VMnet2].
  • Klik tombol [OK] untuk menyimpan perubahan.

Selanjutnya kita akan mengubah konfigurasi IP address dan routing:

  • Jalankan ifconfig -a pada Terminal untuk melihat daftar network interfaces.
  • Di VM saya terlihat bahwa Network Adapter 1 (NAT) terdeteksi sebagai ens33, dan Network Adapter 2 (VMnet2) terdeteksi sebagai ens37. Ini mungkin bisa berbeda di VM kamu.
  • Edit file konfigurasi network interface: sudo nano /etc/netplan/01-netcfg.yaml
    Saya menggunakan IP statis untuk kedua interface tersebut. Di sini saya menggunakan IP 192.168.246.100 untuk Network Adapter 1 (NAT), dan karena NAT ini bisa terhubung ke internet maka kita harus men-set gateway dan DNS nya juga, yang disini saya set 192.168.246.2 (lihat di Virtual Network Editor) dan DNS 1.1.1.1 and 1.0.0.1. Untuk Network Adapter 2 atau VMnet2 (Host-only) saya menggunakan IP 192.168.250.100. Anda tentu dapat menyesuaikannya sendiri.
network:
  version: 2
  renderer: networkd
  ethernets:
    # Network Adapter 1 (NAT)
    ens33:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.246.100/24]
      gateway4: 192.168.246.2
      nameservers:
        addresses: [1.1.1.1, 1.0.0.1]

    # Network Adapter 2 (Host-only on VMnet2)
    ens37:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.250.100/24]
  • Jika sudah selanjutnya kita terapkan konfigurasi tersebut: sudo netplan apply
  • Jalankan kembali ifconfig -a dan pastikan kedua interface tersebut sudah menggunakan IP address yang telah kita set tadi.
Remnux ifconfig
  • Aktifkan IP forwarding:
echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
  • Selanjutnya kita akan membuat beberapa rule iptables agar VM dapat mengakses internet. ens33 adalah jaringan NAT saya yang memiliki akses internet, dan 192.168.250.0/24 adalah network range dari Host-only yang digunakan di setiap VM.
sudo iptables -t nat -A POSTROUTING -o ens33 -s 192.168.250.0/24 -j MASQUERADE
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.250.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.250.0/24 -d 192.168.250.0/24 -j ACCEPT

That’s it. Sekarang konfigurasi jaringan di REMnux sudah selesai.

📝 Notes

Perlu diingat bahwa rule iptables itu tidak persistent dan tidak bertahan setiap reboot. Jika kamu ingin rule tersebut diterapkan setiap kali reboot, kamu bisa membuat script yang di eksekusi setiap reboot, atau menggunakan tools iptables-save dan iptables-restore yang ada di REMnux. Atau bisa juga meng-install package bernama iptables-persistent (sudo apt install iptables-persistent).

VPN (Optional)

Kalau kamu tidak merasa nyaman saat IP publik kamu terekspos ke internet saat menganalisa malware, kamu bisa menggunakan VPN. VPN ini dapat kita install pada VM REMnux sehingga nantinya dapat digunakan oleh seluruh VM yang terhubung melalui gateway REMnux ini.

Caranya sebagai berikut:

  • Install OpenVPN:
sudo apt-get update
sudo apt-get install openvpn
  • Tempatkan file konfigurasi VPN kamu pada direktori /etc/openvpn/client/, misalkan bernama myvpn.ovpn.
  • Untuk menjalankan OpenVPN, gunakan command berikut:
sudo openvpn /etc/openvpn/client/myvpn.ovpn
  • Jika OpenVPN sudah menampilkan log “Initialization Sequence Completed” pada terminal, berarti kamu sudah terkoneksi dengan VPN.
  • Kini kita perlu untuk menambahkan rule iptables agar traffic bisa melalui VPN ini. tun0 di sini adalah interface dari VPN saya (kamu bisa mengecek nya menggunakan ifconfig -a untuk memastikan).
sudo iptables -t nat -A POSTROUTING -o tun0 -s 192.168.250.0/24 -j MASQUERADE
📝 Notes

Jika kamu sudah selesai dengan semua konfigurasi di VM, sangat disarankan untuk membuat snapshot agar kamu bisa revert ke kondisi semula jika terjadi kesalahan.

Windows VM

Pada VM Windows kita perlu mengubah connection mode dan IP nya:

  • Masuk ke Virtual Machine Settings melalui [VM > Settings].
  • Klik pada [Network Adapter] dan ubah Network connection mode nya ke [Custom: Specific virtual network], dan pilih [VMnet2].
  • Klik [OK] untuk menyimpan perubahan tersebut.

Setelah itu kamu perlu mengubah IP address di VM ini dengan masuk ke Network adapter setting di Control Panel.

Windows network adapter settings
Windows network adapter settings

Di VM ini saya menggunakan IP 192.168.250.101 dengan gateway yang mengarah ke VM REMnux (192.168.250.100). Untuk DNS saya menggunakan DNS Cloudflare 1.1.1.1 dan 1.0.0.1.

Sampai sini konfigurasi utama untuk jaringan sudah kita terapkan. Silahkan kamu tes menggunakan browser apakah ia bisa mengakses dengan baik.

Packet Capture

Untuk monitoring traffic pada jaringan VM, kamu bisa menjalankan Wireshark atau tshark di REMnux.

Wireshark

Untuk mempermudah analisa traffic, kini kita akan mengkonfigurasikan Wireshark agar lebih nyaman digunakan.

Profile

Sebelum kita mengubah beberapa settingan di Wireshark, ada baiknya untuk membuat profile tersendiri. Ini akan cukup berguna apabila kita ingin berpindah-pindah profile, atau jika kita ingin menyimpan dan atau meng-copy profile ke mesin lain, jadi tidak perlu men-setting nya dari awal.

Wireshark Profile Configuration
Wireshark Profile Configuration

Pertama kita akan membuat duplikat profile Default:

  • Klik menu [Edit] lalu [Configuration Profiles…]
  • Klik pada profile Default, lalu klik tombol copy di pojok kiri bawah untuk meng-copy profile.
  • Rename profile tersebut menjadi misalkan “Custom Profile“.
  • Klik tombol [OK] jika sudah.

Columns

Kita akan menambahkan kolom seperti Source Port, Dest Port, dan Host, yang akan sangat berguna untuk keperluan analisa malware sehari-hari.

Wireshark Column Preferences
Wireshark Column Preferences
  • Klik kanan pada sembarang column header, lalu klik [Column Preferences…]
  • Pertama kita akan menambahkan kolom Source Port. Klik tombol [+] untuk menambah kolom.
  • Double klik pada Title yang baru dibuat dan isikan “Source Port“.
  • Double klik pada Type, pada drop-down yang muncul pilih “Src port (unresolved)“.
  • Kedua kita kita tambahkan kolom Dest Port. Klik pada tombol [+] untuk menambahkan kolom.
  • Double klik pada Title yang baru dibuat tersebut dan isikan “Dest Port“.
  • Double klik pada Type, pada drop-down yang muncul pilih “Dest port (unresolved)“.
  • Sekarang kita akan menambahkan kolom Host. Klik pada tombol [+] untuk menambah kolom.
  • Double klik pada Title yang baru tersebut dan isikan “Host“.
  • Double klik pada Type, pada drop-down yang muncul pilih “Custom“.
  • Double klik pada Fields dan isikan “dns.qry.name || http.host || tls.handshake.extensions_server_name
  • Selanjutnya kamu bisa men-drag kolom-kolom yang baru dibuat tersebut agar urutannya sesuai dengan yang kamu inginkan.
  • Jika sudah klik tombol [OK] untuk menyimpan.

Time Format

Secara default Wireshark menampilkan format tanggal dan waktu dalam bentuk “Seconds Since Beginning of Capture”, di sini saya biasanya akan mengubahnya ke dalam bentuk local time atau bahkan ke UTC.

  • Klik menu [View] lalu [Time Display Format], dan pilih “UTC Date and Time of Day“.
  • Masih di menu yang sama, klik juga pada “Seconds” (default nya adalah Automatic).

Filter

Wireshark memiliki fitur filter yang sangat berguna sekali saat kita ingin menampilkan paket data yang kita inginkan saja. Di banyak kasus biasanya saya hanya ingin menampilan web traffic, dan menggunakan filter berikut ini:

  • Pada kotak filter, isikan perintah berikut ini:
(http.request or tls.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)

Pada filter tersebut terlihat saya hanya ingin menampilkan traffic HTTP (http.request), atau SSL/TLS (tls.handshake.type == 1), atau hanya paket TCP SYN (tcp.flags eq 0x0002), dan atau traffic DNS. Untuk meminimalisir data yang tidak terlalu relevan, saya juga meniadakan traffic SSDP (udp.port eq 1900).

  • Untuk menyimpan filter tersebut, klik tombol [+] yang terletak disamping kotak filter.
  • Pada bagian Label isikan nama filter, misalkan “My Filter” atau “Web Traffic“.
  • Klik tombol [OK] jika sudah.
  • Fitur save filter ini cukup berguna, karena kini kamu cukup mengklik tombol [Web Traffic] yang tercipta di samping kotak filter, tanpa perlu menuliskannya secara manual lagi.

TShark

Apabila kamu tidak ingin menggunakan versi GUI, sebagai alternatif kamu bisa menggunakan TShark. TShark adalah versi terminal dari Wireshark.

Contohnya, jika kamu ingin melakukan capture traffic dari semua interface dan menyimpan hasilnya dalam file PCAP, kamu bisa menggunakan perintah berikut ini:

tshark -i any -w ~/tshark.pcap -P --color

Parameter -P akan menampilkan traffic yang tertangkap pada layar terminal, dan parameter tambahan --color akan menampilan text berwarna seperti selayaknya Wireshark, dan di sini saya menyimpan hasil tangkapan pada file pada direktori user bernama “tshark.pcap“.

Windows Firewall

Saat kita melakukan capture traffic langsung dari VM, sering kali Wireshark juga dipenuhi dengan paket-paket yang tidak relevan yang tidak diinginkan, seperti contonya paket SSDP (Simple Service Discovery Protocol), yang datangnya bisa dari jaringan Guest atau bahkan Host. Untuk itu kita pun dapat memblokir paket-paket tersebut dari Host menggunakan Firewall di Windows, agar Host tidak meneruskan paket-paket tersebut ke Guest atau VM.

Untuk tujuan kemanan, saya juga tidak ingin ada sedikit pun informasi dari Host yang terekspos ke Guest maka saya juga biasanya memblokir paket-paket lainnya yang berhubungan dengan Name Resolution dan NetBIOS, agar paket tersebut tidak diteruskan ke Guest atau VM. Apalagi apabila di Host kamu juga terhubung ke jaringan atau VPN kantor.

Informasi kecil seperti contohnya DHCP lease renewal juga biasanya akan di broadcast ke seluruh network. Contoh lainnya, misalkan kamu ketikan sembarang hostname pada browser yang sebenarnya tidak exist, misalkan disini saya mengetikan “thisisjustarandomhostnameanditdoesntexist“, maka permintaan tersebut juga akan di-broadcast ke semua jaringan, termasuk ke Guest atau VM yang bahkan menggunakan mode Host-only. Maka dari itu di sini saya mencoba untuk sebisa mungkin meminimalisir informasi yang bisa dikirimkan ke dalam jaringan Guest atau VM.

Beberapa paket MDNS and LLMNR

Seperti yang terlihat pada gambar di atas, saya menjalankan Wireshark di salah satu VM Windows dan disitu tertangkap beberapa paket MDNS dan LLMNR yang berasal dari host.

Biasanya saya akan memblokir paket yang berasal dari:

  • SSDP (Simple Service Discovery Protocol, UDP Port 1900)
  • MDNS (Multicast DNS, UDP port 5353)
  • LLMNR (Link-Local Multicast Name Resolution, UDP port 5355)
  • NBNS/WINS (NetBIO Name Service, UDP port 137)
  • BROWSER (UDP port 138)

Caranya sebagai berikut:

  • Di sisi Host, masuk ke Windows Defender Firewall with Advanced Security.
  • Di sebelah kiri layar, klik kanan [Outbond Rules] dan pilih [New Rule…]
  • Pada jendela New Outbound Rule Wizard, pilih [Custom] dan klik [Next >]
  • Pilih [All programs] dan klik [Next >].
  • Pada bagian “Protocol type” pilih [UDP], lalu di bagian “Remote port” pilih [Specific Ports] dan masukan port berikut ini: “1900, 5353, 5355, 137, 138“, setelah itu klik [Next >] kembali.
  • Pada bagian “Which local IP addresses does this rule apply to?” pilih [These IP addresses].
  • Selanjutnya kita akan mengisikan alamat network yang akan kita block dengan mengklik [Add…]
  • Pilih [This IP address or subnet:] dan isikan IP dari network adapter NAT yang ada di Host (biasanya bernama VMware Network Adapter VMnet8), dalam kasus saya adalah 192.168.246.1, lalu klik tombol [OK]
  • Lalu tambahkan lagi IP lainnya dengan cara yang sama dengan mengklik tombol [Add…], kali ini link-local IPv6 address dari network adapter Host-only di Host, misalkan dalam kasus saya “fe80::d03c:db70:88c1:2d88“, lalu klik tombol [OK]
  • Jika IP sudah ditambahkan, klik tombol [Next >]
  • Pilih [Block the connection] dan klik tombol [Next >].
  • Di jendela selanjutnya pilih “Domain“, “Private“, dan “Public” (biasanya tercentang secara default), lalu klik [Next>]
  • Di bagian Name kamu bisa mengisikan, misalkan “Block some ports for VM NAT” dan klik [Finish]
  • Kamu bisa menerapkan rule tersebut pada jaringan lainnya jika diinginkan.

Hint & Tips

  • Jika kamu ingin membuat autorun script di REMnux, misalkan kamu ingin menjalankan perintah untuk membuat rule iptables di atas secara otomatis setiap kali reboot, kamu bisa menempatkannya pada file /etc/rc.local.
  • Untuk men-update REMnux:
remnux upgrade
remnux update
  • Untuk me-reset iptables:
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT