SlideShare ist ein Scribd-Unternehmen logo
1 von 110
Joomla! SecurityPanduan Keselamatan CMS Joomla!
SHAIFFULNIZAM MOHAMAD
BAHASA MELAYU
Penafian
Walaupun segala usaha telah dilakukan untuk memastikan ketepatan maklumat didalam
buku ini ketika penulisan, namun begitu maklumat berkaitan teknologi perkomputeran selalu
bertukar dengan pantas.Oleh itu, sesetengah dari maklumat yang ada di dalam buku ini
mungkin sudah tidak tepat ketika anda membacanya. Juga, kemungkinan terdapat
kesalahan tipografi dan kandungan. Gambar adalah hakcipta masing-masing dan
dikreditkan.Tidak ada jaminan yang diperakukan bahawa maklumat yang terkandung di
dalam buku panduan ini adalah tepat dan lengkap. Pengarang dengan ini secara khususnya
tidak bertanggungjawab atas apa-apa risiko, kehilangan, liabiliti, sama ada secara peribadi
atau tidak, yang berlaku akibat penggunaan dan aplikasi kandungan buku panduan ini,
secara langsung atau tidak langsung.
Hakcipta
Hakcipta Terpelihara 2012, Shaiffulnizam bin Mohamad.
Anda dilarang mengeluar ulang mana-mana bahagian artikel, ilustrasi dan isi kandungan
ebook ini dalam apa juga bentuk dan dengan apa juga cara sama ada secara elektronik,
fotokopi, mekanik, rakaman atau cara lain sebelum mendapat izin daripada pihak penulis
• Anda dilarang menjual PANDUAN ini kepada mana-mana pihak sekalipun.
• Anda dilarang menjadikan PANDUAN ini sebagai bonus untuk produk anda.
• Anda tidak dibenarkan sama sekali mengubah suai kandungan PANDUAN ini tanpa
kebenaran penulisnya.
Panduan Keselamatan bagi Laman Web
Panduan Keselamatan Web Joomla! IntermediateHalaman | 2
berasaskan Joomla!
Kandungan Halaman
1.0 Pengenalan Kursus/Buku ini x
1.1 Antara sebab atau punca Joomla! Digodam atau deface. x
1.2 Pemilihan server/Hosting (VPS/Shared, Linux/Windows)
1.2.1 Dedicated/VPS/Hos sendiri laman anda
1.2.2 Shared server
1.2.3 Shared Server VS Dedicated atau VPS
2.0 Pemasangan Apache dan PHP
2.1 Log masuk Root untuk pemasangan
2.2 Penambahan REPO Centos
2.3 Pemasangan Apache & PHP
2.3.1 Pemasangan Module bagi PHP
2.3.2 Auto Start Apache dipermulaan Boot
2.3.3 Periksa pemasangan Apache dan PHP
2.4 Masalah Pemasangan Apache dan PHP serta Penyelesaiannya
3.0 Pemasangan MYSQL
3.1 Log masuk Root untuk pemasangan
3.2 Penambahan REPO Centos
3.2.1 Periksa Versi MySQL dalam REPO
3.2.2 Kemaskini dan ATAU Pasang MySQL
3.2.3 Auto Start MySQL dipermulaan Boot dan mulakannya
4.0 Meningkatkan Tahap Keselamatan Web Apache, PHP dan MySQL (Server)
4.1 Melindungi Apache
4.1.1 Menaiktaraf keselamatan Apache dan Edit httpd.conf
4.1.2 Jalankan Apache dibawah pengguna yang betul dan
kumpulan yang betul
4.1.2 Kawal Direktori dan Akses kepada fail
4.1.4 Tutup mana-mana modul yang tidak digunakan
Panduan Keselamatan Web Joomla! IntermediateHalaman | 3
4.1.5 Berhati-hati dengan penggunaan .htaccess
4.1.6 Nyahaktifkan FollowSymLinks
4.1.7 Menyahaktif HTTP TRACE
4.1.8 Aktikan penggunaan Mod_rewrite
4.2 Melindungi PHP
4.2.1 Meningkatkan Keselamatan PHP melalui php.ini
4.2.2 Kill Register Globals
4.2.3 Mengawal Akses kepada fail
4.2.4 Sembunyikan Versi PHP
4.2.5 Menyahaktifkan fungsi-fungsi bahaya PHP
4.2.5.1 Nyahaktif Info & Fungsi bahaya PHP
4.2.5.2 Menanda Cookie dengan HTTPOnly
4.2.6 Pemasangan SUHOSIN
4.2.7 Ringkasan Peningkatan Keselamatan PHP
4.3 Melindungi MySQL
4.3.1 Tujuan Pemasangan MySQL lebih selamat
4.3.2 Mulakan MySQL Secure Installation
4.3.3 Bersambung ke MySQL dan hasilkan User dan DB
4.3.4 Nyahaktif sambungan ke Pelayan MySQL dari luar
4.3.4.1 Firewall dan Status Port MySQL
4.3.5 Perlindungan tambahan
4.4 Pengenalan dan Pemasangan Mod_security
4.4.1 Pemasangan Mod_security
4.4.2 Ralat pemasangan
4.4.3 Konfigurasi/Seting Mod_security
4.5 Pengenalan dan Pemasangan suPHP
4.5.1 Pemasangan suPHP
Panduan Keselamatan Web Joomla! IntermediateHalaman | 4
4.5.2 Konfigurasi
4.5.3 Pemilikan dan Kebenaran
4.5.4 Ralat / Masalah (jika ada)
4.6 Mengatasi DOS menggunakan mod_evasive
4.7 Mengatasi Serangan SLowLori dengan Mod_slowloris
4.7 Menggunakan SSL untuk Apache
4.8 SSH
4.8.1 Edit konfigurasi SSH
4.8.2 Seting dan Peringatan
4.9 Pemasangan Firewall (CSF)
4.9.1 Pemasangan CSF
4.9.1.1 Pra Pemasangan
4.9.1.2 Pemasangan CSF
4.9.2 Konfigurasi CSF dan Webmin
4.9.3 Ralat dan Penyelesaian masalah
4.10 Meningkatkan Keselamatan Centos (Pengenalan)
4.10.1 Linux Environment Security (LES)
4.10.2 Rootkit Hunter (RKHunter)
4.10.3 OSSEC IDS
4.10.4 Antivirus ClamAV
4.10.4.1 Konfigurasi Clamav-Cron (auto scan)
4.10.4.2 Setup Cron pada Webmin
5.0 Keselamatan Web Joomla!
5.1 Milik dan Kebenaran (CHMOD & CHOWN)
5.1.1 Pengenalan
5.1.2 Contoh-contoh
Panduan Keselamatan Web Joomla! IntermediateHalaman | 5
5.1.3 Penggunaan WinSCP untuk CHMOD dan CHOWN
5.2 Penggunaan HTACCESS
5.2.1 Mengaktifkan HTACCESS melalui httpd.conf
5.2.1.1 Mengaktifkan htaccess bagi Joomla
5.2.2 Konfigurasi HTACCESS
5.2.3 Contoh .htaccess yang digunakan
5.2.3.1 Keterangan mengenai kod yang digunakan
5.2.3.2 Nyahaktifkan Directory index
5.2.3.3 Blok eksploit melalui URL
5.2.3.4 Mempastikan Mod_rewrite diaktifkan
5.2.3.5 Pengesahan HTTP Auth untuk PHP dan SEF
5.2.3.6 Menghalang fail shell spt c99
5.2.3.7 Halang akses ke fail tertentu
5.2.3.8 Perlindungan dari suntikan tertentu
5.2.3.9 Perlindungan lebih maju untuk folder administrator
5.2.3.10 Perlindungan dari SQLi
5.2.3.11 Perlindungan dari bot-bot nakal
5.3 Buang fail-fail default Joomla!
5.4 Ubah lokasi fail configuration.php
5.4.1 Joomla 1.5
5.4.2 Joomla 2.5.X
5.5 Lindungi Folder Administrator dengan kata laluan.
5.6 Menggunakan SEF – Kenapa dan bagaimana?
Panduan Keselamatan Web Joomla! IntermediateHalaman | 6
1.0 Pengenalan Kursus/Buku ini :
Joomla! Adalah sistem Pengurusan Kandungan yang dibina menggunakan bahasa
pengaturcaraan PHP. Oleh yang demikian, Joomla! Tidak dapat lari dari masalah
keselamatan yang berpunca dari banyak sebab.Topik seterusnya akan membincangkan
punca-punca web Joomla! Boleh dicerobohi atau digodam.
1.1 Antara sebab atau punca Joomla! Digodam atau deface.
Hosting laman web tidak selamat.
PHP yang tidak dikemaskini
Joomla yang tidak dikemaskini
Penggunaan komponen yang tidak dikemaskini
Penggunaan komponen yang dimuat turun dari laman web muat turun haram
Penggunaan sistem muat naik yang tidak dipantau
Folder writable 777 atau fail writable
Dan banyak lagi punca.
1.2 Pemilihan server/Hosting (VPS/Shared, Linux/Windows)
Sistem terbaik bagi penggunaan sistem berasaskan PHP ialah Linux, PHP ditulis diatas
platform Linux dan diPort utk kegunaan windows. Maka adalah lebih baik dan sesuai
sekiranya tuan/puan menghoskan laman web Joomla! Tuan/puan menggunakan server
linux. Terdapat beberapa jenis pelayan web berasaskan Linux yang dibina KHAS untuk
memenuhi ciri2 keselamatan web. Contohnya Centos,
1.2.1 Dedicated/VPS/Hos sendiri laman anda
Jika anda mempunyai bajet yang besar dan memproses data yang sulit, anda mungkin
boleh dapatkan dedicated server yang boleh anda uruskan sendiri atau dengan bantuan
pemilik hosting, anda tidak perlu bimbangkan masalah sumber dan masalah keselamatan
yang diakibatkan oleh pengguna lain, ini kerana anda seorang sahaja yang menguruskan
pelayan tersebut. Anda juga boleh pasang perisian tambahan untuk keselamatan laman
web seperti mod_security, mod_evasive dan lain lain.
Kalau tidak mampu, anda boleh dapatkan VPS (Virtual private server yang mana lebih
Panduan Keselamatan Web Joomla! IntermediateHalaman | 7
kurang Dedicated server, Cuma ianya bukan merupakan server fizikal) ia adalah server
dalam sebuah server dengan sumber2 yang telah ditetapkan.
1.2.2 Shared server
Shared server adalah perkhidmatan hosting yang dikongsikan bersama ratusan penyewa
tapak web tersebut. Ini bermaksud dalam satu server ia menempatkan lebih kurang 5~500
laman web dalam satu server, dimana setiap web tersebut diletakkan dalam folder masing2.
Laman web anda mempunyai sumber yang terhad kerana setiap sumber dikongsi bersama
web yang lain, dan jika ada berlaku masalah pencerobohan, maka berkemungkinan, web
anda turut boleh dicerobohi.
1.2.3 Shared Server VS Dedicated atau VPS
Apa beza shared server dengan VPS atau Dedicated dari segi keselamatan? Sebenarnya ia
amat berbeza, jika anda seorang hackers, apa yang anda perlukan ialah alamat laman web
yang anda sewa sekarang dan menggunakan reverse dns tools, hackers boleh
mendapatkan senarai laman web atau penyewa yang berada dalam server anda dan
seterusnya membuat scanning/imbasan untuk mendapatkan maklumat laman web lain yang
mungkin tidak dikemaskini atau mempunyai masalah keselamatan.
2.0 Pemasangan Apache dan PHP
Apache merupakan Pelayan Web berasaskan sumber terbuka dan PHP pula merupakan
bahasa pengaturcaraan berasaskan Web, Joomla! perlu di jalankan menggunakan Pelayan
web Apache (atau mana-mana pelayan web) dan PHP diperlukan untuk mentafsir kod
Joomla!
Untuk itu, kita akan mulakan dengan memasang Pelayan Web Apache dan PHP 5.3.X.
Dibawah, kita akan cuba memasang Pelayan Web Apache (httpd) dengan PHP 5.3.X dan
modul berikut:
• PEAR
• PDO
• MySQL
• PostgreSQL
• Memcache
• GD
• XML
Panduan Keselamatan Web Joomla! IntermediateHalaman | 8
• MBString
• MCrypt
pada CentOS 6/5.7 Pasang Server Apache (httpd) dan PHP 5.3.X
2.1 Log masuk Root untuk pemasangan,
Untuk memasang apa-apa perisian untuk Centos dan variasi Linux sepertinya, anda perlu
log masuk sebagai root terlebih dahulu sebelum dibenarkan untuk memasang, tujuannya
ialah untuk mempastikan hanya user yang mempunyai kebenaran atau hak sahaja boleh
memasang atau memberi kebenaran kepada pengguna lain atau system. Dan ini
sebenarnya menambah ciri keselamatan pada system itu sendiri, kerana pengguna tanpa
kebenaran atau jika ada malware atau pengganggu dalam sistem tersebut, mereka tidak
boleh melakukan kerosakan besar dalam sistem.
Hanya root boleh membuat pemasangan, dan untuk melalukan pemasangan, sila
laksanakan arahan berikut terlebih dahulu. Pilih antara yang dibawah berdasarkan sistem
yang anda gunakan.
su
## OR ##
sudo -i
2.2 Penambahan REPO Centos
Repo atau Repository merupakan tempat simpanan perisian atau kemaskini untuk Sistem
Operasi Centos atau variasi Linux seperti Redhat dan lain-lain. Repo dibawah ini adalah
pilihan dari repo-repo sedia ada yang ada kalanya tidak dikemaskini, oleh yang sedemikian,
pilihan menambah repo ini kedalam sistem repo Centos yang anda gunakan ini boleh
membantu mengemaskini perisian atau komponen dalam Centos.
Install Remi repository (Pilih ikut kepada Versi OS yang digunakan, oleh hanya pilih
Atomic Repo jika menggunakan versi terbaru)
CentOS and Red Hat (RHEL)
## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ## 32 Bit
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-
7.noarch.rpm
## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ## 64 Bit
Panduan Keselamatan Web Joomla! IntermediateHalaman | 9
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-
6-7.noarch.rpm
## CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-
4.noarch.rpm
## CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
Atomic Repo
## Centos 6, Atomic Repo
wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh
2.3 Pemasangan Apache & PHP. (httpd & PHP 5.3.X)
CentOS 6/5.7 and Red Hat (RHEL) 6.1/6/5.7
yum --enablerepo=remi install –y httpd php php-common php-devel
Jika anda gunakan AtomicRepo, gunakan arahan dibawah
yum install -y httpd php php-common php-devel
2.3.1 Pemasangan Module bagi PHP
Untuk pemasangan module PHP, anda kena tahu bahawa tidak semua module-module
tersebut akan digunakan, Sila pilih yang anda ingin gunakan bagi Joomla!:
PEAR, PDO, MySQL, Memcache, GD, MBString, MCrypt, XML
CentOS 6/5.7 and Red Hat (RHEL) 6.1/6/5.7
yum --enablerepo=remi install –y php-pear php-pdo php-mysql php-pgsql php-
pecl-memcache php-gd php-mbstring php-mcrypt php-xml php-gd php-imap php-
ldap php-odbc php-pear php-xml php-xmlrpc
Jika anda menggunakan Atomic Repo, gunakan arahan dibawah
yum install -y php-pear php-pdo php-mysql php-pgsql php-pecl-memcache php-
gd php-mbstring php-mcrypt php-xml php-gd php-imap php-ldap php-odbc php-
pear php-xml php-xmlrpc
2.3.2 Auto Start Apache dipermulaan Boot
Panduan Keselamatan Web Joomla! IntermediateHalaman | 10
Mulakan Apache HTTP server (httpd) dan autostart Apache HTTP server (httpd) pada
permulaan boot
/etc/init.d/httpd start ## use restart after update
## OR ##
service httpd start ## use restart after update
Untuk mula pada boot time
chkconfig --levels 235 httpd on
2.3.3 Periksa pemasangan Apache dan PHP
Periksa laman PHP info bagi memastikan Apache, PHP dan modul2 PHP berfungsi
Untuk memeriksa sama ada pelayan web anda Berjaya dipasang dengan PHP, sila tambah
kandungan berikut kepada fail /var/www/html/test.php
<?php
phpinfo();
?>
Periksa fail yang telah anda hasilkan tadi dengan muatkannya di pelayar web
Jika anda memasangnya di localhost, akses melalui pelayar web anda menerusi URL.
http://localhost/test.php, jika anda log masuk secara remote atau jarak jauh atau dari luar,
sila gunakan alamat IP.
Kita perlu memasang modul-modul php yang diperlukan bagi memasang Joomla!, untuk
memasang modul tersebut, menggunakan terminal/putty, sila run arahan berikut.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 11
yum --enablerepo=remi install -y php-pear php-pdo php-mysql php-pgsql php-
pecl-memcache php-gd php-mbstring php-mcrypt php-xml php-gd php-imap php-
ldap php-odbc php-pear php-xml php-xmlrpc
Selepas itu kita perlu aktifkan sambungan ke Pelayan Web Apache (httpd) –> Open Web
server Port (80) pada iptables Firewall (sebagai root sekali lagi)
2.4 Masalah Pemasangan Apache dan PHP serta Penyelesaiannya
1. Jika port 80 iaitu server tidak dapat diakses, sila periksa status :
service iptables status,
2. Jika anda dapati port 80 di drop oleh firewall, gunakan kod dibawah:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
3. Restart Iptables Firewall:
service iptables restart
## OR ##
/etc/init.d/iptables restart
Sekiranya tidak menjadi, sila laksanakan arahan berikut :
nano /etc/sysconfig/iptables
Sila masukkan nilai
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
Selepas baris berikut
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Sila mulakan semula iptables mengikut arahan service iptables restart
Dan InsyaAllah, selepas ini anda akan dapat mengakses pelayan web anda yang telah
dipasangkan dengan PHP sekaligus, Seterusnya kita akan memasang pelayan MySQL, bagi
membolehkan Joomla! Berfungsi dengan betul. Ini kerana Joomla! memerlukan pangkalan
data bagi menyimpan segala maklumat berkaitan.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 12
3.0 Pemasangan MYSQL
MySQL ialah pangkalan data sumber terbuka yang sangat popular. Oleh kerana disebabkan
kelajuan dan kestabilannya, ia digunakan berjuta-juta pelayan web diseluruh dunia. MySQL
mempunyai mekanisme keselamatan yang mudah dan efektif (cekap), walaubagaimana
pun, banyak langkah yang perlu diambil untuk menjadikan pemasangan lalai @ default yang
dilakukan lebih selamat. Langkah-langkah yang diterangkan dibawah akan membantu anda
memberikan perlindungan kepada pangkalan data anda, dan yang penting juga anda
menambah keselamatan sistem operasi yang dibawahnya seselamat mungkin.
Sekiranya anda telah memasang Repo pada Centos diperingkat pemasangan Pelayan
Web Apache dan MySQL sebelum ini, anda boleh teruskan kepada no. 3.2.2,
Pasang MySQL Database 5.X.XX pada CentOS 6/5.7
3.1 Log masuk Root untuk pemasangan
Seperti pemasangan Apache dan PHP, anda mestilah log masuk sebagai root terlebih
dahulu, arahannya seperti dibawah.
su -
## OR ##
sudo –i
3.2 Penambahan REPO Centos
Pasangkan Remi repository
## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-
5.noarch.rpm
## CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-
4.noarch.rpm
## CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
3.2.1 Periksa Versi MySQL dalam REPO CentOS 6/5.7 yang ada
yum --enablerepo=remi,remi-test list mysql mysql-server
Panduan Keselamatan Web Joomla! IntermediateHalaman | 13
Output:
Loaded plugins: changelog, fastestmirror, presto, refresh-packagekit
remi | 3.0 kB 00:00
remi/primary_db | 106 kB 00:00
Available Packages
mysql.i686 5.5.17-1.fc14.remi
@remi
mysql-server.i686 5.5.17-1.fc14.remi
3.2.2 Kemaskini dan ATAU Pasang MySQL
Kemaskini atau pasang MySQL 5.X.XX CentOS 5.7/6
yum --enablerepo=remi,remi-test install mysql mysql-server mysql-devel
Jika tidak gunakan mana-mana repo atau jika anda gunakan Repo Atomic, sila gunakan
arahan berikut.
yum install -y mysql mysql-server mysql-devel
3.2.3 Auto Start MySQL dipermulaan Boot dan mulakannya
Mulakan pelayan MySQL secara auto pada permulaan boot CentOS 6/5.7
/etc/init.d/mysqld start
## OR ##
service mysqld start
Laksanakan baris arahan berikut untuk mulakan Pelayan MySQL setiap kali pelayan anda
dimulakan semula / direboot.
chkconfig --levels 235 mysqld on
Pemasangan Apache, PHP dan MySQL telah Berjaya dilakukan, seterusnya kita akan
menaikkan tahap keselamatan Apache, PHP dan MySQL yang telah dipasang dalam bab
seterusnya, dan selepas ini juga kita akan meningkatkan keselamatan server secara umum
dengan pemasangan perisian-perisian
Panduan Keselamatan Web Joomla! IntermediateHalaman | 14
4.0 Meningkatkan Tahap Keselamatan Web Apache, PHP
dan MySQL (Server)
Setelah pemasangan Apache, PHP dan MySQL. Kita perlu meningkatkan keselamatannya
bagi mengelakkannya dicerobohi atau maklumat mengenainya diperolehi oleh hackers.
4.1 Melindungi Apache
Pada permulaannya, kita akan cuba untuk meningkatkan keselamatan Apache terlebih
dahulu.
Opsyen pemasangan Apache yang default menyebabkan pelayan web menambah tanda
yang memberitahu versi Apache yang anda gunakan, versi sistem operasi anda dan jenis
modul yang anda gunakan dalam konfigurasi Apache anda. Dengan memberikan
maklumat2 ini, akan menyebabkan lagi mudah si hackers atau penceroboh untuk
mengeksploitasi dan mencari maklumat tentang kelemahan yang ada pada Apache dan
pelayan web anda..
4.1.1 Menaiktaraf keselamatan Apache dan Edit httpd.conf
Satu cara menambah tahap keselamatan web anda ialah dengan menyahaktifkan seting ini
pada HTTP header, tambah opsyen ini kepada fail default httpd.conf :
Untuk mencari httpd.conf, sila run arahan ini Updatedb
dan selepas itu run arahan locate httpd.conf, Anda perlu mencari Kod berikut dan
Ubahkan dari Kod berikut
ServerSignature On
ServerTokens OS
Kepada
ServerSignature Off
ServerTokens Prod
Jika anda menggunakan Mod_security, kita boleh arahkan Mod_security untuk mengubah
nama server kepada nama lain, apa yang anda perlu buat ialah, kod untuk ServerTokens
mesti diubah seperti pemalar dibawah. Dan ditambah dengan satu baris lain
SecServerTokens iaitu arahan dari mod_security
Panduan Keselamatan Web Joomla! IntermediateHalaman | 15
ServerTokens Full
# Gantikan nama server (mod_security directive)
SecServerSignature "Microsoft-IIS/5.0"
Antara ciri keselamatan lain yang anda boleh tambah pada bahagian header Apache adalah
seperti dibawah
<IfModule mod_headers.c>
Header set X-XSS-Protection: "1; mode=block"
Header set X-Content-Security-Policy: "allow 'self'; options inline-script;
img$
Header set Strict-Transport-Security: "max-age=43200; includeSubDomains"
Header set Cache-Control: "max-age=3600, public, must-revalidate"
Header set X-frame-options: "deny"
Header set X-Content-Type-Options: "nosniff"
#Header set X-Content-Security-Policy: "default-src 'self'"
</IfModule>
<IfModule mod_headers.c>
Header always edit Set-Cookie ^(.*)$ '$1;secure; httponly;'
Header set X-Frame-Options sameorigin
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection '1; mode=block'
Header set X-Permitted-Cross-Domain-Policies 'master-only'
Header set Content-Security-Policy none
Header set Cache-Control 'no-cache, no-store, must-revalidate'
Header set Pragma 'no-cache'
Header set Expires '-1'
Header unset X-Powered-By
Header unset X-Pingback
Header always set Strict-Transport-Security "max-age=63072000;
includeSubDomain$
</IfModule>
4.1.2 Jalankan Apache dibawah pengguna yang betul dan kumpulan yang betul
Selalunya, pemasangan default untuk Apache berjalan dibawah pengguna nobody dan
kumpulan nobody. Walaupun ini lebih baik dari konfigurasi dulu yang dijalankan oleh
pengguna root, ia masih lagi akan hadapi banyak masalah. Ini kerana pengguna nobody
dan kumpulan digunakan oleh pelayan web anda untuk beberapa proses sistem yang lain.
Jika salah satu sistem ini diganggu, si penyerang juga berkemungkinan mempunyai akses
kepada pelayan Apache dan fail2, begitu juga jika Apache diganggu atau diceroboh, maka si
penyerang boleh juga merosakkan sub-sistem lain. Menggunakan pengguna dan kumpulan
berbeza pada Apache amat lah disarankan. Anda boleh set dalam httpd.conf menggunakan
pemalar berikut:
User apache
Group apache
Opsyenal : Anda boleh ubah pemilik dan Kumpulan apache kepada httpd mengikut cara
dibawah.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 16
Anda boleh menghasilkan pengguna dan grup menggunakan arahan berikut (sebagai root)
# groupadd httpd
# useradd httpd -g httpd -d /dev/null -s /sbin/nologin
# chown -R root:root /etc/httpd
# chmod -R go-w /etc/httpd
# chmod -R go-r /etc/httpd/conf
# chmod -R go-r /etc/httpd/logs
4.1.2 Kawal Direktori dan Akses kepada fail
Apache memiliki kawalan bagi mengaksesnya yang boleh digunakan untuk mengetatkan
keselamatan pelayan web anda.has access controls that can be used to tighten your
security. Khususnya, anda mahu untuk menyekat akses untuk akses kepada mana-mana
fail di luar root web anda. Ini menghalang pengguna dari memuat turun fail sistem atau
membaca fail konfigurasi untuk aplikasi web anda jika pelayan anda tersalah
dikonfigurasikan. Untuk mencapainya akan mengambil Cuma dua langkah, pertama
menambah kod dibawah kepada fail default httpd.conf:
pssstttt… cara untuk cari httpd.conf dengan cepat dengan taipkan command locate
httpd.conf
<Directory />
Order Deny,Allow
Deny from All
Options None
</Directory>
Konfigurasi ini secara efektifnya menghalang akses kepada semua fail kepada sistem fail
anda. Langkah seterusnya Langkah seterusnya adalah untuk secara terpilih membolehkan
akses kepada fail-fail di dalam direktori akar web anda. Jika anda menjalankan pelbagai hos
maya (Vhosts), anda akan perlu memasukkan ini dalam konfigurasi tuan rumah setiap
maya. Untuk contoh ini, mari kita mengatakan bahawa root web anda / home / user / web.
Untuk membolehkan akses kepada fail-fail dalam akar web, tambah ini konfigurasi anda:
<Directory /home/user/web>
Order Allow,Deny
Allow from All
</Directory>
Begitu juga, anda mungkin perlu untuk secara terpilih menyekat akses kepada fail tertentu.
Satu teknik biasa untuk menyekat akses ke. Htaccess. Walau bagaimanapun, terdapat juga
Panduan Keselamatan Web Joomla! IntermediateHalaman | 17
sering fail yang anda mahu menyekat akses. Anda mungkin mahu menyekat akses kepada
semua fail dengan. Inc lanjutan (PHP termasuklah) kerana mereka mungkin mengandungi
maklumat sensitif (seperti butir-butir pangkalan data) atau jika anda menggunakan sumber
sistem kawalan Subversion, anda mungkin perlu untuk menyekat fail. Svn dijana apabila
melakukan checkout kod. Untuk menghalang fail tertentu seperti Htaccess, tambah ini
pada httpd.conf anda:
<Files ~"^/.htacces">
Order Deny,Allow
Deny from All
</Files>
Untuk sembunyikan semua fail yang berakhir dengan .svn, anda boleh gunakan kod berikut:
<Files ~"/.svn$">
Order Deny,Allow
Deny from All
</Files>
Disable execution mana-mana skrip dalam folder images.
Masukkan kod berikut dalam fail .htaccess dan letakkan dalam folder images.
# secure directory by disabling script execution
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
4.1.4 Tutup mana-mana modul yang tidak digunakan
Selalunya apabila sesuatu berkaitan dengan Keselamatan, Kurang tu maksudnya lebih baik.
Ini lebih2 lagi berkaitan dengan modul Apache. Anda perlu menyahaktif modul yang anda
tidak gunakan dan tidak perlu. Memang selalu ada risiko dengan penggunaan konfigurasi
secara default. Cara paling sesuai ialah dengan menyahaktifkan modul tersebut. Jika anda
gunakan mod_php, apa yang perlu buat ialah dengan membuang atau letakkan tanda
komen pada baris LoadModule dalam httpd.conf untuk mana-mana modul yang anda
tidak gunakan. Jika modul tersebut dikompul bersama Apache, anda perlu kompil semula
pelayan Web Apache anda. Untuk dapatkan modul mana yang di kompil bersama, gunakan
arahan berikut dalam ssh anda:
httpd -l
Antara modul yang dikecualikan ialah
mod_userdir, mod_info, mod_status dan mod_includes
Anda juga dicadangkan untuk menutup modul webdav sekiranya tidak menggunakannya.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 18
Mod_dav
4.1.5 Berhati-hati dengan penggunaan .htaccess
Telah dinyatakan sebelum ini bahawa adalah sangat penting untuk melindungi fail .htaccess
dari dimuat turun. .htaccess boleh sebabkan masalah keselamatan yang lain. Bergantung
kepada opsyen mana yang diaktifkan dalam Apache, .htaccess boleh mengatasi seting
Apache. Kalau tidak berhati-hati, pengguna yang tidak mahir boleh masukkan seting yang
boleh mengganggu keselamatan pelayan web anda. Anda boleh gunakan arahan opsyen
untuk nyahaktifkan kebenaran dalam blok/had tertentu sahaja. Contoh jika perumah web
anda ialah /home/user/web, anda boleh gunakan pemalar berikut dalam konfigurasi Apache
<Directory /home/user/web>
AllowOverride None
</Directory>
Ada masanya Overrides/mengatasi kebenaran ini diperlukan. Contohnya untuk menyokong
permalinks, Joomla! perlukan .htaccess. Jika anda perlukannya, jangan lupa ubah nama
asal fail htaccess.txt asal dalam direktori Joomla! Kepada .htaccess, pastikan anda
lindunginya terlebih dahulu.
4.1.6 Nyahaktifkan FollowSymLinks
Pautan Symbolic boleh dedahkan fail dan direktori dalam sistem fail yang anda tidak mahu
dedahkan links/pautan fail penting anda. Apache menyokong FollowSymLinks sebagai
seting untuk pilihan. Apabila opsyen ini ditetapkan, Apache akan benarkan pengguna untuk
mengikut pautan simbolik kepada fail yang berada diluar root web anda.Anda boleh sekat
perbuatan ini dengan menggunakan:
Options none
Dalam blok Direktori. Atau jika anda aktifkan opsyen lain, anda perlu gunakan kod berikut:
Options -FollowSymLinks
4.1.7 Menyahaktif HTTP TRACE
Disable HTTP TRACE dengan memasukkan variable
TraceEnable off
4.1.8 Aktikan penggunaan Mod_rewrite
Panduan Keselamatan Web Joomla! IntermediateHalaman | 19
Untuk Aktifkan Penggunaan mod_rewrite bagi kegunaan SEF. Anda perlu edit Apache
httpd.conf dan cari
LoadModule rewrite_module modules/mod_rewrite.so
Jika ada # dihadapan LoadModule rewrite_module modules/mod_rewrite.so seperti
berikut
#LoadModule rewrite_module modules/mod_rewrite.so
Sila buangkan # dan tinggalkan LoadModule rewrite_module modules/mod_rewrite.so
Sila restart/mulakan semula Apache dengan arahan
service httpd restart
Peringatan, anda haruskan pastikan .htaccess adalah aktif (AllowOverride All) untuk
membolehkan ianya berfungsi.
4.2 Melindungi PHP
PHP adalah salah satu bahasa pengaturcaraan popular untuk pembangunan laman web
atau aplikasi web pada hari ini. Oleh yang sedemikian, para hackers sentiasa mencari cara
untuk mengeksploitasi skrip PHP untuk mendapatkan akses tanpa kebenaran, atau untuk
dapatkan kerosakan kepada sistem anda. Melindungi keselamatan PHP adalah sangat
penting dalam mana-mana aplikasi web yang anda gunakan atau hasilkan.
Apabila melihat kepada cara melindungi aplikasi PHP, ada dua cara sebenarnya, pertama
ialah melindungi PHP menerusi php.ini dan yang seterusnya menerusi penggunaan kod
yang ditulis dengan selamat untuk menghalang dari dieksploitasi.
4.2.1 Meningkatkan Keselamatan PHP melalui php.ini
Ada beberapa seting dalam PHP sendiri yang boleh memberi kesan terhadap keselamatan
aplikasi anda. Tetapan ini boleh dikawal melalui fail php.ini. Dengan mengawal tingkah laku
lalai PHP sendiri, anda mengurangkan potensi kerosakan yang disebabkan oleh kesilapan
pengekodan.
4.2.2 Kill Register Globals
Panduan Keselamatan Web Joomla! IntermediateHalaman | 20
Sebelum versi 4.2.0, PHP menggunakan pemalar global untuk sediakan akses kepada
pemalar yang dimasukkan dari permintaan GET dan POST. Ciri-ciri ini telah dihapuskan
kerana ia menimbulkan masalah keselamatan. Penyerang mungkin menggunakannya untuk
memanipulasikan pemalar didalam pelbagai senario. Elakkan dari menggunakan skrip yang
memerlukan register_globals kerana ia biasanya tanda-tanda skrip yang berpotensi tidak
selamat atau yang belum disenggarakan atau dikemaskini baru-baru ini. Pastikan ciri ini
sentiasa ditutup.
4.2.3 Mengawal Akses kepada fail
Skrip PHP boleh menggunakan fungsi fopen untuk membaca dan menulis fail pada sistem
fail pelayan web. Walaupun ciri ini penting dan ramai yang perlukannya, Namun ia juga
boleh mendatangkan masalah keselamatan. Skrip php yang mempunyai ralat boleh
menyebabkan pengguna nakal untuk membaca sistem fail atau menulis semula fail. Ada
beberapa seting dalam PHP yang membantu anda mengawal fail PHP yang anda boleh
akses.
Salah satu pilihan yang anda boleh gunakan dalam php.ini ialah open_basedir. Pilihan ini
mengambil sub-directory sebagai nilainya sebagai contoh /home/user/html/. Ia
menghadkan PHP’s I/O kepada sub-directory tersebut yang menghalang PHP dari baca
atau tulis kepada mana-mana fail diluar sub-direktori yang telah ditetapkan itu
Anda juga boleh gunakan safe_mode dalam php.ini untuk mengawal kawalan akses kepada
fail. Dalam safe mode, PHP hanya boleh membuka fail yang dimiliki oleh pengguna yang
sama seperti pelayan web anda. Ia juga menghalang PHP dari menjalankan binaries. Jika
anda perlukan PHP untukm mengakses fail yang dimiliki oleh pengguna lain, anda boleh
gunakan safe_mode_gid. Ini akan menghadkan akses PHP hanya kepada fail yang dimiliki
oleh kumpulan yang dirun oleh pelayan web anda.
4.2.4 Sembunyikan Versi PHP
PHP telah dikeluarkan dalam beberapa versi, dan versi terkini ialah PHP 5.4.0, dan PHP
versi-versi lebih lama kebiasaannya mempunyai masalah keselamatan, jadi adalah lebih
baik jika anda dapat sembunyikan versi PHP anda bagi mengelakkan hackers mencari
kelemahan PHP dan seterusnya menceroboh sistem anda, oleh yang sedemikian, sila
pastikan expose_php = off dalam php.ini.
Salah satu lagi cara dimana PHP dapat dilihat ialah dengan memaparkan ralat. Kerana ralat
Panduan Keselamatan Web Joomla! IntermediateHalaman | 21
tersebut biasanya memaparkan maklumat-maklumat path atau seting yang mana biasanya
akan dicari oleh hackers, mesej ralat ini hanya sesuai dipaparkan semasa proses
pembangunan dan bukan semasa ia dijalankan dalam server yang akan digunakan secara
live Anda boleh matikan ciri ini dengan menetapkan seting: display_errors = Off dalam
php.ini. Ciri berguna yang anda boleh lakukan sekiranya masih perlu log error ialah dengan
mengaktifkan ciri log ke fail, caranya dengan seting php : log_errors = On dalam php.ini.
4.2.5 Menyahaktifkan fungsi-fungsi bahaya PHP
Oleh kerana PHP adalah salah satu bahasa pengaturcaraan yang digunakan sistem,
terdapat fungsi-fungsi bahaya yang anda perlu tutup atau nyahaktifkan bagi keselamatan
laman web anda. Anda perlu edit disable_functions = exec, passthru, shell_exec,
system, proc_open, popen, show_source, symlink dalam php.ini
diskfreespace,dl,escapeshellarg,escapeshellcmd,exec,fpaththru,fsocket_open,
getmypid,getmyuid,highlight_file,ignore_user_abort,ini_alter,leak,limit,lin
k,listen,pack,parse_ini_file,passthru,php_uname,phpinfo,popen,posix,posix_c
termid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid
,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,
posix_getpid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,pos
ix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,
posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyn
ame,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_termina
te,set_time_limit,shell_exec,show_source,system,tmpfile,virtual
4.2.5.1 Nyahaktif Info & Fungsi bahaya PHP
Untuk yang paranoid, Anda juga boleh menyahaktifkan PHP info, kerana didalamnya
terdapat banyak maklumat berkaitan pemasangan PHP didalamnya, anda juga boleh
masukkan nilai phpinfo kedalam maklumat disable_functions = phpinfo
4.2.5.2 Menanda Cookie dengan HTTPOnly
Nyahaktifkan Cookie yang tidak ditandakan sebagai HTTPOnly. Cookie HTTPOnly tidak
boleh dibaca oleh skrip dari klien dan oleh sebab itu menandakan cookie sebagai HTTPOnly
akan menambah satu lagi lapisan perlindungan menentang serangan Cross-site Scripting,
tetapkan dalam php.ini kod berikut.
session.cookie_httponly = True
4.2.6 Pemasangan SUHOSIN
Untuk menambah ciri keselamatan pada PHP, adalah digalakkan untuk anda memasang
SUHOSIN. Lebih dikenali sebagai Hardened PHP Project.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 22
Sebelum anda memasang SUHOSIN, anda memerlukan Kompiler, dan ianya perlu
dipasang terlebih dahulu.
yum -y install gcc gcc-c++ make automake glibc
selepas itu baru jalankan arahan berikut, compiler ini boleh dibuang selepas pemasangan
selesai dilakukan.
Sila run arahan cd /usr/local/src
Selepas ini run
wget http://download.suhosin.org/suhosin-0.9.33.tgz
wget http://download.suhosin.org/suhosin-0.9.3.tar.gz.sig
gpg --verify suhosin-0.9.33.tar.gz.sig
tar -zxvf suhosin-0.9.33.tgz
cd suhosin-0.9.33
/usr/bin/phpize
./configure
make && make install
Edit php.ini dan pastikan anda aktifkan pada
extension="suhosin.so"
kemudian, sila restart kembali Apache
service httpd restart
4.2.7 Ringkasan Peningkatan Keselamatan PHP
Secara ringkasnya anda perlu berbuat perkara dibawah ini untuk secure kan PHP
allow_url_fopen = Off ; Disable URLs for file handling functions
register_globals = Off ; Make sure this hellish fiend is dead
open_basedir = /var/www/htdocs/files ; Restrict file handling functions to
a subdirectory
safe_mode = Off ; Disable this, the next is often more practical
safe_mode_gid = On ; Enable safe mode with group check
safe_mode_exec_dir = /var/www/binaries ; Restrict execution functions to
this directory
safe_mode_allowed_env_vars = PHP_ ; Restrict access to environment
variables
max_execution_time = 30 ; Max script execution time
max_input_time = 60 ; Max time spent parsing inputs
memory_limit = 16M ; Max memory size used by one script
upload_max_filesize = 2M ; Max upload file size
post_max_size = 8M ; Max post size
display_errors = Off ; Do not show errors on screen
log_errors = On ; Log errors to log file
expose_php = Off ; Hide presence of PHP
disable_functions = exec, passthru, shell_exec, system, proc_open, popen,
show_source, symlink
enable_dl = Off
Panduan Keselamatan Web Joomla! IntermediateHalaman | 23
# Apache configuration or .htaccess
<filesmatch>
Order allow,deny
Deny from all
</filesmatch>
4.3 Melindungi MySQL
MySQL adalah pangkalan data yang digunakan oleh Joomla!, Keselamatan Pangkalan Data
MySQL adalah sangat penting, jika ia tidak dipasangkan dengan betul, si penyerang boleh
mendapatkan akses kepada username root pelayan web anda. Untuk meningkatkan
keselamatan MySQL, maka perkara dibawah perlu dilakukan.
Amaran : Saya menyarankan anda menetapkan katalaluan berlainan bagi root system
server anda dan root bagi MySQL, jika anda menggunakan katalaluan yang sama, ini
memudahkan hackers untuk menceroboh dan melakukan kerosakan kepada sistem
web anda.
4.3.1 Tujuan Pemasangan MySQL lebih selamat Set (Ubah) root password
• Buang pengguna anonymous
• Tidak benarkan root login secara jarak jauh
• Buang pangkalan data ujian dan akses kepadanya
• Muat semula jadual hak (privilege tables)
4.3.2 Mulakan MySQL Secure Installation
/usr/bin/mysql_secure_installation
Output:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH LANGKAH CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Panduan Keselamatan Web Joomla! IntermediateHalaman | 24
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above Langkahs, your MySQL
installation should now be secure.
Thanks for using MySQL!
Nota: Jika anda tidak mahu gunakan fungsi “MySQL Secure Installation” sekurang-kurangnya,
tukarkan kata laluan root.
mysqladmin -u root password [your_password_here]
## Example ##
mysqladmin -u root password myownsecrectpass
4.3.3 Bersambung ke MySQL dan hasilkan User dan DB
Untuk menguruskan pangkalan data MySQL anda perlu bersambung ke pangkalan data dan
Panduan Keselamatan Web Joomla! IntermediateHalaman | 25
memiliki kata laluan anda sendiri, topik kali ini akan membantu anda untuk berhubung
dengan pangkalan data MySQL menggunakan Nama pengguna dan kata laluan. Untuk ini
kita akan mencipta pengguna baru, kata laluan dan pangkalan data baru secara manual.
Menyambung ke pangkalan Data MySQL(localhost) dengan katalaluan
mysql -u root -p
## OR ##
mysql -h localhost -u root -p
Hasilkan Pangkalan Data, Cipta pengguna MySQL dan mengaktifkan sambungan secara Jarak
jauh ke Pangkalan Data MySQL
Contoh menggunakan parameter dibawah:
DB_NAME = webdb
USER_NAME = webdb_user
REMOTE_IP = 10.0.15.25 (Boleh tukar dengan “localhost”)
PASSWORD = password123
PERMISSIONS = ALL
## CREATE DATABASE ##
mysql> CREATE DATABASE webdb;
## CREATE USER ##
mysql> CREATE USER 'webdb_user'@'10.0.15.25' IDENTIFIED BY 'password123';
## GRANT PERMISSIONS ##
mysql> GRANT ALL ON webdb.* TO webdb_user@'10.0.15.25';
## FLUSH PRIVILEGES, Tell the server TO reload the GRANT TABLES ##
mysql> FLUSH PRIVILEGES;
4.3.4 Nyahaktif sambungan ke Pelayan MySQL dari luar
Nyahaktifkan Kawalan jarak jauh ke Pelayan Pangkalan Data MySQL –> Buka MySQL Port
(3306) pada Firewall iptables (sebagai root sekali lagi)
1. Bagi Periksa Status firewall Iptables:
service iptables status
Arahan lain bagi iptables untuk mula, henti dan mulakan semula adalah seperti dibawah.
service iptables start
service iptables stop
service iptables restart
Mulakan iptables masa mulakan server
Panduan Keselamatan Web Joomla! IntermediateHalaman | 26
chkconfig iptables on
4.3.4.1 Firewall dan Status Port MySQL
2. Masukkan kod berikut untuk tutup port 3306 MySQL:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j DROP
3. Mulakan semula Firewall Iptables:
service iptables restart
## OR ##
/etc/init.d/iptables restart
Menambah ciri/fitur keselamatan kepada Pelayan Web anda dan PHP menggunakan
perisian tambahan, untuk itu kita akan menggunakan
4.3.5 Perlindungan tambahan MySQL
Untuk menghalang MySQL daripada membuka socket rangkaian, parameter berikut perlu
ditambah pada seksyen [mysqld] didalam fail konfigurasi MySQL iaitu my.cnf :
[mysqld]
skip-networking
Salah satu penyelesaian lain ialah memaksa MySQL untuk hanya bersambung ke localhost
dengan menambah baris berikut pada seksyen [mysqld] didalam fail konfigurasi MySQL iaitu
my.cnf :
[mysqld]
bind-address=127.0.0.1
Jika sekiranya aplikasi anda mempunyai masalah yang membolehkan MySQL untuk
membaca fail yang berada dalam server anda, parameter berikut perlu ditambah pada
seksyen [mysqld] didalam fail konfigurasi MySQL iaitu my.cnf :
[mysqld]
local-infile=0
4.4 Pengenalan dan Pemasangan Mod_security
Untuk meningkatkan Keselamatan server anda boleh gunakan Aplikasi seperti Mod_security
sebagai Firewall bagi Apache, perlu diingat. Walaupun kita menggunakan Firewall dan telah
menutup sebanyak mungkin ports server, tetapi anda masih membuka Port 80 dan 443 bagi
Panduan Keselamatan Web Joomla! IntermediateHalaman | 27
kegunaan Web dan HTTPS.
ModSecurity adalah satu modul Apache untuk bertindak sebagai firewall aplikasi web, yang
membawa satu lagi lapisan keselamatan kepada laman web anda. Pada masa kini, ia
adalah sangat penting untuk mempunyai perlindungan ini supaya laman web anda akan
dilindungi daripada ancaman Internet. Berdasarkan pengalaman saya, sistem pengesan
pencerobohan secara purata mengesan 10 - 15 ancaman internet setiap pelayan setiap
hari. Ini termasuk serangan brute-force, suntikan SQL, serangan XSS dan banyak lagi.
Apache ialah pelayan web yang paling popular di dunia. Bagi mereka yang menggunakan
Apache, saya amat menyarankan agar anda mempunyai Mod_Security diaktifkan dalam
pelayan web anda. Anda tidak akan tahu apabila laman web anda menjadi sasaran, atau
mengapa ia menjadi sasaran. Perlindungan adalah penawar terbaik!
4.4.1 Pemasangan Mod_security
Saya akan menggunakan standard CentOS 6 dengan Apache dipasang menggunakan yum
dilarikan sebagai DSO. Pembolehubah yang digunakan adalah seperti di bawah
OS: CentOS 6 32bit
Apache directory: /etc/httpd
Apache configuration: /etc/httpd/conf/httpd.conf
ModSecurity configuration: /etc/httpd/conf.d/modsecurity.conf
Pasang Apache-devel
$ yum install -y httpd* atau $ yum install –y httpd-devel
$ chkconfig httpd on
$ service httpd start
Pasang pakej-pakej lain yang diperlukan untuk memasang mod_security
$ yum install pcre* libxml2* libcurl* lua* libtool openssl -y
Selepas itu, anda perlu memuatturun fail mod_security dari
http://www.modsecurity.org/download/, untuk pemasangan kali ini, kita akan menggunakan
modsecurity-apache_2.7.7.tar.gz dan anda boleh mendapatkan menggunakan
Kod berikut;
cd /usr/local/src
wget https://www.modsecurity.org/tarball/2.7.7/modsecurity-
apache_2.7.7.tar.gz
tar -xzf modsecurity-apache_2.7.7.tar.gz
Panduan Keselamatan Web Joomla! IntermediateHalaman | 28
Selepas itu
cd modsecurity-apache*
./configure
make && make install
4.4.2 Ralat pemasangan
Kalau ada error tentang APR dan APU yang mahukan anda memasukkan path atau mencari
APR dan APU
./configure --with-apxs2=/usr/local/apache/bin/apxs --with-
apr=/usr/local/src/httpd-2.2.22/srclib/apr --with-apu=/usr/local/src/httpd-
2.2.22/srclib/apr-util
Sila periksa source folder httpd tersebut untuk dapatkan kod sebenar, iaitu versi sumber
Apache (Contoh digunakan diatas menggunakan versi 2.2.22)
4.4.3 Konfigurasi dan Seting Mod_security
Bagi membolehkan mod security menjalankan tugasnya, anda perlu mengkonfigurasikannya
terlebih dahulu. Untuk itu, sila buat salinan fail konfigurasi mod_security ke direktori
konfigurasi Apache
cp modsecurity.conf-recommended /etc/httpd/conf.d/modsecurity.conf
Anda perlu mengaktifkan module mod_security dan unique_id dalam fail konfigurasi
Apache, Sila edit fail httpd.conf menggunakan kod berikut
nano /etc/httpd/conf/httpd.conf
Tambah baris dibawah
LoadModule security2_module modules/mod_security2.so
LoadModule unique_id_module modules/mod_unique_id.so
mod_unique_id.so mungkin telah ada dalam httpd.conf berdasarkan versi Apache, jika
telah ada, anda hanye perlu buangkan # yang berada dihadapannya untuk
mengaktifkannya.
Untuk memulakan perlindungan mod_security, sila edit fail konfigurasi mod_security
menggunakan kod berikut
nano /etc/httpd/conf.d/modsecurity.conf
Selepas itu cari baris berikut
SecRuleEngine DetectionOnly
Dan gantikan dengan
SecRuleEngine On
Panduan Keselamatan Web Joomla! IntermediateHalaman | 29
Dalam folder mod_sec anda, ada satu fail dinamakan Unicode.mapping, fail ini perlu disalin
ke folder httpd/conf.d, arahan seperti berikut.
cp unicode.mapping /etc/httpd/conf.d/unicode.mapping
Selepas itu anda perlu mulakan semula Apache bagi membolehkan konfigurasi sebelum ini
dapat dimuatkan dengan nilai baru, gunakan kod dibawah untuk restart Apache
service httpd restart
Tahniah, Anda telah Berjaya memasang mod security, maka tiba masanya untuk kita
mendapatkan rule set, atau peraturan-peraturan asas terkini berkaitan mod security, anda
boleh dapatkan peraturan asas Mod Security dari http://modsecurity.org/
Anda boleh memuat turun versi terkini mod_security atau
Peraturan Asas (Core Rules) terkini dari laman web ini.
Klik pada pautan yang disediakan atau, anda boleh gunakan
arahan dibawah sebagai contoh. Selepas itu anda boleh ekstrak
core rules tersebut ke /etc/httpd/conf/crs
Muat turun mod_security core rules set
wget http://downloads.sourceforge.net/project/mod-security/modsecurity-
crs/0-CURRENT/modsecurity-crs_2.2.5.tar.gz?r=http%3A%2F%2Fsourceforge.net
%2Fprojects%2Fmod-security%2Ffiles%2Fmodsecurity-crs%2F0-CURRENT
%2F&ts=1333490692&use_mirror=jaist
Selepas mengekstrak fail tersebut masukkan kod berikut kedalam httpd.conf
# Mod Security
<IfModule security2_module>
Include /etc/httpd/conf/crs/modsecurity_crs_10_config.conf
Include /etc/httpd/conf/crs/activated_rules/*.conf
Include /etc/httpd/conf/crs/base_rules/*.conf
Include /etc/httpd/conf/crs/optional_rules/*.conf
Include /etc/httpd/conf/crs/slr_rules/*.conf
</IfModule>
Selepas itu sila mulakan kembali Apache anda.
Anda boleh menguji mod_security dengan melaksanakan arahan berikut
tail –f /home/shaifful/logs/error_log
Sekiranya semasa menggunakan Joomla, terdapat banyak masalah dengan mod_security
contohnya anda mendapat halaman page 403 atau tiba-tiba halaman menjadi kosong, dan
anda boleh periksa dengan melihat log error_log anda, anda boleh hasilkan satu fail
Panduan Keselamatan Web Joomla! IntermediateHalaman | 30
whitelist, untuk override atau bypass mod_security menggunakan ID setiap rules atau
peraturan. Contoh error adalah seperti dibawah.
[Sat Apr 07 07:03:32 2012] [error] [client 180.74.108.208] ModSecurity:
Access denied with code 403 (phase 2). Pattern match "(?i:(?:
b(?:(?:s(?:ys.(?:user_(?:(?:t(?:ab(?:_column|le)|rigger)|object|
view)s|c(?:onstraints|atalog))|all_tables|tab)|electb.{0,40
}b(?:substring|users?|ascii))|m(?:sys(?:(?:queri|ac)e|relationship|
column|object)s|ysql.(db|user))|c(?:onstraint ..." at ARGS_
NAMES:table_name. [file
"/etc/httpd/conf/crs/base_rules/modsecurity_crs_41_sql_injection_attacks.co
nf"] [line "116"] [id "950007"] [rev "2.2.4"] [msg "Blind SQL Injection
Attack"] [data "table_name"] [severity "CRITICAL"] [tag
"WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"]
[tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] [hostname
"www.xxxxx.edu.my"] [uri "/administrator/in
dex.php"] [unique_id "T392RAEJBekAAEr2BEgAAAAD"]
Dalam error_log diatas anda boleh dapatkan error id pada bahagian
[id "950007"]
Yang akan digunakan untuk menyelesaikan masalah error ini, apa yang anda harus lakukan
ialah dengan menghasilkan satu fail untuk bypass mod_security, untuk itu
Masukkan kod berikut kedalam kod sebelum ini
Include /etc/httpd/conf/crs/bypass_mod_by_id.conf
Seperti dibawah
<IfModule security2_module>
Include /etc/httpd/conf/crs/modsecurity_crs_10_config.conf
Include /etc/httpd/conf/crs/activated_rules/*.conf
Include /etc/httpd/conf/crs/base_rules/*.conf
Include /etc/httpd/conf/crs/optional_rules/*.conf
Include /etc/httpd/conf/crs/slr_rules/*.conf
Include /etc/httpd/conf/crs/bypass_mod_by_id.conf
</IfModule>
Selepas itu hasilkan satu fail baru didalam folder /etc/httpd/conf/crs/ iaitu fail
bypass_mod_security_by_id.conf dengan menggunakan arahan
nano /etc/httpd/conf/crs/bypass_mod_by_id.conf
dan masukkan kod berikut
<LocationMatch "/administrator/index.php">
SecRuleRemoveById 950007
</LocationMatch>
Masukkan ID yang anda dapati sebelum ini seperti berikut
SecRuleRemoveById 950007
Anda boleh masukkan ID lain seperti berikut, sekiranya masih ada lagi ID yang perlu
dilangkau bagi menggunakan Joomla anda.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 31
Contoh :
SecRuleRemoveById 950007 930097 700900
Pastikan LocationMatch adalah mengikut lokasi dan nama fail yang bermasalah. Contohnya
<LocationMatch "/administrator/index.php">
Dan sila restart balik webserver Apache dengan arahan berikut:
service httpd restart
Semoga anda dapat menggunakan mod_security dengan sebaiknya.
p/s sebelum terlupa, untuk laman web berlainan yang hendak dibypass, sila gunakan
<LocationMatch "/URL_PAGE_YANG_HENDAK_DIBYPASS">
SecRuleRemoveById 950007
</LocationMatch>
4.5 Pengenalan dan Pemasangan suPHP
suPHP ialah satu cara untuk menambahkan ciri keselamatan bagi system laman web yang
ada pada persekitarannya Multi user atau Virtualhost. Iaitu, dengan menggunakan suPHP,
hanya user yang dibenarkan sahaja boleh RUN skrip dalam folder user tersebut sahaja. Iaitu
hanya fail yang dimiliki oleh user tersebut sahaja yang boleh dirun dalam folder tersebut.
suPHP boleh membantu persekitaran Multiuser kerana ia pengguna tersebut sendiri
mempunyai akses dan kawalan kepada fail-fail yang dimilikinya.
4.5.1 Pemasangan suPHP
Pembolehubah yang akan digunakan dalam proses ini adalah seperti berikut.
Server: CentOS 6.2 32bit
Server IP: 199.XXX.XXX.XXX
User: shaifful
Web directory: /home/shaifful/public_html
Website: http://www.test.apasaja.biz/
Untuk mulakan pemasangan suPHP, lakukan seperti mana arahan dibawah, kita akan
muatturun mod_suphp dari web dan akan memasangnya kedalam sistem web.
cd /usr/local/src
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/i386/dag/RPMS/mod_suphp-
0.7.1-1.el6.rf.i686.rpm
rpm –Uhv mod_suphp-0.7.1-1.el6.rf.i686.rpm
Panduan Keselamatan Web Joomla! IntermediateHalaman | 32
Untuk 64bit, gantikan wget diatas kepada seperti berikut.
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/mod_suphp-
0.7.1-1.el6.rf.x86_64.rpm
Pasang Apache, php dan Kompiler, jika pemasangan ini telah dibuat sebelum ini, anda
boleh tinggalkan bahagian ini/langkau bahagian ini.
yum install -y httpd* php gcc-c++
Selepas ini, kita akan memuat turun fail suphp dari web suphp dan akan dikompilkan, sila
pastikan versi yang anda muat turun sebelum ini adalah versi yang sama dengan versi fail
yang akan anda pasang sebentar lagi.
cd /usr/local/src
wget http://www.suphp.org/download/suphp-0.7.1.tar.gz
tar -xzf suphp-0.7.1.tar.gz
cd suphp-*
Untuk langkah seterusnya, anda perlu mendapatkan lokasi bagi apr-1-config, jadi. Anda
gunakan arahan berikut.
which apr-1-config
/usr/bin/apr-1-config  Lokasi bagi apr-1-config
Selepas itu, kita akan memasang/compile suphp menggunakan lokasi pembolehubah
apr-1-config dengan menggunakan arahan seperti dibawah.
./configure --with-apr=/usr/bin/apr-1-config --with-setid-mode=owner
make
make install
4.5.2 Konfigurasi suPHP
Setelah proses diatas selesai, kita akan mencipta user baru berserta dengan folder baru dan
fail lognya yang tersendiri. Laksanakan arahan seperti dibawah.
useradd -m shaifful
mkdir /home/shaifful/public_html
mkdir /home/shaifful/logs
touch /home/shaifful/logs/error_log
touch /home/shaifful/logs/access_log
Selepas itu, cipta fail konfigurasi dalam Apache untuk hasilkan VirtualHost dibawah user
shaifful. Kita ciptakan virtual host dalam direktori Apache conf.d:
nano /etc/httpd/conf.d/vhost.conf
Dan tambah baris berikut:
NameVirtualHost *:80
Panduan Keselamatan Web Joomla! IntermediateHalaman | 33
<VirtualHost *:80>
ServerName test.apasaja.biz
ServerAlias www.test.apasaja.biz
ServerAdmin webmaster@test.apasaja.biz
DocumentRoot /home/shaifful/public_html
ErrorLog /home/shaifful/logs/error_log
CustomLog /home/shaifful/logs/access_log combined
suPHP_Engine on
#suPHP_UserGroup shaifful shaifful
AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml
suPHP_AddHandler x-httpd-php
</VirtualHost>
Ubah PHP handler dari mod_php kepada mod_suphp. Kami perlukan untuk mengedit fail
konfigurasi mod_suphp di /etc/httpd/conf.d/suphp.conf dan buangkan # pada baris
berikut:
LoadModule suphp_module modules/mod_suphp.so
Dan buangkan fail konfigurasi mod_php:
rm -Rf /etc/httpd/conf.d/php.conf
Pastikan fail konfigurasi suPHP terletak di /etc/suphp.conf memiliki nilai seperti dibawah:
[global]
logfile=/var/log/httpd/suphp_log
loglevel=info
webserver_user=apache
docroot=/var/www/html:${HOME}/public_html
env_path=/bin:/usr/bin
umask=0022
min_uid=500
min_gid=500
; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
;Check whether script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
[handlers]
;Handler for php-scripts
x-httpd-php="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi=execute:!self
suPHP menghasilkan ralat kerana ia sedang mencari suphp.conf dibawah direktori
/usr/local/etc. Jadi kita kena hasilkan pautan symbolic kepada /etc/suphp.conf yang
sebenarnya:
ln -s /etc/suphp.conf /usr/local/etc/suphp.conf
Panduan Keselamatan Web Joomla! IntermediateHalaman | 34
4.5.3 Pemilikan dan Kebenaran
Kita juga perlu baiki kebenaran dan pemilikan bagi pengguna shaifful:
chmod 755 /home/shaifful
chown shaifful.shaifful /home/shaifful/public_html -Rf
find /home/shaifful -type d -exec chmod 755 {} ;
find /home/shaifful -type f -exec chmod 644 {} ;
Sekarang konfigurasi suPHP sudah selesai, kita perlu mulakan semula perkhidmatan
Apache dan juga mempastikan ianya dimulakan bersama server apabila ia dimulakan
semula.:
chkconfig httpd on
service httpd restart
Apabila server dimulakan semula, anda telah selesai membuat konfigurasi. User shaifful
tersebut boleh memuat naik laman web anda ke direktori yang telah anda hasilkan sebelum
ini di /home/shaifful/public_html. SuPHP akan benarkan anda untuk jalankan fail yang
hanya dimiliki oleh pengguna tersebut. Jadi langkah membaiki kebenaran dan pemilikan
sebelum ini sangat penting untuk membaikpulih kebenaran dan pemilikan fail, atau jika
tidak. Pelayan web akan memaparkan “Internal Server Error” pada pelayar web anda.
Lokasi bagi semua fail yang berkaitan dengan suPHP:
SuPHP log – /var/log/httpd/suphp_log
SuPHP config – /etc/suphp.conf
SuPHP module config – /etc/httpd/conf.d/suphp.conf
SuPHP module – /etc/httpd/modules/mod_suphp.so
Apache error log – /etc/httpd/logs/error_log
4.5.4 Ralat / Masalah (jika ada)
Jika anda melakukan restart dan Apache tidak dapat direstart kena masalah directory not
found, jangan bimbang. Ini adalah masalah SELinux, dan cara untuk disablekannya ialah
dengan menggunakan arahan dibawah melalui terminal
setsebool -P httpd_enable_homedirs 1
Jika selepas anda restart balik PC/Server anda, dan anda dapati semua folder tidak boleh
ditulis, adalah berkemungkinan SELinux telah diaktifkan kembali, untuk mengatasi masalah
tersebut sila gunakan kod berikut pada public_html anda.
chcon -R -t httpd_sys_content_t /home/user anda/public_html
Atau mana-mana folder yang anda ingin guna.
Untuk dapatkan status SELinux, laksanakan arahan berikut
getenforce
Panduan Keselamatan Web Joomla! IntermediateHalaman | 35
Jika statusnya ialah enforcing
Ini bermakna SELinux adalah aktif
Jika anda ingin mengaktikannya, sila laksanakan arahan
setenforce 1
Untuk menyahaktifkannya
setenforce 0
Dan sila restart kembali Apache melalui arahan
service httpd restart
InsyaAllah, akan ok kembali.
p/s jika ada ralat tidak dapat gunakan sendmail, runkan arahan berikut
setsebool -P httpd_can_sendmail 1
4.6 Mengatasi DOS menggunakan mod_evasive
4.6.1 Pengenalan DOS
Tahukah anda apa itu DOS? DOS dengan nama lainnya denial of service, adalah salah satu
cara yang digunakan oleh penjenayah siber bagi menghalang atau mematikan
perkhidmatan pelayan web anda. DDOS ialah Distributed Denial of Service iaitu serangan
DOS yang dilakukan dari pelbagai lokasi, mungkin menggunakan komputer yang telah
dijadikan Zombie. Untuk membantu menghalang DOS/DDOS ini, kita akan menggunakan
satu modul Apache yang dipanggil mod_evasive. Mod evasive ini kemudiannya akan kita
gabungkan dengan penggunaan CSF Firewall untuk blok IP yang menDDOS pelayan web
kita.
4.6.2 Untuk memasang mod_evasive, ikuti langkah dibawah:
Menggunakan Konsol SSH
cd /usr/local/src
wget http://www.zdziarski.com/blog/wp-
content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
tar -xvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
apxs -cia mod_evasive20.c
Pastikan dalam httpd.conf
Panduan Keselamatan Web Joomla! IntermediateHalaman | 36
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
Selepas itu, sila tambah kod berikut
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
DOSEmailNotify someone@somewhere.com
</IfModule>
Dan mulakan kembali pelayan web anda
service httpd restart
Selepas ini, insyaAllah laman web anda akan dapat menampung DOS secara kecil2an ini,
akan tetapi ini semua hanyalah langkah permulaan. Tetapi sekiranya IP anda hendak
diwhitelist dari apa-apa tujuan yang anda lakukan, masukkan dalam konfigurasi httpd.conf
DOSWhitelist 127.0.0.1
atau kalau menggunakan julat IP
DOSWhitelist 127.0.0.*
Untuk menyekat alamat IP penyerang menggunakan teknik DOS ini, kita akan
menggabungkan mod_evasive dengan CSF Firewall.
Untuk menggabungkan mod_evasive dan CSF, kita akan gunakan arahan dari mod_evasive
yang akan trigger CSF untuk BAN serangan berterusan. Untuk itu, sila masukkan kod :
DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600"
ke arahan mod_evasive seperti dibawah (dalam httpd.conf)
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
DOSEmailNotify someone@somewhere.com
DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600"
</IfModule>
Dan selepas itu, kitakan mengedit arahan sudo, jika anda biasa menggunakan vi, sila
laksanakan arahan
Panduan Keselamatan Web Joomla! IntermediateHalaman | 37
visudo
atau jika anda selesa menggunakan nano, laksanakan arahan
EDITOR=nano visudo
Apa yang anda harus lakukan selepas ini ialah untuk masukkan baris dibawah ke fail visudo
dan simpan.
User_Alias APACHE = apache
Cmnd_Alias FIREWALL = /sbin/iptables, /usr/sbin/csf,
/sbin/ifconfig, /sbin/route
APACHE ALL = (ALL) NOPASSWD: FIREWALL
Sila mulakan semula pelayan web anda.
4.8 Penggunaan mod_slowloris
SLOWLORIS ialah satu tools yang dihasilkan oleh hackers untuk menjatuhkan laman web
berasaskan Apache dengan menggunakan bandwith yang minima dan ia juga mengganggu
perkhidmatan lain.
Slowloris cuba untuk mendapatkan sebanyak mana sambungan ke laman web, membuka
dan menahannya selama mungkin. Ia mencapai matlamatnya dengan melakukan
sambungan ke pelayan web yang disasarkan dan menghantar sebahagian permintaan,
secara tetap ia akan menghantar HTTP Headers, menambahnya, tetapi tidak pernah
lengkapkan (permintaan tersebut). Pelayan web yang terkesan dengan sambungan ini akan
membuka dan memenuhkan pool sambungan maksima bagi sambungan bersama, yang
akhirnya menghalang cubaan sambungan tambahan dari klien yang sah.
4.7 Penggunaan SSL (Secure Socket Layer)
Untuk melindungi data laman web anda sekiranya anda menggunakan web anda untuk host
data-data sensitive, adalah amat disarankan anda menggunakan SSL atau HTTPS bagi
membolehkan data-data yang dihantar atau berhubung.
Untuk langkah ini, anda boleh mendapatkan Sijil SSL dari Laman Web seperti
Godaddy.com, Comodo.com dan lain-lain pembekal SSL yang bertauliah, atau anda juga
boleh menghasilkannya sendiri. TETAPI Sijil SSL buatan sendiri ini tidak SAH digunakan
untuk transaksi formal atau tidak diSAHkan.
4.8 Meningkatkan tahap keselamatan pelayan SSH
Pelayan SSH merupakan……………..
4.8.1 Edit konfigurasi SSH
Langkah 1: Pertama sekali kita mesti cipta pengguna biasa, oleh kerana log masuk root
sebaiknya perlu dihalang dari melakukan akses secara terus ke SSH:
Panduan Keselamatan Web Joomla! IntermediateHalaman | 38
adduser admin && passwd admin
Langkah 2: Backup sshd_config semasa
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Langkah 3: Cipta fail sshd_config baru
nano -w /etc/ssh/sshd_config
Langkah 3.1: Tampalkan kod ini kedalan fail baru
## Amat disarankan supaya port ini diubah, cth 2488
Port 22
## Set alamat mendengar pada pelayan. default=0.0.0.0
#ListenAddress 192.168.0.1
## Kuatkuasakan Protokol SSH 2 sahaja
Protocol 2
## Nyahaktifkan log masuk root secara terus, dimana anda perlu log masuk
## dengan menggunakan nama pengguna admin, kemudian "su -" anda kepada root
PermitRootLogin no
##
UsePrivilegeSeparation yes
##
AllowTcpForwarding no
## Nyahaktifkan X11Forwarding
X11Forwarding no
## Periksa pengguna pada direktori home mereka dan rhosts, yang mereka
bukannya world-writable
StrictModes yes
## Opsyen IgnoreRhosts menyatakan sama ada fail rhosts atau shostsperlu
digunakan untuk pengesahan
IgnoreRhosts yes
##
HostbasedAuthentication no
## RhostsAuthentication menyatakan sama ada sshd boleh cuba gunakan
autentikasi berdasarkan rhosts.
RhostsRSAAuthentication no
## Letakkan banner log masuk yang pengguna boleh dilihat
Banner /etc/motd
## Aktifkan / nyahaktifkan pelayan sftp
#Subsystem sftp /usr/libexec/openssh/sftp-server
## Tambah pengguna yang dibenarkan log masuk
AllowUsers admin
Control + X untuk Simpan
Langkah 4: Sahkan tetapan dalam sshd_config anda buat
nano -w /etc/ssh/sshd_config
PERLU DIINGATKAN ANDA HARUS MENUKAR PORT ASAL KEPADA PORT LAIN. ( Contoh
Port 2488 )
Langkah 5.1: Tambah teks ke fail Sepanduk (/etc/motd)
nano -w /etc/motd
Panduan Keselamatan Web Joomla! IntermediateHalaman | 39
Langkah 5.2: Tambah teks ini atau sesuatu yang anda pilih sendiri
Private system, please log off.
Langkah 6: Mulakan semula SSHD Daemon
service sshd restart
4.9 Pemasangan Firewall
Selain firewall IP tables yang secara default berada selepas pemasangan, adalah
disarankan agar anda memasang perisian Firewall lain seperti contoh CSF atau APF, tetapi
buat kali ini kita hanya pasang CSF, Secara ringkasnya Firewall ialah program atau alat
perkakasan yang menapis (filters) maklumat-maklumat yang dipindahkan diantara
komputer. Secara umumnya, firewall dicipta untuk melindungi satu atau lebih komputer
(komputer anda) dari komputer-komputer lain (kebiasaannya dari internet) bagi
mengelakkan data-data bahaya atau serangan si penggodam dari sampai ke pelayan web
anda. Kita akan gunakan firewall berasaskan perisian iaitu CSF didalam buku ini.
4.9.1 Pemasangan CSF
4.9.1.1 Pra Pemasangan
yum install -y perl-libwww-perl
4.9.1.2 Pemasangan CSF
Langkah 1: Muat turun, unpack, pasang CSF dari sumber.
cd /usr/local/src
wget http://www.configserver.com/free/csf.tgz
tar -zxvf csf.tgz
cd csf
./install.sh
Kalau ada error mengenai Libww-Perl, Masukkan kod berikut
yum install –y perl-libwww-perl
Panduan Keselamatan Web Joomla! IntermediateHalaman | 40
Langkah 1.1: Bersihkan fail-fail pemasangan
rm -Rf /usr/local/src/csf* && cd
Langkah 2: Backup konfigurasi asal CS
cp /etc/csf/csf.conf /etc/csf/csf.conf.bak
Langkah 3: Edit konfigurasi CSF
nano -w /etc/csf/csf.conf
4.9.2 Konfigurasi CSF dan Webmin
Berikut ialah konfigurasi CSF jika menggunakan webmin
Jika anda ada memasangnya di Webmin, anda boleh klik pada menu Webmin Webmin
Configuration, dan pilih Webmin modules
Selepas itu pilih install from local /etc/csf/csfwebmin.tgz dan klik Install Module
Panduan Keselamatan Web Joomla! IntermediateHalaman | 41
Langkah seterusnya, Klik pada ConfigServer Security & Firewall, dan Klik pada Firewall
Configuration untuk enablekan CSF.
Pastikan pemalar berikut diubah,
TESTING = 0
TCP_IN = Port yang hanya anda gunakan, jangan lupa masukkan port 10000 untuk
webmin
Anda juga perlu pastikan port untuk SSH ditukar untuk mengelakkannya dicerobohi.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 42
Selepas itu klik Change, dan restart CSF
4.9.3 Ralat dan penyelesaian masalah
Jika anda menghadapi masalah selepas permulaan semula CSF yang berkaitan perl-timer,
sila laksanakan arahan
yum -y install perl-Time-HiRes
4.10 Meningkatkan Keselamatan Centos (Pengenalan)
Kenapa Pelayan Web Centos perlu ditingkatkan keselamatannya pada peringkat ini dan
bukan peringkat awal. Rasionalnya ialah, kita tidak mahu pemasangan pelayan web
Apache, PHP dan MySQL terganggu disebabkan server sudah dipertingkatkan
keselamatannya dan menyukarkan konfigurasi sistem lain.
4.10.1 Linux Environment Security (LES)
Linux Environment Security dimaksudkan sebagai cara yang cepat & mudah bagi
meningkatkan persekitaran Redhat / RPM berasaskan (iaitu: turbo linux, linux terbuka). Ia
melakukannya dengan menguatkuasakan keizinan root-hanya pada sistem binari (binari
yang tidak mempunyai hak untuk dilaksanakan pengguna biasa), menguatkuasakan laluan
hanya root traversal pada laluan sistem, yang menguatkuasakan pakej rpm yang penting
(iaitu: coreutils), dan menguatkuasakan skrip profil shell.
*WARNING* Mungkin ada masalah jika anda gunakan CPanel, LXadmin
Langkah 1: Muat turun dan Pasang LES
cd /usr/local/src
wget http://www.r-fx.ca/downloads/les-current.tar.gz
tar -zxvf les-current.tar.gz
cd les-0.*
./install.sh
rm -Rf /usr/local/src/les*
Panduan Keselamatan Web Joomla! IntermediateHalaman | 43
Langkah 2: Lihat opsyen yang ada
/usr/local/sbin/les
Langkah 3: Jika anda tidak pasti, aktifkan kesemua fungsi (-ea ~ enable all) seperti dibawah
/usr/local/sbin/les -ea
Options:
-da | --disable-all Disable all options
-ea | --enable-all Enable all options
-sb | --secure-bin Set root only execution of critical binaries
-sp | --secure-path Set root only traversal of critical paths
-sr | --secure-rpmpkg Set immutable on core rpm package binaries
-so | --secure-prof Set immutable on interactive login profiles
-sd | --secure-devel Set access to devel utils for group deva & root
4.10.2 Rootkit Hunter (RKHunter)
Nama Produk: RKHunter
Versi: 1.3.6
Laman Web: http://www.rootkit.nl
Keterangan: rkhunter (Rootkit Hunter) alah alatan berasaskan Unix yang akan mengimbas
pelayan bagi rootkits, backdoors dan local exploits yang mungkin boleh terjadi. Ia
melakukannya dengan membandingkan MD5 hash bagi fail-fail penting dengan pangkalan
data online yang diketahui baik dan tiada masalah, membuat carian bagi direktori default
(dari rootkits), kebenaran yang salah, fail tersembunyi, baris-baris yang disyaki dalam modul
kernel dan juga ujian istimewa bagi Linux dan FreeBSD.
Langkah 1: Muat turun, Pasang dan Kemaskini
cd /usr/local/src
wget http://dfn.dl.sourceforge.net/sourceforge/rkhunter/rkhunter-
1.3.8.tar.gz
wget http://dfn.dl.sourceforge.net/sourceforge/rkhunter/rkhunter-
1.3.8.tar.gz.sha1.txt
sha1sum -c rkhunter-1.3.8.tar.gz.sha1.txt
tar -zxvf rkhunter-1.3.8.tar.gz
cd rkhunter-1.3.8
./installer.sh --layout default --install
/usr/local/bin/rkhunter --update
/usr/local/bin/rkhunter --propupd
rm -Rf /usr/local/src/rkhunter*
cd
Langkah 2: Tambah cron job harian
Langkah 2.1: Ciptakan run-file
Panduan Keselamatan Web Joomla! IntermediateHalaman | 44
nano -w /etc/cron.daily/rkhunter.sh
Langkah 2.2: Tambah teks ni ke rkhunter.sh
#!/bin/sh
(
/usr/local/bin/rkhunter --versioncheck
/usr/local/bin/rkhunter --update
/usr/local/bin/rkhunter --cronjob --report-warnings-only
) | /bin/mail -s 'rkhunter Daily Run (PutYourServerNameHere)'
your@email.here
Jangan Lupa untuk Ubah (PutYourServerNameHere) Dan your@email.here
Langkah 2.3: Chmod rkhunter.sh kepada root sahaja
chmod 700 /etc/cron.daily/rkhunter.sh
4.10.3 OSSEC IDS
OSSEC adalah sistem pengesanan berasaskan sumber terbuka bagi sistem pengesanan
pencerobohan. Ia menjalankan analisis log, pemeriksaan integriti, registry Windows
pemantauan, pengesanan rootkit, masa berasaskan amaran dan respons yang aktif. Ia
berjalan di kebanyakan sistem operasi, termasuk Linux, OpenBSD, FreeBSD, Mac OS,
Solaris dan Windows. Ianya ditulis oleh Daniel B. Cid dan boleh diperolehi umum pada
tahun 2004. OSSEC akan memeriksa sistem anda dan menghantar emel jika ia merasakan
ada sesuatu yang ganjil atau meragukan.
Anda akan terima emel dari level 1~10, pastikan buat emel khusus untuk OSSEC, jika anda
tidak mahu emel anda penuh dengan laporan
Langkah 1: Pasangkan OSSEC dari Sumber
cd /usr/local/src
wget http://www.ossec.net/files/ossec-hids-2.4.1.tar.gz
tar -zxf ossec-hids-2.4.1.tar.gz
cd ossec-hids-2.4.1
./install.sh
Langkah 2: Sekarang konfigurasi, pilihan saya yang bertanda dengan teks berwarna
MERAH
./install.sh
Choice 1:
(en/br/cn/de/el/es/fr/it/jp/pl/ru/sr/tr) [en]: <-- Enter
Choice 2:
1- What kind of installation do you want (server, agent, local or help)?
<-- Local
Choice 3:
- Choose where to install the OSSEC HIDS [/var/ossec]: <-- Enter
Choice 4:
Panduan Keselamatan Web Joomla! IntermediateHalaman | 45
3.1- Do you want e-mail notification? (y/n) [y]: <-- Enter
Choice 4.1:
- What’s your e-mail address? <-- Fill in the email you want the alerts to
Choice 4.2: Installer will try to find you smtp server that belongs to your
email. Choose NO and use localhost if you have sendmail running on your
server.
- Do you want to use it? (y/n) [n]: <-- Press Y
Choice 4.3:
- What’s your SMTP server ip/host? <-- Choose whats recommended, if it
doesnt work, you need to change config later on.
Choice 5:
3.2- Do you want to run the integrity check daemon? (y/n) [y]: <-- Enter
Choice 6:
3.3- Do you want to run the rootkit detection engine? (y/n) [y]: <-- Enter
Choice 7:
- Do you want to enable active response? (y/n) [y]: <-- Press Enter
Choice 8:
- Do you want to enable the firewall-drop response? (y/n) [y]: <-- Press
Enter
Choice 9: Choose Yes if you want to add more IPs to the whitelist. Else NO
to continue
- Do you want to add more IPs to the white list? (y/n)? [y]: <-- Press Y,
Add your client ip, just in case.
Langkah 3: Pemasang untuk jadikan OSSEC dimulakan bersama boot.
Langkah 3.1: Untuk mulakan OSSEC
/var/ossec/bin/ossec-control start
Langkah 3.2: Untuk hentikan OSSEC
/var/ossec/bin/ossec-control stop
Langkah 4: Untuk seting selanjutnya, edit fail konfigurasi
nano -w /var/ossec/etc/ossec.conf
Konfigurasi Pilihan: Tambah baris ni dalam /var/ossec/etc/ossec.conf untuk elakkan anda
dapat emel tidak berapa penting dari OSSEC
Konfigurasikan OSSEC untuk CSF Firewall frontend
Langkah 1: Buka fail konfig OSSEC untuk diubah
nano -w /var/ossec/etc/ossec.conf
Langkah 1.1: Cari “Files/directories to ignore”, dan tambah baris baru seperti dibawah
<ignore>/etc/prelink.cache</ignore>
<ignore>/etc/csf/csf.temppids</ignore>
<ignore>/etc/csf/csf.tempban</ignore>
<ignore>/etc/csf/csf.tempint</ignore>
<ignore>/etc/csf/stats/iptables_log</ignore>
<ignore>/etc/csf/csf.dshield</ignore>
<ignore>/etc/csf/csf.tempip</ignore>
<ignore>/etc/csf/csf.deny</ignore>
Panduan Keselamatan Web Joomla! IntermediateHalaman | 46
<ignore>/etc/csf/csf.tempfiles</ignore>
<ignore>/etc/csf/csf.spamhaus</ignore>
Yang kat bawah ni pilihan tak wajib, kalau ada orang cuba masukkan IP mereka
<ignore>/etc/csf/csf.allow</ignore>
Langkah 2: Restart OSSEC apabila selesai membuat ubahsuai
/var/ossec/bin/ossec-control restart
Kalau ada error
OSSEC analysisd: Testing rules failed. Configuration error. Exiting.
Sila Runkan
# ln -s /var/ossec/bin/ossec-logtest /var/ossec/ossec-logtest
Anda juga boleh memasang OSSEC mengguna Repo Atomic., Laksanakan arahan berikut
dalam terminal anda.
yum install ossec-hids ossec-hids-server
Dan Edit konfigurasi seperti diatas.
4.10.4 Antivirus ClamAV
Pasang ClamAv untuk dapatkan Pengesanan Antivirus setiap hari
Pasangkan Clam Antivirus dengan Arahan berikut
yum install –y clamav clamd
4.8.4.1 Konfigurasi Clamav-Cron (auto scan)
Selepas itu, anda perlu gunakan skrip berikut untuk buatkan skrip autoscan bagi mengimbas
pelayan web anda pada setiap hari pada waktu yang ditetapkan.
Sila buka
#!/bin/bash
#
# clamav-cron v. 0.7 - Copyright © 2009, Stefano Stagnaro
# This is Free Software released under the GNU GPL license version 3
#============================================#
# User configuration section #
Panduan Keselamatan Web Joomla! IntermediateHalaman | 47
#============================================#
# Notification e-mail sender (could be fake):
CV_MAILFROM="shaifful@joomla.my"
# Notification e-mail recipient:
CV_MAILTO="root@joomla.my"
# Notification e-mail secondary recipients:
#CV_MAILTO_CC="www@xyz.net, www@abc.net"
# Notification e-mail subject:
CV_SUBJECT="Laporan Imbasan AV - ABCD"
# Log file name and its path:
CV_LOGFILE="/var/log/clamav/clamav-cron.log"
#============================================#
CV_TARGET="$1"
CV_VERSION="0.7"
if [ -e $CV_LOGFILE ]
then
/bin/rm $CV_LOGFILE
fi
if [ -z "$1" ]
then
CV_TARGET="$HOME"
fi
#To be read on stdout (and root mail):
echo -e clamav-cron v. $CV_VERSION - Copyright 2012, Stefano Stagnaro'n'
#To be read on logfile (sent via sendmail):
echo -e $CV_SUBJECT - $(date) 'n' >> $CV_LOGFILE
echo -e Script: clamav-cron v. $CV_VERSION - Copyright 2012, Stefano
Stagnaro $
echo -e Scanned: $CV_TARGET on $HOSTNAME'n' >> $CV_LOGFILE
/usr/bin/freshclam --log=$CV_LOGFILE --user $USER --no-warnings
#To be read on stdout (and root mail):
echo -e '------------------------------------n'
/usr/bin/clamscan --infected --log=$CV_LOGFILE --recursive $CV_TARGET
CLAMSCAN=$?
if [ "$CLAMSCAN" -eq "1" ]
then
CV_SUBJECT="[VIRUS!] "$CV_SUBJECT
elif [ "$CLAMSCAN" -gt "1" ]
then
CV_SUBJECT="[ERROR] "$CV_SUBJECT
fi
/bin/mail -s "$CV_SUBJECT" $CV_MAILTO $CV_MAILFROM < $CV_LOGFILE
sila ubah alamat emel kepada alamat emel anda, untuk berbuat sedemikian, laksanakan
arahan
nano /usr/local/bin/clamav-cron
dan paste kod tersebut, selepas itu save dengan Ctrl+X dan klik Y dan Enter
Selepas itu run
chmod 755 /usr/local/bin/clamav-cron
Panduan Keselamatan Web Joomla! IntermediateHalaman | 48
Anda hanya perlu masukkan alamat emel anda dan tetapkan Cron menggunakan Webmin
Sila pilih Scheduled Cron Jobs
Klik Create a new scheduled cron job untuk buat cron job baru.
Masukkan
details seperti diatas dan klik
Selepas itu untuk menguji Skrip tersebut, klik pada command cron job yang kita hasikan
Panduan Keselamatan Web Joomla! IntermediateHalaman | 49
Selepas itu klik pada Run Now
Hasilnya adalah seperti disebelah.
Sekiranya ada ralat seperti Cannot Append etc etc.. berkemungkinan anda menghadapi
masalah dengan SELinux.
Cara penyelesaian termudah iailah untuk hasilkan cron yang akan disable SELinux buat
sementara dan aktifkan semula selepas proses scan dilakukan.
4.11 Linux Malware Detectors
Penggunaan Linux Malware Detect ni sangat digalakkan, berdasarkan ujian yang telah saya
lakukan, kadar pengesanannya agak tinggi dan Berjaya meneutralkan Skrip Shell seperti
c99, r57 dan b374k serta lain-lain lagi.
Cara untuk memasang Malware Detector adalah seperti berikut
Seperti biasa, anda perlu log masuk ke SSH melalui putty atau mana-mana konsol dan
melakukan arahan-arahan berikut dibawah :
Panduan Keselamatan Web Joomla! IntermediateHalaman | 50
cd /usr/local/src
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -zxvf maldetect-current.tar.gz
cd maldetect-*
./install.sh
Hasilnya adalah seperti berikut :
installation completed to /usr/local/maldetect
config file: /usr/local/maldetect/conf.maldet
exec file: /usr/local/maldetect/maldet
exec link: /usr/local/sbin/maldet
exec link: /usr/local/sbin/lmd
cron.daily: /etc/cron.daily/maldet
Untuk mengedit fail konfigurasi Maldet, sila berikan arahan berikut :
nano -w /usr/local/maldetect/conf.maldet
Anda boleh mengubah konfigurasi berikut,
email_alert
Sila “on” kan disini untuk menerima emel sekiranya malware dikesan.
email_addr
Masukkan alamat emel dimana pemberitahuan akan dihantar
quar_hits
Bahagian ini memberitahu LMD bahwa ia sepatutnya mengalihkan kandungan malware
kelaluan Kuarantin dan membuang semua kebenaran yang ada. Kesemua fail boleh
dikembalikan dan dipulihkan termasuk kepada laluan asal dan kebenarannya,
menggunakan arahan –restore, sekiranya anda tersalah atau false positive.
quar_clean
Ini memberitahu LMD yang is sepatutnya Cuba untuk bersihkan Malware yang mempunya
peraturan pembersihan, buat masa ini hanya base64_decode dan gzinflate file injection
strings boleh dibersihkan. Fail yang dibersihkan akan dikembalikan secara auto kepada
laluan asal, pemilik dan kebenarannya.
quar_susp
Opsyen ini membolehkan LMD untuk menggantung akaun pengguna dimana malware
ditemui. Jika anda menggunakan CPanel, ia akan menyalurkan maklumat pengguna kepada
/scripts/suspendacct dan menambah komen dengan laporan maldet yang menyebabkan
penggantungan perkhidmatan pengguna tersebut (e.g: maldet --report SCANID). Pada
system yang tidak menggunakan cpanel, shell pengguna tersebut akan disetkan kepada
/bin/false.
quar_susp_minuid
Ini adalah user id minima yangthat will be evaluated for suspension, the default should be
fine on most systems.
Untuk melakukan imbasan, secara manual. Anda boleh memberi arahan berikut:
maldet --scan-all /home?/?/public_html
Dimana penggunaan ? adalah merupakan pengganti bagi * untuk “KESEMUA”
Maldet akan membuat imbasan kepada semua fail/direktori mana-mana user/pengguna dan
melakukan imbasan kepada folder public_html
Panduan Keselamatan Web Joomla! IntermediateHalaman | 51
5.0 Keselamatan Web Joomla!
Perlindungan Keselamatan Joomla! Bermula, apa bila anda mula memasangnya kedalam
pelayan web!
Pastikan anda memuat turun Joomla! dari www.joomla.org
Pastikan semasa memasang Joomla! Anda tidak gunakan prefix jos_
Pastikan anda menukar username Admin untuk Joomla! 1.5 (Tidak berkaitan dengan
Joomla! 1.6&1.7 @ 2.5.X
Sebelum teruskan, anda perlu pastikan folder penting untuk pemasangan Joomla! telah
dichmod kepada writable 777, untuk pengguna SSH anda boleh berikan Arahan berikut
Sebelum pemasangan, find . -type d -exec chmod 777 {} ;
Selepas pemasangan find . -type d -exec chmod 755 {} ;
Untuk fail, anda boleh lakukan carian contoh configuration.php dan menjadikannya writable
chmod 666 @ 777
find . -type f -name 'configuration.php' -exec chmod 666 {} ;
Selepas itu
find . -type f -name 'configuration.php' -exec chmod 644 {} ;
hanya CHMODkan apabila perlu, kebiasaanya, selepas pemasangan Joomla selesai, ada
beberapa Direktori yang perlu DiCHMOD, iaitu direktori /images/*
5.1 Milik dan Kebenaran (CHMOD & CHOWN)
5.1.1 Pengenalan
Apakah itu Arahan chmod
Kita mungkin biasa terjumpa dengan arahan seperti chmod 755 fail tu. Apa sebenarnya
chmod dan nombor yang beratus-ratus tu?
Panduan Keselamatan Web Joomla! IntermediateHalaman | 52
Jom kita lihat apa sebenarnya arahan chmod berserta nombor-nombornya sekali.
Tentang chmod
chmod - change file mode bits
Bahasa ringkas - menukar kebenaran penggunaan sesuatu fail.
SYNOPSIS
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
Untuk keterangan lanjut boleh baca pada man page di Terminal dengan arahan:
man chmod
Senarai Kebenaran mengikut Abjad
u - User / Pengguna yang memiliki fail tersebut.
g – Group / kumpulan yang memiliki fail tersebut.
o – Other / lain-lain.
a – All / Semua.
r - Read the file / Boleh baca fail.
w - Write or edit the file / Boleh tulis atau ubahsuai fail.
x - Execute or run the file as a program / Boleh laksanakan atau jalankan sebagai perisian.
Senarai Kebenaran Mengikut Nombor:
400 - read by owner / boleh dibaca oleh pemiliknya
040 - read by group / boleh dibaca oleh kumpulannya
004 - read by other / boleh dibaca oleh yang lain
200 - write by owner / ditulis oleh pemiliknya
020 - write by group / ditulis oleh kumpulan
002 - write by other / ditulis oleh lain-lain
Panduan Keselamatan Web Joomla! IntermediateHalaman | 53
100 - execute by owner / boleh dilaksana atau run oleh pemiliknya
010 - execute by group / boleh dilaksana atau run oleh kumpulannya
001 - execute by other / boleh dilaksana atau run oleh lain-lain
Jika kita lihat senarai diatas :
4XX -Nombor pertama untuk owner bersamaan u
X4X -Nombor kedua untuk group bersamaan g
XX4 -Nombor ketiga untuk other bersamaan o
Dan nombor :
4 adalah read bersamaan r
2 adalah write bersamaan w
1 adalah execute bersamaan x
5.1.2 Contoh-contoh
Contoh 1:
chmod 777 cuba.txt
- bermakna memberikan kebenaran untuk semua orang untuk menggunakan fail tersebut.(-
rwxrwxrwx)
Macam mana boleh dapat 777 tu?
Cuba campurkan semua nombor tadi seperti :
400 read by owner
+ 040 read by group
+ 004 read by other
+ 200 write by owner
+ 020 write by group
+ 002 write by other
+ 100 execute by owner
Panduan Keselamatan Web Joomla! IntermediateHalaman | 54
+ 010 execute by group
+ 001 execute by other
= 777
Contoh 2:
chmod 755 cuba.txt
- memberi semua kebenaran kecuali mengubah kepada semua orang. (-rwxr-xr-x)
Jika mengikut nombor
400 read by owner
+ 040 read by group
+ 004 read by other
+ 200 write by owner
+ 100 execute by owner
+ 010 execute by group
+ 001 execute by other
= 755
Contoh jika dalam terminal
chmod 755 cuba.txt
ls -l
-rwxr-xr-x 1 shaifful 20 2010-12-15 01:58 cuba.txt
File owner group other link owner saiz Tarikh Ubah Nama fail
- rwx r-x r-x 1 shaifful 20 15/12/10
01:58
cuba.txt
- 400
200
100
040
010
004
001
1 shaifful 20 15/12/10
01:58
cuba.txt
5.1.3 Penggunaan WinSCP untuk CHMOD dan CHOWN
Jika anda menggunakan WinScp sebagai contoh, anda boleh menggunakan CHMOD
Panduan Keselamatan Web Joomla! IntermediateHalaman | 55
dengan mudah menggunakan Properties (right click/klik kanan pada nama fail) seperti
dibawah
Anda boleh memilih permission atau kebenaran dengan memilih/mengklik pada kotak-kotak
Owner Group dan Others, atau terus menggunakan Octal dengan memasukkan nombor
kebenaran yang anda mahukan.
Anda perlu ingat nombor-nombor penting berikut.
Untuk fail-fail biasa, nombor kebenarannya ialah 0644
Untuk folder/direktori ialah 0755
Bagi membolehkan sesuatu fail ditulis oleh sesiapa sahaja, anda perlu gunakan CHMOD
0777, tetapi amat tidak digalakkan kerana jika hackers Berjaya memasuki sistem anda, fail
tersebut boleh ditulis oleh mereka atau sesiapa sahaja.
Jika sebaiknya anda menggunakan suPHP seperti mana yang telah ditunjukkan pada topik
sebelum ini. Ini kerana jika menggunakan suPHP, hanya pemilik fail sahaja yang memiliki
kuasa untuk menulis kepada fail tersebut dan masalah permission atau kebenaran boleh
diatasi tanpa menggunakan CHMOD 0777.
5.2 Penggunaan HTACCESS
Penggunaan HTACCESS untuk menambah baik keselamatan web berasaskan Joomla.
Tahukah anda mengenai HTACCESS? Fail HTACCESS sebenarnya fail yang membolehkan
kita mengubah suai seting pelayan web tanpa mengubah setting sebenar Web yang default,
atau dinamakan sebagai Override.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 56
Ada banyak kegunaan HTACCES, dalam Nota ini akan diterangkan secara ringkas
bagaimana untuk menggunakan htaccess bagi melindungi pelayan web anda, terutamanya
Joomla!
Antara kegunaan fail HTACCESS ini ialah
1. Mengubah haluan laman web anda. (Redirect) www kepada non www, vice versa
2. Mencantikkan URL dengan memanipulasikan Mod_rewrite pelayan web Apache.
3. Membantu menangkis suntikan SQLi dan XSS serta RFI
4. Menghalang User Agent/Bot dari mencuri maklumat atau membuat salinan laman
web anda secara local copy.
5. Dan macam2 lagi…
Sebelum anda dapat gunakan .htaccess, anda perlu pastikan bahawa .htaccess adalah
dibenarkan dalam httpd.conf dan boleh digunakan
5.2.2 Konfigurasi HTACCESS
Gunakan kod berikut untuk melihat sama ada fail konfigurasi Apache membenarkan
penggunaan .htaccess.
nano /etc/httpd/conf/httpd.conf
dan cari kod berikut, serta ubah dari kod berikut
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Kepada
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
Selepas itu simpan dan restart balik pelayan web anda
service httpd restart
5.2.1.1 Mengaktifkan htaccess bagi Joomla
Anda perlu mengaktifkan fail htaccess, dengan menukar nama asal fail tersebut dari
htaccess.txt kepada .htaccess (bunyinya dot.htaccess),
Panduan Keselamatan Web Joomla! IntermediateHalaman | 57
Selepas menukar namanya, anda boleh gunakan kod dibawah untuk melindunginya dari
dilihat oleh mereka yang tidak berkenaan (dalam httpd.conf atau .htaccess)
<Files .htaccess>
order allow,deny
deny from all
</Files>
Berikut adalah kod yang saya gunakan dalam .htaccess saya.
##
# @package Joomla
# @copyrightCopyright (C) 2005 - 2012 Open Source Matters. All rights
reserved.
# @license GNU General Public License version 2 or later; see
LICENSE.txt
##
## Can be commented out if causes errors, see notes above.
#Options +FollowSymLinks
# file execution order
DirectoryIndex index.php /index.php index.html
##### No directory listings -- BEGIN
IndexIgnore *
Options All -Indexes
##### No directory listings -- END
## Mod_rewrite in use.
RewriteEngine On
RewriteCond %{HTTP:Content-Disposition} .php [NC]
RewriteCond %{HTTP:Content-Type} image/.+ [NC]
RewriteRule .* - [F,NS,L]
## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed
below
# This attempts to block the most common type of exploit `attempts` to
Joomla!
##### Rewrite rules to block out some common exploits -- BEGIN
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|vcf|
raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
Panduan Keselamatan Web Joomla! IntermediateHalaman | 58
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
## End - Joomla! core SEF Section.
## Disallow access to rogue PHP files throughout the site, unless they are
explicitly allowed
RewriteCond %{REQUEST_FILENAME} (.php)$
RewriteCond %{REQUEST_FILENAME} !(/index[23]?.php)$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*.php)$ - [F]
## Disallow access to htaccess.txt, php.ini and configuration.php-dist
RewriteRule ^(htaccess.txt|configuration.php-dist|php.ini)$ - [F]
##### File injection protection -- BEGIN
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* - [F]
##### File injection protection -- END
##### Advanced server protection -- BEGIN
RewriteCond %{QUERY_STRING} =PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-
9]{4}-[a-f0-9]{12} [NC]
RewriteRule .* - [F]
## Back-end protection
RewriteRule ^administrator/?$ - [L]
RewriteRule ^administrator/index.(php|html?)$ - [L]
RewriteRule ^administrator/index[23].php$ - [L]
RewriteRule ^administrator/(components|modules|templates|images|
plugins)/.*.(jpe|jpg|jpeg|jp2|jpe2|png|gif|bmp|css|js|swf|html|mpg|mp3|
mpeg|mp4|avi|wav|ogg|ogv|xls|xlsx|doc|docx|ppt|pptx|zip|rar|pdf|xps|txt|7z|
svg|odt|ods|odp|flv|mov|htm|ttf|woff|eot)$ - [L]
RewriteRule ^administrator/ - [F]
RewriteCond %{QUERY_STRING} [^a-z](declare|char|set|cast|convert|delete|
drop|exec|insert|meta|script|select|truncate|update)[^a-z] [NC]
RewriteRule (.*) - [F]
Fail .htaccess diatas perlu disesuaikan dengan server yang anda gunakan, MUNGKIN ada
arahan-arahan dalam fail ini tidak bersesuaian dengan pelayan web atau Joomla anda atau
keperluan anda dan perlu diubahsuai.
Keterangan mengenai kod tersebut adalah seperti berikut
Halang gambar yang dieksploit atau kod yang menyamar sebagai gambar
RewriteCond %{HTTP:Content-Disposition} .php [NC]
RewriteCond %{HTTP:Content-Type} image/.+ [NC]
RewriteRule .* - [F,NS,L]
Nyahaktifkan Directory index dan menetapkan seting lalai (default) sekiranya tiada fail
index
DirectoryIndex index.php /index.php
##### No directory listings -- BEGIN
IndexIgnore *
Options All -Indexes
##### No directory listings -- END
Panduan Keselamatan Web Joomla! IntermediateHalaman | 59
Untuk blok eksploit-eksploit biasa melalui URL
##### Rewrite rules to block out some common exploits -- BEGIN
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
##### Rewrite rules to block out some common exploits -- END
Mempastikan Mod_rewrite diaktifkan
## Mod_rewrite in use.
RewriteEngine On
Pengesahan HTTP Auth untuk PHP dan Seksyen Mesra enjin Pencari
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
## Begin - Joomla! core SEF Section.
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|vcf|raw))$
[NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
## End - Joomla! core SEF Section.
Menghalang fail-fail Nakal seperti shell C99 dan r57 dari dilarikan/ run dalam sistem
anda
## Disallow access to rogue PHP files throughout the site, unless they are
explicitly allowed
RewriteCond %{REQUEST_FILENAME} (.php)$
RewriteCond %{REQUEST_FILENAME} !(/index[23]?.php)$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*.php)$ - [F]
Halang akses ke fail-fail
## Disallow access to htaccess.txt, php.ini and configuration.php-dist
RewriteRule ^(htaccess.txt|configuration.php-dist|php.ini)$ - [F]
Perlindungan dari suntikan skrip nakal
##### File injection protection -- BEGIN
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* - [F]
##### File injection protection -- END
Perlindungan lebih maju untuk folder administrator,
##### Advanced server protection -- BEGIN
RewriteCond %{QUERY_STRING} =PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-
[a-f0-9]{12} [NC]
RewriteRule .* - [F]
## Back-end protection
RewriteRule ^administrator/?$ - [L]
RewriteRule ^administrator/index.(php|html?)$ - [L]
RewriteRule ^administrator/index[23].php$ - [L]
RewriteRule ^administrator/(components|modules|templates|images|plugins)/.*.(jpe|
jpg|jpeg|jp2|jpe2|png|gif|bmp|css|js|swf|html|mpg|mp3|mpeg|mp4|avi|wav|ogg|ogv|xls|
xlsx|doc|docx|ppt|pptx|zip|rar|pdf|xps|txt|7z|svg|odt|ods|odp|flv|mov|htm|ttf|woff|
eot)$ - [L]
RewriteRule ^administrator/ - [F]
Panduan Keselamatan Web Joomla! IntermediateHalaman | 60
Perlindungan dari arahan untuk SQLi, harus digunakan berhati-hati, mungkin ada
false Positive terutama yang ada menggunakan forum atau menghantar kod2
sebagai tutorial.
RewriteCond %{QUERY_STRING} [^a-z](declare|char|set|cast|convert|delete|drop|exec|
insert|meta|script|select|truncate|update)[^a-z] [NC]
RewriteRule (.*) - [F]
Seterusnya, dengan menggunakan .htaccess kita juga boleh halang bot2 internet
yang cuba mencuri fail2 kita atau melayari laman web kita dan mencuri
maklumat didalamnya, sila tampal contoh berikut kedalam .htaccess
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR]
RewriteCond %{HTTP_USER_AGENT} ^jVulnComponent Crawler v1-Ahlspiess
RewriteRule ^.* - [F,L]
deny from all
Buang fail-fail default Joomla!
Kepada yang mahukan agar laman web mereka lebih selamat, anda boleh padamkan
beberapa fail dari pemasangan Joomla anda. Contohnya
Joomla! 1.5
CHANGELOG.php
COPYRIGHT.php
Untuk Joomla 1.7.X dan 2.5.X tiada yang perlu dilakukan, disebabkan fail2 tersebut tidak
lagi disertakan didalam fail pemasangan Joomla!
Selepas, halang fail-fail tertentu dari dibuka atau dilihat dari luar laman web anda.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 61
Anda boleh cuba kod dibawah untuk dimasukkan kedalam fail .htaccess dan ia akan
membolehkan fail2 tersebut muncul hanya melalui laman web anda dan tidak dapat dibuka
dari web lain.
Masukkan dalam .htaccess
SetEnvIfNoCase Referer "^http://www.your-domain-name-here.com/"
locally_linked=1
SetEnvIfNoCase Referer "^http://www.your-domain-name-here.com$"
locally_linked=1
SetEnvIfNoCase Referer "^http://your-domain-name-here.com/"
locally_linked=1
SetEnvIfNoCase Referer "^http://your-domain-name-here.com$"
locally_linked=1
SetEnvIfNoCase Referer "^$" locally_linked=1
<FilesMatch ".(gif|png|jpe?g)$">
Order Allow,Deny
Allow from env=locally_linked
</FilesMatch>
Menyimpan fail configuration.php dengan lebih selamat
Fail Konfigurasi Joomla iaitu configuration.php adalah fail yang amat penting kerana ia
menyimpan maklumat mengenai pangkalan data dan seting joomla.
Kita mesti cuba elakkan fail ini dari dibuka atau dilihat oleh pengguna lain. Oleh yang
sedemikian ada beberapa cara yang kita boleh gunakan.
1. Pindah configuration.php dari public_html ke directory home
2. Jadikan ia unwritable
3. Lindungi dengan .htaccess
Untuk cara pertama
Joomla 1.5 cara ini mengubah core Joomla!, untuk setiap kali Update, anda
tentu perlu mengubahnya kembali
1. Cipta satu direktori diluar direktori public_html. Anda boleh namakannya mengikut
kesukaan anda, contohnya yang senang diingat sekiranya pelayan web anda hoskan
beberapa laman web, contohnya webjoomla1 untuk nama direktori (dalam contoh ini). Nota:
Jika ada beberapa pemasangan Joomla, anda MESTI pastikan setiap darinya memiliki
direktorinya yang tersendiri untuk fail configuration.php nya.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 62
2) Letakkan salinan fail configuration.php, yang tidak diubah langsung dan anda tidak
menukar namanya. Kebenaran atau permission untuk fail ini ialah 644 dan direktorinya 755,
Kebenaran 444 juga boleh diterima sekiranya itu ialah permissionnya yg semasa.
3) Sila ke direktori /home/folderwebanda/public_html/includes/ dan buat backup fail
defines.php. Atau /var/www/html/includes
4) Sekarang anda boleh buka fail defines.php menggunakan editor yang anda suka, atau
anda boleh buka menggunakan perisian FTP yang anda suka contohnya winscp seperti
gambar disebelah
5) Disekitar baris ke 26 anda akan dapat lihat:
define('JPATH_CONFIGURATION',JPATH_ROOT);
Panduan Keselamatan Web Joomla! IntermediateHalaman | 63
Gantikannya dengan:
define('JPATH_CONFIGURATION',JPATH_ROOT.DS.'../webjoomla1');
Jika joomla telah dipasang dalam subdirektori dibawah public_html
( public_html/subdirektori/ ) kemudian gantikannya dengan yang berikut
define('JPATH_CONFIGURATION',JPATH_ROOT.DS.'../'.DS.'../web');
NOTA: The /web ialah contoh subdirektori. Gantikan contoh nama direktori ini dengan nama
yang anda sukai.
6) Ulangi langkah yang sama dengan fail defines.php yang berada dalam direktori
/home/webanda/public_html/administrator/includes/ atau
/var/www/html/administrator/includes. Jika anda tidak mengubahnya, akses ke bahagian
admin akan terhalang.
7) Pergi ke main root laman web anda dan nakan semula fail configuration.php kepada
nama lain, dan selepas itu uji sama ada laman web Joomla! Anda berfungsi dengan baik
atau tidak.
8) Jangan lupa masukkan direktori dan fail ini kedalam backup yang anda buat.
Joomla 1.6, 1.7, 2.5.X dan yang lebih baru
Overriding defines.php
Bermula dengan versi 1.6, ianya adalah mungkin untuk sediakan versi override yang
dipanggil localized version fail includes/defines.php. (includes/defines.php dan
administrator/includes/defines.php). Jadi ini memungkin kita mengubah pelbagai fail diluar
root atau public_html.
Panduan Keselamatan Web Joomla! IntermediateHalaman | 64
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla
Panduan Keselamatan CMS Joomla

Weitere ähnliche Inhalte

Ähnlich wie Panduan Keselamatan CMS Joomla

Ci indonesia
Ci indonesiaCi indonesia
Ci indonesiakaniadona
 
Ci indonesia
Ci indonesiaCi indonesia
Ci indonesiakaniadona
 
Tugas 6 matkul rekayasa web 0317
Tugas 6 matkul rekayasa web 0317Tugas 6 matkul rekayasa web 0317
Tugas 6 matkul rekayasa web 0317esti setiasih
 
Langkah langkah memasang konten management sistem dengan mudah
Langkah langkah memasang konten management sistem dengan mudahLangkah langkah memasang konten management sistem dengan mudah
Langkah langkah memasang konten management sistem dengan mudahtukangojek48
 
Rekayasa web part 6 khaerul anwar-1511510388
Rekayasa web part 6 khaerul anwar-1511510388Rekayasa web part 6 khaerul anwar-1511510388
Rekayasa web part 6 khaerul anwar-1511510388Khaerul Anwar
 
Tutorial Penggunaan Laravel
Tutorial Penggunaan LaravelTutorial Penggunaan Laravel
Tutorial Penggunaan LaravelEka Rahmawati
 
Tutorial dasar-laravel
Tutorial dasar-laravelTutorial dasar-laravel
Tutorial dasar-laravelDhicca Rama
 
Tutorial dasar laravel 4
Tutorial dasar laravel 4Tutorial dasar laravel 4
Tutorial dasar laravel 4Teten Nugraha
 
Perkembangan web server di Linux
Perkembangan web server di LinuxPerkembangan web server di Linux
Perkembangan web server di LinuxTugas_SO2
 
Xampp Untuk Pemula
Xampp Untuk PemulaXampp Untuk Pemula
Xampp Untuk PemulaNdixs Tok
 
Bab2 instalasi web_server
Bab2 instalasi web_serverBab2 instalasi web_server
Bab2 instalasi web_serverAdi Utami
 
Php, mySQL dan Javascript - 1
Php, mySQL dan Javascript - 1Php, mySQL dan Javascript - 1
Php, mySQL dan Javascript - 1Agus Supriatna
 
Tugas 2 ,sistem operasi II
Tugas 2 ,sistem operasi IITugas 2 ,sistem operasi II
Tugas 2 ,sistem operasi IIatybaud
 

Ähnlich wie Panduan Keselamatan CMS Joomla (20)

Ci indonesia
Ci indonesiaCi indonesia
Ci indonesia
 
Ci indonesia
Ci indonesiaCi indonesia
Ci indonesia
 
Tug as ii
Tug as iiTug as ii
Tug as ii
 
Ci 1
Ci 1Ci 1
Ci 1
 
web-security
web-securityweb-security
web-security
 
Tugas afi
Tugas afiTugas afi
Tugas afi
 
Tug as
Tug asTug as
Tug as
 
Tugas 6 matkul rekayasa web 0317
Tugas 6 matkul rekayasa web 0317Tugas 6 matkul rekayasa web 0317
Tugas 6 matkul rekayasa web 0317
 
Langkah langkah memasang konten management sistem dengan mudah
Langkah langkah memasang konten management sistem dengan mudahLangkah langkah memasang konten management sistem dengan mudah
Langkah langkah memasang konten management sistem dengan mudah
 
Rekayasa web part 6 khaerul anwar-1511510388
Rekayasa web part 6 khaerul anwar-1511510388Rekayasa web part 6 khaerul anwar-1511510388
Rekayasa web part 6 khaerul anwar-1511510388
 
Tutorial dasar laravel
Tutorial dasar laravelTutorial dasar laravel
Tutorial dasar laravel
 
Tutorial Penggunaan Laravel
Tutorial Penggunaan LaravelTutorial Penggunaan Laravel
Tutorial Penggunaan Laravel
 
Tutorial dasar-laravel
Tutorial dasar-laravelTutorial dasar-laravel
Tutorial dasar-laravel
 
Tutorial dasar laravel 4
Tutorial dasar laravel 4Tutorial dasar laravel 4
Tutorial dasar laravel 4
 
Tutorial dasar laravel
Tutorial dasar laravelTutorial dasar laravel
Tutorial dasar laravel
 
Perkembangan web server di Linux
Perkembangan web server di LinuxPerkembangan web server di Linux
Perkembangan web server di Linux
 
Xampp Untuk Pemula
Xampp Untuk PemulaXampp Untuk Pemula
Xampp Untuk Pemula
 
Bab2 instalasi web_server
Bab2 instalasi web_serverBab2 instalasi web_server
Bab2 instalasi web_server
 
Php, mySQL dan Javascript - 1
Php, mySQL dan Javascript - 1Php, mySQL dan Javascript - 1
Php, mySQL dan Javascript - 1
 
Tugas 2 ,sistem operasi II
Tugas 2 ,sistem operasi IITugas 2 ,sistem operasi II
Tugas 2 ,sistem operasi II
 

Panduan Keselamatan CMS Joomla

  • 1. Joomla! SecurityPanduan Keselamatan CMS Joomla! SHAIFFULNIZAM MOHAMAD BAHASA MELAYU
  • 2. Penafian Walaupun segala usaha telah dilakukan untuk memastikan ketepatan maklumat didalam buku ini ketika penulisan, namun begitu maklumat berkaitan teknologi perkomputeran selalu bertukar dengan pantas.Oleh itu, sesetengah dari maklumat yang ada di dalam buku ini mungkin sudah tidak tepat ketika anda membacanya. Juga, kemungkinan terdapat kesalahan tipografi dan kandungan. Gambar adalah hakcipta masing-masing dan dikreditkan.Tidak ada jaminan yang diperakukan bahawa maklumat yang terkandung di dalam buku panduan ini adalah tepat dan lengkap. Pengarang dengan ini secara khususnya tidak bertanggungjawab atas apa-apa risiko, kehilangan, liabiliti, sama ada secara peribadi atau tidak, yang berlaku akibat penggunaan dan aplikasi kandungan buku panduan ini, secara langsung atau tidak langsung. Hakcipta Hakcipta Terpelihara 2012, Shaiffulnizam bin Mohamad. Anda dilarang mengeluar ulang mana-mana bahagian artikel, ilustrasi dan isi kandungan ebook ini dalam apa juga bentuk dan dengan apa juga cara sama ada secara elektronik, fotokopi, mekanik, rakaman atau cara lain sebelum mendapat izin daripada pihak penulis • Anda dilarang menjual PANDUAN ini kepada mana-mana pihak sekalipun. • Anda dilarang menjadikan PANDUAN ini sebagai bonus untuk produk anda. • Anda tidak dibenarkan sama sekali mengubah suai kandungan PANDUAN ini tanpa kebenaran penulisnya. Panduan Keselamatan bagi Laman Web Panduan Keselamatan Web Joomla! IntermediateHalaman | 2
  • 3. berasaskan Joomla! Kandungan Halaman 1.0 Pengenalan Kursus/Buku ini x 1.1 Antara sebab atau punca Joomla! Digodam atau deface. x 1.2 Pemilihan server/Hosting (VPS/Shared, Linux/Windows) 1.2.1 Dedicated/VPS/Hos sendiri laman anda 1.2.2 Shared server 1.2.3 Shared Server VS Dedicated atau VPS 2.0 Pemasangan Apache dan PHP 2.1 Log masuk Root untuk pemasangan 2.2 Penambahan REPO Centos 2.3 Pemasangan Apache & PHP 2.3.1 Pemasangan Module bagi PHP 2.3.2 Auto Start Apache dipermulaan Boot 2.3.3 Periksa pemasangan Apache dan PHP 2.4 Masalah Pemasangan Apache dan PHP serta Penyelesaiannya 3.0 Pemasangan MYSQL 3.1 Log masuk Root untuk pemasangan 3.2 Penambahan REPO Centos 3.2.1 Periksa Versi MySQL dalam REPO 3.2.2 Kemaskini dan ATAU Pasang MySQL 3.2.3 Auto Start MySQL dipermulaan Boot dan mulakannya 4.0 Meningkatkan Tahap Keselamatan Web Apache, PHP dan MySQL (Server) 4.1 Melindungi Apache 4.1.1 Menaiktaraf keselamatan Apache dan Edit httpd.conf 4.1.2 Jalankan Apache dibawah pengguna yang betul dan kumpulan yang betul 4.1.2 Kawal Direktori dan Akses kepada fail 4.1.4 Tutup mana-mana modul yang tidak digunakan Panduan Keselamatan Web Joomla! IntermediateHalaman | 3
  • 4. 4.1.5 Berhati-hati dengan penggunaan .htaccess 4.1.6 Nyahaktifkan FollowSymLinks 4.1.7 Menyahaktif HTTP TRACE 4.1.8 Aktikan penggunaan Mod_rewrite 4.2 Melindungi PHP 4.2.1 Meningkatkan Keselamatan PHP melalui php.ini 4.2.2 Kill Register Globals 4.2.3 Mengawal Akses kepada fail 4.2.4 Sembunyikan Versi PHP 4.2.5 Menyahaktifkan fungsi-fungsi bahaya PHP 4.2.5.1 Nyahaktif Info & Fungsi bahaya PHP 4.2.5.2 Menanda Cookie dengan HTTPOnly 4.2.6 Pemasangan SUHOSIN 4.2.7 Ringkasan Peningkatan Keselamatan PHP 4.3 Melindungi MySQL 4.3.1 Tujuan Pemasangan MySQL lebih selamat 4.3.2 Mulakan MySQL Secure Installation 4.3.3 Bersambung ke MySQL dan hasilkan User dan DB 4.3.4 Nyahaktif sambungan ke Pelayan MySQL dari luar 4.3.4.1 Firewall dan Status Port MySQL 4.3.5 Perlindungan tambahan 4.4 Pengenalan dan Pemasangan Mod_security 4.4.1 Pemasangan Mod_security 4.4.2 Ralat pemasangan 4.4.3 Konfigurasi/Seting Mod_security 4.5 Pengenalan dan Pemasangan suPHP 4.5.1 Pemasangan suPHP Panduan Keselamatan Web Joomla! IntermediateHalaman | 4
  • 5. 4.5.2 Konfigurasi 4.5.3 Pemilikan dan Kebenaran 4.5.4 Ralat / Masalah (jika ada) 4.6 Mengatasi DOS menggunakan mod_evasive 4.7 Mengatasi Serangan SLowLori dengan Mod_slowloris 4.7 Menggunakan SSL untuk Apache 4.8 SSH 4.8.1 Edit konfigurasi SSH 4.8.2 Seting dan Peringatan 4.9 Pemasangan Firewall (CSF) 4.9.1 Pemasangan CSF 4.9.1.1 Pra Pemasangan 4.9.1.2 Pemasangan CSF 4.9.2 Konfigurasi CSF dan Webmin 4.9.3 Ralat dan Penyelesaian masalah 4.10 Meningkatkan Keselamatan Centos (Pengenalan) 4.10.1 Linux Environment Security (LES) 4.10.2 Rootkit Hunter (RKHunter) 4.10.3 OSSEC IDS 4.10.4 Antivirus ClamAV 4.10.4.1 Konfigurasi Clamav-Cron (auto scan) 4.10.4.2 Setup Cron pada Webmin 5.0 Keselamatan Web Joomla! 5.1 Milik dan Kebenaran (CHMOD & CHOWN) 5.1.1 Pengenalan 5.1.2 Contoh-contoh Panduan Keselamatan Web Joomla! IntermediateHalaman | 5
  • 6. 5.1.3 Penggunaan WinSCP untuk CHMOD dan CHOWN 5.2 Penggunaan HTACCESS 5.2.1 Mengaktifkan HTACCESS melalui httpd.conf 5.2.1.1 Mengaktifkan htaccess bagi Joomla 5.2.2 Konfigurasi HTACCESS 5.2.3 Contoh .htaccess yang digunakan 5.2.3.1 Keterangan mengenai kod yang digunakan 5.2.3.2 Nyahaktifkan Directory index 5.2.3.3 Blok eksploit melalui URL 5.2.3.4 Mempastikan Mod_rewrite diaktifkan 5.2.3.5 Pengesahan HTTP Auth untuk PHP dan SEF 5.2.3.6 Menghalang fail shell spt c99 5.2.3.7 Halang akses ke fail tertentu 5.2.3.8 Perlindungan dari suntikan tertentu 5.2.3.9 Perlindungan lebih maju untuk folder administrator 5.2.3.10 Perlindungan dari SQLi 5.2.3.11 Perlindungan dari bot-bot nakal 5.3 Buang fail-fail default Joomla! 5.4 Ubah lokasi fail configuration.php 5.4.1 Joomla 1.5 5.4.2 Joomla 2.5.X 5.5 Lindungi Folder Administrator dengan kata laluan. 5.6 Menggunakan SEF – Kenapa dan bagaimana? Panduan Keselamatan Web Joomla! IntermediateHalaman | 6
  • 7. 1.0 Pengenalan Kursus/Buku ini : Joomla! Adalah sistem Pengurusan Kandungan yang dibina menggunakan bahasa pengaturcaraan PHP. Oleh yang demikian, Joomla! Tidak dapat lari dari masalah keselamatan yang berpunca dari banyak sebab.Topik seterusnya akan membincangkan punca-punca web Joomla! Boleh dicerobohi atau digodam. 1.1 Antara sebab atau punca Joomla! Digodam atau deface. Hosting laman web tidak selamat. PHP yang tidak dikemaskini Joomla yang tidak dikemaskini Penggunaan komponen yang tidak dikemaskini Penggunaan komponen yang dimuat turun dari laman web muat turun haram Penggunaan sistem muat naik yang tidak dipantau Folder writable 777 atau fail writable Dan banyak lagi punca. 1.2 Pemilihan server/Hosting (VPS/Shared, Linux/Windows) Sistem terbaik bagi penggunaan sistem berasaskan PHP ialah Linux, PHP ditulis diatas platform Linux dan diPort utk kegunaan windows. Maka adalah lebih baik dan sesuai sekiranya tuan/puan menghoskan laman web Joomla! Tuan/puan menggunakan server linux. Terdapat beberapa jenis pelayan web berasaskan Linux yang dibina KHAS untuk memenuhi ciri2 keselamatan web. Contohnya Centos, 1.2.1 Dedicated/VPS/Hos sendiri laman anda Jika anda mempunyai bajet yang besar dan memproses data yang sulit, anda mungkin boleh dapatkan dedicated server yang boleh anda uruskan sendiri atau dengan bantuan pemilik hosting, anda tidak perlu bimbangkan masalah sumber dan masalah keselamatan yang diakibatkan oleh pengguna lain, ini kerana anda seorang sahaja yang menguruskan pelayan tersebut. Anda juga boleh pasang perisian tambahan untuk keselamatan laman web seperti mod_security, mod_evasive dan lain lain. Kalau tidak mampu, anda boleh dapatkan VPS (Virtual private server yang mana lebih Panduan Keselamatan Web Joomla! IntermediateHalaman | 7
  • 8. kurang Dedicated server, Cuma ianya bukan merupakan server fizikal) ia adalah server dalam sebuah server dengan sumber2 yang telah ditetapkan. 1.2.2 Shared server Shared server adalah perkhidmatan hosting yang dikongsikan bersama ratusan penyewa tapak web tersebut. Ini bermaksud dalam satu server ia menempatkan lebih kurang 5~500 laman web dalam satu server, dimana setiap web tersebut diletakkan dalam folder masing2. Laman web anda mempunyai sumber yang terhad kerana setiap sumber dikongsi bersama web yang lain, dan jika ada berlaku masalah pencerobohan, maka berkemungkinan, web anda turut boleh dicerobohi. 1.2.3 Shared Server VS Dedicated atau VPS Apa beza shared server dengan VPS atau Dedicated dari segi keselamatan? Sebenarnya ia amat berbeza, jika anda seorang hackers, apa yang anda perlukan ialah alamat laman web yang anda sewa sekarang dan menggunakan reverse dns tools, hackers boleh mendapatkan senarai laman web atau penyewa yang berada dalam server anda dan seterusnya membuat scanning/imbasan untuk mendapatkan maklumat laman web lain yang mungkin tidak dikemaskini atau mempunyai masalah keselamatan. 2.0 Pemasangan Apache dan PHP Apache merupakan Pelayan Web berasaskan sumber terbuka dan PHP pula merupakan bahasa pengaturcaraan berasaskan Web, Joomla! perlu di jalankan menggunakan Pelayan web Apache (atau mana-mana pelayan web) dan PHP diperlukan untuk mentafsir kod Joomla! Untuk itu, kita akan mulakan dengan memasang Pelayan Web Apache dan PHP 5.3.X. Dibawah, kita akan cuba memasang Pelayan Web Apache (httpd) dengan PHP 5.3.X dan modul berikut: • PEAR • PDO • MySQL • PostgreSQL • Memcache • GD • XML Panduan Keselamatan Web Joomla! IntermediateHalaman | 8
  • 9. • MBString • MCrypt pada CentOS 6/5.7 Pasang Server Apache (httpd) dan PHP 5.3.X 2.1 Log masuk Root untuk pemasangan, Untuk memasang apa-apa perisian untuk Centos dan variasi Linux sepertinya, anda perlu log masuk sebagai root terlebih dahulu sebelum dibenarkan untuk memasang, tujuannya ialah untuk mempastikan hanya user yang mempunyai kebenaran atau hak sahaja boleh memasang atau memberi kebenaran kepada pengguna lain atau system. Dan ini sebenarnya menambah ciri keselamatan pada system itu sendiri, kerana pengguna tanpa kebenaran atau jika ada malware atau pengganggu dalam sistem tersebut, mereka tidak boleh melakukan kerosakan besar dalam sistem. Hanya root boleh membuat pemasangan, dan untuk melalukan pemasangan, sila laksanakan arahan berikut terlebih dahulu. Pilih antara yang dibawah berdasarkan sistem yang anda gunakan. su ## OR ## sudo -i 2.2 Penambahan REPO Centos Repo atau Repository merupakan tempat simpanan perisian atau kemaskini untuk Sistem Operasi Centos atau variasi Linux seperti Redhat dan lain-lain. Repo dibawah ini adalah pilihan dari repo-repo sedia ada yang ada kalanya tidak dikemaskini, oleh yang sedemikian, pilihan menambah repo ini kedalam sistem repo Centos yang anda gunakan ini boleh membantu mengemaskini perisian atau komponen dalam Centos. Install Remi repository (Pilih ikut kepada Versi OS yang digunakan, oleh hanya pilih Atomic Repo jika menggunakan versi terbaru) CentOS and Red Hat (RHEL) ## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ## 32 Bit rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6- 7.noarch.rpm ## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ## 64 Bit Panduan Keselamatan Web Joomla! IntermediateHalaman | 9
  • 10. rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release- 6-7.noarch.rpm ## CentOS 6 and Red Hat (RHEL) 6 ## rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm ## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ## rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5- 4.noarch.rpm ## CentOS 5 and Red Hat (RHEL) 5 ## rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm Atomic Repo ## Centos 6, Atomic Repo wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh 2.3 Pemasangan Apache & PHP. (httpd & PHP 5.3.X) CentOS 6/5.7 and Red Hat (RHEL) 6.1/6/5.7 yum --enablerepo=remi install –y httpd php php-common php-devel Jika anda gunakan AtomicRepo, gunakan arahan dibawah yum install -y httpd php php-common php-devel 2.3.1 Pemasangan Module bagi PHP Untuk pemasangan module PHP, anda kena tahu bahawa tidak semua module-module tersebut akan digunakan, Sila pilih yang anda ingin gunakan bagi Joomla!: PEAR, PDO, MySQL, Memcache, GD, MBString, MCrypt, XML CentOS 6/5.7 and Red Hat (RHEL) 6.1/6/5.7 yum --enablerepo=remi install –y php-pear php-pdo php-mysql php-pgsql php- pecl-memcache php-gd php-mbstring php-mcrypt php-xml php-gd php-imap php- ldap php-odbc php-pear php-xml php-xmlrpc Jika anda menggunakan Atomic Repo, gunakan arahan dibawah yum install -y php-pear php-pdo php-mysql php-pgsql php-pecl-memcache php- gd php-mbstring php-mcrypt php-xml php-gd php-imap php-ldap php-odbc php- pear php-xml php-xmlrpc 2.3.2 Auto Start Apache dipermulaan Boot Panduan Keselamatan Web Joomla! IntermediateHalaman | 10
  • 11. Mulakan Apache HTTP server (httpd) dan autostart Apache HTTP server (httpd) pada permulaan boot /etc/init.d/httpd start ## use restart after update ## OR ## service httpd start ## use restart after update Untuk mula pada boot time chkconfig --levels 235 httpd on 2.3.3 Periksa pemasangan Apache dan PHP Periksa laman PHP info bagi memastikan Apache, PHP dan modul2 PHP berfungsi Untuk memeriksa sama ada pelayan web anda Berjaya dipasang dengan PHP, sila tambah kandungan berikut kepada fail /var/www/html/test.php <?php phpinfo(); ?> Periksa fail yang telah anda hasilkan tadi dengan muatkannya di pelayar web Jika anda memasangnya di localhost, akses melalui pelayar web anda menerusi URL. http://localhost/test.php, jika anda log masuk secara remote atau jarak jauh atau dari luar, sila gunakan alamat IP. Kita perlu memasang modul-modul php yang diperlukan bagi memasang Joomla!, untuk memasang modul tersebut, menggunakan terminal/putty, sila run arahan berikut. Panduan Keselamatan Web Joomla! IntermediateHalaman | 11
  • 12. yum --enablerepo=remi install -y php-pear php-pdo php-mysql php-pgsql php- pecl-memcache php-gd php-mbstring php-mcrypt php-xml php-gd php-imap php- ldap php-odbc php-pear php-xml php-xmlrpc Selepas itu kita perlu aktifkan sambungan ke Pelayan Web Apache (httpd) –> Open Web server Port (80) pada iptables Firewall (sebagai root sekali lagi) 2.4 Masalah Pemasangan Apache dan PHP serta Penyelesaiannya 1. Jika port 80 iaitu server tidak dapat diakses, sila periksa status : service iptables status, 2. Jika anda dapati port 80 di drop oleh firewall, gunakan kod dibawah: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 3. Restart Iptables Firewall: service iptables restart ## OR ## /etc/init.d/iptables restart Sekiranya tidak menjadi, sila laksanakan arahan berikut : nano /etc/sysconfig/iptables Sila masukkan nilai -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT Selepas baris berikut -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT Sila mulakan semula iptables mengikut arahan service iptables restart Dan InsyaAllah, selepas ini anda akan dapat mengakses pelayan web anda yang telah dipasangkan dengan PHP sekaligus, Seterusnya kita akan memasang pelayan MySQL, bagi membolehkan Joomla! Berfungsi dengan betul. Ini kerana Joomla! memerlukan pangkalan data bagi menyimpan segala maklumat berkaitan. Panduan Keselamatan Web Joomla! IntermediateHalaman | 12
  • 13. 3.0 Pemasangan MYSQL MySQL ialah pangkalan data sumber terbuka yang sangat popular. Oleh kerana disebabkan kelajuan dan kestabilannya, ia digunakan berjuta-juta pelayan web diseluruh dunia. MySQL mempunyai mekanisme keselamatan yang mudah dan efektif (cekap), walaubagaimana pun, banyak langkah yang perlu diambil untuk menjadikan pemasangan lalai @ default yang dilakukan lebih selamat. Langkah-langkah yang diterangkan dibawah akan membantu anda memberikan perlindungan kepada pangkalan data anda, dan yang penting juga anda menambah keselamatan sistem operasi yang dibawahnya seselamat mungkin. Sekiranya anda telah memasang Repo pada Centos diperingkat pemasangan Pelayan Web Apache dan MySQL sebelum ini, anda boleh teruskan kepada no. 3.2.2, Pasang MySQL Database 5.X.XX pada CentOS 6/5.7 3.1 Log masuk Root untuk pemasangan Seperti pemasangan Apache dan PHP, anda mestilah log masuk sebagai root terlebih dahulu, arahannya seperti dibawah. su - ## OR ## sudo –i 3.2 Penambahan REPO Centos Pasangkan Remi repository ## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ## rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6- 5.noarch.rpm ## CentOS 6 and Red Hat (RHEL) 6 ## rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm ## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ## rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5- 4.noarch.rpm ## CentOS 5 and Red Hat (RHEL) 5 ## rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm 3.2.1 Periksa Versi MySQL dalam REPO CentOS 6/5.7 yang ada yum --enablerepo=remi,remi-test list mysql mysql-server Panduan Keselamatan Web Joomla! IntermediateHalaman | 13
  • 14. Output: Loaded plugins: changelog, fastestmirror, presto, refresh-packagekit remi | 3.0 kB 00:00 remi/primary_db | 106 kB 00:00 Available Packages mysql.i686 5.5.17-1.fc14.remi @remi mysql-server.i686 5.5.17-1.fc14.remi 3.2.2 Kemaskini dan ATAU Pasang MySQL Kemaskini atau pasang MySQL 5.X.XX CentOS 5.7/6 yum --enablerepo=remi,remi-test install mysql mysql-server mysql-devel Jika tidak gunakan mana-mana repo atau jika anda gunakan Repo Atomic, sila gunakan arahan berikut. yum install -y mysql mysql-server mysql-devel 3.2.3 Auto Start MySQL dipermulaan Boot dan mulakannya Mulakan pelayan MySQL secara auto pada permulaan boot CentOS 6/5.7 /etc/init.d/mysqld start ## OR ## service mysqld start Laksanakan baris arahan berikut untuk mulakan Pelayan MySQL setiap kali pelayan anda dimulakan semula / direboot. chkconfig --levels 235 mysqld on Pemasangan Apache, PHP dan MySQL telah Berjaya dilakukan, seterusnya kita akan menaikkan tahap keselamatan Apache, PHP dan MySQL yang telah dipasang dalam bab seterusnya, dan selepas ini juga kita akan meningkatkan keselamatan server secara umum dengan pemasangan perisian-perisian Panduan Keselamatan Web Joomla! IntermediateHalaman | 14
  • 15. 4.0 Meningkatkan Tahap Keselamatan Web Apache, PHP dan MySQL (Server) Setelah pemasangan Apache, PHP dan MySQL. Kita perlu meningkatkan keselamatannya bagi mengelakkannya dicerobohi atau maklumat mengenainya diperolehi oleh hackers. 4.1 Melindungi Apache Pada permulaannya, kita akan cuba untuk meningkatkan keselamatan Apache terlebih dahulu. Opsyen pemasangan Apache yang default menyebabkan pelayan web menambah tanda yang memberitahu versi Apache yang anda gunakan, versi sistem operasi anda dan jenis modul yang anda gunakan dalam konfigurasi Apache anda. Dengan memberikan maklumat2 ini, akan menyebabkan lagi mudah si hackers atau penceroboh untuk mengeksploitasi dan mencari maklumat tentang kelemahan yang ada pada Apache dan pelayan web anda.. 4.1.1 Menaiktaraf keselamatan Apache dan Edit httpd.conf Satu cara menambah tahap keselamatan web anda ialah dengan menyahaktifkan seting ini pada HTTP header, tambah opsyen ini kepada fail default httpd.conf : Untuk mencari httpd.conf, sila run arahan ini Updatedb dan selepas itu run arahan locate httpd.conf, Anda perlu mencari Kod berikut dan Ubahkan dari Kod berikut ServerSignature On ServerTokens OS Kepada ServerSignature Off ServerTokens Prod Jika anda menggunakan Mod_security, kita boleh arahkan Mod_security untuk mengubah nama server kepada nama lain, apa yang anda perlu buat ialah, kod untuk ServerTokens mesti diubah seperti pemalar dibawah. Dan ditambah dengan satu baris lain SecServerTokens iaitu arahan dari mod_security Panduan Keselamatan Web Joomla! IntermediateHalaman | 15
  • 16. ServerTokens Full # Gantikan nama server (mod_security directive) SecServerSignature "Microsoft-IIS/5.0" Antara ciri keselamatan lain yang anda boleh tambah pada bahagian header Apache adalah seperti dibawah <IfModule mod_headers.c> Header set X-XSS-Protection: "1; mode=block" Header set X-Content-Security-Policy: "allow 'self'; options inline-script; img$ Header set Strict-Transport-Security: "max-age=43200; includeSubDomains" Header set Cache-Control: "max-age=3600, public, must-revalidate" Header set X-frame-options: "deny" Header set X-Content-Type-Options: "nosniff" #Header set X-Content-Security-Policy: "default-src 'self'" </IfModule> <IfModule mod_headers.c> Header always edit Set-Cookie ^(.*)$ '$1;secure; httponly;' Header set X-Frame-Options sameorigin Header set X-Content-Type-Options nosniff Header set X-XSS-Protection '1; mode=block' Header set X-Permitted-Cross-Domain-Policies 'master-only' Header set Content-Security-Policy none Header set Cache-Control 'no-cache, no-store, must-revalidate' Header set Pragma 'no-cache' Header set Expires '-1' Header unset X-Powered-By Header unset X-Pingback Header always set Strict-Transport-Security "max-age=63072000; includeSubDomain$ </IfModule> 4.1.2 Jalankan Apache dibawah pengguna yang betul dan kumpulan yang betul Selalunya, pemasangan default untuk Apache berjalan dibawah pengguna nobody dan kumpulan nobody. Walaupun ini lebih baik dari konfigurasi dulu yang dijalankan oleh pengguna root, ia masih lagi akan hadapi banyak masalah. Ini kerana pengguna nobody dan kumpulan digunakan oleh pelayan web anda untuk beberapa proses sistem yang lain. Jika salah satu sistem ini diganggu, si penyerang juga berkemungkinan mempunyai akses kepada pelayan Apache dan fail2, begitu juga jika Apache diganggu atau diceroboh, maka si penyerang boleh juga merosakkan sub-sistem lain. Menggunakan pengguna dan kumpulan berbeza pada Apache amat lah disarankan. Anda boleh set dalam httpd.conf menggunakan pemalar berikut: User apache Group apache Opsyenal : Anda boleh ubah pemilik dan Kumpulan apache kepada httpd mengikut cara dibawah. Panduan Keselamatan Web Joomla! IntermediateHalaman | 16
  • 17. Anda boleh menghasilkan pengguna dan grup menggunakan arahan berikut (sebagai root) # groupadd httpd # useradd httpd -g httpd -d /dev/null -s /sbin/nologin # chown -R root:root /etc/httpd # chmod -R go-w /etc/httpd # chmod -R go-r /etc/httpd/conf # chmod -R go-r /etc/httpd/logs 4.1.2 Kawal Direktori dan Akses kepada fail Apache memiliki kawalan bagi mengaksesnya yang boleh digunakan untuk mengetatkan keselamatan pelayan web anda.has access controls that can be used to tighten your security. Khususnya, anda mahu untuk menyekat akses untuk akses kepada mana-mana fail di luar root web anda. Ini menghalang pengguna dari memuat turun fail sistem atau membaca fail konfigurasi untuk aplikasi web anda jika pelayan anda tersalah dikonfigurasikan. Untuk mencapainya akan mengambil Cuma dua langkah, pertama menambah kod dibawah kepada fail default httpd.conf: pssstttt… cara untuk cari httpd.conf dengan cepat dengan taipkan command locate httpd.conf <Directory /> Order Deny,Allow Deny from All Options None </Directory> Konfigurasi ini secara efektifnya menghalang akses kepada semua fail kepada sistem fail anda. Langkah seterusnya Langkah seterusnya adalah untuk secara terpilih membolehkan akses kepada fail-fail di dalam direktori akar web anda. Jika anda menjalankan pelbagai hos maya (Vhosts), anda akan perlu memasukkan ini dalam konfigurasi tuan rumah setiap maya. Untuk contoh ini, mari kita mengatakan bahawa root web anda / home / user / web. Untuk membolehkan akses kepada fail-fail dalam akar web, tambah ini konfigurasi anda: <Directory /home/user/web> Order Allow,Deny Allow from All </Directory> Begitu juga, anda mungkin perlu untuk secara terpilih menyekat akses kepada fail tertentu. Satu teknik biasa untuk menyekat akses ke. Htaccess. Walau bagaimanapun, terdapat juga Panduan Keselamatan Web Joomla! IntermediateHalaman | 17
  • 18. sering fail yang anda mahu menyekat akses. Anda mungkin mahu menyekat akses kepada semua fail dengan. Inc lanjutan (PHP termasuklah) kerana mereka mungkin mengandungi maklumat sensitif (seperti butir-butir pangkalan data) atau jika anda menggunakan sumber sistem kawalan Subversion, anda mungkin perlu untuk menyekat fail. Svn dijana apabila melakukan checkout kod. Untuk menghalang fail tertentu seperti Htaccess, tambah ini pada httpd.conf anda: <Files ~"^/.htacces"> Order Deny,Allow Deny from All </Files> Untuk sembunyikan semua fail yang berakhir dengan .svn, anda boleh gunakan kod berikut: <Files ~"/.svn$"> Order Deny,Allow Deny from All </Files> Disable execution mana-mana skrip dalam folder images. Masukkan kod berikut dalam fail .htaccess dan letakkan dalam folder images. # secure directory by disabling script execution AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI 4.1.4 Tutup mana-mana modul yang tidak digunakan Selalunya apabila sesuatu berkaitan dengan Keselamatan, Kurang tu maksudnya lebih baik. Ini lebih2 lagi berkaitan dengan modul Apache. Anda perlu menyahaktif modul yang anda tidak gunakan dan tidak perlu. Memang selalu ada risiko dengan penggunaan konfigurasi secara default. Cara paling sesuai ialah dengan menyahaktifkan modul tersebut. Jika anda gunakan mod_php, apa yang perlu buat ialah dengan membuang atau letakkan tanda komen pada baris LoadModule dalam httpd.conf untuk mana-mana modul yang anda tidak gunakan. Jika modul tersebut dikompul bersama Apache, anda perlu kompil semula pelayan Web Apache anda. Untuk dapatkan modul mana yang di kompil bersama, gunakan arahan berikut dalam ssh anda: httpd -l Antara modul yang dikecualikan ialah mod_userdir, mod_info, mod_status dan mod_includes Anda juga dicadangkan untuk menutup modul webdav sekiranya tidak menggunakannya. Panduan Keselamatan Web Joomla! IntermediateHalaman | 18
  • 19. Mod_dav 4.1.5 Berhati-hati dengan penggunaan .htaccess Telah dinyatakan sebelum ini bahawa adalah sangat penting untuk melindungi fail .htaccess dari dimuat turun. .htaccess boleh sebabkan masalah keselamatan yang lain. Bergantung kepada opsyen mana yang diaktifkan dalam Apache, .htaccess boleh mengatasi seting Apache. Kalau tidak berhati-hati, pengguna yang tidak mahir boleh masukkan seting yang boleh mengganggu keselamatan pelayan web anda. Anda boleh gunakan arahan opsyen untuk nyahaktifkan kebenaran dalam blok/had tertentu sahaja. Contoh jika perumah web anda ialah /home/user/web, anda boleh gunakan pemalar berikut dalam konfigurasi Apache <Directory /home/user/web> AllowOverride None </Directory> Ada masanya Overrides/mengatasi kebenaran ini diperlukan. Contohnya untuk menyokong permalinks, Joomla! perlukan .htaccess. Jika anda perlukannya, jangan lupa ubah nama asal fail htaccess.txt asal dalam direktori Joomla! Kepada .htaccess, pastikan anda lindunginya terlebih dahulu. 4.1.6 Nyahaktifkan FollowSymLinks Pautan Symbolic boleh dedahkan fail dan direktori dalam sistem fail yang anda tidak mahu dedahkan links/pautan fail penting anda. Apache menyokong FollowSymLinks sebagai seting untuk pilihan. Apabila opsyen ini ditetapkan, Apache akan benarkan pengguna untuk mengikut pautan simbolik kepada fail yang berada diluar root web anda.Anda boleh sekat perbuatan ini dengan menggunakan: Options none Dalam blok Direktori. Atau jika anda aktifkan opsyen lain, anda perlu gunakan kod berikut: Options -FollowSymLinks 4.1.7 Menyahaktif HTTP TRACE Disable HTTP TRACE dengan memasukkan variable TraceEnable off 4.1.8 Aktikan penggunaan Mod_rewrite Panduan Keselamatan Web Joomla! IntermediateHalaman | 19
  • 20. Untuk Aktifkan Penggunaan mod_rewrite bagi kegunaan SEF. Anda perlu edit Apache httpd.conf dan cari LoadModule rewrite_module modules/mod_rewrite.so Jika ada # dihadapan LoadModule rewrite_module modules/mod_rewrite.so seperti berikut #LoadModule rewrite_module modules/mod_rewrite.so Sila buangkan # dan tinggalkan LoadModule rewrite_module modules/mod_rewrite.so Sila restart/mulakan semula Apache dengan arahan service httpd restart Peringatan, anda haruskan pastikan .htaccess adalah aktif (AllowOverride All) untuk membolehkan ianya berfungsi. 4.2 Melindungi PHP PHP adalah salah satu bahasa pengaturcaraan popular untuk pembangunan laman web atau aplikasi web pada hari ini. Oleh yang sedemikian, para hackers sentiasa mencari cara untuk mengeksploitasi skrip PHP untuk mendapatkan akses tanpa kebenaran, atau untuk dapatkan kerosakan kepada sistem anda. Melindungi keselamatan PHP adalah sangat penting dalam mana-mana aplikasi web yang anda gunakan atau hasilkan. Apabila melihat kepada cara melindungi aplikasi PHP, ada dua cara sebenarnya, pertama ialah melindungi PHP menerusi php.ini dan yang seterusnya menerusi penggunaan kod yang ditulis dengan selamat untuk menghalang dari dieksploitasi. 4.2.1 Meningkatkan Keselamatan PHP melalui php.ini Ada beberapa seting dalam PHP sendiri yang boleh memberi kesan terhadap keselamatan aplikasi anda. Tetapan ini boleh dikawal melalui fail php.ini. Dengan mengawal tingkah laku lalai PHP sendiri, anda mengurangkan potensi kerosakan yang disebabkan oleh kesilapan pengekodan. 4.2.2 Kill Register Globals Panduan Keselamatan Web Joomla! IntermediateHalaman | 20
  • 21. Sebelum versi 4.2.0, PHP menggunakan pemalar global untuk sediakan akses kepada pemalar yang dimasukkan dari permintaan GET dan POST. Ciri-ciri ini telah dihapuskan kerana ia menimbulkan masalah keselamatan. Penyerang mungkin menggunakannya untuk memanipulasikan pemalar didalam pelbagai senario. Elakkan dari menggunakan skrip yang memerlukan register_globals kerana ia biasanya tanda-tanda skrip yang berpotensi tidak selamat atau yang belum disenggarakan atau dikemaskini baru-baru ini. Pastikan ciri ini sentiasa ditutup. 4.2.3 Mengawal Akses kepada fail Skrip PHP boleh menggunakan fungsi fopen untuk membaca dan menulis fail pada sistem fail pelayan web. Walaupun ciri ini penting dan ramai yang perlukannya, Namun ia juga boleh mendatangkan masalah keselamatan. Skrip php yang mempunyai ralat boleh menyebabkan pengguna nakal untuk membaca sistem fail atau menulis semula fail. Ada beberapa seting dalam PHP yang membantu anda mengawal fail PHP yang anda boleh akses. Salah satu pilihan yang anda boleh gunakan dalam php.ini ialah open_basedir. Pilihan ini mengambil sub-directory sebagai nilainya sebagai contoh /home/user/html/. Ia menghadkan PHP’s I/O kepada sub-directory tersebut yang menghalang PHP dari baca atau tulis kepada mana-mana fail diluar sub-direktori yang telah ditetapkan itu Anda juga boleh gunakan safe_mode dalam php.ini untuk mengawal kawalan akses kepada fail. Dalam safe mode, PHP hanya boleh membuka fail yang dimiliki oleh pengguna yang sama seperti pelayan web anda. Ia juga menghalang PHP dari menjalankan binaries. Jika anda perlukan PHP untukm mengakses fail yang dimiliki oleh pengguna lain, anda boleh gunakan safe_mode_gid. Ini akan menghadkan akses PHP hanya kepada fail yang dimiliki oleh kumpulan yang dirun oleh pelayan web anda. 4.2.4 Sembunyikan Versi PHP PHP telah dikeluarkan dalam beberapa versi, dan versi terkini ialah PHP 5.4.0, dan PHP versi-versi lebih lama kebiasaannya mempunyai masalah keselamatan, jadi adalah lebih baik jika anda dapat sembunyikan versi PHP anda bagi mengelakkan hackers mencari kelemahan PHP dan seterusnya menceroboh sistem anda, oleh yang sedemikian, sila pastikan expose_php = off dalam php.ini. Salah satu lagi cara dimana PHP dapat dilihat ialah dengan memaparkan ralat. Kerana ralat Panduan Keselamatan Web Joomla! IntermediateHalaman | 21
  • 22. tersebut biasanya memaparkan maklumat-maklumat path atau seting yang mana biasanya akan dicari oleh hackers, mesej ralat ini hanya sesuai dipaparkan semasa proses pembangunan dan bukan semasa ia dijalankan dalam server yang akan digunakan secara live Anda boleh matikan ciri ini dengan menetapkan seting: display_errors = Off dalam php.ini. Ciri berguna yang anda boleh lakukan sekiranya masih perlu log error ialah dengan mengaktifkan ciri log ke fail, caranya dengan seting php : log_errors = On dalam php.ini. 4.2.5 Menyahaktifkan fungsi-fungsi bahaya PHP Oleh kerana PHP adalah salah satu bahasa pengaturcaraan yang digunakan sistem, terdapat fungsi-fungsi bahaya yang anda perlu tutup atau nyahaktifkan bagi keselamatan laman web anda. Anda perlu edit disable_functions = exec, passthru, shell_exec, system, proc_open, popen, show_source, symlink dalam php.ini diskfreespace,dl,escapeshellarg,escapeshellcmd,exec,fpaththru,fsocket_open, getmypid,getmyuid,highlight_file,ignore_user_abort,ini_alter,leak,limit,lin k,listen,pack,parse_ini_file,passthru,php_uname,phpinfo,popen,posix,posix_c termid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid ,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp, posix_getpid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,pos ix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid, posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyn ame,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_termina te,set_time_limit,shell_exec,show_source,system,tmpfile,virtual 4.2.5.1 Nyahaktif Info & Fungsi bahaya PHP Untuk yang paranoid, Anda juga boleh menyahaktifkan PHP info, kerana didalamnya terdapat banyak maklumat berkaitan pemasangan PHP didalamnya, anda juga boleh masukkan nilai phpinfo kedalam maklumat disable_functions = phpinfo 4.2.5.2 Menanda Cookie dengan HTTPOnly Nyahaktifkan Cookie yang tidak ditandakan sebagai HTTPOnly. Cookie HTTPOnly tidak boleh dibaca oleh skrip dari klien dan oleh sebab itu menandakan cookie sebagai HTTPOnly akan menambah satu lagi lapisan perlindungan menentang serangan Cross-site Scripting, tetapkan dalam php.ini kod berikut. session.cookie_httponly = True 4.2.6 Pemasangan SUHOSIN Untuk menambah ciri keselamatan pada PHP, adalah digalakkan untuk anda memasang SUHOSIN. Lebih dikenali sebagai Hardened PHP Project. Panduan Keselamatan Web Joomla! IntermediateHalaman | 22
  • 23. Sebelum anda memasang SUHOSIN, anda memerlukan Kompiler, dan ianya perlu dipasang terlebih dahulu. yum -y install gcc gcc-c++ make automake glibc selepas itu baru jalankan arahan berikut, compiler ini boleh dibuang selepas pemasangan selesai dilakukan. Sila run arahan cd /usr/local/src Selepas ini run wget http://download.suhosin.org/suhosin-0.9.33.tgz wget http://download.suhosin.org/suhosin-0.9.3.tar.gz.sig gpg --verify suhosin-0.9.33.tar.gz.sig tar -zxvf suhosin-0.9.33.tgz cd suhosin-0.9.33 /usr/bin/phpize ./configure make && make install Edit php.ini dan pastikan anda aktifkan pada extension="suhosin.so" kemudian, sila restart kembali Apache service httpd restart 4.2.7 Ringkasan Peningkatan Keselamatan PHP Secara ringkasnya anda perlu berbuat perkara dibawah ini untuk secure kan PHP allow_url_fopen = Off ; Disable URLs for file handling functions register_globals = Off ; Make sure this hellish fiend is dead open_basedir = /var/www/htdocs/files ; Restrict file handling functions to a subdirectory safe_mode = Off ; Disable this, the next is often more practical safe_mode_gid = On ; Enable safe mode with group check safe_mode_exec_dir = /var/www/binaries ; Restrict execution functions to this directory safe_mode_allowed_env_vars = PHP_ ; Restrict access to environment variables max_execution_time = 30 ; Max script execution time max_input_time = 60 ; Max time spent parsing inputs memory_limit = 16M ; Max memory size used by one script upload_max_filesize = 2M ; Max upload file size post_max_size = 8M ; Max post size display_errors = Off ; Do not show errors on screen log_errors = On ; Log errors to log file expose_php = Off ; Hide presence of PHP disable_functions = exec, passthru, shell_exec, system, proc_open, popen, show_source, symlink enable_dl = Off Panduan Keselamatan Web Joomla! IntermediateHalaman | 23
  • 24. # Apache configuration or .htaccess <filesmatch> Order allow,deny Deny from all </filesmatch> 4.3 Melindungi MySQL MySQL adalah pangkalan data yang digunakan oleh Joomla!, Keselamatan Pangkalan Data MySQL adalah sangat penting, jika ia tidak dipasangkan dengan betul, si penyerang boleh mendapatkan akses kepada username root pelayan web anda. Untuk meningkatkan keselamatan MySQL, maka perkara dibawah perlu dilakukan. Amaran : Saya menyarankan anda menetapkan katalaluan berlainan bagi root system server anda dan root bagi MySQL, jika anda menggunakan katalaluan yang sama, ini memudahkan hackers untuk menceroboh dan melakukan kerosakan kepada sistem web anda. 4.3.1 Tujuan Pemasangan MySQL lebih selamat Set (Ubah) root password • Buang pengguna anonymous • Tidak benarkan root login secara jarak jauh • Buang pangkalan data ujian dan akses kepadanya • Muat semula jadual hak (privilege tables) 4.3.2 Mulakan MySQL Secure Installation /usr/bin/mysql_secure_installation Output: NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH LANGKAH CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Panduan Keselamatan Web Joomla! IntermediateHalaman | 24
  • 25. Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above Langkahs, your MySQL installation should now be secure. Thanks for using MySQL! Nota: Jika anda tidak mahu gunakan fungsi “MySQL Secure Installation” sekurang-kurangnya, tukarkan kata laluan root. mysqladmin -u root password [your_password_here] ## Example ## mysqladmin -u root password myownsecrectpass 4.3.3 Bersambung ke MySQL dan hasilkan User dan DB Untuk menguruskan pangkalan data MySQL anda perlu bersambung ke pangkalan data dan Panduan Keselamatan Web Joomla! IntermediateHalaman | 25
  • 26. memiliki kata laluan anda sendiri, topik kali ini akan membantu anda untuk berhubung dengan pangkalan data MySQL menggunakan Nama pengguna dan kata laluan. Untuk ini kita akan mencipta pengguna baru, kata laluan dan pangkalan data baru secara manual. Menyambung ke pangkalan Data MySQL(localhost) dengan katalaluan mysql -u root -p ## OR ## mysql -h localhost -u root -p Hasilkan Pangkalan Data, Cipta pengguna MySQL dan mengaktifkan sambungan secara Jarak jauh ke Pangkalan Data MySQL Contoh menggunakan parameter dibawah: DB_NAME = webdb USER_NAME = webdb_user REMOTE_IP = 10.0.15.25 (Boleh tukar dengan “localhost”) PASSWORD = password123 PERMISSIONS = ALL ## CREATE DATABASE ## mysql> CREATE DATABASE webdb; ## CREATE USER ## mysql> CREATE USER 'webdb_user'@'10.0.15.25' IDENTIFIED BY 'password123'; ## GRANT PERMISSIONS ## mysql> GRANT ALL ON webdb.* TO webdb_user@'10.0.15.25'; ## FLUSH PRIVILEGES, Tell the server TO reload the GRANT TABLES ## mysql> FLUSH PRIVILEGES; 4.3.4 Nyahaktif sambungan ke Pelayan MySQL dari luar Nyahaktifkan Kawalan jarak jauh ke Pelayan Pangkalan Data MySQL –> Buka MySQL Port (3306) pada Firewall iptables (sebagai root sekali lagi) 1. Bagi Periksa Status firewall Iptables: service iptables status Arahan lain bagi iptables untuk mula, henti dan mulakan semula adalah seperti dibawah. service iptables start service iptables stop service iptables restart Mulakan iptables masa mulakan server Panduan Keselamatan Web Joomla! IntermediateHalaman | 26
  • 27. chkconfig iptables on 4.3.4.1 Firewall dan Status Port MySQL 2. Masukkan kod berikut untuk tutup port 3306 MySQL: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j DROP 3. Mulakan semula Firewall Iptables: service iptables restart ## OR ## /etc/init.d/iptables restart Menambah ciri/fitur keselamatan kepada Pelayan Web anda dan PHP menggunakan perisian tambahan, untuk itu kita akan menggunakan 4.3.5 Perlindungan tambahan MySQL Untuk menghalang MySQL daripada membuka socket rangkaian, parameter berikut perlu ditambah pada seksyen [mysqld] didalam fail konfigurasi MySQL iaitu my.cnf : [mysqld] skip-networking Salah satu penyelesaian lain ialah memaksa MySQL untuk hanya bersambung ke localhost dengan menambah baris berikut pada seksyen [mysqld] didalam fail konfigurasi MySQL iaitu my.cnf : [mysqld] bind-address=127.0.0.1 Jika sekiranya aplikasi anda mempunyai masalah yang membolehkan MySQL untuk membaca fail yang berada dalam server anda, parameter berikut perlu ditambah pada seksyen [mysqld] didalam fail konfigurasi MySQL iaitu my.cnf : [mysqld] local-infile=0 4.4 Pengenalan dan Pemasangan Mod_security Untuk meningkatkan Keselamatan server anda boleh gunakan Aplikasi seperti Mod_security sebagai Firewall bagi Apache, perlu diingat. Walaupun kita menggunakan Firewall dan telah menutup sebanyak mungkin ports server, tetapi anda masih membuka Port 80 dan 443 bagi Panduan Keselamatan Web Joomla! IntermediateHalaman | 27
  • 28. kegunaan Web dan HTTPS. ModSecurity adalah satu modul Apache untuk bertindak sebagai firewall aplikasi web, yang membawa satu lagi lapisan keselamatan kepada laman web anda. Pada masa kini, ia adalah sangat penting untuk mempunyai perlindungan ini supaya laman web anda akan dilindungi daripada ancaman Internet. Berdasarkan pengalaman saya, sistem pengesan pencerobohan secara purata mengesan 10 - 15 ancaman internet setiap pelayan setiap hari. Ini termasuk serangan brute-force, suntikan SQL, serangan XSS dan banyak lagi. Apache ialah pelayan web yang paling popular di dunia. Bagi mereka yang menggunakan Apache, saya amat menyarankan agar anda mempunyai Mod_Security diaktifkan dalam pelayan web anda. Anda tidak akan tahu apabila laman web anda menjadi sasaran, atau mengapa ia menjadi sasaran. Perlindungan adalah penawar terbaik! 4.4.1 Pemasangan Mod_security Saya akan menggunakan standard CentOS 6 dengan Apache dipasang menggunakan yum dilarikan sebagai DSO. Pembolehubah yang digunakan adalah seperti di bawah OS: CentOS 6 32bit Apache directory: /etc/httpd Apache configuration: /etc/httpd/conf/httpd.conf ModSecurity configuration: /etc/httpd/conf.d/modsecurity.conf Pasang Apache-devel $ yum install -y httpd* atau $ yum install –y httpd-devel $ chkconfig httpd on $ service httpd start Pasang pakej-pakej lain yang diperlukan untuk memasang mod_security $ yum install pcre* libxml2* libcurl* lua* libtool openssl -y Selepas itu, anda perlu memuatturun fail mod_security dari http://www.modsecurity.org/download/, untuk pemasangan kali ini, kita akan menggunakan modsecurity-apache_2.7.7.tar.gz dan anda boleh mendapatkan menggunakan Kod berikut; cd /usr/local/src wget https://www.modsecurity.org/tarball/2.7.7/modsecurity- apache_2.7.7.tar.gz tar -xzf modsecurity-apache_2.7.7.tar.gz Panduan Keselamatan Web Joomla! IntermediateHalaman | 28
  • 29. Selepas itu cd modsecurity-apache* ./configure make && make install 4.4.2 Ralat pemasangan Kalau ada error tentang APR dan APU yang mahukan anda memasukkan path atau mencari APR dan APU ./configure --with-apxs2=/usr/local/apache/bin/apxs --with- apr=/usr/local/src/httpd-2.2.22/srclib/apr --with-apu=/usr/local/src/httpd- 2.2.22/srclib/apr-util Sila periksa source folder httpd tersebut untuk dapatkan kod sebenar, iaitu versi sumber Apache (Contoh digunakan diatas menggunakan versi 2.2.22) 4.4.3 Konfigurasi dan Seting Mod_security Bagi membolehkan mod security menjalankan tugasnya, anda perlu mengkonfigurasikannya terlebih dahulu. Untuk itu, sila buat salinan fail konfigurasi mod_security ke direktori konfigurasi Apache cp modsecurity.conf-recommended /etc/httpd/conf.d/modsecurity.conf Anda perlu mengaktifkan module mod_security dan unique_id dalam fail konfigurasi Apache, Sila edit fail httpd.conf menggunakan kod berikut nano /etc/httpd/conf/httpd.conf Tambah baris dibawah LoadModule security2_module modules/mod_security2.so LoadModule unique_id_module modules/mod_unique_id.so mod_unique_id.so mungkin telah ada dalam httpd.conf berdasarkan versi Apache, jika telah ada, anda hanye perlu buangkan # yang berada dihadapannya untuk mengaktifkannya. Untuk memulakan perlindungan mod_security, sila edit fail konfigurasi mod_security menggunakan kod berikut nano /etc/httpd/conf.d/modsecurity.conf Selepas itu cari baris berikut SecRuleEngine DetectionOnly Dan gantikan dengan SecRuleEngine On Panduan Keselamatan Web Joomla! IntermediateHalaman | 29
  • 30. Dalam folder mod_sec anda, ada satu fail dinamakan Unicode.mapping, fail ini perlu disalin ke folder httpd/conf.d, arahan seperti berikut. cp unicode.mapping /etc/httpd/conf.d/unicode.mapping Selepas itu anda perlu mulakan semula Apache bagi membolehkan konfigurasi sebelum ini dapat dimuatkan dengan nilai baru, gunakan kod dibawah untuk restart Apache service httpd restart Tahniah, Anda telah Berjaya memasang mod security, maka tiba masanya untuk kita mendapatkan rule set, atau peraturan-peraturan asas terkini berkaitan mod security, anda boleh dapatkan peraturan asas Mod Security dari http://modsecurity.org/ Anda boleh memuat turun versi terkini mod_security atau Peraturan Asas (Core Rules) terkini dari laman web ini. Klik pada pautan yang disediakan atau, anda boleh gunakan arahan dibawah sebagai contoh. Selepas itu anda boleh ekstrak core rules tersebut ke /etc/httpd/conf/crs Muat turun mod_security core rules set wget http://downloads.sourceforge.net/project/mod-security/modsecurity- crs/0-CURRENT/modsecurity-crs_2.2.5.tar.gz?r=http%3A%2F%2Fsourceforge.net %2Fprojects%2Fmod-security%2Ffiles%2Fmodsecurity-crs%2F0-CURRENT %2F&ts=1333490692&use_mirror=jaist Selepas mengekstrak fail tersebut masukkan kod berikut kedalam httpd.conf # Mod Security <IfModule security2_module> Include /etc/httpd/conf/crs/modsecurity_crs_10_config.conf Include /etc/httpd/conf/crs/activated_rules/*.conf Include /etc/httpd/conf/crs/base_rules/*.conf Include /etc/httpd/conf/crs/optional_rules/*.conf Include /etc/httpd/conf/crs/slr_rules/*.conf </IfModule> Selepas itu sila mulakan kembali Apache anda. Anda boleh menguji mod_security dengan melaksanakan arahan berikut tail –f /home/shaifful/logs/error_log Sekiranya semasa menggunakan Joomla, terdapat banyak masalah dengan mod_security contohnya anda mendapat halaman page 403 atau tiba-tiba halaman menjadi kosong, dan anda boleh periksa dengan melihat log error_log anda, anda boleh hasilkan satu fail Panduan Keselamatan Web Joomla! IntermediateHalaman | 30
  • 31. whitelist, untuk override atau bypass mod_security menggunakan ID setiap rules atau peraturan. Contoh error adalah seperti dibawah. [Sat Apr 07 07:03:32 2012] [error] [client 180.74.108.208] ModSecurity: Access denied with code 403 (phase 2). Pattern match "(?i:(?: b(?:(?:s(?:ys.(?:user_(?:(?:t(?:ab(?:_column|le)|rigger)|object| view)s|c(?:onstraints|atalog))|all_tables|tab)|electb.{0,40 }b(?:substring|users?|ascii))|m(?:sys(?:(?:queri|ac)e|relationship| column|object)s|ysql.(db|user))|c(?:onstraint ..." at ARGS_ NAMES:table_name. [file "/etc/httpd/conf/crs/base_rules/modsecurity_crs_41_sql_injection_attacks.co nf"] [line "116"] [id "950007"] [rev "2.2.4"] [msg "Blind SQL Injection Attack"] [data "table_name"] [severity "CRITICAL"] [tag "WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] [hostname "www.xxxxx.edu.my"] [uri "/administrator/in dex.php"] [unique_id "T392RAEJBekAAEr2BEgAAAAD"] Dalam error_log diatas anda boleh dapatkan error id pada bahagian [id "950007"] Yang akan digunakan untuk menyelesaikan masalah error ini, apa yang anda harus lakukan ialah dengan menghasilkan satu fail untuk bypass mod_security, untuk itu Masukkan kod berikut kedalam kod sebelum ini Include /etc/httpd/conf/crs/bypass_mod_by_id.conf Seperti dibawah <IfModule security2_module> Include /etc/httpd/conf/crs/modsecurity_crs_10_config.conf Include /etc/httpd/conf/crs/activated_rules/*.conf Include /etc/httpd/conf/crs/base_rules/*.conf Include /etc/httpd/conf/crs/optional_rules/*.conf Include /etc/httpd/conf/crs/slr_rules/*.conf Include /etc/httpd/conf/crs/bypass_mod_by_id.conf </IfModule> Selepas itu hasilkan satu fail baru didalam folder /etc/httpd/conf/crs/ iaitu fail bypass_mod_security_by_id.conf dengan menggunakan arahan nano /etc/httpd/conf/crs/bypass_mod_by_id.conf dan masukkan kod berikut <LocationMatch "/administrator/index.php"> SecRuleRemoveById 950007 </LocationMatch> Masukkan ID yang anda dapati sebelum ini seperti berikut SecRuleRemoveById 950007 Anda boleh masukkan ID lain seperti berikut, sekiranya masih ada lagi ID yang perlu dilangkau bagi menggunakan Joomla anda. Panduan Keselamatan Web Joomla! IntermediateHalaman | 31
  • 32. Contoh : SecRuleRemoveById 950007 930097 700900 Pastikan LocationMatch adalah mengikut lokasi dan nama fail yang bermasalah. Contohnya <LocationMatch "/administrator/index.php"> Dan sila restart balik webserver Apache dengan arahan berikut: service httpd restart Semoga anda dapat menggunakan mod_security dengan sebaiknya. p/s sebelum terlupa, untuk laman web berlainan yang hendak dibypass, sila gunakan <LocationMatch "/URL_PAGE_YANG_HENDAK_DIBYPASS"> SecRuleRemoveById 950007 </LocationMatch> 4.5 Pengenalan dan Pemasangan suPHP suPHP ialah satu cara untuk menambahkan ciri keselamatan bagi system laman web yang ada pada persekitarannya Multi user atau Virtualhost. Iaitu, dengan menggunakan suPHP, hanya user yang dibenarkan sahaja boleh RUN skrip dalam folder user tersebut sahaja. Iaitu hanya fail yang dimiliki oleh user tersebut sahaja yang boleh dirun dalam folder tersebut. suPHP boleh membantu persekitaran Multiuser kerana ia pengguna tersebut sendiri mempunyai akses dan kawalan kepada fail-fail yang dimilikinya. 4.5.1 Pemasangan suPHP Pembolehubah yang akan digunakan dalam proses ini adalah seperti berikut. Server: CentOS 6.2 32bit Server IP: 199.XXX.XXX.XXX User: shaifful Web directory: /home/shaifful/public_html Website: http://www.test.apasaja.biz/ Untuk mulakan pemasangan suPHP, lakukan seperti mana arahan dibawah, kita akan muatturun mod_suphp dari web dan akan memasangnya kedalam sistem web. cd /usr/local/src wget ftp://rpmfind.net/linux/dag/redhat/el6/en/i386/dag/RPMS/mod_suphp- 0.7.1-1.el6.rf.i686.rpm rpm –Uhv mod_suphp-0.7.1-1.el6.rf.i686.rpm Panduan Keselamatan Web Joomla! IntermediateHalaman | 32
  • 33. Untuk 64bit, gantikan wget diatas kepada seperti berikut. wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/mod_suphp- 0.7.1-1.el6.rf.x86_64.rpm Pasang Apache, php dan Kompiler, jika pemasangan ini telah dibuat sebelum ini, anda boleh tinggalkan bahagian ini/langkau bahagian ini. yum install -y httpd* php gcc-c++ Selepas ini, kita akan memuat turun fail suphp dari web suphp dan akan dikompilkan, sila pastikan versi yang anda muat turun sebelum ini adalah versi yang sama dengan versi fail yang akan anda pasang sebentar lagi. cd /usr/local/src wget http://www.suphp.org/download/suphp-0.7.1.tar.gz tar -xzf suphp-0.7.1.tar.gz cd suphp-* Untuk langkah seterusnya, anda perlu mendapatkan lokasi bagi apr-1-config, jadi. Anda gunakan arahan berikut. which apr-1-config /usr/bin/apr-1-config  Lokasi bagi apr-1-config Selepas itu, kita akan memasang/compile suphp menggunakan lokasi pembolehubah apr-1-config dengan menggunakan arahan seperti dibawah. ./configure --with-apr=/usr/bin/apr-1-config --with-setid-mode=owner make make install 4.5.2 Konfigurasi suPHP Setelah proses diatas selesai, kita akan mencipta user baru berserta dengan folder baru dan fail lognya yang tersendiri. Laksanakan arahan seperti dibawah. useradd -m shaifful mkdir /home/shaifful/public_html mkdir /home/shaifful/logs touch /home/shaifful/logs/error_log touch /home/shaifful/logs/access_log Selepas itu, cipta fail konfigurasi dalam Apache untuk hasilkan VirtualHost dibawah user shaifful. Kita ciptakan virtual host dalam direktori Apache conf.d: nano /etc/httpd/conf.d/vhost.conf Dan tambah baris berikut: NameVirtualHost *:80 Panduan Keselamatan Web Joomla! IntermediateHalaman | 33
  • 34. <VirtualHost *:80> ServerName test.apasaja.biz ServerAlias www.test.apasaja.biz ServerAdmin webmaster@test.apasaja.biz DocumentRoot /home/shaifful/public_html ErrorLog /home/shaifful/logs/error_log CustomLog /home/shaifful/logs/access_log combined suPHP_Engine on #suPHP_UserGroup shaifful shaifful AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml suPHP_AddHandler x-httpd-php </VirtualHost> Ubah PHP handler dari mod_php kepada mod_suphp. Kami perlukan untuk mengedit fail konfigurasi mod_suphp di /etc/httpd/conf.d/suphp.conf dan buangkan # pada baris berikut: LoadModule suphp_module modules/mod_suphp.so Dan buangkan fail konfigurasi mod_php: rm -Rf /etc/httpd/conf.d/php.conf Pastikan fail konfigurasi suPHP terletak di /etc/suphp.conf memiliki nilai seperti dibawah: [global] logfile=/var/log/httpd/suphp_log loglevel=info webserver_user=apache docroot=/var/www/html:${HOME}/public_html env_path=/bin:/usr/bin umask=0022 min_uid=500 min_gid=500 ; Security options allow_file_group_writeable=false allow_file_others_writeable=false allow_directory_group_writeable=false allow_directory_others_writeable=false ;Check whether script is within DOCUMENT_ROOT check_vhost_docroot=true ;Send minor error messages to browser errors_to_browser=false [handlers] ;Handler for php-scripts x-httpd-php="php:/usr/bin/php-cgi" ;Handler for CGI-scripts x-suphp-cgi=execute:!self suPHP menghasilkan ralat kerana ia sedang mencari suphp.conf dibawah direktori /usr/local/etc. Jadi kita kena hasilkan pautan symbolic kepada /etc/suphp.conf yang sebenarnya: ln -s /etc/suphp.conf /usr/local/etc/suphp.conf Panduan Keselamatan Web Joomla! IntermediateHalaman | 34
  • 35. 4.5.3 Pemilikan dan Kebenaran Kita juga perlu baiki kebenaran dan pemilikan bagi pengguna shaifful: chmod 755 /home/shaifful chown shaifful.shaifful /home/shaifful/public_html -Rf find /home/shaifful -type d -exec chmod 755 {} ; find /home/shaifful -type f -exec chmod 644 {} ; Sekarang konfigurasi suPHP sudah selesai, kita perlu mulakan semula perkhidmatan Apache dan juga mempastikan ianya dimulakan bersama server apabila ia dimulakan semula.: chkconfig httpd on service httpd restart Apabila server dimulakan semula, anda telah selesai membuat konfigurasi. User shaifful tersebut boleh memuat naik laman web anda ke direktori yang telah anda hasilkan sebelum ini di /home/shaifful/public_html. SuPHP akan benarkan anda untuk jalankan fail yang hanya dimiliki oleh pengguna tersebut. Jadi langkah membaiki kebenaran dan pemilikan sebelum ini sangat penting untuk membaikpulih kebenaran dan pemilikan fail, atau jika tidak. Pelayan web akan memaparkan “Internal Server Error” pada pelayar web anda. Lokasi bagi semua fail yang berkaitan dengan suPHP: SuPHP log – /var/log/httpd/suphp_log SuPHP config – /etc/suphp.conf SuPHP module config – /etc/httpd/conf.d/suphp.conf SuPHP module – /etc/httpd/modules/mod_suphp.so Apache error log – /etc/httpd/logs/error_log 4.5.4 Ralat / Masalah (jika ada) Jika anda melakukan restart dan Apache tidak dapat direstart kena masalah directory not found, jangan bimbang. Ini adalah masalah SELinux, dan cara untuk disablekannya ialah dengan menggunakan arahan dibawah melalui terminal setsebool -P httpd_enable_homedirs 1 Jika selepas anda restart balik PC/Server anda, dan anda dapati semua folder tidak boleh ditulis, adalah berkemungkinan SELinux telah diaktifkan kembali, untuk mengatasi masalah tersebut sila gunakan kod berikut pada public_html anda. chcon -R -t httpd_sys_content_t /home/user anda/public_html Atau mana-mana folder yang anda ingin guna. Untuk dapatkan status SELinux, laksanakan arahan berikut getenforce Panduan Keselamatan Web Joomla! IntermediateHalaman | 35
  • 36. Jika statusnya ialah enforcing Ini bermakna SELinux adalah aktif Jika anda ingin mengaktikannya, sila laksanakan arahan setenforce 1 Untuk menyahaktifkannya setenforce 0 Dan sila restart kembali Apache melalui arahan service httpd restart InsyaAllah, akan ok kembali. p/s jika ada ralat tidak dapat gunakan sendmail, runkan arahan berikut setsebool -P httpd_can_sendmail 1 4.6 Mengatasi DOS menggunakan mod_evasive 4.6.1 Pengenalan DOS Tahukah anda apa itu DOS? DOS dengan nama lainnya denial of service, adalah salah satu cara yang digunakan oleh penjenayah siber bagi menghalang atau mematikan perkhidmatan pelayan web anda. DDOS ialah Distributed Denial of Service iaitu serangan DOS yang dilakukan dari pelbagai lokasi, mungkin menggunakan komputer yang telah dijadikan Zombie. Untuk membantu menghalang DOS/DDOS ini, kita akan menggunakan satu modul Apache yang dipanggil mod_evasive. Mod evasive ini kemudiannya akan kita gabungkan dengan penggunaan CSF Firewall untuk blok IP yang menDDOS pelayan web kita. 4.6.2 Untuk memasang mod_evasive, ikuti langkah dibawah: Menggunakan Konsol SSH cd /usr/local/src wget http://www.zdziarski.com/blog/wp- content/uploads/2010/02/mod_evasive_1.10.1.tar.gz tar -xvf mod_evasive_1.10.1.tar.gz cd mod_evasive apxs -cia mod_evasive20.c Pastikan dalam httpd.conf Panduan Keselamatan Web Joomla! IntermediateHalaman | 36
  • 37. LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so Selepas itu, sila tambah kod berikut <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 60 DOSEmailNotify someone@somewhere.com </IfModule> Dan mulakan kembali pelayan web anda service httpd restart Selepas ini, insyaAllah laman web anda akan dapat menampung DOS secara kecil2an ini, akan tetapi ini semua hanyalah langkah permulaan. Tetapi sekiranya IP anda hendak diwhitelist dari apa-apa tujuan yang anda lakukan, masukkan dalam konfigurasi httpd.conf DOSWhitelist 127.0.0.1 atau kalau menggunakan julat IP DOSWhitelist 127.0.0.* Untuk menyekat alamat IP penyerang menggunakan teknik DOS ini, kita akan menggabungkan mod_evasive dengan CSF Firewall. Untuk menggabungkan mod_evasive dan CSF, kita akan gunakan arahan dari mod_evasive yang akan trigger CSF untuk BAN serangan berterusan. Untuk itu, sila masukkan kod : DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600" ke arahan mod_evasive seperti dibawah (dalam httpd.conf) <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 60 DOSEmailNotify someone@somewhere.com DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600" </IfModule> Dan selepas itu, kitakan mengedit arahan sudo, jika anda biasa menggunakan vi, sila laksanakan arahan Panduan Keselamatan Web Joomla! IntermediateHalaman | 37
  • 38. visudo atau jika anda selesa menggunakan nano, laksanakan arahan EDITOR=nano visudo Apa yang anda harus lakukan selepas ini ialah untuk masukkan baris dibawah ke fail visudo dan simpan. User_Alias APACHE = apache Cmnd_Alias FIREWALL = /sbin/iptables, /usr/sbin/csf, /sbin/ifconfig, /sbin/route APACHE ALL = (ALL) NOPASSWD: FIREWALL Sila mulakan semula pelayan web anda. 4.8 Penggunaan mod_slowloris SLOWLORIS ialah satu tools yang dihasilkan oleh hackers untuk menjatuhkan laman web berasaskan Apache dengan menggunakan bandwith yang minima dan ia juga mengganggu perkhidmatan lain. Slowloris cuba untuk mendapatkan sebanyak mana sambungan ke laman web, membuka dan menahannya selama mungkin. Ia mencapai matlamatnya dengan melakukan sambungan ke pelayan web yang disasarkan dan menghantar sebahagian permintaan, secara tetap ia akan menghantar HTTP Headers, menambahnya, tetapi tidak pernah lengkapkan (permintaan tersebut). Pelayan web yang terkesan dengan sambungan ini akan membuka dan memenuhkan pool sambungan maksima bagi sambungan bersama, yang akhirnya menghalang cubaan sambungan tambahan dari klien yang sah. 4.7 Penggunaan SSL (Secure Socket Layer) Untuk melindungi data laman web anda sekiranya anda menggunakan web anda untuk host data-data sensitive, adalah amat disarankan anda menggunakan SSL atau HTTPS bagi membolehkan data-data yang dihantar atau berhubung. Untuk langkah ini, anda boleh mendapatkan Sijil SSL dari Laman Web seperti Godaddy.com, Comodo.com dan lain-lain pembekal SSL yang bertauliah, atau anda juga boleh menghasilkannya sendiri. TETAPI Sijil SSL buatan sendiri ini tidak SAH digunakan untuk transaksi formal atau tidak diSAHkan. 4.8 Meningkatkan tahap keselamatan pelayan SSH Pelayan SSH merupakan…………….. 4.8.1 Edit konfigurasi SSH Langkah 1: Pertama sekali kita mesti cipta pengguna biasa, oleh kerana log masuk root sebaiknya perlu dihalang dari melakukan akses secara terus ke SSH: Panduan Keselamatan Web Joomla! IntermediateHalaman | 38
  • 39. adduser admin && passwd admin Langkah 2: Backup sshd_config semasa mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak Langkah 3: Cipta fail sshd_config baru nano -w /etc/ssh/sshd_config Langkah 3.1: Tampalkan kod ini kedalan fail baru ## Amat disarankan supaya port ini diubah, cth 2488 Port 22 ## Set alamat mendengar pada pelayan. default=0.0.0.0 #ListenAddress 192.168.0.1 ## Kuatkuasakan Protokol SSH 2 sahaja Protocol 2 ## Nyahaktifkan log masuk root secara terus, dimana anda perlu log masuk ## dengan menggunakan nama pengguna admin, kemudian "su -" anda kepada root PermitRootLogin no ## UsePrivilegeSeparation yes ## AllowTcpForwarding no ## Nyahaktifkan X11Forwarding X11Forwarding no ## Periksa pengguna pada direktori home mereka dan rhosts, yang mereka bukannya world-writable StrictModes yes ## Opsyen IgnoreRhosts menyatakan sama ada fail rhosts atau shostsperlu digunakan untuk pengesahan IgnoreRhosts yes ## HostbasedAuthentication no ## RhostsAuthentication menyatakan sama ada sshd boleh cuba gunakan autentikasi berdasarkan rhosts. RhostsRSAAuthentication no ## Letakkan banner log masuk yang pengguna boleh dilihat Banner /etc/motd ## Aktifkan / nyahaktifkan pelayan sftp #Subsystem sftp /usr/libexec/openssh/sftp-server ## Tambah pengguna yang dibenarkan log masuk AllowUsers admin Control + X untuk Simpan Langkah 4: Sahkan tetapan dalam sshd_config anda buat nano -w /etc/ssh/sshd_config PERLU DIINGATKAN ANDA HARUS MENUKAR PORT ASAL KEPADA PORT LAIN. ( Contoh Port 2488 ) Langkah 5.1: Tambah teks ke fail Sepanduk (/etc/motd) nano -w /etc/motd Panduan Keselamatan Web Joomla! IntermediateHalaman | 39
  • 40. Langkah 5.2: Tambah teks ini atau sesuatu yang anda pilih sendiri Private system, please log off. Langkah 6: Mulakan semula SSHD Daemon service sshd restart 4.9 Pemasangan Firewall Selain firewall IP tables yang secara default berada selepas pemasangan, adalah disarankan agar anda memasang perisian Firewall lain seperti contoh CSF atau APF, tetapi buat kali ini kita hanya pasang CSF, Secara ringkasnya Firewall ialah program atau alat perkakasan yang menapis (filters) maklumat-maklumat yang dipindahkan diantara komputer. Secara umumnya, firewall dicipta untuk melindungi satu atau lebih komputer (komputer anda) dari komputer-komputer lain (kebiasaannya dari internet) bagi mengelakkan data-data bahaya atau serangan si penggodam dari sampai ke pelayan web anda. Kita akan gunakan firewall berasaskan perisian iaitu CSF didalam buku ini. 4.9.1 Pemasangan CSF 4.9.1.1 Pra Pemasangan yum install -y perl-libwww-perl 4.9.1.2 Pemasangan CSF Langkah 1: Muat turun, unpack, pasang CSF dari sumber. cd /usr/local/src wget http://www.configserver.com/free/csf.tgz tar -zxvf csf.tgz cd csf ./install.sh Kalau ada error mengenai Libww-Perl, Masukkan kod berikut yum install –y perl-libwww-perl Panduan Keselamatan Web Joomla! IntermediateHalaman | 40
  • 41. Langkah 1.1: Bersihkan fail-fail pemasangan rm -Rf /usr/local/src/csf* && cd Langkah 2: Backup konfigurasi asal CS cp /etc/csf/csf.conf /etc/csf/csf.conf.bak Langkah 3: Edit konfigurasi CSF nano -w /etc/csf/csf.conf 4.9.2 Konfigurasi CSF dan Webmin Berikut ialah konfigurasi CSF jika menggunakan webmin Jika anda ada memasangnya di Webmin, anda boleh klik pada menu Webmin Webmin Configuration, dan pilih Webmin modules Selepas itu pilih install from local /etc/csf/csfwebmin.tgz dan klik Install Module Panduan Keselamatan Web Joomla! IntermediateHalaman | 41
  • 42. Langkah seterusnya, Klik pada ConfigServer Security & Firewall, dan Klik pada Firewall Configuration untuk enablekan CSF. Pastikan pemalar berikut diubah, TESTING = 0 TCP_IN = Port yang hanya anda gunakan, jangan lupa masukkan port 10000 untuk webmin Anda juga perlu pastikan port untuk SSH ditukar untuk mengelakkannya dicerobohi. Panduan Keselamatan Web Joomla! IntermediateHalaman | 42
  • 43. Selepas itu klik Change, dan restart CSF 4.9.3 Ralat dan penyelesaian masalah Jika anda menghadapi masalah selepas permulaan semula CSF yang berkaitan perl-timer, sila laksanakan arahan yum -y install perl-Time-HiRes 4.10 Meningkatkan Keselamatan Centos (Pengenalan) Kenapa Pelayan Web Centos perlu ditingkatkan keselamatannya pada peringkat ini dan bukan peringkat awal. Rasionalnya ialah, kita tidak mahu pemasangan pelayan web Apache, PHP dan MySQL terganggu disebabkan server sudah dipertingkatkan keselamatannya dan menyukarkan konfigurasi sistem lain. 4.10.1 Linux Environment Security (LES) Linux Environment Security dimaksudkan sebagai cara yang cepat & mudah bagi meningkatkan persekitaran Redhat / RPM berasaskan (iaitu: turbo linux, linux terbuka). Ia melakukannya dengan menguatkuasakan keizinan root-hanya pada sistem binari (binari yang tidak mempunyai hak untuk dilaksanakan pengguna biasa), menguatkuasakan laluan hanya root traversal pada laluan sistem, yang menguatkuasakan pakej rpm yang penting (iaitu: coreutils), dan menguatkuasakan skrip profil shell. *WARNING* Mungkin ada masalah jika anda gunakan CPanel, LXadmin Langkah 1: Muat turun dan Pasang LES cd /usr/local/src wget http://www.r-fx.ca/downloads/les-current.tar.gz tar -zxvf les-current.tar.gz cd les-0.* ./install.sh rm -Rf /usr/local/src/les* Panduan Keselamatan Web Joomla! IntermediateHalaman | 43
  • 44. Langkah 2: Lihat opsyen yang ada /usr/local/sbin/les Langkah 3: Jika anda tidak pasti, aktifkan kesemua fungsi (-ea ~ enable all) seperti dibawah /usr/local/sbin/les -ea Options: -da | --disable-all Disable all options -ea | --enable-all Enable all options -sb | --secure-bin Set root only execution of critical binaries -sp | --secure-path Set root only traversal of critical paths -sr | --secure-rpmpkg Set immutable on core rpm package binaries -so | --secure-prof Set immutable on interactive login profiles -sd | --secure-devel Set access to devel utils for group deva & root 4.10.2 Rootkit Hunter (RKHunter) Nama Produk: RKHunter Versi: 1.3.6 Laman Web: http://www.rootkit.nl Keterangan: rkhunter (Rootkit Hunter) alah alatan berasaskan Unix yang akan mengimbas pelayan bagi rootkits, backdoors dan local exploits yang mungkin boleh terjadi. Ia melakukannya dengan membandingkan MD5 hash bagi fail-fail penting dengan pangkalan data online yang diketahui baik dan tiada masalah, membuat carian bagi direktori default (dari rootkits), kebenaran yang salah, fail tersembunyi, baris-baris yang disyaki dalam modul kernel dan juga ujian istimewa bagi Linux dan FreeBSD. Langkah 1: Muat turun, Pasang dan Kemaskini cd /usr/local/src wget http://dfn.dl.sourceforge.net/sourceforge/rkhunter/rkhunter- 1.3.8.tar.gz wget http://dfn.dl.sourceforge.net/sourceforge/rkhunter/rkhunter- 1.3.8.tar.gz.sha1.txt sha1sum -c rkhunter-1.3.8.tar.gz.sha1.txt tar -zxvf rkhunter-1.3.8.tar.gz cd rkhunter-1.3.8 ./installer.sh --layout default --install /usr/local/bin/rkhunter --update /usr/local/bin/rkhunter --propupd rm -Rf /usr/local/src/rkhunter* cd Langkah 2: Tambah cron job harian Langkah 2.1: Ciptakan run-file Panduan Keselamatan Web Joomla! IntermediateHalaman | 44
  • 45. nano -w /etc/cron.daily/rkhunter.sh Langkah 2.2: Tambah teks ni ke rkhunter.sh #!/bin/sh ( /usr/local/bin/rkhunter --versioncheck /usr/local/bin/rkhunter --update /usr/local/bin/rkhunter --cronjob --report-warnings-only ) | /bin/mail -s 'rkhunter Daily Run (PutYourServerNameHere)' your@email.here Jangan Lupa untuk Ubah (PutYourServerNameHere) Dan your@email.here Langkah 2.3: Chmod rkhunter.sh kepada root sahaja chmod 700 /etc/cron.daily/rkhunter.sh 4.10.3 OSSEC IDS OSSEC adalah sistem pengesanan berasaskan sumber terbuka bagi sistem pengesanan pencerobohan. Ia menjalankan analisis log, pemeriksaan integriti, registry Windows pemantauan, pengesanan rootkit, masa berasaskan amaran dan respons yang aktif. Ia berjalan di kebanyakan sistem operasi, termasuk Linux, OpenBSD, FreeBSD, Mac OS, Solaris dan Windows. Ianya ditulis oleh Daniel B. Cid dan boleh diperolehi umum pada tahun 2004. OSSEC akan memeriksa sistem anda dan menghantar emel jika ia merasakan ada sesuatu yang ganjil atau meragukan. Anda akan terima emel dari level 1~10, pastikan buat emel khusus untuk OSSEC, jika anda tidak mahu emel anda penuh dengan laporan Langkah 1: Pasangkan OSSEC dari Sumber cd /usr/local/src wget http://www.ossec.net/files/ossec-hids-2.4.1.tar.gz tar -zxf ossec-hids-2.4.1.tar.gz cd ossec-hids-2.4.1 ./install.sh Langkah 2: Sekarang konfigurasi, pilihan saya yang bertanda dengan teks berwarna MERAH ./install.sh Choice 1: (en/br/cn/de/el/es/fr/it/jp/pl/ru/sr/tr) [en]: <-- Enter Choice 2: 1- What kind of installation do you want (server, agent, local or help)? <-- Local Choice 3: - Choose where to install the OSSEC HIDS [/var/ossec]: <-- Enter Choice 4: Panduan Keselamatan Web Joomla! IntermediateHalaman | 45
  • 46. 3.1- Do you want e-mail notification? (y/n) [y]: <-- Enter Choice 4.1: - What’s your e-mail address? <-- Fill in the email you want the alerts to Choice 4.2: Installer will try to find you smtp server that belongs to your email. Choose NO and use localhost if you have sendmail running on your server. - Do you want to use it? (y/n) [n]: <-- Press Y Choice 4.3: - What’s your SMTP server ip/host? <-- Choose whats recommended, if it doesnt work, you need to change config later on. Choice 5: 3.2- Do you want to run the integrity check daemon? (y/n) [y]: <-- Enter Choice 6: 3.3- Do you want to run the rootkit detection engine? (y/n) [y]: <-- Enter Choice 7: - Do you want to enable active response? (y/n) [y]: <-- Press Enter Choice 8: - Do you want to enable the firewall-drop response? (y/n) [y]: <-- Press Enter Choice 9: Choose Yes if you want to add more IPs to the whitelist. Else NO to continue - Do you want to add more IPs to the white list? (y/n)? [y]: <-- Press Y, Add your client ip, just in case. Langkah 3: Pemasang untuk jadikan OSSEC dimulakan bersama boot. Langkah 3.1: Untuk mulakan OSSEC /var/ossec/bin/ossec-control start Langkah 3.2: Untuk hentikan OSSEC /var/ossec/bin/ossec-control stop Langkah 4: Untuk seting selanjutnya, edit fail konfigurasi nano -w /var/ossec/etc/ossec.conf Konfigurasi Pilihan: Tambah baris ni dalam /var/ossec/etc/ossec.conf untuk elakkan anda dapat emel tidak berapa penting dari OSSEC Konfigurasikan OSSEC untuk CSF Firewall frontend Langkah 1: Buka fail konfig OSSEC untuk diubah nano -w /var/ossec/etc/ossec.conf Langkah 1.1: Cari “Files/directories to ignore”, dan tambah baris baru seperti dibawah <ignore>/etc/prelink.cache</ignore> <ignore>/etc/csf/csf.temppids</ignore> <ignore>/etc/csf/csf.tempban</ignore> <ignore>/etc/csf/csf.tempint</ignore> <ignore>/etc/csf/stats/iptables_log</ignore> <ignore>/etc/csf/csf.dshield</ignore> <ignore>/etc/csf/csf.tempip</ignore> <ignore>/etc/csf/csf.deny</ignore> Panduan Keselamatan Web Joomla! IntermediateHalaman | 46
  • 47. <ignore>/etc/csf/csf.tempfiles</ignore> <ignore>/etc/csf/csf.spamhaus</ignore> Yang kat bawah ni pilihan tak wajib, kalau ada orang cuba masukkan IP mereka <ignore>/etc/csf/csf.allow</ignore> Langkah 2: Restart OSSEC apabila selesai membuat ubahsuai /var/ossec/bin/ossec-control restart Kalau ada error OSSEC analysisd: Testing rules failed. Configuration error. Exiting. Sila Runkan # ln -s /var/ossec/bin/ossec-logtest /var/ossec/ossec-logtest Anda juga boleh memasang OSSEC mengguna Repo Atomic., Laksanakan arahan berikut dalam terminal anda. yum install ossec-hids ossec-hids-server Dan Edit konfigurasi seperti diatas. 4.10.4 Antivirus ClamAV Pasang ClamAv untuk dapatkan Pengesanan Antivirus setiap hari Pasangkan Clam Antivirus dengan Arahan berikut yum install –y clamav clamd 4.8.4.1 Konfigurasi Clamav-Cron (auto scan) Selepas itu, anda perlu gunakan skrip berikut untuk buatkan skrip autoscan bagi mengimbas pelayan web anda pada setiap hari pada waktu yang ditetapkan. Sila buka #!/bin/bash # # clamav-cron v. 0.7 - Copyright © 2009, Stefano Stagnaro # This is Free Software released under the GNU GPL license version 3 #============================================# # User configuration section # Panduan Keselamatan Web Joomla! IntermediateHalaman | 47
  • 48. #============================================# # Notification e-mail sender (could be fake): CV_MAILFROM="shaifful@joomla.my" # Notification e-mail recipient: CV_MAILTO="root@joomla.my" # Notification e-mail secondary recipients: #CV_MAILTO_CC="www@xyz.net, www@abc.net" # Notification e-mail subject: CV_SUBJECT="Laporan Imbasan AV - ABCD" # Log file name and its path: CV_LOGFILE="/var/log/clamav/clamav-cron.log" #============================================# CV_TARGET="$1" CV_VERSION="0.7" if [ -e $CV_LOGFILE ] then /bin/rm $CV_LOGFILE fi if [ -z "$1" ] then CV_TARGET="$HOME" fi #To be read on stdout (and root mail): echo -e clamav-cron v. $CV_VERSION - Copyright 2012, Stefano Stagnaro'n' #To be read on logfile (sent via sendmail): echo -e $CV_SUBJECT - $(date) 'n' >> $CV_LOGFILE echo -e Script: clamav-cron v. $CV_VERSION - Copyright 2012, Stefano Stagnaro $ echo -e Scanned: $CV_TARGET on $HOSTNAME'n' >> $CV_LOGFILE /usr/bin/freshclam --log=$CV_LOGFILE --user $USER --no-warnings #To be read on stdout (and root mail): echo -e '------------------------------------n' /usr/bin/clamscan --infected --log=$CV_LOGFILE --recursive $CV_TARGET CLAMSCAN=$? if [ "$CLAMSCAN" -eq "1" ] then CV_SUBJECT="[VIRUS!] "$CV_SUBJECT elif [ "$CLAMSCAN" -gt "1" ] then CV_SUBJECT="[ERROR] "$CV_SUBJECT fi /bin/mail -s "$CV_SUBJECT" $CV_MAILTO $CV_MAILFROM < $CV_LOGFILE sila ubah alamat emel kepada alamat emel anda, untuk berbuat sedemikian, laksanakan arahan nano /usr/local/bin/clamav-cron dan paste kod tersebut, selepas itu save dengan Ctrl+X dan klik Y dan Enter Selepas itu run chmod 755 /usr/local/bin/clamav-cron Panduan Keselamatan Web Joomla! IntermediateHalaman | 48
  • 49. Anda hanya perlu masukkan alamat emel anda dan tetapkan Cron menggunakan Webmin Sila pilih Scheduled Cron Jobs Klik Create a new scheduled cron job untuk buat cron job baru. Masukkan details seperti diatas dan klik Selepas itu untuk menguji Skrip tersebut, klik pada command cron job yang kita hasikan Panduan Keselamatan Web Joomla! IntermediateHalaman | 49
  • 50. Selepas itu klik pada Run Now Hasilnya adalah seperti disebelah. Sekiranya ada ralat seperti Cannot Append etc etc.. berkemungkinan anda menghadapi masalah dengan SELinux. Cara penyelesaian termudah iailah untuk hasilkan cron yang akan disable SELinux buat sementara dan aktifkan semula selepas proses scan dilakukan. 4.11 Linux Malware Detectors Penggunaan Linux Malware Detect ni sangat digalakkan, berdasarkan ujian yang telah saya lakukan, kadar pengesanannya agak tinggi dan Berjaya meneutralkan Skrip Shell seperti c99, r57 dan b374k serta lain-lain lagi. Cara untuk memasang Malware Detector adalah seperti berikut Seperti biasa, anda perlu log masuk ke SSH melalui putty atau mana-mana konsol dan melakukan arahan-arahan berikut dibawah : Panduan Keselamatan Web Joomla! IntermediateHalaman | 50
  • 51. cd /usr/local/src wget http://www.rfxn.com/downloads/maldetect-current.tar.gz tar -zxvf maldetect-current.tar.gz cd maldetect-* ./install.sh Hasilnya adalah seperti berikut : installation completed to /usr/local/maldetect config file: /usr/local/maldetect/conf.maldet exec file: /usr/local/maldetect/maldet exec link: /usr/local/sbin/maldet exec link: /usr/local/sbin/lmd cron.daily: /etc/cron.daily/maldet Untuk mengedit fail konfigurasi Maldet, sila berikan arahan berikut : nano -w /usr/local/maldetect/conf.maldet Anda boleh mengubah konfigurasi berikut, email_alert Sila “on” kan disini untuk menerima emel sekiranya malware dikesan. email_addr Masukkan alamat emel dimana pemberitahuan akan dihantar quar_hits Bahagian ini memberitahu LMD bahwa ia sepatutnya mengalihkan kandungan malware kelaluan Kuarantin dan membuang semua kebenaran yang ada. Kesemua fail boleh dikembalikan dan dipulihkan termasuk kepada laluan asal dan kebenarannya, menggunakan arahan –restore, sekiranya anda tersalah atau false positive. quar_clean Ini memberitahu LMD yang is sepatutnya Cuba untuk bersihkan Malware yang mempunya peraturan pembersihan, buat masa ini hanya base64_decode dan gzinflate file injection strings boleh dibersihkan. Fail yang dibersihkan akan dikembalikan secara auto kepada laluan asal, pemilik dan kebenarannya. quar_susp Opsyen ini membolehkan LMD untuk menggantung akaun pengguna dimana malware ditemui. Jika anda menggunakan CPanel, ia akan menyalurkan maklumat pengguna kepada /scripts/suspendacct dan menambah komen dengan laporan maldet yang menyebabkan penggantungan perkhidmatan pengguna tersebut (e.g: maldet --report SCANID). Pada system yang tidak menggunakan cpanel, shell pengguna tersebut akan disetkan kepada /bin/false. quar_susp_minuid Ini adalah user id minima yangthat will be evaluated for suspension, the default should be fine on most systems. Untuk melakukan imbasan, secara manual. Anda boleh memberi arahan berikut: maldet --scan-all /home?/?/public_html Dimana penggunaan ? adalah merupakan pengganti bagi * untuk “KESEMUA” Maldet akan membuat imbasan kepada semua fail/direktori mana-mana user/pengguna dan melakukan imbasan kepada folder public_html Panduan Keselamatan Web Joomla! IntermediateHalaman | 51
  • 52. 5.0 Keselamatan Web Joomla! Perlindungan Keselamatan Joomla! Bermula, apa bila anda mula memasangnya kedalam pelayan web! Pastikan anda memuat turun Joomla! dari www.joomla.org Pastikan semasa memasang Joomla! Anda tidak gunakan prefix jos_ Pastikan anda menukar username Admin untuk Joomla! 1.5 (Tidak berkaitan dengan Joomla! 1.6&1.7 @ 2.5.X Sebelum teruskan, anda perlu pastikan folder penting untuk pemasangan Joomla! telah dichmod kepada writable 777, untuk pengguna SSH anda boleh berikan Arahan berikut Sebelum pemasangan, find . -type d -exec chmod 777 {} ; Selepas pemasangan find . -type d -exec chmod 755 {} ; Untuk fail, anda boleh lakukan carian contoh configuration.php dan menjadikannya writable chmod 666 @ 777 find . -type f -name 'configuration.php' -exec chmod 666 {} ; Selepas itu find . -type f -name 'configuration.php' -exec chmod 644 {} ; hanya CHMODkan apabila perlu, kebiasaanya, selepas pemasangan Joomla selesai, ada beberapa Direktori yang perlu DiCHMOD, iaitu direktori /images/* 5.1 Milik dan Kebenaran (CHMOD & CHOWN) 5.1.1 Pengenalan Apakah itu Arahan chmod Kita mungkin biasa terjumpa dengan arahan seperti chmod 755 fail tu. Apa sebenarnya chmod dan nombor yang beratus-ratus tu? Panduan Keselamatan Web Joomla! IntermediateHalaman | 52
  • 53. Jom kita lihat apa sebenarnya arahan chmod berserta nombor-nombornya sekali. Tentang chmod chmod - change file mode bits Bahasa ringkas - menukar kebenaran penggunaan sesuatu fail. SYNOPSIS chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE... chmod [OPTION]... --reference=RFILE FILE... Untuk keterangan lanjut boleh baca pada man page di Terminal dengan arahan: man chmod Senarai Kebenaran mengikut Abjad u - User / Pengguna yang memiliki fail tersebut. g – Group / kumpulan yang memiliki fail tersebut. o – Other / lain-lain. a – All / Semua. r - Read the file / Boleh baca fail. w - Write or edit the file / Boleh tulis atau ubahsuai fail. x - Execute or run the file as a program / Boleh laksanakan atau jalankan sebagai perisian. Senarai Kebenaran Mengikut Nombor: 400 - read by owner / boleh dibaca oleh pemiliknya 040 - read by group / boleh dibaca oleh kumpulannya 004 - read by other / boleh dibaca oleh yang lain 200 - write by owner / ditulis oleh pemiliknya 020 - write by group / ditulis oleh kumpulan 002 - write by other / ditulis oleh lain-lain Panduan Keselamatan Web Joomla! IntermediateHalaman | 53
  • 54. 100 - execute by owner / boleh dilaksana atau run oleh pemiliknya 010 - execute by group / boleh dilaksana atau run oleh kumpulannya 001 - execute by other / boleh dilaksana atau run oleh lain-lain Jika kita lihat senarai diatas : 4XX -Nombor pertama untuk owner bersamaan u X4X -Nombor kedua untuk group bersamaan g XX4 -Nombor ketiga untuk other bersamaan o Dan nombor : 4 adalah read bersamaan r 2 adalah write bersamaan w 1 adalah execute bersamaan x 5.1.2 Contoh-contoh Contoh 1: chmod 777 cuba.txt - bermakna memberikan kebenaran untuk semua orang untuk menggunakan fail tersebut.(- rwxrwxrwx) Macam mana boleh dapat 777 tu? Cuba campurkan semua nombor tadi seperti : 400 read by owner + 040 read by group + 004 read by other + 200 write by owner + 020 write by group + 002 write by other + 100 execute by owner Panduan Keselamatan Web Joomla! IntermediateHalaman | 54
  • 55. + 010 execute by group + 001 execute by other = 777 Contoh 2: chmod 755 cuba.txt - memberi semua kebenaran kecuali mengubah kepada semua orang. (-rwxr-xr-x) Jika mengikut nombor 400 read by owner + 040 read by group + 004 read by other + 200 write by owner + 100 execute by owner + 010 execute by group + 001 execute by other = 755 Contoh jika dalam terminal chmod 755 cuba.txt ls -l -rwxr-xr-x 1 shaifful 20 2010-12-15 01:58 cuba.txt File owner group other link owner saiz Tarikh Ubah Nama fail - rwx r-x r-x 1 shaifful 20 15/12/10 01:58 cuba.txt - 400 200 100 040 010 004 001 1 shaifful 20 15/12/10 01:58 cuba.txt 5.1.3 Penggunaan WinSCP untuk CHMOD dan CHOWN Jika anda menggunakan WinScp sebagai contoh, anda boleh menggunakan CHMOD Panduan Keselamatan Web Joomla! IntermediateHalaman | 55
  • 56. dengan mudah menggunakan Properties (right click/klik kanan pada nama fail) seperti dibawah Anda boleh memilih permission atau kebenaran dengan memilih/mengklik pada kotak-kotak Owner Group dan Others, atau terus menggunakan Octal dengan memasukkan nombor kebenaran yang anda mahukan. Anda perlu ingat nombor-nombor penting berikut. Untuk fail-fail biasa, nombor kebenarannya ialah 0644 Untuk folder/direktori ialah 0755 Bagi membolehkan sesuatu fail ditulis oleh sesiapa sahaja, anda perlu gunakan CHMOD 0777, tetapi amat tidak digalakkan kerana jika hackers Berjaya memasuki sistem anda, fail tersebut boleh ditulis oleh mereka atau sesiapa sahaja. Jika sebaiknya anda menggunakan suPHP seperti mana yang telah ditunjukkan pada topik sebelum ini. Ini kerana jika menggunakan suPHP, hanya pemilik fail sahaja yang memiliki kuasa untuk menulis kepada fail tersebut dan masalah permission atau kebenaran boleh diatasi tanpa menggunakan CHMOD 0777. 5.2 Penggunaan HTACCESS Penggunaan HTACCESS untuk menambah baik keselamatan web berasaskan Joomla. Tahukah anda mengenai HTACCESS? Fail HTACCESS sebenarnya fail yang membolehkan kita mengubah suai seting pelayan web tanpa mengubah setting sebenar Web yang default, atau dinamakan sebagai Override. Panduan Keselamatan Web Joomla! IntermediateHalaman | 56
  • 57. Ada banyak kegunaan HTACCES, dalam Nota ini akan diterangkan secara ringkas bagaimana untuk menggunakan htaccess bagi melindungi pelayan web anda, terutamanya Joomla! Antara kegunaan fail HTACCESS ini ialah 1. Mengubah haluan laman web anda. (Redirect) www kepada non www, vice versa 2. Mencantikkan URL dengan memanipulasikan Mod_rewrite pelayan web Apache. 3. Membantu menangkis suntikan SQLi dan XSS serta RFI 4. Menghalang User Agent/Bot dari mencuri maklumat atau membuat salinan laman web anda secara local copy. 5. Dan macam2 lagi… Sebelum anda dapat gunakan .htaccess, anda perlu pastikan bahawa .htaccess adalah dibenarkan dalam httpd.conf dan boleh digunakan 5.2.2 Konfigurasi HTACCESS Gunakan kod berikut untuk melihat sama ada fail konfigurasi Apache membenarkan penggunaan .htaccess. nano /etc/httpd/conf/httpd.conf dan cari kod berikut, serta ubah dari kod berikut <Directory /> Options FollowSymLinks AllowOverride None </Directory> Kepada <Directory /> Options FollowSymLinks AllowOverride All </Directory> Selepas itu simpan dan restart balik pelayan web anda service httpd restart 5.2.1.1 Mengaktifkan htaccess bagi Joomla Anda perlu mengaktifkan fail htaccess, dengan menukar nama asal fail tersebut dari htaccess.txt kepada .htaccess (bunyinya dot.htaccess), Panduan Keselamatan Web Joomla! IntermediateHalaman | 57
  • 58. Selepas menukar namanya, anda boleh gunakan kod dibawah untuk melindunginya dari dilihat oleh mereka yang tidak berkenaan (dalam httpd.conf atau .htaccess) <Files .htaccess> order allow,deny deny from all </Files> Berikut adalah kod yang saya gunakan dalam .htaccess saya. ## # @package Joomla # @copyrightCopyright (C) 2005 - 2012 Open Source Matters. All rights reserved. # @license GNU General Public License version 2 or later; see LICENSE.txt ## ## Can be commented out if causes errors, see notes above. #Options +FollowSymLinks # file execution order DirectoryIndex index.php /index.php index.html ##### No directory listings -- BEGIN IndexIgnore * Options All -Indexes ##### No directory listings -- END ## Mod_rewrite in use. RewriteEngine On RewriteCond %{HTTP:Content-Disposition} .php [NC] RewriteCond %{HTTP:Content-Type} image/.+ [NC] RewriteRule .* - [F,NS,L] ## Begin - Rewrite rules to block out some common exploits. # If you experience problems on your site block out the operations listed below # This attempts to block the most common type of exploit `attempts` to Joomla! ##### Rewrite rules to block out some common exploits -- BEGIN RewriteCond %{QUERY_STRING} proc/self/environ [OR] RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR] RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR] RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule .* index.php [F] ## Begin - Joomla! core SEF Section. # RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # # If the requested path and file is not /index.php and the request # has not already been internally rewritten to the index.php script RewriteCond %{REQUEST_URI} !^/index.php # and the request is for something within the component folder, # or for the site root, or for an extensionless URL, or the # requested URL ends with one of the listed extensions RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|vcf| raw))$ [NC] # and the requested path and file doesn't directly match a physical file RewriteCond %{REQUEST_FILENAME} !-f # and the requested path and file doesn't directly match a physical folder Panduan Keselamatan Web Joomla! IntermediateHalaman | 58
  • 59. RewriteCond %{REQUEST_FILENAME} !-d # internally rewrite the request to the index.php script RewriteRule .* index.php [L] ## End - Joomla! core SEF Section. ## Disallow access to rogue PHP files throughout the site, unless they are explicitly allowed RewriteCond %{REQUEST_FILENAME} (.php)$ RewriteCond %{REQUEST_FILENAME} !(/index[23]?.php)$ RewriteCond %{REQUEST_FILENAME} -f RewriteRule (.*.php)$ - [F] ## Disallow access to htaccess.txt, php.ini and configuration.php-dist RewriteRule ^(htaccess.txt|configuration.php-dist|php.ini)$ - [F] ##### File injection protection -- BEGIN RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC] RewriteRule .* - [F] ##### File injection protection -- END ##### Advanced server protection -- BEGIN RewriteCond %{QUERY_STRING} =PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0- 9]{4}-[a-f0-9]{12} [NC] RewriteRule .* - [F] ## Back-end protection RewriteRule ^administrator/?$ - [L] RewriteRule ^administrator/index.(php|html?)$ - [L] RewriteRule ^administrator/index[23].php$ - [L] RewriteRule ^administrator/(components|modules|templates|images| plugins)/.*.(jpe|jpg|jpeg|jp2|jpe2|png|gif|bmp|css|js|swf|html|mpg|mp3| mpeg|mp4|avi|wav|ogg|ogv|xls|xlsx|doc|docx|ppt|pptx|zip|rar|pdf|xps|txt|7z| svg|odt|ods|odp|flv|mov|htm|ttf|woff|eot)$ - [L] RewriteRule ^administrator/ - [F] RewriteCond %{QUERY_STRING} [^a-z](declare|char|set|cast|convert|delete| drop|exec|insert|meta|script|select|truncate|update)[^a-z] [NC] RewriteRule (.*) - [F] Fail .htaccess diatas perlu disesuaikan dengan server yang anda gunakan, MUNGKIN ada arahan-arahan dalam fail ini tidak bersesuaian dengan pelayan web atau Joomla anda atau keperluan anda dan perlu diubahsuai. Keterangan mengenai kod tersebut adalah seperti berikut Halang gambar yang dieksploit atau kod yang menyamar sebagai gambar RewriteCond %{HTTP:Content-Disposition} .php [NC] RewriteCond %{HTTP:Content-Type} image/.+ [NC] RewriteRule .* - [F,NS,L] Nyahaktifkan Directory index dan menetapkan seting lalai (default) sekiranya tiada fail index DirectoryIndex index.php /index.php ##### No directory listings -- BEGIN IndexIgnore * Options All -Indexes ##### No directory listings -- END Panduan Keselamatan Web Joomla! IntermediateHalaman | 59
  • 60. Untuk blok eksploit-eksploit biasa melalui URL ##### Rewrite rules to block out some common exploits -- BEGIN RewriteCond %{QUERY_STRING} proc/self/environ [OR] RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR] RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR] RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule .* index.php [F] ##### Rewrite rules to block out some common exploits -- END Mempastikan Mod_rewrite diaktifkan ## Mod_rewrite in use. RewriteEngine On Pengesahan HTTP Auth untuk PHP dan Seksyen Mesra enjin Pencari RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] ## Begin - Joomla! core SEF Section. RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|vcf|raw))$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [L] ## End - Joomla! core SEF Section. Menghalang fail-fail Nakal seperti shell C99 dan r57 dari dilarikan/ run dalam sistem anda ## Disallow access to rogue PHP files throughout the site, unless they are explicitly allowed RewriteCond %{REQUEST_FILENAME} (.php)$ RewriteCond %{REQUEST_FILENAME} !(/index[23]?.php)$ RewriteCond %{REQUEST_FILENAME} -f RewriteRule (.*.php)$ - [F] Halang akses ke fail-fail ## Disallow access to htaccess.txt, php.ini and configuration.php-dist RewriteRule ^(htaccess.txt|configuration.php-dist|php.ini)$ - [F] Perlindungan dari suntikan skrip nakal ##### File injection protection -- BEGIN RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC] RewriteRule .* - [F] ##### File injection protection -- END Perlindungan lebih maju untuk folder administrator, ##### Advanced server protection -- BEGIN RewriteCond %{QUERY_STRING} =PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}- [a-f0-9]{12} [NC] RewriteRule .* - [F] ## Back-end protection RewriteRule ^administrator/?$ - [L] RewriteRule ^administrator/index.(php|html?)$ - [L] RewriteRule ^administrator/index[23].php$ - [L] RewriteRule ^administrator/(components|modules|templates|images|plugins)/.*.(jpe| jpg|jpeg|jp2|jpe2|png|gif|bmp|css|js|swf|html|mpg|mp3|mpeg|mp4|avi|wav|ogg|ogv|xls| xlsx|doc|docx|ppt|pptx|zip|rar|pdf|xps|txt|7z|svg|odt|ods|odp|flv|mov|htm|ttf|woff| eot)$ - [L] RewriteRule ^administrator/ - [F] Panduan Keselamatan Web Joomla! IntermediateHalaman | 60
  • 61. Perlindungan dari arahan untuk SQLi, harus digunakan berhati-hati, mungkin ada false Positive terutama yang ada menggunakan forum atau menghantar kod2 sebagai tutorial. RewriteCond %{QUERY_STRING} [^a-z](declare|char|set|cast|convert|delete|drop|exec| insert|meta|script|select|truncate|update)[^a-z] [NC] RewriteRule (.*) - [F] Seterusnya, dengan menggunakan .htaccess kita juga boleh halang bot2 internet yang cuba mencuri fail2 kita atau melayari laman web kita dan mencuri maklumat didalamnya, sila tampal contoh berikut kedalam .htaccess RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:craftbot@yahoo.com [OR] RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] RewriteCond %{HTTP_USER_AGENT} ^Website Quester [OR] RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR] RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR] RewriteCond %{HTTP_USER_AGENT} ^jVulnComponent Crawler v1-Ahlspiess RewriteRule ^.* - [F,L] deny from all Buang fail-fail default Joomla! Kepada yang mahukan agar laman web mereka lebih selamat, anda boleh padamkan beberapa fail dari pemasangan Joomla anda. Contohnya Joomla! 1.5 CHANGELOG.php COPYRIGHT.php Untuk Joomla 1.7.X dan 2.5.X tiada yang perlu dilakukan, disebabkan fail2 tersebut tidak lagi disertakan didalam fail pemasangan Joomla! Selepas, halang fail-fail tertentu dari dibuka atau dilihat dari luar laman web anda. Panduan Keselamatan Web Joomla! IntermediateHalaman | 61
  • 62. Anda boleh cuba kod dibawah untuk dimasukkan kedalam fail .htaccess dan ia akan membolehkan fail2 tersebut muncul hanya melalui laman web anda dan tidak dapat dibuka dari web lain. Masukkan dalam .htaccess SetEnvIfNoCase Referer "^http://www.your-domain-name-here.com/" locally_linked=1 SetEnvIfNoCase Referer "^http://www.your-domain-name-here.com$" locally_linked=1 SetEnvIfNoCase Referer "^http://your-domain-name-here.com/" locally_linked=1 SetEnvIfNoCase Referer "^http://your-domain-name-here.com$" locally_linked=1 SetEnvIfNoCase Referer "^$" locally_linked=1 <FilesMatch ".(gif|png|jpe?g)$"> Order Allow,Deny Allow from env=locally_linked </FilesMatch> Menyimpan fail configuration.php dengan lebih selamat Fail Konfigurasi Joomla iaitu configuration.php adalah fail yang amat penting kerana ia menyimpan maklumat mengenai pangkalan data dan seting joomla. Kita mesti cuba elakkan fail ini dari dibuka atau dilihat oleh pengguna lain. Oleh yang sedemikian ada beberapa cara yang kita boleh gunakan. 1. Pindah configuration.php dari public_html ke directory home 2. Jadikan ia unwritable 3. Lindungi dengan .htaccess Untuk cara pertama Joomla 1.5 cara ini mengubah core Joomla!, untuk setiap kali Update, anda tentu perlu mengubahnya kembali 1. Cipta satu direktori diluar direktori public_html. Anda boleh namakannya mengikut kesukaan anda, contohnya yang senang diingat sekiranya pelayan web anda hoskan beberapa laman web, contohnya webjoomla1 untuk nama direktori (dalam contoh ini). Nota: Jika ada beberapa pemasangan Joomla, anda MESTI pastikan setiap darinya memiliki direktorinya yang tersendiri untuk fail configuration.php nya. Panduan Keselamatan Web Joomla! IntermediateHalaman | 62
  • 63. 2) Letakkan salinan fail configuration.php, yang tidak diubah langsung dan anda tidak menukar namanya. Kebenaran atau permission untuk fail ini ialah 644 dan direktorinya 755, Kebenaran 444 juga boleh diterima sekiranya itu ialah permissionnya yg semasa. 3) Sila ke direktori /home/folderwebanda/public_html/includes/ dan buat backup fail defines.php. Atau /var/www/html/includes 4) Sekarang anda boleh buka fail defines.php menggunakan editor yang anda suka, atau anda boleh buka menggunakan perisian FTP yang anda suka contohnya winscp seperti gambar disebelah 5) Disekitar baris ke 26 anda akan dapat lihat: define('JPATH_CONFIGURATION',JPATH_ROOT); Panduan Keselamatan Web Joomla! IntermediateHalaman | 63
  • 64. Gantikannya dengan: define('JPATH_CONFIGURATION',JPATH_ROOT.DS.'../webjoomla1'); Jika joomla telah dipasang dalam subdirektori dibawah public_html ( public_html/subdirektori/ ) kemudian gantikannya dengan yang berikut define('JPATH_CONFIGURATION',JPATH_ROOT.DS.'../'.DS.'../web'); NOTA: The /web ialah contoh subdirektori. Gantikan contoh nama direktori ini dengan nama yang anda sukai. 6) Ulangi langkah yang sama dengan fail defines.php yang berada dalam direktori /home/webanda/public_html/administrator/includes/ atau /var/www/html/administrator/includes. Jika anda tidak mengubahnya, akses ke bahagian admin akan terhalang. 7) Pergi ke main root laman web anda dan nakan semula fail configuration.php kepada nama lain, dan selepas itu uji sama ada laman web Joomla! Anda berfungsi dengan baik atau tidak. 8) Jangan lupa masukkan direktori dan fail ini kedalam backup yang anda buat. Joomla 1.6, 1.7, 2.5.X dan yang lebih baru Overriding defines.php Bermula dengan versi 1.6, ianya adalah mungkin untuk sediakan versi override yang dipanggil localized version fail includes/defines.php. (includes/defines.php dan administrator/includes/defines.php). Jadi ini memungkin kita mengubah pelbagai fail diluar root atau public_html. Panduan Keselamatan Web Joomla! IntermediateHalaman | 64