Apr 05

[Keamanan Jaringan] Mengamankan Web Server Apache dan PHP – Bag. 2

Lanjut ke bagian berikutnya, pada artikel sebelumnya telah dibahas sedikit tentang beberapa hal yang dapat dilakukan untuk mengamankan Apache Web Server. Pada bagian ini akan dibahas mengenai beberapa hal yang dapat kita lakukan untuk memperkuat web server kita dengan cara mengutak-atik konfigurasi PHP. Berikut ini adalah hal-hal yang dapat kita lakukan :

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.

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.

Sementara sekian dulu beberapa tips untuk memperkuat pertahanan server web kita, barangkali ada yang kurang atau salah, silahkan dimasukkan ke dalam kolom komentar yang tersedia di bawah.

Bersambung (Semoga)…

Be Sociable, Share!

1
comments

1 comment!

  1. aldoalase says:

    contoh eval yang berbahaya mungkin bisa dipost juga :D

    [Reply]

Reply

[+] kaskus emoticons nartzco