BAGAIMANA: Cara membuat Firewall "buatan sendiri" sendiri

(Untuk Alessandro Fiori)
07/10/19

Cara praktis untuk menyimpan dan menjaga data Anda aman.
Dalam periode di mana keuangan perusahaan dan administrasi publik diuji, mudah untuk menemukan direktur yang menganggap keamanan sebagai biaya, dan bukan sebagai kebutuhan nyata untuk infrastruktur mereka sendiri.
Oleh karena itu mudah untuk membayangkan skenario yang cukup mengkhawatirkan di mana strukturnya tidak sepenuhnya normal.

Server yang tidak sesuai, perangkat lunak tidak diperbarui, tidak ada kemungkinan mengubah platform dan sebagainya dan sebagainya.
Pada kenyataannya, konteks tertentu tidak jarang terjadi dan oleh karena itu perlu dipersiapkan untuk bertindak bahkan dalam menghadapi sumber daya yang langka.

Secara umum, mengimplementasikan solusi perangkat lunak pada perangkat keras yang tidak berdedikasi, seperti solusi yang akan kami analisis di bawah ini, dapat sangat berguna dalam kasus-kasus berikut:

- Kurang dana
- Perlu mengadopsi solusi "buffer" tanpa biaya tambahan jika terjadi keadaan darurat yang ekstrem
- Perlu mempertahankan mesin kecil (seperti laptop) dan tidak dapat mengadopsi solusi "klasik", karena kondisi yang luar biasa.
- Perlu mengkonfigurasi ulang jaringan yang terisolasi, misalnya laboratorium, tanpa harus membeli perangkat keras tambahan, sambil mempertahankan fleksibilitas jaringan itu sendiri.

Ini hanya beberapa contoh, tetapi kemungkinannya banyak.

Tergantung pada kasusnya, jika Anda ingin mengadopsi solusi berbasis Windows, Anda tidak akan mengalami penurunan kinerja yang berarti.
Situasi berubah jika Anda ingin mengadopsi OPNSense.

Saran OPNSense jika tes tidak pernah dilakukan pada aplikasi dan sistem yang akan dipertahankan, sedangkan Windows dalam kasus di mana batas aplikasinya dikenal dan bagaimana cara mengamankan kode.

Apakah mungkin, dengan sedikit kesabaran, untuk menghemat perangkat keras Firewall dan UTM (betapapun sangat disarankan), untuk pergi dan melindungi "situasi putus asa"?

Hardware Firewall adalah peralatan yang dirancang khusus untuk meng-host sistem operasi ("jantung" dari setiap komputer), biasanya dalam versi "keras".
Sistem Operasi (OS) yang "diperkeras" (OS) berarti suatu Sistem yang menerapkan perbaikan dan perbaikan bug spesifik, atau koreksi dan modifikasi khusus, yang memungkinkan sistem untuk melawan berbagai jenis serangan.

UTM (Unified Threat Management) adalah mesin yang dapat menangani berbagai jenis serangan secara terpusat.
Pengguna dapat, misalnya, menetapkan aturan untuk Firewall dan filter anti-spam langsung dari satu antarmuka, biasanya dapat diakses melalui browser.

Jelas dalam "situasi putus asa" kita tidak memiliki ini di tingkat "perangkat keras", jadi kita harus bekerja keras untuk menemukan solusi untuk masalah yang agak sulit.

Apa yang dapat membantu kami adalah "virtualisasi"

Virtualisasi adalah teknik khusus yang memungkinkan Anda untuk "abstrak", atau menyediakan komponen perangkat keras dalam mode virtual.
Untuk lebih menjelaskan konsepnya, mari kita bayangkan kita memiliki prosesor (komponen yang secara fisik menjalankan operasi) "core" 20 (berbagai unit yang melakukan perhitungan dalam prosesor).
Melalui virtualisasi kita dapat "memisahkan" misalnya core 10 dan mendedikasikannya ke sistem operasi lain.
Konsep yang sama "mendedikasikan" atau "mengabstraksikan" sebagian perangkat keras ke perangkat lunak lain dapat diterapkan dengan RAM, kartu jaringan, dll.
Ini memungkinkan Anda untuk memiliki sistem operasi "host" (sistem operasi utama) dan beberapa sistem "tamu" (sistem tervirtualisasi) pada mesin yang sama, yang beroperasi secara bersamaan.
Komponen yang memungkinkan "abstraksi" ini disebut "Hypervisor".

Di pasar, Anda dapat menemukan banyak sistem virtualisasi, yang dalam beberapa kasus memiliki biaya lisensi yang mahal untuk "situasi putus asa" kami.
Dalam kasus kami, pilihan sistem virtualisasi ada pada perangkat lunak VirtualBox, yang dikembangkan oleh Oracle.
VirtualBox adalah perangkat lunak Sumber Terbuka, yaitu kodenya terbuka, yang dapat dibaca dan diedit oleh siapa pun.

Tetapi mengapa virtualisasi dapat membantu kami?

Untuk menjawab ini, kita harus memikirkan "konsep" UTM.
Secara konseptual, sistem keamanan dapat disederhanakan sebagai "kotak hitam" dengan dua kabel, satu untuk masuk dan satu untuk keluar.
Kabel input terhubung langsung ke Internet, dan dari sana datang paket (atau data dan koneksi) yang kita tidak tahu sifatnya, apakah berbahaya atau sah.
Di kotak hitam, cek dilakukan, dan paket jahat dibuang, sementara yang sah melewati kabel output, ke mesin yang berisi layanan aktual (situs web, misalnya).

Karena itu penting untuk mengingat tiga aspek mendasar:

- "kotak hitam" harus "di depan" mesin untuk dilindungi
- "kotak hitam" harus terhubung ke internet
- "kotak hitam" harus memfilter paket masuk

Jenis konfigurasi ini tampaknya sempurna untuk kasus kami, yang merupakan mesin virtual, yang menjadi "kotak hitam" kami.

Fakta bahwa VirtualBox adalah Open Source, membantu kami untuk tidak menemukan biaya tak terduga, dan untuk membantu kami tidak memiliki "kejutan buruk", kami tidak akan menginstal paket "Extension Pack" VirtualBox.

Solusi yang diusulkan di sini sebenarnya dua, dengan keuntungan dan kerugian relatif:
- Solusi berdasarkan Windows 7 (ya, tepatnya pada Windows 7)
- Solusi berdasarkan OPNSense

Solusi berbasis Windows 7 memiliki keuntungan memiliki konsumsi sumber daya minimum dan kecepatan koneksi yang sama dengan mesin "host" yang terhubung langsung ke Jaringan.
Kerugian memiliki Windows 7 adalah bahwa secara default tidak memiliki Intrusion Prevention System (sistem yang secara otomatis mendeteksi dan memblokir paket berbahaya).

Solusi berbasis OPNSense memiliki keuntungan memiliki banyak alat kontrol dan dapat dengan mudah dikonfigurasi sebagai Sistem Pencegahan Intrusi (IPS).
Kerugian OPNSense adalah alatnya sendiri, yang berarti bahwa dampak pada sumber daya perangkat keras lebih besar, dan karena IPS harus mengontrol aliran data, dampak pada kecepatan koneksi juga akan signifikan.

OPNSense dipilih sehubungan dengan pfSense (sistem yang mirip dengan OPNSense) untuk sistem analisisnya.
PfSense menggunakan komponen yang disebut "Snort", yang menganalisis paket dalam perjalanan dan agak berat, terutama jika dipasang pada mesin virtual.
OPNSense menggunakan Suricata atau sistem analisis paket lain yang mengeksploitasi multithreading, atau teknik yang memungkinkan banyak proses dilakukan secara bersamaan oleh prosesor.
Sampai saat ini Suricata adalah sistem NIDPS, atau Sistem Deteksi dan Pencegahan Intrusi Jaringan (persis apa yang kita butuhkan, karena ia mengelola untuk mencegah ancaman dan bukan hanya untuk mengidentifikasi mereka), sedangkan Snort adalah NIDS, atau Sistem Deteksi Intrusi Jaringan.
Kombinasi ini lebih disukai, terutama di mesin virtual di mana perhatian khusus harus diberikan pada dampak sistem ini terhadap kinerja keseluruhan.

Sistem yang akan dipertahankan adalah Metasploitable, yang merupakan mesin virtual yang sengaja dibuat agar rentan.

Dalam hal ini, mari kita bayangkan bahwa Metasploitable adalah sistem yang akan dilindungi:

Karena itu kami menganalisis cara menginstal dan mengimplementasikan dua solusi ini.
Skenario awal melihat sistem kami tanpa pertahanan.

Mari kita analisa menggunakan Kali Linux, distribusi yang dibangun khusus untuk membantu Penetration Testers, yaitu orang-orang yang menembus sistem untuk bekerja, untuk menemukan kerentanan dan untuk menyembuhkan mereka.
Pertama, mari kita lakukan pemindaian cepat dengan nmap (alat yang sangat efektif yang memungkinkan Anda menemukan port terbuka dan informasi lain yang terkait dengan sistem target):

Seperti yang Anda lihat, situasi sistem kami sangat buruk.
Banyak pintu terbuka memperlihatkan layanan mesin, banyak dari mereka rentan.
Mari kita coba meluncurkan serangan pada mesin, untuk tes ini, karena ini hanya tes, saya akan menggunakan "db_autopwn", sebuah perintah Metasploit yang menyederhanakan peluncuran exploit ke target.
Perintah "db_autopwn" sudah usang (yaitu tidak disarankan), dan untuk tes ini digunakan modul eksternal yang mengimplementasikan kembali perintah pada versi terbaru dari Metasploit.

Seperti yang Anda lihat, Metasploit berhasil membuka dua sesi di mesin:

Untuk solusi pertama kami memiliki Windows 7, diinstal pada mesin virtual.
Mari kita buka VirtualBox dan mengkonfigurasi dua kartu jaringan, seperti ini:

Kami membutuhkan dua kartu jaringan, yang terhubung dalam mode bridge, ke kartu jaringan yang saat ini terhubung ke internet.
Karena itu kami menciptakan situasi "kotak hitam", setidaknya di tingkat perangkat keras.

Mari kita lihat cara mengkonfigurasi mesin, pada tingkat perangkat lunak

Pertama, kita perlu mengkonfigurasi pada kartu jaringan pertama, koneksi nyata, yaitu alamat IP dan gateway jaringan (karena itu kita harus memastikan bahwa kartu jaringan pertama berfungsi dan terhubung ke internet).

Jelas konfigurasi ini hanyalah sebuah contoh, dan dalam hal ini Windows tidak benar-benar terhubung ke internet.
Setelah alamat IP ditetapkan untuk kartu pertama, selalu pada kartu yang sama kita perlu mengaktifkan berbagi koneksi internet

Sekarang, jika kami ingin mengekspos layanan (misalnya situs web) di internet, klik "pengaturan" dan setel "Web Server (HTTP)"

Mengapa konfigurasi ini?

Dengan mengaktifkan berbagi koneksi internet, subnet "192.168.137.x" fiktif diatur pada kartu jaringan kedua.
Mesin kami yang akan dilindungi, dalam hal ini, diatur ke alamat IP "192.168.137.143", oleh karena itu alamat ini harus diatur dalam topeng "Pengaturan layanan" seperti yang ditunjukkan pada gambar sebelumnya.
Sekarang kami mengkonfirmasi semuanya dengan mengklik "OK" pada berbagai topeng.
Setelah dikonfirmasi, kami membuka "secpol.msc"
Pada ikon "Kriteria Keamanan IP", dengan mengklik dengan tombol mouse kanan, dimungkinkan untuk membuat kebijakan keamanan IP baru.

Di wizard, kami memberikan nama untuk konfigurasi kami dan kami selalu maju, sampai filter dibuat.
Pada titik ini kita menemukan diri kita di depan layar baru, jadi kita klik pada "Add", kita selalu maju ke layar "IP Filter Lists".
Di sini kita klik "Tambah"

Kita perlu membuat aturan pertama, yang berarti kita harus memblokir koneksi apa pun pada port apa pun.
Untuk melakukan ini, kita klik "Tambah" dan kami selalu maju, dengan cara ini kami telah membuat aturan yang berfungsi pada Koneksi apa pun, untuk protokol apa pun.
Kami memilih aturan yang baru dibuat dan melanjutkan.

Pada layar berikutnya (operasi Filter), kita klik "Add", kita beri nama "Block" dan kita klik "Block".

Setelah operasi filter dibuat, pilih dan lanjutkan untuk mengonfirmasi pembuatan aturan lengkap.
Sekarang kami baru saja memblokir semua port untuk semua koneksi mesin, karena dalam kasus kami kami ingin membuat situs web tersedia pada port 80, kami harus membuat aturan lain, yang mengesahkan berlalunya data pada port 80.

Pada pembuatan filter IP, segera setelah kami tiba di halaman "Protokol" kita tentukan "TCP" dan di port, pada bidang teks kedua kita klik pada opsi "port ini" dan tentukan port 80.

Saat dalam operasi filter, kali ini kita harus menentukan "Otorisasi".

Setelah konfigurasi selesai, klik kanan pada filter yang dibuat dan kemudian pada "Tetapkan"

Pada titik ini, kita dapat menjalankan tes kita lagi:

Situs ini berfungsi

Pintu-pintu juga ditutupi oleh "kotak hitam" yang kami masukkan antara internet dan mesin kami.

Kami kemudian menyerang mesin kami lagi untuk menguji apakah konfigurasi telah mengubah apa pun:

Seperti yang bisa kita lihat, Metasploit gagal membuka sesi.

Mengapa kita memiliki perubahan perilaku yang mendadak, meskipun kita belum memodifikasi / memperbarui sistem?

Alasannya melekat pada jenis konfigurasi yang telah kami atur.
Jenis konfigurasi ini melibatkan penggunaan berbagi koneksi untuk membuat sub-jaringan, yang melaluinya terhubung ke mesin kami.

Jika kami hanya menggunakan berbagi koneksi, Metasploit masih akan berhasil membuka sesi, seolah-olah penerusan port diatur ke 80 (untuk membuat situs web tersedia dari luar), itu tidak akan mencegah "koneksi balik ”, Atau koneksi ke port yang dibuka oleh klien internal ke jaringan untuk memungkinkan koneksi server jarak jauh.

Ketika kita menyerang mesin, yang memungkinkan komunikasi target ke mesin kita adalah "payload", yaitu perangkat lunak yang terhubung ke mesin kita, memungkinkan untuk meluncurkan perintah dan berinteraksi dengan target, bertindak sebagai "jembatan" antara kita dan sasaran.

Karena port "klasik" sudah digunakan oleh layanan normal target, payload tidak dapat menggunakan port ini untuk berkomunikasi.
Akibatnya, payload mengaktifkan koneksi pada port acak dan umumnya lebih tinggi dari 10000 yang, dengan menghubungkan ke komputer kami, memungkinkan komunikasi antara kami dan target yang akan dibangun.

Untuk mengatasi masalah ini, berasal dari fakta bahwa umumnya koneksi keluar tidak terhalang oleh firewall, kami menggunakan filter yang dijelaskan di atas, untuk mencegah koneksi yang tidak diinginkan.
Dengan cara ini, bahkan jika sistem tidak diperbarui, atau ada kerentanan yang dapat dieksploitasi, penyerang tidak dapat mengeksploitasi eksploitasi yang tersedia karena muatan tidak dapat berkomunikasi.

Jelas, solusi ini tidak mencegah eksploitasi SQL Injection atau kerentanan lain yang tidak memerlukan muatan untuk dapat berkomunikasi dengan mesin kami.
Bahkan, saya ingat bahwa analisis paket tidak tersedia dengan solusi ini.

Untuk mengaktifkan analisis paket, kita harus bergantung pada perangkat lunak "Intrusion Prevention".
Untuk situasi ini, OPNSense diidentifikasi, yang seperti dijelaskan di atas menggunakan Suricata sebagai sistem analisis paket, dan Netmap untuk mengurangi beban CPU dan mengoptimalkan kartu jaringan.

Saya ingin menarik perhatian pada kenyataan bahwa tidak ada perubahan dalam skema "logis" yang telah kami buat, maupun infrastruktur virtual.
Hanya sistem operasi dari "kotak hitam" yang berubah, untuk memungkinkan analisis paket secara real time.

Untuk memungkinkan OPNSense beroperasi dengan sebaik-baiknya, mari kita dedikasikan untuk mesin virtual 2 GB RAM (tidak seperti solusi pertama, di mana bahkan satu GB pun mencukupi).

Berikut adalah contoh konfigurasi untuk OPNSense:

Ketika Anda memulai mesin, layar masuk muncul:

Mesin yang perlu kita lindungi, oleh karena itu, dalam kasus kita akan memiliki alamat IP "192.168.2.2" dan gateway "192.168.2.1" sebagai alamat IP.
Kita dapat memasukkan konfigurasi OPNSense, menghubungkan perangkat ke LAN dan, menggunakan browser normal, menunjuk ke tautan "https://192.168.2.1"

Panel berikut akan terbuka:

Setelah masuk, kami berada di depan panel OPNSense utama:

Mari kita pergi ke "Layanan" → "Deteksi intrusi" → "Administrasi" dan periksa semua opsi:

Klik "berlaku" dan pergi ke "unduh":

Kami klik pada tanda centang untuk memilih semua, kemudian kami klik pada "Aktifkan yang dipilih", kemudian pilih kembali semuanya dan klik "Aktifkan (drop filter)".

Terakhir, di bagian bawah halaman, klik "Unduh dan perbarui aturan".

Karena itu kami memeriksa bahwa semua aturan diperbarui dengan benar, dan oleh karena itu kami telah menyiapkan analisis paket.
Untuk mencakup semua jenis kasus, kami menetapkan "proxy caching".

Caching proxy adalah komponen, yang sudah ada di OPNSense, yang memungkinkan Suricata untuk memperluas kemampuan deteksi intrusi.
Ini karena untuk protokol terenkripsi, seperti HTTPS, Suricata tidak akan dapat menguraikan data dalam perjalanan secara real time.
Untuk menghindari masalah ini, caching proxy memungkinkan Anda untuk bertindak sebagai jembatan antara jaringan eksternal dan situs web yang dikunjungi.
Sebagai jembatan, paket didekripsi oleh proxy, yang hanya kemudian mentransmisikannya ke layanan aktual.
Jelas operasi ini juga terjadi secara specular.
Ini memungkinkan paket dikendalikan oleh Suricata.

Perangkat lunak yang memungkinkan semua ini disebut "Squid".
Untuk mengaktifkan squid di OPNSense, buka "Layanan" → "Proxy Web" → "Administrasi", centang "Aktifkan Proksi":

Kemudian kita pergi ke "Forward Proxy" dan aktifkan tiga tanda centang seperti pada gambar.

Meskipun solusi ini merupakan alternatif yang valid untuk realitas yang tidak dapat menyediakan untuk pembelian perangkat berbasis perangkat keras, saya masih merekomendasikan penggunaan solusi perangkat keras.

Sebagai kesimpulan, jika kita benar-benar ingin tidur nyenyak, saya selalu merekomendasikan menginstal pembaruan terbaru untuk sistem operasi yang digunakan, menulis kode juga menguji berbagai kerentanan menggunakan alat otomatis dan non-otomatis, dan akhirnya merekomendasikan mengubah pola pikir seseorang terhadap keamanan: keamanan bukanlah produk, tidak pernah dan tidak akan pernah terjadi, tetapi ini adalah suatu proses dan karena itu perlu diikuti, distandarisasi, diterapkan dan dikendalikan.

Untuk memperdalam:
https://www.offensive-security.com/metasploit-unleashed/requirements/
https://en.wikipedia.org/wiki/Internet_Connection_Sharing
https://wiki.opnsense.org/
https://it.wikipedia.org/wiki/Squid
https://it.wikipedia.org/wiki/IPsec
https://it.wikipedia.org/wiki/Virtualizzazione
https://www.virtualbox.org/wiki/Documentation

Foto: Korps Marinir AS