Home > Linux > Keamanan Web Server

Keamanan Web Server

Belakangan ini sering terjadi deface yang dilakukan oleh cracker yang tidak bertanggung jawab. Berikut ini ada sedikit tips yang bisa anda ikuti untuk mencegah atau setidaknya mempersulit hacker untuk masuk ke server anda. Memang tidak sempurna, masukkan dan koreksi saya terima😀

Buang Module-module yang tidak dipakai.

# vi /etc/httpd/conf/httpd.conf

Pertimbangkan membuang modul di bawah yang ‘biasanya’ tidak di pakai.Cukup beri tanda # pada baris LoadModule.

        LoadModule info_module
LoadModule status_module
LoadModule cgi_module
LoadModule dav_fs_module
LoadModule userdir_module
LoadModule include_module

Samarkan Identitas Apache

ServerSignature Off

MaxKeepAliveRequests

Meski di default 100, Jika webserver Anda dari hari ke hari Maksimum cuma di hit < 15 secara bersamaan, kecilkan ajadech.🙂

MaxKeepAliveRequests 60

TimeOut

Default 300. Mungkin Anda ingin mengecilkan untuk mengurangi efek DDoS🙂

TimeOut 75

KeepAliveTimeout

Mungkin Anda ingin sedikit membesarkan KeepAliveTimeout ?. :)  Semakin besar akan mengurangi performance akses bertubi2 user (karena di beri jangka waktu 10 detik) Tapi hal ini akan mengurangi efek DDoS.

KeepAliveTimeout 10

Disable Trace

Trace umumnya digunakan untuk acara debug🙂. Matikan Trace dengan menambah beberapa baris pada konfigurasi HTTPD Apache.

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^TRACE

RewriteRule .* - [F]

Mod_security

Mod_security perlu dipertimbangkan sebagai firewall internal web server. Modul ini bukan modul default Httpd Apache . Anda bisa memulai dengan mengkompile modul mod_security.c dengan apxs, kemudian memulai dengan rule dasar modsecurity. Lihat di http://modsecurity.org untuk info lebih lanjut.

download modsecurity atau pakai perintah yum di fedora atau centos
# wget http://www.modsecurity.org/tarball/2.7.2/modsecurity-apache_2.7.2.tar.gz

atau pakai perintah yum
# yum install mod_security

pastikan SecRuleEngine On pada file mod_security.conf
# vi /etc/httpd/conf.d/mod_security.conf
# service httpd restart

liat apache log
# tail -f /var/log/httpd/error.log

monitor file modsec_audit.log untuk melihat kejadian
#tail -f /var/log/httpd/modsec_audit.log

Chrootjail

Jika ingin repot, model ‘penjara’ dapat Anda terapkan bagi HTTPD Apache🙂.

Patch !

Jangan lupakan Patch ! Jika web server Anda sangat kadaluarsa, maka titik rentan sudah terekspos cukup lama. Upgrade program web server Anda jika Ada patch yang tersedia.

=========================================================================

Selain konfigurasi HTTPD Apache, ‘tetangga’ lain yang perlu mendapat perhatian adalah konfigurasi PHP. Akan saya sarikan dari http://apachesecurity.net

Konfigurasi agak paranoid buat php.ini 😛

allow_url_fopen = Off

register_global = Off

enable_dl = Off

expose_php = Off

disable_functions = openlog,apache_child_terminate,apache_get_modules,apache_get_versions,apache_getenv, apache_note,apache_setenv,virtual

atau

disable_functions = “apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, gzinflate, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode”

open_basedir = /home/slackerbox/public_html/

display_errors = off

display_startup_errors = off

max_input_time = 60

max_execution_time = 30

safe_mode = On

Disable Functions

Beberapa fungsi di PHP sangat berbahaya apabila digunakan tidak hati-hati. Salah satu contohnya adalah fungsi system() yang dapat digunakan untuk mengeksekusi shell command dari kode PHP anda. Kemudian ada juga fungsi ini_set() yang dapat mengubah konfigurasi php.ini melalui kode PHP yang ada. Fungsi-fungsi seperti ini akan lebih baik jika dinon-aktifkan saja apabila memang tidak ada aplikasi web anda yang menggunakannya. Untuk itulah ada option disable_functions di php.ini. Option ini akan men-disable semua fungsi yang disebutkan di dalamnya. Sehingga jika ada kode PHP yang menggunakan fungsi tersebut, kode tersebut tidak akan berjalan.

Contoh isi disable_functions yang disarankan (setiap nama fungsi dipisahkan dengan tanda koma), dapat ditambahi, dapat juga dikurang sesuai kebutuhan, dapat dilihat di sini

Sebetulnya ada 2 fungsi lagi yang bisa di-disable, yaitu base64_decode dan mysql_pconnect. Untuk mysql_pconnect ini masih tidak terlalu berbahaya jika digunakan. Hanya saja jika digunakan secara sembarangan dapat menghabiskan resource server yang cukup besar untuk menyimpan persistent connection.

Sedangkan base64_decode, biasanya digunakan untuk menyembunyikan kode-kode PHP yang berbahaya dalam bentuk base64, sehingga tidak dapat terdeteksi oleh antivirus atau secara manual. Biasanya fungsi ini akan dipanggil di dalam fungsi eval(). Meskipun begitu, beberapa CMS (moodle), PHP Framework (CodeIgniter), dan PHPMyAdmin menggunakan fungsi ini juga. Jadi jika di-disable, kemungkinan besar, fungsionalitas dari aplikasi-aplikasi tersebut akan terganggu. Karena itu, di bawah ini akan dijelaskan bagaimana agar script-script berbahaya yang bersembunyi dengan base64_decode dapat dicegah.

 

 

Directive Allow dan Deny

Directive Allow dan Deny pada Apache berguna untuk membatasi IP mana saja yang berhak untuk mengakses website/direktori pada website anda. Misalkan saja anda ingin agar PhpMyAdmin di server anda hanya dapat diakses dari jaringan lokal perusahaan anda (misal : 192.168.1.0/24). Maka anda dapat mengubah konfigurasi PhpMyAdmin di Apache menjadi kurang lebih mirip seperti ini :

<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php

Order deny,allow
Deny from all
Allow from 192.168.1.0/255.255.255.0
</Directory>

Mengubah Nama-Nama Direktori yang Umum

Biasanya, hacker akan melakukan brute-force untuk mencari direktori-direktori atau file-file tertentu, seperti PhpMyAdmin/, admin/, dsb. Karena itu, akan lebih baik jika nama-nama direktori tersebut diubah,sehingga hanya orang-orang tertentu yang mengetahui, misal : PhpMyAdminQuwh/

Selain itu, pastikan anda sudah menghapus direktori/file yang digunakan untuk instalasi. Biasanya beberapa CMS semacam WordPress/Joomla/Moodle memiliki file PHP yang digunakan untuk melakukan instalasi CMS tersebut.

Disable Eval() Function

Eval adalah sebuah fungsi yang dapat digunakan untuk menjalankan script PHP yang ada di dalam parameter fungsi eval tersebut. Hal ini sangat berbahaya, karena bisa saja fungsi yang dijalankan di dalam eval() adalah fungsi-fungsi untuk meretas sistem kita. Karena itu, fungsi eval ini harus di-disable atau minimal dibatasi kemampuannya.

Option disable_functions tidak dapat mencegah fungsi eval() untuk berjalan, cara lain untuk men-disable eval() adalah dengan menggunakan patch suhosin untuk php. Kelebihan patch ini adalah tidak perlu mengompile ulang php untuk menjalankannya. Di beberapa distro seperti ubuntu, debian, dan fedora, patch ini sudah ada di repository. Jadi kita tinggal install saja di server dengan menggunakan apt-get atau synaptic atau yum. Paketnya biasanya bernama php5-suhosin. Setelah paket ini terinstall, buka file /etc/php5/apache2/conf.d/suhosin.ini (mungkin berbeda untuk distro selain Ubuntu dan Debian).

Kemudian pastikan baris ini aktif (tidak dianggap sebagai komentar) di file tersebut :

extension=suhosin.so

Setelah itu cari 3 baris ini :

  • suhosin.executor.eval.whitelist =
  • suhosin.executor.eval.blacklist =
  • suhosin.executor.disable_eval = off

 


Baris whitelist digunakan untuk menentukan fungsi-fungsi apa saja yang boleh dieksekusi oleh fungsi eval. Sedangkan blacklist menentukan fungsi-fungsi apa saja yang tidak boleh dijalankan oleh fungsi eval. Apabila kita ingin men-disable eval secara keseluruhan, maka kita harus merubah parameter suhosin.executor.disable_eval menjadi on. Akan tetapi beberapa CMS juga ada yang memanfaatkan fungsi eval ini. Karena itu, kita bisa memanfaatkan blacklist saja untuk mencegah beberapa fungsi berjalan di dalam eval. Isi dari blacklist dapat diisi sama dengan disable_functions tadi, atau cukup ditambahkan fungsi-fungsi tertentu yang tidak boleh berjalan di dalam eval, seperti base64_decode.

Di bagian sebelumnya base64_decode tidak dimasukkan ke disable_function, karena masih banyak yang menggunakannya. Tetapi aplikasi web biasa, jarang menggunakan base64_decode di dalam eval. Biasanya yang seperti itu hanya para pembuat theme CMS yang ingin menyembunyikan kode untuk menampilkan copyrightnya. Oleh karena itu, base64_decode ini didaftarkan saja di blacklist suhosin agar dia tidak berjalan apabila berada di dalam fungsi eval.

source : http://baskoroadi.web.id ; http://www.dream-cyber.org ; om google

 

Categories: Linux
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: