Joomla security
Upcoming SlideShare
Loading in...5
×
 

Joomla security

on

  • 2,181 views

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 ...

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.

Statistics

Views

Total Views
2,181
Views on SlideShare
2,180
Embed Views
1

Actions

Likes
1
Downloads
15
Comments
0

1 Embed 1

http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Joomla security Joomla security Document Transcript

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