Pengukuhan Apache Virtual Hosts (Bahagian 2)

Pengukuhan Apache Virtual Hosts diteruskan dengan Bahagian ke-dua (2).  Contoh pengukuhan ini menggunakan sistem pengoperasian Linux Ubuntu 14.04 dan ke atas.  Berikut merupakan langkah-langkah pengukuhan yang dilaksanakan:

1. Persediaan Awal

Login ke server sebagai user biasa dan aktifkan capaian sebagai ‘root’:

sudo su

Tukar konfigurasi shell /bin/sh kepada /bin/bash dan masukan “No” pada prompt yang diminta:

dpkg-reconfigure dash

Install dash as /bin/sh?  No

Matikan fungsi keselamatan AppArmor supaya tidak mengganggu proses pemasangan:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils

2. Pemasangan Apache 2, PHP, SuEXEC dan mod_fcgid

Pemasagan Apach2, PHP, SuEXEC dan mod_fcgid boleh dilaksanakan dengan arahan berikut:

apt-get install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

Jika mod_php telah terpasang sepabagi modul Apache, matikan fungsi:

a2dismod php5

Aktifkan modul-modul baru yang dipasang:

a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod fcgid

3. Konfigurasi Apache 2, PHP dan mod_fcgid

Pasang konfigurasi seperti dengan membuka fail “php.ini”:

vi /etc/php5/cgi/php.ini

Buang komen pada direktif cgi.fix_pathinfo = 1:


[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]

Pasang konfigurasi mod_fcgid pada fail /etc/apache2/mods-available/fcgid.conf:

vi /etc/apache2/mods-available/fcgid.conf 

Masukan direktif PHP_Fix_Pathinfo_Enable 1 dalam fail ini:

<IfModule mod_fcgid.c>
   AddHandler    fcgid-script .fcgi
   FcgidConnectTimeout 20
   PHP_Fix_Pathinfo_Enable 1
</IfModule>

Restart perkhidmatan Apache:

/etc/init.d/apache2 restart

4. Konfigurasi Virtual Host

Pemasangan dan konfigurasi seterusnya adalah membina laman web1.com dan web2.com di dalam server.  Proses laman web1 dan web2 akan dijalankan mengikut privilege pengguna masing-masing.

ID pengguna ‘web1’ dan ‘web2’ serta kumpulan (group) masing-masing dan perlu diwujudkan seperti berikut:

groupadd web1
groupadd web2
useradd -s /bin/false -d /var/www/web1.com -m -g web1 web1
useradd -s /bin/false -d /var/www/web2.com -m -g web2 web2

Bina folder bagi document root bagi kedua-dua laman web1 dan web2.  Folder-folder ini perlu dimiliki oleh pengguna web1 dan web2 masing-masing:

mkdir -p /var/www/web1.com/html
chown web1:web1 /var/www/web1.com -R
mkdir -p /var/www/web2.com/html
chown web2:web2 /var/www/web2.com -R

Modul PHP akan dijalankan dengan menggunakan SuEXEC.  Document root bagi SuEXEC ini boleh dilihat melalui arahan:

/usr/lib/apache2/suexec –V

Document root bagi SuEXEC adalah “/var/www” melalui output bagi arahan seperti berikut:

[root@server1 ~]# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"

Modul PHP yang terletak di /usr/lib/cgi-bin/php tidak boleh dijalankan oleh SuEXEC kerana ianya terletak di luar dari /var/www.  Masalah ini boleh di atasi dengan membina folder dan fail skrip ringkas berikut bagi kedua-dua laman web:

mkdir -p /var/www/php-fcgi-scripts/web1
mkdir -p /var/www/php-fcgi-scripts/web2

Edit fail /var/www/php-fcgi-scripts/web1/php-fcgi-starter:

 vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

Masukkan:

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Edit fail /var/www/php-fcgi-scripts/web2/php-fcgi-starter:

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter 

Masukkan:

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Fail-fail skrip perlu dimiliki oleh pengguna web1 dan web2:

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /var/www/php-fcgi-scripts/web1
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

Bina konfigurasi VirtualHost bagi web1:

 vi /etc/apache2/sites-available/web1.conf

Masukan konfigurasi berikut:

<VirtualHost *:80>
  ServerName www.web1.com
  ServerAlias web1.com
  ServerAdmin webmaster@web1.com
  DocumentRoot /var/www/web1.com/html/
  <IfModule mod_fcgid.c>
    SuexecUserGroup web1 web1
    <Directory /var/www/web1.com/html/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  ErrorLog /var/log/apache2/web1_error.log
  CustomLog /var/log/apache2/web1_access.log combined
  ServerSignature Off
</VirtualHost>

Aktifkan konfigurasi VirtualHost bagi web1:

 a2ensite web1

Bina konfigurasi VirtualHost bagi web2:

 vi /etc/apache2/sites-available/web2.conf

Masukan konfigurasi berikut:

<VirtualHost *:80>
  ServerName www.web2.com
  ServerAlias web2.com
  ServerAdmin webmaster@web2.com
  DocumentRoot /var/www/web2.com/html/
  <IfModule mod_fcgid.c>
    SuexecUserGroup web2 web2
    <Directory /var/www/web2.com/html/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  ErrorLog /var/log/apache2/web2_error.log
  CustomLog /var/log/apache2/web2_access.log combined
  ServerSignature Off
</VirtualHost>

Aktifkan konfigurasi VirtualHost bagi web2:

 a2ensite web2

Restart perkhidmatan Apache:

/etc/init.d/apache2 restart

5. Konfigurasi PHP bagi Virtual Host yang berlainan

Konfigurasi PHP yang berlainan boleh dibina jika terdapat laman web yang memerlukan sebarang konfigurasi khas.  Ini dibina dengan menyalin fail konfigurasi “php.ini” ke folder tertentu dan dipanggil melalui skrip php-fcgi-starter.  Contoh berikut adalah bagi memasang konfigurasi PHP khas bagi laman web2.

Salin fail “php.ini” ke folder laman web2:

cp /etc/php5/cgi/php.ini /var/www/web2.com/
chown web2:web2 /var/www/web2.com/php.ini

Edit fail “php.ini” mengikut keperluan laman web yang berkaitan.

Edit skirp php-fcgi-starter bagi laman web2:

 vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

Tukar direktif PHPRC dalam fail skrip:

#!/bin/sh
PHPRC=/var/www/web2.com/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Restart perkhidmatan Apache:

/etc/init.d/apache2 restart

 Penutup

Pemasangan Apache web server dengan konfigurasi virtual hosting membolehkan pelbagai laman web dihoskan dalam satu server.  Walau bagaimana pun, konfigurasi default virtual hosting ini mendedahkan kesemua laman web yang dipasang kepada aktiviti pencerobohan.  Terdapat banyak kes di mana insiden pencerobohan dengan mass web defacement berlaku ke atas konfigurasi seperti ini.  Sehubungan dengan itu, web server yang digunakan untuk menghoskan pelbagai laman web perlu diperkukuhkan dengan memasang komponen tambahan SuEXEC dan mod_fcgid bagi mengatasi masalah ini.  Pemasangan komponen tambahan ini membolehkan setiap proses web server dan laman web yang dihoskan diasingkan mengikut ID pengguna dan privilige masing-masing.

Pengukuhan Apache Virtual Hosts (Bahagian 1)

Shared web hosting walau pun tanpa pengukuhan Apache Virtual Hosts dilaksanakan, server dipasang dengan privilege pengguna biasa bagi tujuan keselamatan.

Sebagai contoh, akaun pengguna ‘apache’ digunakan oleh Apache dalam sistem pengoperasian Linux berasaskan RedHat dan CentOS manakala  ‘www-data’ digunakan oleh Ubuntu.  Konfigurasi pemasangan seperti ini adalah pada fail-fail konfigurasi  dengan direktif seperti berikut:

CentOS 6.x dan ke atas:

/etc/httpd/conf/httpd.conf

#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
#  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
#  . On HPUX you may not be able to use shared memory as nobody, and the
#    suggested workaround is to create a user www and use that user.
#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
#  when the value of (unsigned)Group is above 60000;
#  don't use Group #-1 on these systems!
#
User apache
Group apache

Ubuntu Linux 12.x dan ke atas:

/etc/apache2/apache2.conf

…
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

/etc/apache2/envvars

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

 

Konfigurasi ini membolehkan proses Apache web server dijalankan dengan privilege akaun pengguna seperti yang dipasang di atas.  Seterusnya, fail-fail laman web juga perlu dipunyai oleh pengguna yang sama bagi membolehkan server menyediakan sumber laman web kepada pengguna.  Keseluruhan pemasangan dan konfigurasi adalah seperti di gambarajah berikut:

 

Tujuan utama pemasangan sebegini adalah bagi mengurangkan impak jika web server berjaya diceroboh.  Penceroboh hanya boleh menggunakan privilege pengguna ini sahaja tetapi tidak sebagai ‘root’ atau penyelenggara sistem yang boleh digunakan untuk mengawal keseluruhan  sistem pengoperasian.

Walau bagaimana pun, pemasangan seperti ini boleh mendatangkan masalah bagi penggunaan shared web hosting bagi menghoskan lebih dari satu laman web dalam satu server (Rujuk artikel Pasang Apache Virtual Hosts di Ubuntu 14.x dan ke Atas).

Masalah utamanya adalah web server dan fail-fail pelbagai laman web dipasang dengan menggunakan satu privilege pengguna sahaja seperti berikut:

 

Berdasarkan di atas,  kedua-dua fail laman web1.com dan web2.com dipunyai oleh pengguna dan privilege yang sama.

Apabila penceroboh berjaya menceroboh laman web1.com, laman web2.com juga terdedah kepada ancaman yang sama walaupun kelemahan (vulnerability) hanya dikesan pada laman web1.com.  Ini bermakna, jika terdapat 20 laman web dalah satu server, kesemua laman web dengan konfigurasi virtual hosts seperti ini adalah terdedah kepada ancaman pencerobohan walau pun hanya satu laman web sahaja yang mempunyai kelemahan.

Berdasarkan pengalaman, keadaan ini telah menyebabkan pelbagai kes mass web defacement telah berlaku kepada banyak organisasi yang menggunakan konfigurasi seperti ini.

Masalah ini boleh diatasi dengan menjalankan proses web server dan memasang fail-fail laman web dengan dengan ID pengguna yang berbeza antara satu sama lain.  Ini boleh dilakukan dengan memasang Apache web server server dengan modul fcgid (mod_fcgid) dan SuEXEC (mod_suexec) seperti berikut:

 

Pemasangan modul-modul ini membolehkan proses web server dijalankan dengan ID yang berbeza.  Begitu juga dengan fail-fail laman web yang boleh dimiliki dengan pengguna yang berasingan.  Pemasangan ini boleh menghalang penceroboh yang menceroboh salah satu laman web dari menceroboh laman web yang lain.  Berikut merupakan komponen-komponen yang terlibat dalam dokumen ini:

No. Komponen Keterangan
1 Web Server Apache Server paling popular bagi menghoskan laman web berasaskan sumber terbuka yang boleh dimuat turun secara percuma di Internet.  Apache boleh dipasang dalam pelbagai sistem pengoperasian moden seperti UNIX, Linux dan Microsoft Windows.  Laman web rasmi Apache adalah di http://httpd.apache.org
2 Modul suEXEC Membolehkan program atau modul luaran Apache (seperti CGI dan modul PHP) dijalankan dengan privilege lain (atau privilege separation)
3 Modul FCGID (mod_fcgid) Evolusi CGI yang membenarkan proses CGI dijalankan dengan lebih pantas.  Modul ini akan menjalankan modul php secara CGI.
4 Modul PHP Modul bahasa pegaturcaraan berasaskan skrip (scripting language) bagi membangun aplikasi  laman web yang lebih dinamik.  Modul yang dijalankan adalah php-cgi dan bukannya mod_php.

Artikel ini akan menerangkan langkah-langkah pemasangan konfigurasi Apache2, SuEXEC, PHP dan mod_fcgid.  Pemasangan dan konfigurasi  adalah bagi menghoskan 2 laman web contoh dalam satu server iaitu web1.com dan web2.com seperti artikel yang telah ditulis sebelum ini. Alamat bagi laman web1.com dan web2.com adalah seperti berikut:

  • Web1 – http://web1.com dengan akaun pengguna/privilege web1
  • Web2 – http://web2.com dengan akaun pengguna/privilege web2

Nantikan artikel bagaimana pengukuhan Apache Virtual Hosts dilaksanakan dalam bahagian ke-dua.  Contoh pengukuhan Apache VirtualHosts ini akan menggunakan sistem pengoperasian Ubuntu Linux 14.04 atau yang terkini.

Latihan “Basic Penetration Testing” (26-27 Nov. 2013)

Minggu ini saya telah memberikan latihan “Basic Penetration Testing” kepada hampir 20 peserta agensi sektor awam di Unit Pemodenan Tadbiran dan Perancangan Pengurusan Malaysia (MAMPU), Jabatan Perdana Menteri.  Latihan khusus adalah sebahagian daripada projek Malaysia Trustmark bagi sektor awam di mana laman web agensi akan diuji dan dinilai tahap keselamatannya.  Laman web yang selamat boleh membantu menjayakan matlamat pengunaan ICT sebagai salah satu cabang sistem penyampaian kerajaan.

 

Latihan 2 hari pada 26 dan 27 November ini saya kongsikan ilmu berdasarkan pengalaman saya lebih daripada 13 tahun dalam bidang keselamatan ICT.

“If you know the enemy and know yourself, you need not fear the result of a hundred battles…”

Sun Tzu, The Art of War

Know your enemy – Saya telah berkongsikan ilmu bagaimana sistem & rangkaian ICT agensi boleh diceroboh melalui rangkaian Internet.  Bagi  melindungi rangkaian dan aset ICT agensi dari penceroboh, terlebih dahulu kita perlu mengenali penceroboh dan mengetahui teknik-teknik yang digunakan.  Dalam latihan ini, teknik-teknik dan tools yang digunakan turut dibincangkan secara menyeluruh.

Langkah-Langkah Pencerobohan Sistem

Langkah-langkah pencerobohan berikut telah dibincangkan:

  1. Information Gathering, bagaimana teknik penceroboh mengumpul maklumat awal tentang sasaran yang hendak diceroboh seperti maklumat agensi, alamat URL website, domain dan range network block yang digunakan oleh agensi;
  2. Port & Network Scanning, kaedah mengenal pasti sasaran aset ICT yang hendak diceroboh. Contohnya, dalam range network block tersebut, kita boleh mengenal pasti server-server yang boleh capai, sistem pengoperasian serta perkhidmatan Internet yang digunakan.  Di langkah ini, penceroboh boleh mengetahui secara khusus tentang jenis dan versi yang digunakan;
  3. Vulnerability Scanning, Mapping.  Kaedah ini pula digunakan untuk mengetahui “vulnerability” atau kelemahan aset ICT khusus kepada sistem atau pun perkhidmatan Internet yang digunakan.  Sebagai contoh, kelemahan terhadap server dengan jenis Apache web server versi 1.5.13 pada sistem pengoperasian Microsoft Windows boleh diketahui; dan
  4. Exploitation.  Setelah kelemahan diketahui, teknik ini digunakan untuk proses pencerobohan sebenar dilaksanakan.  Langkah inilah biasanya penceroboh boleh memasuki sistem dengan mengeksploitasi kelemahan yang ada.

Kelemahan Aset ICT

Berdasarkan pengalaman dalam bidang ini, saya ringkaskan kelemahan aset ICT kepada 5 kategori iaitu:

  1. Kelemahan penggunaan sistem aplikasi laman web yang popular sama ada komersil atau pun sumber terbuka (open source);
  2. Kelemahan pembangunan aplikasi laman web di agensi, sama ada dibangunkan sendiri atau oleh pembekal;
  3. Kelemahan pengurusan kata laluan;
  4. Kelemahan penggunaan default configuration; dan
  5. Lain-lain kelemahan seperti kelemahan sistem pengoperasian dan komponen, kelemahan konfigurasi shared webhosting dan kelemahan agensi semasa proses pengendalian insiden.

Dalam latihan ini, 4 kategori kelemahan yang utama telah dibincangkan.  Teknik eksploitasi telah diterangkan dengan jelas dan terperinci.  Peserta juga diberikan latihan secara hands-on dan mengalami sendiri bagaimana proses pencerobohan dapat dilakukan.

Teknik-teknik pengukuhan ringkas bagi kelemahan yang dibincangkan turut saya kongsikan.  Antaranya bagaimana tindakan ringkas dan mudah boleh mengurangkan risiko pencerobohan.

Sesi ke dua akan berlangsung pada 10 dan 11 December 2013.

Pengukuhan Apache Web Server – Bhg. 4

Selain daripada web server banner, terdapat satu lagi kaedah bagaimana penceroboh boleh mengetahui versi Apache web server yang digunakan.  Penceroboh boleh mengetahuinya melalui signature yang dipaparkan melalui laman web apabila terdapat ralat seperti fail tidak ditemui (file not found), fail tidak boleh dicapai (access forbidden), terdapat masalah seperti internal server error dan sebagainya.

Berikut merupakan contoh bagi capaian terhadap fail yang tidak ditemui dan web server signature yang dipaparkan:

 

Fungsi directory listing bagi memaparkan kandungan laman web juga memaparkan maklumat bagi Apache web server yang digunakan:

 

Pengukuhan

Maklumat web server signature ini perlu dimatikan bagi mengelakkan penceroboh dengan mudah melakukan carian terhadap kelemahan berkaitan dengan server yang dipasang.   Direktif ServerSignature perlu disetkan kepada Off bagi mematikan fungsi ini.  Direktif ServerSignature Off ini perlu ditukar pada fail konfigurasi yang sama sebagai mana dibincangkan bagi mematikan banner pada artikel sebelum ini.

Pengukuhan Apache Web Server – Bhg. 3

Secara default, Apache web server memaparkan maklumat versi server yang dipasang.  Antara maklumat lain yang juga boleh diketahui termasuklah sistem pengoperasian serta modul-modul web server yang dipasang.  Maklumat-maklumat ini pada kebiasaannya akan digunakan oleh penceroboh untuk mengetahui kelemahan yang ada sebelum dieksploitasi bagi memasuki sistem.

Sebagai analogi, pencuri akan cuba untuk mengetahui jenis kunci yang digunakan, mencari maklumat kelemahan kunci tersebut dan cara-cara membukanya.

Banner Grabbing

Maklumat bagi web server yang digunakan boleh didapati dengan teknik “Banner Grabbing”.  Pengunaan tool ringkas seperti telnet dan netcat boleh digunakan bagi tujuan ini.  Berikut merupakan contoh teknik yang digunakan oleh penceroboh bagi tujuan ini:

# nc www.organisasi.gov.my 80
HEAD /HTTP /1.0

Berdasarkan arahan di atas, penceroboh membuat sambung ke port 80 (HTTP)  dan arahan berikutnya dihantar ke server.  Arahan tersebut akan memberikan output seperti berikut:

HTTP/1.1 302 Found
Date: Fri, 05 Dec 2008 01:24:41 GMT
Server: Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8h mod_autoindex_co lor PHP/5.2.6

Output di atas merupakan maklumat bagi web server yang digunakan.  Di sini kita mengetahui bahawa server yang digunakan adalah Apache web server versi 2.2.9 dan berkemungkinan menggunakan sistem pengoperasian Microsoft Windows.  Modul-modul yang dipasang termasuklah DAV, mod_ssl, OpenSSL, mod_autoindex_color dan PHP.

Google

Maklumat ini kemudiannya boleh digunakan untuk mengetahui kelemahan yang terdapat dan cara eksploitasi yang berkaitan melalui enjin carian Google seperti berikut:

Cadangan Pengukuhan

Maklumat yang dipaparkan melalui banner ini boleh dihadkan dengan mengubah konfigurasi Apache web server ini melalui direktif ServerTokens di dalam fail konfigurasi berdasarkan lokasi pemasangan seperti di:

  • CentOS Linux: /etc/httpd/conf/httpd.conf
  • Ubuntu Linux: /etc/apache2/conf.d/security
  • XAMPP Windows: c:\XAMPP\apache\conf\extra\httpd-default.conf

Berikut merupakan konfigurasi  yang boleh digunakan dan output yang akan dikeluarkan bagi bagi direktif ini:

  • ServerTokens Prod: “Server: Apache”
  • ServerTokens Major: “Server: Apache/2″
  • ServerTokens Minor: “Server: Apache/2.2″
  • ServerTokens Min: “Server: Apache/2.2.17″
  • ServerTokens OS: “Server: Apache/2.2.17 (Unix)”
  • ServerTokens Full: “Server: Apache/2.2.17 (Unix) PHP/5.3.5″

Secara default, direktif ServerTokens Full digunakan pada setiap pemasangan Apache web server.  Oleh itu, bagi tujuan keselamatan, direktif ServerTokens Prod perlu digunakan pada setiap pemasangan bagi menghadkan maklumat yang boleh diperolehi oleh sesiapa sahaja terutamanya penceroboh.

Pengukuhan Apache Web Server – Bhg. 2

Sejarah pembangunan perisian pelayan Apache web server memperlihatkan beberapa kelemahan dikenalpasti, diperbaiki dan dikemaskini dari masa ke semasa. Walaupun begitu, tahap keselamatan perisian ini masih boleh diperkukuhkan.

 

 Isu-isu keselamatan Apache Web server

Antara isu-isu keselamatan terdapat pada pemasangan dan konfigurasi web server ini adalah seperti berikut:

  • Maklumat versi dan modul yang dipasang boleh diperolehi dengan mudah;
  • Penyenaraian kandungan direktori atau folder server yang boleh mengakibatkan maklumat sulit terdedah (directory listing);
  • Pemasangan modul-modul yang tidak diperlukan; dan
  • Penghalang perkhidmatan laman web (Denial of Service).

Punca Insiden

Isu-isu keselamatan seperti di atas ini antara penyebab utama terjadinya insiden keselamatan ICT.  Isu-isu ini berlaku kerana penyelenggara sistem atau pembekal tidak mempunyai pengetahuan dan kepakaran bagi melaksanakan pengukuhan yang sepatutnya.

Bahagian 3 dan seterusnya bagi artikel ini akan membincangkan cadangan-cadangan pengukuhan yang perlu dilakukan bagi meningkatkan lagi keselamatan laman web.

Pengukuhan Apache Web Server – Bhg. 1

Apache Web Server (atau httpd) merupakan server bagi menghoskan laman web yang paling popular digunakan di Internet. Menurut data statistik Netcraft bagi bulan September 2013, lebih 93 juta pelayan jenis ini digunakan sebagai server laman web bagi organisasi atau peribadi di seluruh dunia. Kebanyakan organisasi di Malaysia juga mengunakan pelayan Apache bagi laman web masing-masing.

 

Pelayan sumber terbuka (open source) ini dibangunkan berasakan perisian pelayan NCSA httpd versi 1.3 oleh Rob McCool di Universiti Illinois. Pada masa ini, pembangunan dan penyelangaraan pelayan Apache terletak di bawah projek Pelayan HTTP (HTTP Server) oleh Apache Software Foundation.  Antara tujuan utama projek ini adalah membangun dan menyenggara perisian sumber terbuka web server yang selamat dan cekap untuk sistem operasi moden seperti UNIX, Linux serta Microsoft Windows NT/2000/XP/2003.

Versi Apache

Terdapat 4 versi utama perisian pelayan Apache:

  • Versi 1.3.x – pembangunan telah dihentikan tetapi perisian akan dikemaskini jika terdapat kelemahan terhadap masalah keselamatan;
  • Versi 2.0.x – pembangunan telah dihentikan tetapi akan dikemaskini jika terdapat kelemahan pada masalah keselamatan dan ralat pada perisian;
  • Versi 2.2.x – pembangunan sedang giat dijalankan dengan pertambahan beberapa ciri-ciri baru seperti Smart Filtering dan Proxy Load Balancing; dan
  • Versi 2.4.x – versi terkini dengan pelbagai ciri-ciri baru.

Tahap Keselamatan

Apache Security Team mengkategorikan kelemahan (vulnerability) pelayan Apache berdasarkan tahap kesan atau impak kepada keselamatan:

  • Kritikal (Critical) – melibatkan eksploitasi kelemahan yang membolehkan penyerang menceroboh sistem dan menjalankan arahan atau kod secara jarak jauh (remote code execution). Kelemahan seperti ini juga boleh dieksploitasi dan menjadi ejen penyebaran malware seperti worm;
  • Penting (Important) – eksploitasi kelemahan boleh menyebabkan kerahsiaan maklumat di dalam pelayan terdedah dan berlakunya kes penghalang perkhidmatan (Denial of Service);
  • Sederhana (Moderate) – kesan sederhana seperti melibatkan konfigurasi yang tidak digunakan secara meluas atau memerlukan pengguna melalui proses identifikasi sebelum berjaya mengeksploitasi kelemahan tersebut; dan
  • Rendah (Low) – isu-isu kelemahan lain yang dianggap sukar untuk dieksploitasi.

Antara kelemahan kritikal yang dikenal pasti sebelum ini adalah seperti berikut:

  • Apache Chunked encoding vulnerability (CVE-2002-0392) dikenal pasti terdapat pada Apache httpd versi 1.3.26 dan 2.0.37;
  • Win32 Apache Remote command execution ( CVE-2002-0061) bagi Apache httpd versi 1.3.24 untuk sistem operasi Microsoft Windows NT/2000/XP/2003;
  • IPv6 URI parsing heap overflow (CVE-2004-0786), Apache httpd versi 2.0.51;
  • APR remote crash (CVE-2003-0245), Apache httpd versi 2.0.46;
  • MS-DOS device name filtering (CVE-2003-0016), Apache httpd versi 2.0.44 untuk sistem operasi Microsoft Windows NT/2000/XP/2003; dan
  • mod_rewrite off-by-one error CVE-2006-3747, Apache httpd versi 2.0.59 dan 2.2.37.

Kelemahan yang ditemui ini tidaklah banyak dan kemudiannya telah diperbaiki dari semasa ke semasa untuk mengukuhkan lagi tahap keselamatan pada perisian Apache web server ini.

Adakah Apache selamat untuk digunakan?

Berdasarkan jumlah kelemahan kritikal yang agak sedikit dan diperbaiki dari masa ke semasa, perisian Apache web server ini pada dasarnya adalah selamat untuk digunakan. Walaubagaimana pun, pengguna disarankan untuk sentiasa memantau maklumat berkaitan dengan web server ini bagi mengelakkan dari server diceroboh.

Pengguna web server jenis ini perlu memantau setiap kelemahan baru yang ditemui dan versi-versi terkini yang dikeluarkan.  Jika terdapat penemuan kelemahan, pengguna perlu untuk menaik taraf versi yang sedia ada kepada versi terkini.  Isu-isu keselamatan berkaitan keselamatan web server ini boleh dirujuk di sini.  Secara umumnya, pengguna perlu mengaplikasi kaedah ini terhadap apa juga jenis perisian yang digunakan.