среда, 29 августа 2007 г.

Обсуждение способов защиты от ДДоС

Тема ДДоС в конкурентной борьбе стала острой и злободневной. Многие столкнулись , многие получили опыт и навыки борьбы. Пора обменятся знаниями.

6 комментариев:

Анонимный комментирует...

Предлагаю завести блог на хабре, или каком-либо другом ресурсе.
У меня есть несколько наработок по этой теме.

Unknown комментирует...

Он уже заведен, вот он =)

Анонимный комментирует...

делюсь: http://eldarmurtazin.livejournal.com/37175.html?thread=648247#t648247

Unknown комментирует...

Все верно. Это основной способ расследования. Только нужно не ограничиватся поиском irc, а еще проанализировать http соединения.

Apri комментирует...

начинаю расследование с целью поиска атакующих. для начала создал такое письмо :-)

Добрый день, %ОФИЦИАЛЬНОЕ ИМЯ ПРОВА%

Вас беспокоит администрация сайта ********.*** (ip сервера ***********).

Хотим вам сообщить, что %КОЛИЧЕСТВО IP% компьютеров вашей сети ВЗЛОМАННЫ ЗЛОУМЫШЛЕННИКАМИ, ЗАРАЖЕНЫ ВИРУСАМИ
и ВОЗМОЖНО НАХОДЯТСЯ ПОД ИХ КОНТРОЛЕМ. Это позволяет использовать их для совершения ДДОС-атак вместе с
другими зараженными компьютерами по всему миру, обьеденённых в бот-сеть(по нашим подсчётам около 80 000 компьютеров).


За последние 5 дней мы обнаружили около %КОЛИЧЕСТВО ЗАПРОСОВ% запросов со следущих IP вашей сети:
%СПИСОК IP%

Мы предполагаем, что эти компьютеры Вашей сети используются для атаки не только нашего сервера.
Будем вам крайне признательны если вы поможете нам, проведёте анализ траффика с целью выяснения IP управляющего сервера.


Управляющий сервер несёт потенциальную угрозу для нас и других сайтов, а размер ботнет сети,
в которую входят также зараженные компьютеры вашей сети постоянно увеличивается.

Если вы поможете найти управляющий сервер, то нам удасться найти уничтожить ботнет сеть из зараженных компьютеров совместными усилиями.

Будем рады сотруднчать с вами в этом вопросе.

С уважением адмнистрация ********

Apri комментирует...

Вторым делом написал PHP скрипт, который выдирает имя и email провайдера с сайта nic.ru, который владеет IP. Список IP берётся с файла blocked.ips, итоговая информация сохраняется в blockedipsandmail.php. Я за час скриптом обработал около 20 000 IP и получил необходимые данные для связи с провайдером.



$fw=fopen("blockedipsandmail.php", "w") or die("cannot open blockedipsandmail.ips");
$ips=file("blocked.ips");

$providers=array();

$ii=0;
while(list($vn,$vv) = each($ips))
{
$ii++;
$vv=trim($vv);
echo "process $vv ... \n";
$content="";
$content=get_page("https://www.nic.ru/whois/?query=$vv");


if(preg_match_all("/([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*)/sm", $content, $arr))
{
$total=0;
$arr[0] = array_unique($arr[0]);
$emails="";

$name="Provider";
if(eregi("OrgName:([^<]*)",$content, $namearr)) $name=$namearr[1];
elseif(eregi("descr:([^<]*)",$content, $namearr)) $name=$namearr[1];
$name=eregi_replace("(  )*","",$name);
$name=eregi_replace(",*","",$name);

foreach($arr[0] as $key => $value) $emails.="$name<$value>, ";


$providers[$vv]=$emails;




$code=md5($emails);
$email[$code]['ip']=$vv;
if(!isset($email[$code]['ips'])) $email[$code]['ips']='';
$email[$code]['ips'].=$vv.", ";
$totalarr=explode(",",$email[$code]['ips']);
$total=sizeof($totalarr);
$email[$code]['total']=$total-1;
$email[$code]['name']=$name;
$email[$code]['emails']=$emails;





//if($ii>5) break;
}
}




while(list($vn,$vv) = each($email))
{
$strtofile=
"
\$email[$vn][ip]=\"".$vv['ip']."\";
\$email[$vn][ips]=\"".$vv['ips']."\";
\$email[$vn][total]=\"".$vv['total']."\";
\$email[$vn][name]=\"".$vv['name']."\";
\$email[$vn][emails]=\"".$vv['emails']."\";
";
fwrite($fw,"$strtofile \n\n\n\n");
}

fclose($fw);


print_r($email);

function get_page($url)
{

$params = "";

$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYRESULT, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
// curl_setopt($ch, CURLOPT_GET, 1);
// curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

$result=curl_exec($ch);
curl_close($ch);
return $result;
}