Joomla! SecurityPanduan Keselamatan CMS Joomla!
SHAIFFULNIZAM MOHAMAD
BAHASA MELAYU
Penafian
Walaupun segala usaha telah dilakukan untuk memastikan ketepatan maklumat didalam
buku ini ketika penulisan, namu...
berasaskan Joomla!
Kandungan Halaman
1.0 Pengenalan Kursus/Buku ini x
1.1 Antara sebab atau punca Joomla! Digodam atau def...
4.1.5 Berhati-hati dengan penggunaan .htaccess
4.1.6 Nyahaktifkan FollowSymLinks
4.1.7 Menyahaktif HTTP TRACE
4.1.8 Aktika...
4.5.2 Konfigurasi
4.5.3 Pemilikan dan Kebenaran
4.5.4 Ralat / Masalah (jika ada)
4.6 Mengatasi DOS menggunakan mod_evasive...
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.0 Pengenalan Kursus/Buku ini :
Joomla! Adalah sistem Pengurusan Kandungan yang dibina menggunakan bahasa
pengaturcaraan ...
kurang Dedicated server, Cuma ianya bukan merupakan server fizikal) ia adalah server
dalam sebuah server dengan sumber2 ya...
• MBString
• MCrypt
pada CentOS 6/5.7 Pasang Server Apache (httpd) dan PHP 5.3.X
2.1 Log masuk Root untuk pemasangan,
Untu...
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-
6-7.noarch.rpm
## CentOS 6 and Red Hat (RHEL) 6...
Mulakan Apache HTTP server (httpd) dan autostart Apache HTTP server (httpd) pada
permulaan boot
/etc/init.d/httpd start ##...
yum --enablerepo=remi install -y php-pear php-pdo php-mysql php-pgsql php-
pecl-memcache php-gd php-mbstring php-mcrypt ph...
3.0 Pemasangan MYSQL
MySQL ialah pangkalan data sumber terbuka yang sangat popular. Oleh kerana disebabkan
kelajuan dan ke...
Output:
Loaded plugins: changelog, fastestmirror, presto, refresh-packagekit
remi | 3.0 kB 00:00
remi/primary_db | 106 kB ...
4.0 Meningkatkan Tahap Keselamatan Web Apache, PHP
dan MySQL (Server)
Setelah pemasangan Apache, PHP dan MySQL. Kita perlu...
ServerTokens Full
# Gantikan nama server (mod_security directive)
SecServerSignature "Microsoft-IIS/5.0"
Antara ciri kesel...
Anda boleh menghasilkan pengguna dan grup menggunakan arahan berikut (sebagai root)
# groupadd httpd
# useradd httpd -g ht...
sering fail yang anda mahu menyekat akses. Anda mungkin mahu menyekat akses kepada
semua fail dengan. Inc lanjutan (PHP te...
Mod_dav
4.1.5 Berhati-hati dengan penggunaan .htaccess
Telah dinyatakan sebelum ini bahawa adalah sangat penting untuk mel...
Untuk Aktifkan Penggunaan mod_rewrite bagi kegunaan SEF. Anda perlu edit Apache
httpd.conf dan cari
LoadModule rewrite_mod...
Sebelum versi 4.2.0, PHP menggunakan pemalar global untuk sediakan akses kepada
pemalar yang dimasukkan dari permintaan GE...
tersebut biasanya memaparkan maklumat-maklumat path atau seting yang mana biasanya
akan dicari oleh hackers, mesej ralat i...
Sebelum anda memasang SUHOSIN, anda memerlukan Kompiler, dan ianya perlu
dipasang terlebih dahulu.
yum -y install gcc gcc-...
# Apache configuration or .htaccess
<filesmatch>
Order allow,deny
Deny from all
</filesmatch>
4.3 Melindungi MySQL
MySQL a...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root ...
memiliki kata laluan anda sendiri, topik kali ini akan membantu anda untuk berhubung
dengan pangkalan data MySQL menggunak...
chkconfig iptables on
4.3.4.1 Firewall dan Status Port MySQL
2. Masukkan kod berikut untuk tutup port 3306 MySQL:
iptables...
kegunaan Web dan HTTPS.
ModSecurity adalah satu modul Apache untuk bertindak sebagai firewall aplikasi web, yang
membawa s...
Selepas itu
cd modsecurity-apache*
./configure
make && make install
4.4.2 Ralat pemasangan
Kalau ada error tentang APR dan...
Dalam folder mod_sec anda, ada satu fail dinamakan Unicode.mapping, fail ini perlu disalin
ke folder httpd/conf.d, arahan ...
whitelist, untuk override atau bypass mod_security menggunakan ID setiap rules atau
peraturan. Contoh error adalah seperti...
Contoh :
SecRuleRemoveById 950007 930097 700900
Pastikan LocationMatch adalah mengikut lokasi dan nama fail yang bermasala...
Untuk 64bit, gantikan wget diatas kepada seperti berikut.
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/m...
<VirtualHost *:80>
ServerName test.apasaja.biz
ServerAlias www.test.apasaja.biz
ServerAdmin webmaster@test.apasaja.biz
Doc...
4.5.3 Pemilikan dan Kebenaran
Kita juga perlu baiki kebenaran dan pemilikan bagi pengguna shaifful:
chmod 755 /home/shaiff...
Jika statusnya ialah enforcing
Ini bermakna SELinux adalah aktif
Jika anda ingin mengaktikannya, sila laksanakan arahan
se...
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
Selepas itu, sila tambah kod berikut
<IfModule mod_eva...
visudo
atau jika anda selesa menggunakan nano, laksanakan arahan
EDITOR=nano visudo
Apa yang anda harus lakukan selepas in...
adduser admin && passwd admin
Langkah 2: Backup sshd_config semasa
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Langka...
Langkah 5.2: Tambah teks ini atau sesuatu yang anda pilih sendiri
Private system, please log off.
Langkah 6: Mulakan semul...
Langkah 1.1: Bersihkan fail-fail pemasangan
rm -Rf /usr/local/src/csf* && cd
Langkah 2: Backup konfigurasi asal CS
cp /etc...
Langkah seterusnya, Klik pada ConfigServer Security & Firewall, dan Klik pada Firewall
Configuration untuk enablekan CSF.
...
Selepas itu klik Change, dan restart CSF
4.9.3 Ralat dan penyelesaian masalah
Jika anda menghadapi masalah selepas permula...
Langkah 2: Lihat opsyen yang ada
/usr/local/sbin/les
Langkah 3: Jika anda tidak pasti, aktifkan kesemua fungsi (-ea ~ enab...
nano -w /etc/cron.daily/rkhunter.sh
Langkah 2.2: Tambah teks ni ke rkhunter.sh
#!/bin/sh
(
/usr/local/bin/rkhunter --versi...
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...
<ignore>/etc/csf/csf.tempfiles</ignore>
<ignore>/etc/csf/csf.spamhaus</ignore>
Yang kat bawah ni pilihan tak wajib, kalau ...
#============================================#
# Notification e-mail sender (could be fake):
CV_MAILFROM="shaifful@joomla....
Anda hanya perlu masukkan alamat emel anda dan tetapkan Cron menggunakan Webmin
Sila pilih Scheduled Cron Jobs
Klik Create...
Selepas itu klik pada Run Now
Hasilnya adalah seperti disebelah.
Sekiranya ada ralat seperti Cannot Append etc etc.. berke...
cd /usr/local/src
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -zxvf maldetect-current.tar.gz
cd maldet...
5.0 Keselamatan Web Joomla!
Perlindungan Keselamatan Joomla! Bermula, apa bila anda mula memasangnya kedalam
pelayan web!
...
Jom kita lihat apa sebenarnya arahan chmod berserta nombor-nombornya sekali.
Tentang chmod
chmod - change file mode bits
B...
100 - execute by owner / boleh dilaksana atau run oleh pemiliknya
010 - execute by group / boleh dilaksana atau run oleh k...
+ 010 execute by group
+ 001 execute by other
= 777
Contoh 2:
chmod 755 cuba.txt
- memberi semua kebenaran kecuali menguba...
dengan mudah menggunakan Properties (right click/klik kanan pada nama fail) seperti
dibawah
Anda boleh memilih permission ...
Ada banyak kegunaan HTACCES, dalam Nota ini akan diterangkan secara ringkas
bagaimana untuk menggunakan htaccess bagi meli...
Selepas menukar namanya, anda boleh gunakan kod dibawah untuk melindunginya dari
dilihat oleh mereka yang tidak berkenaan ...
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
...
Untuk blok eksploit-eksploit biasa melalui URL
##### Rewrite rules to block out some common exploits -- BEGIN
RewriteCond ...
Perlindungan dari arahan untuk SQLi, harus digunakan berhati-hati, mungkin ada
false Positive terutama yang ada menggunaka...
Anda boleh cuba kod dibawah untuk dimasukkan kedalam fail .htaccess dan ia akan
membolehkan fail2 tersebut muncul hanya me...
2) Letakkan salinan fail configuration.php, yang tidak diubah langsung dan anda tidak
menukar namanya. Kebenaran atau perm...
Gantikannya dengan:
define('JPATH_CONFIGURATION',JPATH_ROOT.DS.'../webjoomla1');
Jika joomla telah dipasang dalam subdirek...
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Joomla security
Upcoming SlideShare
Loading in …5
×

Joomla security

4,208 views

Published on

Bagaimana untuk melindungi laman web berasaskan Joomla anda, serta pelayan Web Apache, meningkatkan keselamatan aplikasi PHP dan MySQL. Bahan disediakan dalam bahasa Melayu/Malaysia, sentiasa dikemaskini mengikut perubahan teknologi. Sesuai bagi mereka yang menggunakan VPS dan dedicated server. Untuk mereka yang baru atau kurang mahir dengan server berasaskan Centos.

Published in: Internet
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,208
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
68
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Joomla security

  1. 1. Joomla! SecurityPanduan Keselamatan CMS Joomla! SHAIFFULNIZAM MOHAMAD BAHASA MELAYU
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×