Chủ Nhật, 17 tháng 6, 2012

[TUT] - Bảo mật cho Forum vBulletin

Phần I
Bài viết này Mafia viết thêm dựa trên tài liệu của shacker và một bài viết bằng tiếng Anh viết về bảo mật cho vbb. ok vào đề đi nào!

I/Bài toán 1

Tôi đưa ra một giả thiết rằng tài khoản Admin trên forum bạn bị ai đó chiếm lấy bất hợp pháp (thông qua đoán pass, cài troyzan, ăn cấp password cookie...). 

Vấn đề đặt ra ở đây là sẽ phải có một pass thứ 2 để ngăn chặn bước chân của kẻ muốn tấn công forum bạn lại chứ
Thông thường thì một số bạn dùng htaccess tôi sẽ cung cấp cho các bạn thêm một cách làm nữa:

Cách thiết lập:
Bạn edit file global.php từ thư mục admincp của diễn đàn (không phải global.php nằm bên ngoài index)
-Bạn tìm
<?php
 -Thêm vào sau đó
//Khai bao dang nhap
$config['dn2_dnp'] = 'usename';
$config['mk2_dnp'] = 'password';


if ($_SERVER['PHP_AUTH_USER'] != $config['dn2_dnp'] || $_SERVER['PHP_AUTH_PW'] != $config['mk2_dnp']){
header('WWW-Authenticate: Basic realm="Xin vui long khai bao thong tin yeu cau truoc khi duoc chuyen den bang dang nhap"');
header('HTTP/1.0 401 Unauthorized');




//Trang sẽ hiển thị khi thông tin khai báo sai bét. Hỗ trợ HTML nên bạn có thể thiết kế một trang đẹp hơn
echo '<center>Đi chổ khác chơi đi chú em. Nhấn nút biến!</center>';
exit;
}
-Save lại với mã là UTF-8

kết quả here

Bạn làm thêm một cái nữa ở modcp để bảo mật cho staff của mình luôn.

II/Bài toán 2
Hacker thông qua local biết được cấu trúc dữ liệu site bạn.
Mục đích của cuộc tấn công của hacker là đọc được file config, giả sử tôi có một file config sau:
$INFO['sql_database'] = 'ngoisaon_Forums';
$INFO['sql_driver'] = 'mySQL';
$INFO['sql_host'] = 'localhost';
$INFO['sql_pass'] = 'HANOIMUATHU';
Đây là info database của diễn đàn hacker có thể thông qua nó drop database của forum hoặc thông qua shell đổi được password của admin ~~~> nguy hiểm thật nhỉ

Cách khắc phục:
- Chmod (ko bàn ở đây)
- Zend (dùng trình zendgaurd để zend lại các file php quan trọng)
- Đổi tên thư mục include (chứa file config) và file config.php
Tôi sẽ hướng dẫn các bạn đổi tên thư mục include (chứa file config) và file config.php:

B1: Bạn edit file diagnostic.php trong thư mục admincp
-Tìm
$ignored_files = array('/includes/config.php', '/includes/config.php.new',
-Thay bằng
$ignored_files = array('/thư mục bạn muốn đổi tên/tên file config mới.php', '/thư mục bạn muốn đổi tên/tên file config mới.php.new',
B2: Bạn edit file class_core.php trong thư mục include
-Tìm
include(CWD . '/includes/config.php');
 -Thay bằng
include(CWD . '/thư mục bạn muốn đổi tên/tên file config mới.php');
-Tìm
if (file_exists(CWD. '/includes/config.php'))
-Thay bằng
if (file_exists(CWD. '/thư mục bạn muốn đổi tên/tên file config mới.php'))
- Bạn có thể chọn nhiều cách làm như thay đổi tên thư mục chứa file config hoặc thay đổi file tên file config (làm 2 cách càng tốt).
tôi khuyên các bạn nên rename tên thành class_gì đó hoặc functions_gì đó để gây thêm khó khăn về thị lực cho kẻ muốn xâm nhập
- Còn file bạn tạo một file mới với tên config.php và điền info như sau:
Lạy anh tha cho em em có làm gì nên tội thì anh hãy pm em mà trách tội em :(
Bonus cho bạn code fake bigdump mafia chôm được
demo là vipunder
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>.:: Loi roi ban ::.</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="162">
<tr>
<td width="33%" height="21"></td>
<td width="33%" align="center" height="21"></td>
<td width="34%" height="21"></td>
</tr>
<tr>
<td width="33%" height="75"></td>
<td width="33%" align="center" height="75"><img border="0" src="http://daoduytu.net/police.jpg"></td>
<td width="34%" height="75"></td>
</tr>
<tr>
<td width="33%" height="21"></td>
<td width="33%" align="center" height="21"></td>
<td width="34%" height="21"></td>
</tr>
<tr>
<td width="33%" height="24"></td>
<td width="33%" align="center" height="24"><font face="Arial" size="4" color="#FF0000"><b>Địa chỉ này không tồn tại hoặc bạn không được quyền truy cập!</b></font></td>
<td width="34%" height="24"></td>
<center><font color="blue" size="5">Bạn sẽ được chuyển về trang bạn vừa xem</font></center>
</tr>
<tr>
<td width="33%" height="21"></td>
<td width="33%" align="center" height="21">
<script language="javascript">
window.setInterval("history.go(-1)", 5000);
//history.go(-1);
</script>
</td>
<td width="34%" height="21"></td>
</tr>
</table>
</body>
</html>


phần II
Bài toán 3:Sau khi bạn đổi tên thư mục include (chứa file config) và file config.php thì có cách nào để che dấu file config thêm một lần nữa không nhỉ?
Câu trả lời là bạn có thể làm được nhưng làm trên host window hay linux thì bạn lưu ý như sau:
Bước 1: Xác định folder cần che dấu file config.

- Đối với host dùng linux bạn tạo 1 folder tên #data .Ý nghĩa của dấu # thì trong linux dấu # sẽ bị lướt qua => ko truy cập được
- Đối với host dùng window bạn nên che dấu file config vào các folder có sẵn như admincp, modcp, style...
Bước 2: Tiến hành quá trình che dấu.
- Tạo một file php mới với tên bất kỳ (bạn nên nghĩ ra một cái tên gần gần na ná với cấu trúc của forum vbb) ở đây tôi đặt tên là usercp.php- Tiếp theo bạn copy toàn bộ nội dung file config vào usercp.php
Bước 3:

- Xóa hết nội dung file config.php và thay bằng đoạn code
<?php include "#data/usercp.php" ?> (đối với host dùng linux)
hoặc <?php include "data/usercp.php" ?> (đối với host dùng window)
- Bây giờ file config của bạn đã được chuyển sang một folder khác với một cái tên khác.
Bước 4: Bảo mật thêm cho file config.


- Lời khuyên là bạn nên dùng host linux để có được tính năng Chmod nếu Chmod tốt thì hacker sẽ khó lòng mà xâm nhập.
- Mã Hóa file config bằng zendguard.
- Dùng MD5 để mã hóa user và pass của file config.
- Bước cuối quan trọng nhất ,CHMOD folder #data (chỉ làm bước này nếu bạn sử dụng host linux) là 111 nếu host có hỗ trợ còn không thì 711 cũng được,nếu làm đúng file sẽ mất tiêu thư mục #data y như thư mục rỗng.
- file config cũ chứa nội dung <?php include "#data/usercp.php" ?> thì bạn hãy mã hóa nó.
Bài toán 4: Để những folder như admincp, modcp thì tầm thường quá có thể nào thay đổi tên những folder này không.

Bạn làm như sau: vào file config.php tìm đoạn này và edit nó
Code:
$config['Misc']['admincpdir'] = 'admincp'; //thay nội admincp bằng tên folder mà bạn muốn đổi
$config['Misc']['modcpdir'] = 'modcp'; //thay nội modcp bằng tên folder mà bạn muốn đổi
Bài toán 5: Phương pháp chống những kẻ tò mò tọc mạch

Bạn tạo một file index.html với nội dung tùy ý ở bất cứ folder nào trong host. (kể cả mục skin, imager, và những folder con trong folder mẹ imager)

Bài toán 6: Che dấu những folder nhạy cảm.

- Bạn có thể dùng .htaccess.
- Rename các folder nhạy cảm như data, databackup, mysqldumper...
- Tạo subdomain để vào VD: sql.yourdomain.com và trỏ tới mysqldumper.
Bài toán 7: Có cách nào để phát hiện quá trình xâm nhập không nhỉ?

Câu trả lời rằng bạn hoàn toàn có thể biết trước được quá trình xâm nhập vào admincp hoặc modcp do member của diễn đàn bạn hoặc một kẻ phá hoại nào đó. Quá trình xâm nhập có thể là đoán pass.
Điều gì bạn muốn biết về quá trình xâm nhập?
Đó là nickname đang cố xâm nhập, ip của hắn, số lần cố gắn xâm nhập, thời gian diễn ra quá trình xâm nhập.
Demo: test ở diễn đàn ku LTA (mafia team)
Username tried: [l] [t] [a]
IP Address: 117.2.15.36
Host: 117.2.15.36
Strikes: 2 out of 5
Referrer: http://forum.b3pro.us/modcp/index.php
Script: http://forum.b3pro.us/login.php?do=login
Date/Time: Sunday, August 17th, 2008 at 6:43:33 am ?
==========================================
Username tried: asedfsda
IP Address: 117.2.15.36
Host: 117.2.15.36
Strikes: 1 out of 5
Referrer: http://forum.b3pro.us/modcp/index.php
Script: http://forum.b3pro.us/login.php?do=login
Date/Time: Sunday, August 17th, 2008 at 6:42:54 am
Để làm được như thế này bạn lần lượt làm theo hướng dẫn ở các bước sau nhé:

Bước 1: edit file login.php

Bạn tìm:
$strikes = verify_strike_status($vbulletin->GPC['vb_login_username']);
Và add sau nó:
$username = $vbulletin->GPC['vb_login_username'];
$fdate = date('l, F jS, Y');
$ftime = date('g:i:s a');
$fdatetime = "Date/Time: $fdate at $ftime \r\n";
$fscriptpath = "Script: http://$_SERVER[HTTP_HOST]" . SCRIPTPATH . "\r\n";
$freferer = 'Referrer: ' . REFERRER . "\r\n";
$fusername = "Username tried: $username \r\n";
$fipaddress = 'IP Address: ' . IPADDRESS . "\r\n";
$iphostname = "Host: " . @gethostbyaddr(IPADDRESS) . "\r\n";
if ($vbulletin->userinfo['userid'] > 0)
{
$realname = "\nUSER ATTEMPT: " . $vbulletin->options['bbtitle'] . " has identified this registered user as: " . $vbulletin->userinfo['username'] . "\r\n";
}
 Bước 2: vẫn ở file login.php

Bạn tìm:
// log this error if attempting to access the control panel
require_once(DIR . '/includes/functions_log_error.php');
 Thêm sau nó:
$fstrk = "Strikes: $GLOBALS[strikes] out of 5 \r\n";
if ($vbulletin->GPC['logintype'] === 'cplogin')
{
$subject= 'WARNING: Failed Admin CP logon in ' . $vbulletin->db->appname . ' ' . $vbulletin->options['templateversion'] . "\r\n\r\n";
$message="Someone is trying to login to your " . $vbulletin->options['bbtitle'] . " Admin CP!\n\n$fusername$fipaddress$iphostname$fstrk$fref erer$fscriptpath$fdatetime$realname";
}
else
{
$subject= 'WARNING: Failed Mod CP logon in ' . $vbulletin->db->appname . ' ' . $vbulletin->options['templateversion'] . "\r\n\r\n";
$message="Someone is trying to login to your " . $vbulletin->options['bbtitle'] . " Mod CP!\n\n$fusername$fipaddress$iphostname$fstrk$fref erer$fscriptpath$fdatetime$realname";
}
vbmail($vbulletin->options['webmasteremail'], $subject, $message, true);
Webmasteremail các bạn chỉnh trong VB Options nhé code sẽ tự động gởi mail thông báo quá trình xâm nhập cho bạn.
Note:
- test trên forum 3.7
- Special thanks to Boofo for this mod!
Bài toán 8: Phương pháp chống up shell wa plugin và edit plugin
Bạn chèn đoạn code này vào file config.php (sau dòng <?php)
define('DISABLE_HOOKS', true);
 Bonus: phương pháp thiết lập ở config.php để ngăn chặn việc xóa, sửa hay thêm bớt thông tin tài khoản admin
// ****** UNDELETABLE / UNALTERABLE USERS ******
// The users specified here will not be deletable or alterable from the control panel by any users.
// To specify more than one user, separate userids with commas.
$config['SpecialUsers']['undeletableusers'] = 'nhập user admin vào đây';
Vài lời khuyên là không nên dùng source share sẳn, đừng hack quá nhiều mod, đặt biệt là những mod không rõ nguồn gốc vì có thể người share mod sẽ đính kèm shell vào plugin. Đây chỉ là một vài phương pháp tạm thời để ngăn hacker, tôi đang nghiên cứu thêm giải pháp bảo mật hẹn diệp sau sẽ post tiếp.
Tut được đúc kết từ kinh nghiệm bản thân và tài liệu của các bật tiền nhân đi trước.



phần III
Bài toán 9: Admincp Fake
Tôi đặt ra một giã thiếc: hacker có được user và pasword của admin. Hacker sẽ tìm cách vào admincp của bạn để chèn thêm shell hoặc nghịch phá diễn đàn bạn. Để làm được điều đó hacker phải vào admincp của bạn, thế thì tại sao không tạo một Admincp giả để đánh lừa những ai ưa tò mò nhỉ
Cách này có thể áp dụng cho những code shop, code news và những code forum khác bạn có thể tùy biến dễ dàng.
Q: Thế thì admincp củ của tôi để đâu nhỉ?
A: Bạn hãy rename folder admincp cũ thành bất cứ tên gì miễn sao chỉ có mỗi mình bạn biết, mỗi mình bạn có thể vào
Q: Cách này có hạn chế hack không?
A: Nó chỉ hạn chế một phần, phần còn lại phụ thuộc vào mức độ bảo mật của hosting bạn.
Q: Làm thế nào mà tôi phát hiện quá trình xâm nhập?
A: Code sẽ tự động gửi email đến thông báo cho bạn mỗi khi xuất hiện quá trình xâm nhập.
Demo run code và đoạn email gửi về
PHP Code:
New Security Breach Attempt
--------------- SENDER INFORMATION ------------This message was sent to you by Admincp.IP address is: 117.2.13.17Username: X-ecpanelPassword: 123456
Bài toán 10: Secure IP
Bảo mật admincp luôn là đề tài hot nhất, việc này đã làm cho nhiều webmaster và cả hacker hao tâm tổn sức. Hum nay tôi xin giới thiệu với các bạn một giải pháp bảo mật hiệu quả cho admincp:
Công dụng của nó ngoài việc đảm bảo chỉ 1 IP được phép login vào admincp. Còn có thêm tính năng đặt biệt giúp bạn có thể dễ dàng update IP đó.
download :
 Cách làm:
- Bạn mở file capnhapip.php, chỉinh lại $pass = '12345'; cho phù hợp.
- Mở file Security, chỉnh IP Hosting của bạn.
- UP 3 file security.php, checkip.php , listip.txt vào thư mục admincp.
- Chmod File listip.txt thành 777.
- Mở file global.php và thêm vào đằng sau <?
Code:
include("security.php")
Cách sử dụng:
- Truy cập vào địa chỉ: http://yourURL.com/forum/admincp/capnhapip.php
Nhập mật khẩu của bạn để cập nhập địa chỉ IP mới.
Tip: Nên dùng Sock SSh do chính hosting của bạn tạo ra để truy cập vào admincp
download:

1 nhận xét: