Kamis, 11 Juli 2013

Memaksimalkan Keamanan Pada CMS Joomla versi 1.0, 1.5, dan 1.6

Kopas dari http:ketikspasi.blogspot.com/2011/10/kopas-dari-httpsonnysoleman.html yang membahas mengenai pengamanan/ security pada joomla dengan mengkonfigurasi kembali file “configuration.php” yang terletak di root folder dari Joomla site kita menjadi target utama Hacker untuk bisa akses masuk / login ke Control Panel / Backend Administrator Joomla, juga ke isi perut joomla yaitu database MySQL. Berikut ini tips ampuh untuk mengamankan file “configuration.php” tersebut.
Dengan teknik RFI (Remote File Inclusion) hacker bisa menemukan celah / lubang di Joomla site kita, jika celah / lubang ini tidak ditutup (setting PHP.ini, baca artikel saya sebelumnya), maka hacker bisa meletakkan Script Kiddies di salah satu sub folder dalam joomla site kita, begitu Script Kiddies ini dijalankan oleh hacker, maka dengan mudah file “configuration.php” ditemukan dan dibaca isinya oleh hacker.
File “configuration.php“, dari versi awal CMS Joomla sampai ke versi terakhir tidak banyak mengalami perubahan / kemajuan yang berarti, hanya berubah diisinya saja. Hal ini telah saya amati sejak Joomla versi 1.0.X sampai versi terbaru 1.7.0.

Kelemahan utama file “configuration.php” ini :
- nama filenya tidak pernah berubah
- Terletak (selalu) di root folder dari joomla sitenya
- isinya yang merupakan “text murni” sehingga bisa dibaca dengan mudah.
Tiga kelemahan ini, bisa dengan mudah dimanfaatkan oleh hacker, untuk menembus Joomla site kita.
Untuk mengatasi tiga kelemahan ini, saya coba melakukan sedikit riset terhadap file “configuration.php” dari semua versi Joomla dan cara Joomla site mengaksesnya. Hasilnya saya menemukan teknik pengamanan yang cukup efektif terkait file “configuration.php” ini.
Pengamanannya terdiri dari 2 bagian :
1. Mengubah nama file / rename file “configuration.php” dan memindahkan lokasinya.
2. Mengenkripsi variable nama database dan password akses ke database MySQL joomla site.
Berikut ini langkah-langkahnya dalam berbagai versi Joomla, sesuaikan dengan versi Joomla yang anda gunakan. Scroll ke bawah untuk melihat versi yang sesuai.

Pengamanan di Joomla versi 1.0.X :
1. Gunakan aplikasi FTP (Cute_FTP atau WS_FTP), untuk mendownload file-file berikut ini dari Joomla site milik anda :
- index.php
- index2.php
- globals.php
- administrator/index.php
- administrator/index2.php
- administrator/index3.php
- administrator/components/com_admin/admin.admin.html.php
- administrator/components/com_config/admin.config.html.php
- administrator/components/com_config/admin.config.php
- administrator/components/com_config/config.class.php
- administrator/components/com_languages/admin.languages.php
- administrator/includes/auth.php
- includes/database.mysql5.php
- includes/database.mysqli.php
- includes/database.php
- includes/joomla.php
- includes/sef.php
2. Letakkan file-file yang anda download tersebut sesuai dengan subfoldernya (bikin sub foldernya jika belum ada) di harddisk PC anda. samakan persis penamaan subfoldernya.
3. Masih melalui aplikasi FTP, download file “configuration.php” dari root folder Joomla site anda. Letakkan hasil downloadnya terpisah dari lokasi file-file sebelumnya (nomor 1).
4. Tutup / close aplikasi FTP-nya.
5. Copy dan letakkan duplikatnya di folder “includes” hasil download nomor (1) di atas. sehingga juga terdapat file “configuration.php” di dalam folder “includes”.
6. Rename / ubah nama file “includes/configuration.php” menjadi misalnya :
myset.php
Terserah anda, sebaiknya nama filenya bersifat pribadi dan tidak mudah ditebak oleh orang lain, yang penting akhirannya harus “.PHP”.
7. Gunakan aplikasi (Macromedia / Adobe) Dreamweaver, Jalankan tanpa membuka / open satu file pun.
8. Dalam editor Dreamweaver, tekan tombol Ctrl+F, untuk membuka kotak dialog “Find & Replace”.
9. Isi kotak “Find” dan “Replace” seperti gambar berikut :

Isi field Find & Replace
10. Ubah bagian “Find in :” menjadi “Folder”, lalu browse ke folder tempat anda mendownload file2x tadi (nomor 1), browse ke root foldernya. misalnya : C:\download\joomla

Folder find setting
11. Lalu klik tombol . Jika muncul dialog konfirmasi seperti berikut.

Konfirmasi Replace
klik tombol “Yes”.
12. Hasilnya semua text “configuration.php” pada file2x tersebut akan berganti menjadi “includes/myset.php“.

Hasil find & replace
13. Masih dalam editor Dreamweaver, open / buka file “includes/myset.php
14. Perhatikan bagian info nama database & passwordnya, seperti berikut :

isi file includes/myset.php
15. Gunakan browser internet, buka link berikut ini : http://www.crypo.com/eng_base64c.php
16. Copy text nama databasenya : u4231_dbjoomla
17. Lalu paste ke browser internet, seperti gambar berikut.

Paste text nama database
18. Klik tombol “encrypt”, sehingga hasilnya jadi seperti berikut :

hasil klik tombol encrypt
19. Copy hasil text enkripsi (base64) tersebut ke dalam variable nama database. pada file “includes/myset.php
20. Lakukan hal yang sama dengan isi variabel passwordnya, sehingga hasil akhirnya (terenkripsi / base64), jadi seperti ini :

nama database & password terenkripsi
21. Masih dari dalam editor Dreamweaver, buka / open file “includes/database.php
22. Scroll / temukan syntax berikut :
function database( $host=’localhost’, $user, $pass, $db=, $table_prefix=, $goOffline=true ) {
Tepat sesudahnya tambahkan syntax berikut :
$db = base64_decode($db);
$pass = base64_decode($pass);
23. Buka / open file “includes/database.mysql5.php
24. Scroll / temukan syntax berikut :
function database( $host=’localhost’, $user, $pass, $db=, $table_prefix=, $goOffline=true ) {
25. Tepat sesudahnya tambahkan syntax berikut :
$db = base64_decode($db);
$pass = base64_decode($pass);
26. Simpan / save semua perubahan / editing yang telah kita lakukan, sekarang upload kembali file2xnya ke Joomla site anda (gunakan aplikasi FTP), sesuaikan dengan foldernya masing-masing file (lihat nomor 1.). termasuk file “configuration.php” yang telah kita rename menjadi “myset.php” tadi ke folder “includes”. Lalu hapus file “configuration.php” di root folder Joomla site anda. Silahkan scroll ke bagian Penutup (paling bawah) di artikel ini.

Pengamanan di Joomla versi 1.5.X :
1. Gunakan aplikasi FTP (Cute_FTP atau WS_FTP), untuk mendownload file-file berikut ini dari Joomla site milik anda :
- administrator/components/com_admin/tmpl/sysinfo_config.php
- administrator/components/com_config/controllers/application.php
- administrator/includes/framework.php
- libraries/joomla/application/application.php
- libraries/joomla/database/database/mysql.php
- libraries/joomla/database/database/mysqli.php
- plugins/editors/xstandard/attachmentlibrary.php
- plugins/editors/xstandard/imagelibrary.php
- xmlrpc/includes/framework.php
2. Letakkan file-file yang anda download tersebut sesuai dengan subfoldernya (bikin sub foldernya jika belum ada) di harddisk PC anda. samakan persis penamaan subfoldernya.
3. Masih melalui aplikasi FTP, download file “configuration.php” dari root folder Joomla site anda. Letakkan hasil downloadnya terpisah dari lokasi file-file sebelumnya (nomor 1).
4. Tutup / close aplikasi FTP-nya.
5. Copy dan letakkan duplikatnya di folder “includes” hasil download nomor (1) di atas. sehingga juga terdapat file “configuration.php” di dalam folder “includes”.
6. Rename / ubah nama file “includes/configuration.php” menjadi misalnya :
myset.php
Terserah anda, sebaiknya nama filenya bersifat pribadi dan tidak mudah ditebak oleh orang lain, yang penting akhirannya harus “.PHP”.
7. Gunakan aplikasi (Macromedia / Adobe) Dreamweaver, Jalankan tanpa membuka / open satu file pun.
8. Dalam editor Dreamweaver, tekan tombol Ctrl+F, untuk membuka kotak dialog “Find & Replace”.
9. Isi kotak “Find” dan “Replace seperti gambar berikut :

Isi field Find & Replace
10. Ubah bagian “Find in :” menjadi “Folder”, lalu browse ke folder tempat anda mendownload file2x tadi (nomor 1), browse ke root foldernya.
misalnya : C:\download\joomla

Folder find setting
11. Lalu klik tombol . Jika muncul dialog konfirmasi seperti berikut

Konfirmasi Replace
klik tombol “Yes”.
12. Hasilnya semua text “configuration.php” pada file2x tersebut akan berganti menjadi “includes/myset.php“.

Hasil find & replace joomla 1.5.X
13. Masih dalam editor Dreamweaver, open / buka file “includes/myset.php
14. Perhatikan bagian info nama database & passwordnya, seperti berikut :

Nama database & password di file "configuration.php"
15. Gunakan browser internet, buka link berikut ini : http://www.crypo.com/eng_base64c.php
16. Copy text nama databasenya : u4231_dbjoomla
17. Lalu paste ke browser internet, seperti gambar berikut.

Paste text nama database
18. Klik tombol “encrypt”, sehingga hasilnya jadi seperti berikut :

hasil klik tombol encrypt
19. Copy hasil text enkripsi (base64) tersebut ke dalam variable nama database.
20. Lakukan hal yang sama dengan isi variabel passwordnya, sehingga hasil akhirnya (terenkripsi / base64), jadi seperti ini :

Nama database & password terenkripsi
21. Dari editor Dreamweaver, open / buka file “libraries/joomla/database/database/mysql.php“.
22. Scroll / temukan syntax seperti berikut ini :
// perform a number of fatality checks, then return gracefully
if (!function_exists( ‘mysql_connect’ )) {
23. Tepat sebelumnya, tambahkan syntax berikut ini :
$password = base64_decode($password);
$database = base64_decode($database);
24. Open / buka file “libraries/joomla/database/database/mysqli.php
25. Scroll / temukan syntax berikut ini :
// Unlike mysql_connect(), mysqli_connect() takes the port and socket
26. Tepat sebelumnya, tambahkan syntax berikut ini :
$password = base64_decode($password);
$database = base64_decode($database);
27. Simpan / save semua perubahan / editing yang telah kita lakukan, sekarang upload kembali file2xnya ke Joomla site anda (gunakan aplikasi FTP), sesuaikan dengan foldernya masing-masing file (lihat nomor 1.). termasuk file “configuration.php” yang telah kita rename menjadi “myset.php” tadi ke folder “includes”. Lalu hapus file “configuration.php” di root folder Joomla site anda. Silahkan scroll ke bagian Penutup (paling bawah) di artikel ini.

Pengamanan di Joomla versi 1.6.X :
1. Gunakan aplikasi FTP (Cute_FTP atau WS_FTP), untuk mendownload file-file berikut ini dari Joomla site milik anda :
- administrator/components/com_config/models/application.php
- administrator/includes/framework.php
- libraries/joomla/database/database/mysql.php
- libraries/joomla/database/database/mysqli.php
2. Letakkan file-file yang anda download tersebut sesuai dengan subfoldernya (bikin sub foldernya jika belum ada) di harddisk PC anda. samakan persis penamaan subfoldernya.
3. Masih melalui aplikasi FTP, download file “configuration.php” dari root folder Joomla site anda. Letakkan hasil downloadnya terpisah dari lokasi file-file sebelumnya (nomor 1).
4. Tutup / close aplikasi FTP-nya.
5. Copy dan letakkan duplikatnya di folder “includes” hasil download nomor (1) di atas. sehingga juga terdapat file “configuration.php” di dalam folder “includes”.
6. Rename / ubah nama file “includes/configuration.php” menjadi misalnya :
myset.php
Terserah anda, sebaiknya nama filenya bersifat pribadi dan tidak mudah ditebak oleh orang lain, yang penting akhirannya harus “.PHP”.
7. Gunakan aplikasi (Macromedia / Adobe) Dreamweaver, Jalankan tanpa membuka / open satu file pun.
8. Dalam editor Dreamweaver, tekan tombol Ctrl+F, untuk membuka kotak dialog “Find & Replace”.
9. Isi kotak “Find” dan “Replace seperti gambar berikut :

Isi field Find & Replace
10. Ubah bagian “Find in :” menjadi “Folder”, lalu browse ke folder tempat anda mendownload file2x tadi (nomor 1), browse ke root foldernya.
misalnya : C:\download\joomla

Folder find setting
11. Lalu klik tombol . Jika muncul dialog konfirmasi seperti berikut

Konfirmasi Replace
klik tombol “Yes”.
12. Hasilnya semua text “configuration.php” pada file2x tersebut akan berganti menjadi “includes/myset.php“.

hasil find & replace joomla 1.6.x
13. Masih dalam editor Dreamweaver, open / buka file “includes/myset.php
14. Perhatikan bagian info nama database & passwordnya, seperti berikut :

isi file "includes/myset.php"
15. Gunakan browser internet, buka link berikut ini : http://www.crypo.com/eng_base64c.php
16. Copy text nama databasenya : u4231_dbjoomla
17. Lalu paste ke browser internet, seperti gambar berikut.

Paste text nama database
18. Klik tombol “encrypt”, sehingga hasilnya jadi seperti berikut :

hasil klik tombol encrypt
19. Copy hasil text enkripsi (base64) tersebut ke dalam variable nama database.
20. Lakukan hal yang sama dengan isi variabel passwordnya, sehingga hasil akhirnya (terenkripsi / base64), jadi seperti ini :

Nama database & password terenkripsi
21. Dari editor Dreamweaver, open / buka file “libraries/joomla/database/database/mysql.php“.
22. Scroll / temukan syntax berikut ini :
// Perform a number of fatality checks, then return gracefully
23. Tepat sebelumnya tambahkan syntax berikut ini :
$password = base64_decode($password);
$database = base64_decode($database);
24. Open / buka file “libraries/joomla/database/database/mysqli.php“.
25. Scroll / temukan syntax berikut ini :
// Unlike mysql_connect(), mysqli_connect() takes the port and socket
26. Tepat sebelumnya, tambahkan syntax berikut :
$password = base64_decode($password);
$database = base64_decode($database);
27. Simpan / save semua perubahan / editing yang telah kita lakukan, sekarang upload kembali file2xnya ke Joomla site anda (gunakan aplikasi FTP), sesuaikan dengan foldernya masing-masing file (lihat nomor 1.). termasuk file “configuration.php” yang telah kita rename menjadi “myset.php” tadi ke folder “includes”. Lalu hapus file “configuration.php” di root folder Joomla site anda. Silahkan scroll ke bagian Penutup (paling bawah) di artikel ini.

Pengamanan di Joomla versi 1.7.X :
1. Gunakan aplikasi FTP (Cute_FTP atau WS_FTP), untuk mendownload file-file berikut ini dari Joomla site milik anda :
- administrator/components/com_admin/models/sysinfo.php
- administrator/components/com_config/models/application.php
- administrator/includes/framework.php
- libraries/joomla/database/database/mysql.php
- libraries/joomla/database/database/mysqli.php
2. Letakkan file-file yang anda download tersebut sesuai dengan subfoldernya (bikin sub foldernya jika belum ada) di harddisk PC anda. samakan persis penamaan subfoldernya.
3. Masih melalui aplikasi FTP, download file “configuration.php” dari root folder Joomla site anda. Letakkan hasil downloadnya terpisah dari lokasi file-file sebelumnya (nomor 1).
4. Tutup / close aplikasi FTP-nya.
5. Copy dan letakkan duplikatnya di folder “includes” hasil download nomor (1) di atas. sehingga juga terdapat file “configuration.php” di dalam folder “includes”.
6. Rename / ubah nama file “includes/configuration.php” menjadi misalnya :
myset.php
Terserah anda, sebaiknya nama filenya bersifat pribadi dan tidak mudah ditebak oleh orang lain, yang penting akhirannya harus “.PHP”.
7. Gunakan aplikasi (Macromedia / Adobe) Dreamweaver, Jalankan tanpa membuka / open satu file pun.
8. Dalam editor Dreamweaver, tekan tombol Ctrl+F, untuk membuka kotak dialog “Find & Replace”.
9. Isi kotak “Find” dan “Replace seperti gambar berikut :

Isi field Find & Replace
10. Ubah bagian “Find in :” menjadi “Folder”, lalu browse ke folder tempat anda mendownload file2x tadi (nomor 1), browse ke root foldernya.
misalnya : C:\download\joomla

Folder find setting
11. Lalu klik tombol . Jika muncul dialog konfirmasi seperti berikut

Konfirmasi Replace
klik tombol “Yes”.
12. Hasilnya semua text “configuration.php” pada file2x tersebut akan berganti menjadi “includes/myset.php“.
13. Masih dalam editor Dreamweaver, open / buka file “includes/myset.php
14. Perhatikan bagian info nama database & passwordnya, seperti berikut :

Isi file "includes/myset.php"
15. Gunakan browser internet, buka link berikut ini : http://www.crypo.com/eng_base64c.php
16. Copy text nama databasenya : u4231_dbjoomla
17. Lalu paste ke browser internet, seperti gambar berikut.

Paste text nama database
18. Klik tombol “encrypt”, sehingga hasilnya jadi seperti berikut :

hasil klik tombol encrypt
19. Copy hasil text enkripsi (base64) tersebut ke dalam variable nama database.
20. Lakukan hal yang sama dengan isi variabel passwordnya, sehingga hasil akhirnya (terenkripsi / base64), jadi seperti ini :

Nama database & password terenkripsi
21. Dari editor Dreamweaver, open / buka file “libraries/joomla/database/database/mysql.php“.
23. Scroll / temukan syntax berikut ini :
// Make sure the MySQL extension for PHP is installed and enabled.
24. Tepat sebelumnya tambahkan syntax berikut ini :
$options['password'] = base64_decode($options['password']);
$options['database'] = base64_decode($options['database']);
25. Open / buka file “libraries/joomla/database/database/mysqli.php“.
26. Scroll / temukan syntax berikut ini :
$options['socket'] = null;
27. Tepat sesudahnya, tambahkan syntax berikut :
$options['password'] = base64_decode($options['password']);
$options['database'] = base64_decode($options['database']);
28. Simpan / save semua perubahan / editing yang telah kita lakukan, sekarang upload kembali file2xnya ke Joomla site anda (gunakan aplikasi FTP), sesuaikan dengan foldernya masing-masing file (lihat nomor 1.). termasuk file “configuration.php” yang telah kita rename menjadi “myset.php” tadi ke folder “includes”. Lalu hapus file “configuration.php” di root folder Joomla site anda.

Penutup
Dengan pengamanan yang telah kita lakukan, maka tingkat keamanan Joomla site kita menjadi naik satu level lagi, karena hacker menjadi susah mencari file konfigurasi joomla dan tidak mudah memecahkan nama database dan password akses ke database MySQL-nya.
Guna hasil lebih baik pada bagian enkripsi nama database dan passwordnya, kita bisa buat fungsi Encrypt / Decrypt buatan kita sendiri yang tidak mengikuti fungsi enkripsi / dekripsi kepunyaan PHP standard. Sisipkan fungsinya di dalam file-file :
- includes/database.php
- includes/database.mysql5.php
- includes/database.mysqli.php
- libraries/joomla/database/database/mysql.php
- libraries/joomla/database/database/mysqli.php
Sesuai dengan versi Joomla yang kita gunakan.

0 komentar:

Posting Komentar