Про­ходят годы, а DDoS оста­ется мощ­ным инс­тру­мен­том хакер­ских груп­пировок. Ежед­невно в мире про­исхо­дит 500–1000 атак такого типа. Каж­дый раз зло­умыш­ленни­ки находят новые уяз­вимос­ти в популяр­ных сер­висах, которые поз­воля­ют про­водить ата­ки «с уси­лени­ем». Раз­работ­чики Windows активно борют­ся с этим, усложняя жизнь хакерам и отсе­кая вре­донос­ные зап­росы на сис­темном уров­не. Мы сегод­ня погово­рим о том, как эти прег­рады обхо­дят.

warning

Статья носит озна­коми­тель­ный харак­тер. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с исполь­зовани­ем получен­ной из нее информа­ции. Преж­де чем про­водить наг­рузоч­ное тес­тирова­ние веб‑сай­та, необ­ходимо зак­лючить пись­мен­ное сог­лашение с его вла­дель­цем. В про­тив­ном слу­чае наруше­ние работы сис­темы может прес­ледовать­ся по закону.

Как вид­но из ста­тис­тики, наибо­лее рас­простра­нен­ный век­тор — это ата­ки на сер­висы (или с исполь­зовани­ем сер­висов), которые исполь­зуют про­токол UDP.

Здесь все очень прос­то. UDP, в отли­чие от дру­гих про­токо­лов, не тре­бует сес­сии, а ответ на зап­росы отправ­ляет­ся немед­ленно. В этом осно­ва ата­ки «с уси­лени­ем». Мы можем фор­мировать зап­росы к некото­рым сер­висам таким обра­зом, что­бы ответ был в десят­ки раз боль­ше, чем сам зап­рос. Соот­ветс­твен­но, если эти отве­ты будут перенап­равле­ны на машину жер­твы, ата­кующий смо­жет генери­ровать тра­фик неверо­ятной мощ­ности.

Что­бы пре­дот­вра­тить такого рода ата­ки, раз­работ­чики из Microsoft уста­нови­ли огра­ниче­ния на манипу­лиро­вание пакета­ми.

Об­рати вни­мание на этот пункт докумен­тации.

Пря­мо заяв­лено, что ОС не поз­волит отправ­лять UDP-пакеты с полем IP-адре­са под­дель­ного отпра­вите­ля.

За­чем нам это нуж­но? Дело в том, что тра­фик, который мы получа­ем от уяз­вимых отве­тов служб, может быть каким‑то обра­зом перенап­равлен на сер­веры жертв. А это­го мож­но добить­ся, прос­то изме­нив IP-адрес отпра­вите­ля в заголов­ке UDP-пакета. Тог­да уяз­вимый сер­вер подума­ет, что зап­рос пос­тупил с компь­юте­ра жер­твы, и отпра­вит на него ответ.

Кто не зна­ком со струк­турой пакета UDP, может пос­мотреть на таб­личку ниже. Там ничего осо­бен­ного нет, фор­мирова­ние самого пакета мы раз­берем поз­же.

User Datagram Protocol
User Datagram Protocol

Собс­твен­но, из докумен­тации понят­но, что стан­дар­тные инс­тру­мен­ты и биб­лиоте­ки Windows не поз­воля­ют под­делывать адрес отпра­вите­ля. Для про­веде­ния DDoS это нуж­но обой­ти, и на помощь зло­дею или жела­юще­му про­вес­ти наг­рузоч­ный тест при­ходит такая вол­шебная вещь, как WinPcap.

С WinPcap мож­но фор­мировать пакеты отправ­ки незави­симо от инс­тру­мен­тов Windows. И это не прос­то биб­лиоте­ка для обра­бот­ки пакетов для C++, а собс­твен­ный драй­вер NPF.

Ес­ли вкрат­це, то это работа­ет так. Мы можем уста­новить кас­томный драй­вер про­токо­ла, при написа­нии прог­раммы мы будем ссы­лать­ся на него. Отту­да пакеты будут переда­вать­ся на драй­вер Network interface card (NIC) и идти даль­ше по сети. Таким обра­зом мы смо­жем пол­ностью кон­тро­лиро­вать про­цесс соз­дания и инкапсу­ляции пакетов.

 

Ищем уязвимые серверы

Для поис­ка уяз­вимых сер­веров широко исполь­зует­ся поис­ковик Shodan. Давай для при­мера поп­робу­ем най­ти сер­веры Memcached, которые исполь­зовались для ата­ки на Github нес­коль­ко лет назад. Вво­дим product:"Memcached" и видим, что сер­веров оста­ется все еще очень мно­го.

Раз­работ­чик испра­вил уяз­вимость и теперь порт, наз­начен­ный по умол­чанию, заменен с 11211 на TCP. Но, нес­мотря на это, в интерне­те оста­лись тысячи уяз­вимых сер­веров.

У Shodan есть филь­тры, которые помога­ют искать необ­ходимые сер­висы и сер­веры. Для прак­тики мож­но поп­робовать най­ти сер­висы RDP с пор­том UDP/3389, которые так­же уяз­вимы для атак ампли­фика­ции (с коэф­фици­ентом 85,9:1).

 

Разработка

Мы можем соз­дать прог­рамму для экс­плу­ата­ции уяз­вимос­ти сер­веров Memcached, DDoS с уси­лени­ем. Преж­де все­го нуж­но нас­тро­ить рабочую сре­ду.

Файлы с заголовками
Фай­лы с заголов­ками
Макросы
Мак­росы

В самом про­екте я исполь­зовал сле­дующие модули:

#define _ALLOW_KEYWORD_MACROS // Отключить предупреждение
#include <winsock2.h> // Здесь нужные нам функции, такие как htons() htonl()
#pragma comment (lib,"WS2_32.lib")
#include <Iphlpapi.h>// Поможет нам найти информацию про сетевые адаптеры и их характеристики
#pragma comment (lib,"Iphlpapi.lib")
#include <pcap/pcap.h> // Собственно, WinPcap
#pragma comment (lib,"wpcap.lib")
#include <iostream> // Здесь нам нужна функция sprintf()
#include <stdio.h>
#include <thread>
#define HOST sin_addr.S_un.S_addr // Переменные для пакета
using namespace std;

Пе­рей­дем к глав­ной задаче прог­раммы — фор­мирова­нию пакетов. Пой­дем по пун­ктам.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии