Saturday, May 31, 2008

Tìm các cuộc tấn công DDOS

Giải pháp:
- Tạo thư mục anti_ddos và "ném" file index.php dưới đây vào:

index.php(Dùng để dò tìm các cuộc tấn công DDOS):

PHP Code:

<?php

$ad_ddos_query
=10; //số lượng những yêu cầu trên giây để nhận diện sự tấn công DDOS

$ad_check_file='check.txt'; //Quá trình theo dõi được lưu lại trong file này
$ad_temp_file='all_ip.txt'; //Lưu lại tất cả các địa chỉ IP tạm thời

$ad_black_file='black_ip.txt'; //Địa chỉ IP của các máy có chứa Zombie
$ad_white_file='white_ip.txt'; //Địa chỉ IP sạch (Visitor)

$ad_dir='anti_ddos'; //Đây là thư mục chứa mã Anti-DDOS
$ad_num_query=0; // current number of queries per second from the file $check_file

$ad_sec_query=0; // Seconds from the file $check_file
$ad_end_defense=0; // Time ending protection from file $check_file

$ad_sec=date("s"); // current second
$ad_date=date("mdHis"); // current time

$ad_defense_time=10000; // Upon discovery of ddos attack, in seconds which stops monitoring?


if(!file_exists("{$ad_dir}/{$ad_check_file}") or !file_exists("{$ad_dir}/{$ad_temp_file}") or !file_exists("{$ad_dir}/{$ad_black_file}") or !file_exists("{$ad_dir}/{$ad_white_file}") or !file_exists("{$ad_dir}/anti_ddos.php")){

die(
"Not enough File.");
}

require(
"{$ad_dir}/{$ad_check_file}");

if (
$ad_end_defense and $ad_end_defense>$ad_date){

require(
"{$ad_dir}/anti_ddos.php");
} else {
if(
$ad_sec==$ad_sec_query){
$ad_num_query++;
} else {
$ad_num_query='1';

}

if (
$ad_num_query>=$ad_ddos_query){
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_end_defense=$ad_date+$ad_defense_time;

$ad_string='<?php $ad_end_defense='.$ad_end_defense.'; ?>';
fputs($ad_file,$ad_string);

fclose($ad_fp);
} else {
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_string='<?php $ad_num_query='.$ad_num_query.'; $ad_sec_query='.$ad_sec.'; ?>';

fputs($ad_file,$ad_string);
fclose($ad_fp);
}
}
?>


- Tạo ra 1 file nữa: anti_ddos.php(Dùng để tấn công lại)

PHP Code:

<?php
function getIP() {
if(
getenv("HTTP_X_FORWARDED_FOR") and preg_match("/^[0-9\.]*?[0-9\.]+$/is",getenv("HTTP_X_FORWARDED_FOR")) and getenv("HTTP_X_FORWARDED_FOR")!='127.0.0.1') {

$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");

}
return
$ip;
}
$ad_ip=getIP();

$ad_source=file("{$ad_dir}/{$ad_black_file}");

$ad_source=explode(' ',$ad_source[0]);
if (
in_array($ad_ip,$ad_source)){die();}


$ad_source=file("{$ad_dir}/{$ad_white_file}");
$ad_source=explode(' ',$ad_source[0]);

if (!
in_array($ad_ip,$ad_source)){

$ad_source=file("{$ad_dir}/{$ad_temp_file}");
$ad_source=explode(' ',$ad_source[0]);

if (!
in_array($ad_ip,$ad_source)){
$ad_file=fopen("{$ad_dir}/{$ad_temp_file}","a+");
$ad_string=$ad_ip.' ';

fputs($ad_file,"$ad_string");
fclose($ad_fp);
?>

The site is currently being subjected DDOS attack if you are not machine-zombie attacker's site, click on the button, otherwise you IP (<?=$ad_ip?>) will be blocked!!!

<form method="post">
<input type="submit" name="ad_white_ip" value="Tranla12a@yahoo.com">
</form>

<?php
die();
}
elseif (
$_POST['ad_white_ip']){

$ad_file=fopen("{$ad_dir}/{$ad_white_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");

fclose($ad_fp);
}
else {
$ad_file=fopen("{$ad_dir}/{$ad_black_file}","a+");
$ad_string=$ad_ip.' ';

fputs($ad_file,"$ad_string");
fclose($ad_fp);
die();
}
}
?>


- Tạo ra 4 file nữa là: check.txt, white_ip.txt, black_ip.txt, all_ip.txt. Tất cả các file này phải đưa lên cùng thư mục với anti_ddos . CHMOD cả 4 file đó là 666

- Bạn có thể dùng thêm cả .htaccess nếu Server của bạn chạy trên Linux hỗ trợ .htaccess
Deny from 111.111.111.111 222.222.222.222


- Xong rồi bây giờ bạn chỉ việc Upload (FTP) thư mục anti_ddos lên Host
Và quan trọng nhất là thêm vào file cần bảo vệ đoạn code sau

require ( "anti_ddos/index.php");

Saturday, May 17, 2008

Tạo lại mô hình tổ chức trên Database

Mô hình tổ chức trên database sẽ được chia thành 3 cấp:
- DBA user: SYS, SYSTEM
- Schema user: owner dữ liệu của ứng dụng
- End user: được chia thành 2 cấp:
• Có quyền Select, Insert, Update, Delete: ứng dụng sẽ sử dụng user này
• Chỉ có quyền Select: cho người dùng monitoring.
Đối với schema user, sau khi tạo các tables và gán quyền xong thì sẽ bị revoke quyền CREATE SESSION. Nên chính user này cũng không kết nối vào database được. Như vậy, những lệnh như TRUNCATE, RENAME, DROP sẽ không thực hiện được trên các tables của schema này.
Vấn đề còn lại là bảo vệ nhóm DBA users. Các phiên bản Oracle từ 9i về trước chưa có cơ chế để ngăn chặn nhóm user này tác động đến dữ liệu của ứng dụng. Cho nên, giải pháp ở đây chỉ có thể là quản lý chặt mật khẩu của nhóm user này. Chỉ người quản trị database (DBA) mới được phép giữ nó. Các mật khẩu này bao gồm:
- Mật khẩu của user SYS, SYSTEM
- Mật khẩu của user trên OS nằm trong group DBA, có thể connect as SYSDBA bằng OS Authentication.
Từ 10g trở lên thì có thể dùng Database Vault để bảo vệ dữ liệu đối với nhóm DBA này.