Saturday, October 13, 2018

Membangun Web Application Firewall ( WAF) Sederhana

Sebelum kita membangun sebuah WAF seberapa sering kita mendengar kata Firewall ? Mungkin saat kita mendengar kan kata firewall kita langsung berfikir dinding atau tembok api.

Firewall salah satu mekanisme ( policy) yang di buat berdasarkan mekanisme sistem, fungsi dari firewall tersebut melindungi sistem yang dibuat yuk langsung saja kita praktekkan dengan cara membuat sistem WAF sederhana.


1. Sebelum membangun WAF kita harus tau bagaimana topologi nya berikut adalah topologi WAF ;

Skema Jaringan

Pada gambar diatas, WAF merupakan sebuah Firewall aplikasi web yang digunakan untuk membatasi permintaan request ( permintaan ) dari luar ( public). WAF diletakkan di posisi paling luar karena merupakan "benteng" untuk menyaring data data yang masuk ke server. Setelah WAF terdapat web server sebagai penyedia layanan bagi client. Database server digunakan sebagai media penyimpanan data. Web server juga akan sering berinteraksi dengan database server ketika client meminta data tertentu.

Skenario nya adalah ketika mengakses server, client akan diarahkan ke WAF terlebih dahulu untuk dicek permintaan nya. apabila tidak membahayakan , maka server akan meresponnya. Namun sebaliknya apabila permintaan client dapat membahayakan server, maka WAF akan memblok permintaan tersebut.


Instalasi Aplikasi Web Server


2. Langkah pertama kita akan melakukan config pada web server dengan melakukan instalasi apache


install apache2
3. Setelah melakukan instalasi apache2 pastikan apache berjalan
apache2 running


4. Selanjutnya kita akan meginstall php pada web server, agar web server dapat menjalankan bahasa pemrograman php dimana web server nanti nya akan menerjemahkan (parsing) kode -kode yang berasal dari bahasa pemrograman php.

install php
5. install mysql module untuk php5 dengan perintah apt-get install php5-mysql

install modul mysql
Note :
lalu, mengapa kita harus menginstal modul mysql ? karna web aplikasi kita terhubung dengan database, yang merupakan pusat data pada aplikasi sehingga kita harus menginstal modul mysql. Modul ini digunakan untuk aktivitas yang berkaitan dengan database seperti melakukan koneksi dari web server ke database mysql_connect (), pemilihan database mysql_select_db() dan lain sebagai nya.
Apabila kita tidak menginstal modul ini, ketika menggunakan fungsi yang berhubungan dengan database, maka kita akan menemukan pesan error.

6. Setelah proses instalasi selesai, lakukan restart pada service apache.


restart service apache2

7. Setelah melakukan instalasi apache2, php5 dan php5-mysql pada web server sekarang lakukan pengetesan pada web server dengan membuat file.php, dengan menyimpan file tersebut ke dalam directory /var/www lalu jalanjan pada browser nya dengan mengakses http://192.168.1.13/info.php.


Script info.php


pengetesan web server



Selanjutnya tahapan melakukan instalasi aplikasi pada database server

Instalasi database Server

Database server merupakan server yang di dalamnya terdapat berbagai macam jenis aplikasi data tergantung jenis aplikasi yang ingin digunakan. Database juga sangat krusial ( Credential) karena menyimpan semua informasi. Dalam studi kasus ini, kita akan menggunakan MySQL sebagai DMS.

1. untuk menginstal MySQL berikut adalah langkah-langkah nya:

install MySQL



Password MySQL

Note :
Password menjadi hal yang Credential dalam sebuah sistem. Ketika membuat sebuah password, perhatikan kompleksitas yang digunakan. Seperti menggunakan minimal 8 karater yang terdiri dari huruf dan angka kapital dan lain sebagai nya.

2. Selanjutnya melakukan cek pada service MySQL :

Status Service MySQL

Selanjutnya kita melakukan instalasi pada server ke 3 yaitu server waf


Instalasi Web Application Firewall (WAF)

Dalam aplikasi web, terdapat beberapa metode untuk mengamankan aplikasi. Metode yang digunakan oleh developer biasanya berupa secure coding. Metode ini menerapkan penulisan kode dengan memperhatikan aspek keamanan, seperti validasi input terhadap parameter masukan. Selain itu, terdapat juga pengkondisian apabila nilai parameter tidak sesuai dengan yang diharapkan, maka error handling akan bekerja. Namun, bgaimana bagi developer yang belum mengetahui secure coding sedangkan aplikasi harus jadi dalam waktu yang singkat? Atau bagaimana pihak pengelola hosting atau administrator dapat mengamankan semua website yang ada di dalamnya tanpa menyentuh kode dari semua website yang ia kelola ?

Pertanyaan tersebut ada pada waf. Dimana waf merupakan komponen tambahan untuk mengamankan aplikasi web tanpa menyentuh source dari aplikasi. Waf bekerja berdasarkan rules yang telah di definisikan. Sehingga, apabila terdapat behavior yang aneh dari pengguna dan terdapat di dalam rules, maka WAF akan bertindak sesuai dengan rules yang telah di definisikan.

Note :
Secure Coding adalah teknik pemrograman pada perangkat lunak atau aplikasi untuk menjaganya dari serangan pihak luar. Contoh secure coding seperti validasi pada parameter inputan. Inputan harus berupa sebuah huruf atau karater lain nya.

1. Pada Server waf kita akan menggunakan mod_security. Namun sebelum menginstal mod_security nya, kita menginstal Apache server terlebih dulu dimana apache server beguna sebagai wadah bagi mod_security pada saat di jalankan. berikut adalah cara menginstal apache dan mod_security pada waf :

instal apache2 dan mod_security



Mengaktifkan dan restart service apache dan mod_secority

Mod_security telah aktif. mod_security tidak akan bekerja tanpa rules. Oleh karena itu, sebelum menggunakannya, rules harus di tambahkan terlebih dahulu supaya mod_security nya dapat berjalan dengan baik. Untuk menambahkan rules, kalian dapat membuatnya sendiri atau menggunakan rules yang disediakan oleh OWASP. Kali ini saya akan memasukkan beberapa contoh rules dasar.

Note :
Untuk rules yang saya buat silahkan download di link berikut ini

https://drive.google.com/drive/folders/1aLN5lk5LwrClrRltu25O_cxKeU5GfbOh



1. Masih pada server waf , buat sebuah folder yang bernama mod-security di dalam directory /etc/apache2/

2. Salin semua isi folder yang telah di download ke dalam folder /etc/apache2/mod-security. File-file tersebut merupakan rule yang akan digunakan pada server waf nanti.

3. Setelah itu, edit sebuah file bernama mod-security.conf  menggunakan teks editor, masukkan script berikut pada bagian akhir baris

include /etc/apache2/mod-security/*.conf



edit file mod-security.conf


4. Script tersebut digunakan untuk memetaskan rules yang akan digunakan. dimana rule yang akan digunakan ada pada directory  /etc/apache2/mod-security.


5. Setelah itu kita coba lakukan restart pada service apache2 nya lalu lakukan ujicoba dengan membuka browser lalu ketik http://localhost/and1=2


Uji coba wa dengan memblok aktivitas pengguna


6.  Setelah kita melakukan uji coba pada gambar di atas kita dapat melihat log lebih detail yg ada pada /var/log/apache2/error.log




Log WAF


Gambar di atas merupakan isi log dari WAF yang menerangkan bahwa rules telah terdeteksi serangan pada aplikasi web. Selain itu kita juga dapat mengeceknya melalui curl pada terminal. Curl pada server ini belum diinstall, sehingga apabila ingin menggunakannya harus di install terlebih dahulu. untuk menginstal Curl, cukup dengan mengetik perintah apt-get install curl 


Setelah instalasi curl selesai, untuk menggunakannya ketik perintah :

curl -i http://localhost/and1=2


Memblok akses web via curl


Instalasi web server, database, dan WAF berhasil dilakukan. Selanjutnya kita akan membahas cara menghubungkan semua server agar dapat digunakan.


Konfigurasi website ke web server 


Kali ini saya menggunakan web yang sudah ada untuk dimasukan pada web server, untuk kalian yang ingin mencoba bisa download web nya di sini https://drive.google.com/drive/folders/1-5LYVKSr2GYpEw9lOharCXGEC0nc9Uve?usp=sharing


1. Selanjut nya copy folder portal ke web server pada directory /var/www/ seperti gambar di bawah ini 

directory web yang akan di pasang WAF

setelah folder portal di copy ganti akses permission pada semua file yang ada di dalamnya menjadi akses disini kita menggunakan mode 755 dengan perintah berikut


menganti permission akses pada directory




2. Untuk memastikan website berjalan pada localhost, cek melakui browser dan ketik http://localhost/portal.



tampilan aplikasi web sebelum terkoneksi dengan database



Konfigurasi database pada server database


Kali ini kita akan mengkonfigurasikan server database, sebelum kita mengkonfigurasikan database pada server kita membutuhkan sebuah file dayabase untuk file tersebut kalian dapat mendownload disini https://drive.google.com/open?id=1UmH6Exw0mzyDqykXeX54xxM2hW7zFmof setelah file database di download copy file tersebut pada server database ke dalam directory /home/S/Document/. Folder S adalah nama user pada vm nama user ini akan berbeda beda tergantung kalian yang memberi nama.


1. Setelah kita mengcopy file nya kita membuat sebuah database nya seperti gambar berikut :



Membuat database

2. Setelah database dibuat kita gunakan database tersebut seperti gambar dibawah ini

Database portal digunakan



3. Setelah kita menggunakan database selanjutnya, kita akan mencoba meng-import database portal.sql ke dalam folder /home/s/Documents/portal.sql seperti gambar berikut ini.



Meng-import database portal.sql



4. Untuk melihat database isi dari database portal kita dapat melakukan perintah sebagai berikut:
    show tables;

Melihat tabel database portal.sql


Note

Untuk apa kita meng- import database portal.sql ?

dimana portal.sql yang baru saja kita import merupakan database yang digunakan oleh web aplikasi yang terdapat pada web server. Apabila portal.sql tidak di-import, maka web aplikasi tidak akan berjalan dengan baik. Semua data pada web aplikasi akan diambil dari portal.sql. Oleh karena itu, Penggunaan database sangat diperlukan dalam membuat web aplikasi yang dinamis. Selanjut nya kita akan masuk pada tahap menghubungkan database dengan web server



Menghubungkan Web server Dengan Database Server




Sebelum menghubungkan web server dengan dababase server, kita konfigurasikan terlebih dahulu scrip php yang ada pada database server nya serperti langkah - langkah berikut :


1. Pada server database, masuk ke folder /etc/mysql lalu edit file my.cnf



Mengedit scrip php
 2. Setelah itu kita ganti ip address yang ada pada bind-address dimana ip sebelum nya 172.0.0.1 menjadi alamat ip pada database server, dengan alamat ip 192.168.1.14 jangan lupa di save


Mengedit ip bind-address pada script php

3. Setelah kita mengantikan ip address nya, lalu kita masuk ke database mysql dimana kita memberikan akses ( membuka akses ) dari web server ke database server seperti gambar berikut ini :



Memberikan Akses web server ke database

4. kemudian, restart database dengan perintah :
    service mysql restart



Restart mysql



  Untuk mengecek apakah webserver dapat mengakses database atau tidak, kita harus     menginstall MySQL klient pada web server.


5. Untuk menginstall MySQL klient kita beralih ke web server, masuk ke terminal dengan user root dan ketik perintah berikut :

apt-get install mysql-client

Install mysql klient pada webserver


6.  Setelah instalasi selesai, jalankan MySQL klien untuk terkoneksi ke database server dengan perintah berikut :

mysql -u root -h 192.168.1.14 -p


Console database

note :
Console database yang menandakan bahwa web server telah berhasil terkoneksi  dengan server database akan muncul seperti gambar diatas



7. Langkah selanjutnya, kita perlu membuat koneksi database melalui script PHP supaya web aplikasi dapat menggunakan data pada database server. Buka kembali web server kemudian masuk ke folder /var/www/portal/ lalu cari file konek.php. File ini digunakan untuk menghubungkan database dengan web server.


File konek.php untuk menghubungkan database dengan web server

8 . Edit file tersebut dengan teks editor, masukan nilai seperti gambar berikut :

Mengedit file konek.php



9. Untuk memeriksa keberhasilan koneksi ke database, buka browser pada web server, ketik http://localhost/portal/, kemudian isi Submit key.


Mengisi Submit Key pada localhost


   Submit key di isi dengan password yang telah dibuat maka akan tampil seperti gambar berikut


Tampilan aplikasi web
Gambar di atas merupakan website yang terdapat pada web server. Dimana web ini nantinya akan dilindungi oleh firewall (WAF)



Konfigurasi Web Aplkasi Firewall (WAF)



Setelah berhasil menghubungkan web server dengan database server, sekarang kita akan mengatur konfigurasi Firewall agar dapat melindungi aplikasi dari serangan. Sebelumnya, ada beberapa hal yang harus kita ketahui. Dalam konfigurasi ini, kita menggunakan Virtual Host (Vhost) dan Reverse Proxy.

Sebelum mengatur konfigurasi Vhost, kita harus memetakan domain ke IP Address server sehingga, apabila kita memiliki dua domain seperti www.portal1.com dengan www.portal2.com dan IP Address server 192.168.1.13, maka semua domain akan di arahkan ke IP Address tersebut. Konfigurasi ini dapat kita konfigurasikan pada directory /etc/hosts. Namun dalam kasus ini, saya saya melakukan konfigurasi pada window sebagai client yang akan mengakses web aplikasi nanti nya.

1. Akses directory C:\windows\system32\drivers\etc\hosts. dimana kita akan mengedit file tersebut.

Directory file hosts di Windows

2. Setelah itu buka file hosts yang ada dalam directory windows tersebut jalankan menggunakan aplikasi notepad ++ lalu tambahkan nama domain yang telah ada dimana alamat tersebut terhubung ke IP 192.168.1.15 dimana ip tersebut merupaka IP WAF.


File host di dalam directory windows

Note :

Mengapa alamat domain mengacu ke IP address pada WAF, Kenapa tidak langsung menuju ke Web Server ?

Karena dimana kita membangun sebuah sistem aplikasi web dengan tujuan keamanan sehingga perlu melakukan pengaturan tingkat lanjut terhadap server yang akan kita gunakan. nah disini WAF berperan sebagai proxy yang akan meneruskan request klient server ke aplikasi.


3. Setelah file hosts diedit seperti gambar di atas maka kita dapat mengecek nya pada browser dengan mengetik domain.


Tampilan domain www.portal1.com


Tampilan domain www.portal2.com

Domain sudah dapat diakses, namun masih sebatas akses terhadap WAF, belum sampai ke server aplikasi. Setelah konfigurasi file hosts selesai dibuat, sekarang kita akan membuat konfigurasi Vhost supaya dapat mengakses server aplikasi.


4. Untuk mengatur konfigurasi melalui Vhost, buka server WAF dengan akses root edit file httpd.conf yang terdapat di /etc/apache2/ lalu tambahkan script berikut pada akhir baris:



Script WAF

Note :
Mod_proxy.so merupakan inti modul dalam proxy yang berhubungan langung dengan infrastruktur, konfigurasi serta menajemen permintaan proxy (proxy request). sedangkan mod_proxy_http.so merupakan sebuah modul yang menangani permintaan http atau https.



5.  Selanjutnya masuk ke directory /etc/apache2/sites-available, kemudian kita akan menemukan file default. file tersebut merupakan file konfigurasi Vhost secara default. buat file baru dengan nama web_vhosts setelah itu masukkan script berikut :


Tiga file baru

Script yang di tambahkan pada vhosts



6. Selanjutnya kita akan coba melakukan restart service apache namun, sebelum kita melakukan restart kita membuat file dan folder baru di directory /var/www/portal/apache.error.log  agar dapat melihat log error yang terjadi pada apache

Membuat file dan folder baru

Restart apache pada WAF

7. Setelah melakukan konfigurasi di sisi WAF kita mencoba mengakses portal1.com melalui browser, kemudian masukan Submit key nya untuk mengecek akses server aplikasi lewat Vhost.

Memasukan Submit Key








Tampilan Domain www.portal1.com yang sudah di konfigurasi




Namun, apabila kita mencoba mengakses domain www.portal2.com maka akan terlihat seperti gambar berikut :








Tampilan domain www.portal2.com


Note :

Domain Kedua menampilkan halaman default server karna belum di konfigurasi pada proxy


                                                         Uji Coba Keamanan

Pada tahap pengujian kali ini kita menggunakan metode XSS ( Cross Site Scripting ). XSS sendiri merupakan salah satu jenis serangan yang masuk dalam top 10 OWASP 2013. Berikut adalah langkah dalam melakukan pengujian:


  1. Buka browser lalu akses alamat www.portal1.com.
  2. Pada contoh kali ini, kita akan menguji melalui form pencarian dan buku tamu.
  3. setelah menemukan form pencarian, kita memasukkan script berikut:
    <script>alert(document.cookie);
    </script>
    Cross Site Scripting (XSS) pada form pencarian

                     
    Enter, Lalu akan muncul pesan berikut :
    WAF memblok permintaan client yang mengandung serangan XSS




    Log yang terdeteksi pada WAF

         
  4. Selesai (Kesimpulan)
    Kita sudah nenbuat beberapa server sehingga melakukan konfigurasi supaya semua dapat terhubung dan tersedia.WAF digunakan untuk melindungi web aplikasi.Namun bukan berarti semua komponen yang mendukung web aplikasi dapat terlindungi.Penggunaan perangkat keamanan sangat disarankan, baik bagi penyedia maupun pengguna layanan.WAF biasanya digunakan secara simple, maksudnya supaya efektif dalam pertahanan web aplikasi tanpa menyentuh banyak baris kode.