Ще один спосіб запустити DDoS на Azure VM

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

У цій статті я продемонструю ще один спосіб запуску Liberator (disBalancer) в Azure, цього разу з використанням VM.

На відміну від попереднього способу, ми будемо обходитися без Docker, щоб спростити завдання.

Спрощення досягається за рахунок того, що для розгортання контейнера Docker в Azure обов’язково необхідно використовувати реєстр образів (Container Registry). І у зв’язку з тим, що офіційного образу від команди disBalancer немає в DockerHub, публічному реєстрі образів Docker, доводиться розгортати приватний Azure Container Registry і пов’язаний з ним KeyVault, що істотно ускладнює процес.

Другою причиною для цього підходу є те, що розгортання Docker container у serverless-підході Azure вимагає або Container Group — у разі Azure Container Services, або AppService Plan — у разі Azure App Service Containerized App.

Вартість Container Group за місяць становить близько $40. AppService Plan є безкоштовний, але з обмеженням 60 CPU хвилин на день, або починається від ~$13 на місяць, якщо без обмежень.

Вартість віртуальної машини стартує з ~$4 на місяць, тобто помітно дешевше.

Отже:

1. Перше, що потрібно зробити — це виписати собі нову Azure підписку. Для цього робимо кроки 1-9 із цієї статті. Або залогінитись у свою, якщо вона у вас уже є.

2. Відкриваємо Azure Cloud Shell

На сторінці порталу відкриється консоль, куди можна писати команди. Можливо, сторінка запропонує створити додаткові ресурси, якщо їх не вистачає, тоді в віконці, що з’явилося, треба натиснути ok.

Переконайтеся, що консоль знаходиться в режимі Bash. Якщо стоїть режим PowerShell, поміняйте на Bash за допомогою стрілочки

3. Створюємо ресурсгруппу

RES_GROUP=rg-disbalancer
az group create --resource-group $RES_GROUP --location eastus

4. Створюємо VM

VM_NAME=vmdisbalancer$RANDOM
az vm create \
  --resource-group $RES_GROUP \
  --name $VM_NAME \
  --image UbuntuLTS \
  --size Standard_B1ls \
  --admin-username azureuser \
  --generate-ssh-keys \
  --location japanwest

У прикладі вказаний регіон japanwest, ви можете вибрати інший, який підходить для ваших цілей (див. ліричні відступи наприкінці статті).

5. Підключаємося до виртуалки

IP_ADDRESS=$(az vm list-ip-addresses -n $VM_NAME \
  --query "[0].virtualMachine.network.publicIpAddresses[0].ipAddress" -o tsv)
ssh [email protected]$IP_ADDRESS

При першому підключенні система запитатиме підтвердження ключа, необхідно вписати в консоль yes і натиснути enter

6. Завантажуємо та запускаємо liberator (disBalancer)

wget https://github.com/disbalancer-project/main/releases/latest/download/launcher-disbalancer-go-client-linux-amd64
chmod +x launcher-disbalancer-go-client-linux-amd64
screen -d -m ./launcher-disbalancer-go-client-linux-amd64

Все, програма запустилася і почала свою роботу.

Віртуалка працюватиме доки ви її не вимкнете або не видаліть.

Можна закрити вікно браузера та йти у своїх справах.

7. Переконатися у тому, що все працює можна за допомогою команди

screen -r

Ви побачите журнал операцій програми. Щоб повернутися в інтерактивну консоль необхідно натиснути Ctr-a d (контрол-a і відразу за ним кнопку d доволі швидко).

Або можна подивитись на то які процеси запущені в системі за допомогою команди

ps all

Якщо все добре, то в однієї зі строк має бути текст ./launcher-disbalancer-go-client-linux-amd64

Щоб відключитися від віртуалки вводимо

  exit

Ліричні відступи

1. У цій статті, ми використовуємо мінімальний розмір віртуальної машини: B1ls з 1 процесорним ядром, 0.5Гб ОЗУ та 4Гб на диску. Для наших цілей достатньо. Вартість такої віртуалки в залежності від регіону коливається від $3.8 на місяць в East US до $5.5 в Japan West.

Деталі можна переглянути на сторінці

azure.microsoft.com/...​s/virtual-machines/linux

2. Список доступних регіонів можна подивитись за допомогою команди

az account list-locations \
  --query "[].{name:name, region:metadata.geographyGroup, title:regionalDisplayName}" \
  --output table

Якщо ви бажаєте підняти декілька віртуалок в різних регионах, треба повторити кроки 4-6 бажано напередодні змінивши регіон в параметрі —location

4. Щоб подивитись на то, чи все добре працює через деякій час, можна у портали відкрити Virtual Machines

У списку, що з’явиться вибираємо віртуальну машину.

У панелі overview

Або скопіювати значення Public IP Address і далі відкрити консоль Azure Cloud Shell та залогінитись на віртуальну машину за допомогою команди

ssh [email protected]<IP адреса що скопіювали>

І дали виконуєте дії з пункту 7.

Або, як альтернатива, можна вибрати табку Monitoring та подивитись чи є якась активність в панелі Network. Якщо щось пішло не так, там будуть нулі. Якщо все добре — там будуть ненульові графіки. Майте на увазі, що треба щоб пройшов деякий час, щоб там почали з’являтися дані якщо ви тільки що підняли віртуалку.

5. Щоб все почистити в своєму Azure акаунті треба залогінитись в портал, відкрити Resource Groups

У списку, що з’явиться вибираємо ресурсгрупу що створили на шаге 3 (rg-disbalancer).

В панелі клікаємо на Delete resource group, в панелі що з’явиться впечатуємо ім’я ресурсгрупи (rg-disbalancer) та клікаємо на Delete.

6. Як запустити багато процесів DDoS на одній віртуалці, або чьому liberator (disBalancer).

Коли ресурс попадає під DDoS атаку захистити його тим складніше, чим складніше відрізнити клиента-DDoS-ера від клієнта, для якого ресурс призначений насамперед. Якщо ваш DDoS софт у нескінченному циклі, якнайчастіше в одиницю часу довбає один і той же url, його дуже просто відрізнити від звичайної людини тому що людина фізично не в змозі клікати на одне й те саме посилання з такою швидкістю. Навіть якщо в цьому буде якийсь сенс, що теж дуже маловирогідно.

Тому якщо ви запустили натовп процесів на однієї віртуалці які ломляться на один і той же url як найшвидше, то скоріш за все, вашу атаку вже заблокували ще десь у провайдера на рівні мережевого желіза, навіть не дозволяючи вашій атаці вплинути на завантаження каналу зв’язку, не кажучи вже про ресурси сервера. Можете почитати на цю тему в гугл за ключовою фразою «auto ddos protection».

З тих же самих міркувань ваш Azure аккаунт, скоріше за все, вневдовзі теж буде заблоковано.

Тому найбільш ефективніший софт для атак це тий, що генерує трафік з великої кількості різних адрес не визиваючи підозри в кожному окремому випадку. Зазвичай такій софт — це різноманітні ботнети — велика кількість окремих комп’ютерів, які централізовано координуються. При цьому кожний окремий компьютер робить не так уж і багато різних запросів, в першу чергу щоб його було важко ідентифікувати як DDoS-клієнт.

Різноманітні інструменти від мало відомих компаній на кшталт антивірусів, утиліт для «оптимізації продуктивності» комп’ютера, торрент клієнтів нерідко містять приховані елементи ботнета. А також комп’ютерні черві, трояни зазвичай містять код ботнета як основний компонент.

В нашому випадку можна зробити ботнет за допомогою цілеспрямованого запуска клієнтів ботнета на якомога більшої кількості різних вузлів. Чим більше — тим краще. Це буде набагато ефективніше ніж запускати багато однакових атакуючих процесів на одному комп’ютері.

Одним із таких клієнтів є liberator від команди disBalancer. За мирного часу це був інструмент для навантажувального тестування, і це, по суті, одно й теж саме що і DDoS.

Інший схожий підхід застосовано в db100n. На відміну від disBalancer цей проект із відкритим кодом, але я не знайшов канала з активним ком’юніті. В disBalancer воно є і доволі велике.

Заради справедливості варто зазначити, що надмірна централізація всіх зусиль робить систему вразливою для протидії. Тобто, якщо контрзаходами нейтралізується єдиний координаційний центр, вся система відвалюється.

Бажаю вам успіху. Слава Україні!

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Мало в якому локейшні можна створити таку мінімальну віртуалку.
В eastus, для прикладу, не можна.
Знайшов перелік доступних зон в консолі таким способом:
az vm list-skus  --output table --all|grep Standard_B1ls|grep None
virtualMachines AustraliaCentral Standard_B1ls None
virtualMachines australiaeast Standard_B1ls 1,2,3 None
virtualMachines CentralUSEUAP Standard_B1ls 2 None
virtualMachines eastasia Standard_B1ls 1,2,3 None
virtualMachines EastUSSTG Standard_B1ls None
virtualMachines japaneast Standard_B1ls 1,2,3 None
virtualMachines KoreaCentral Standard_B1ls 1,2,3 None
virtualMachines QatarCentral Standard_B1ls None
virtualMachines SouthCentralUSSTG Standard_B1ls None
virtualMachines SouthIndia Standard_B1ls None
virtualMachines UAENorth Standard_B1ls None

Кращій спосіб знайти локейшни за допомогой команди
az vm list-skus --output table --size Standard_B1ls
Там трохи більше вариантів
virtualMachines AustraliaCentral Standard_B1ls None
virtualMachines australiaeast Standard_B1ls 1,2,3 None
virtualMachines australiasoutheast Standard_B1ls None
virtualMachines brazilsouth Standard_B1ls 1,2,3 None
virtualMachines CanadaCentral Standard_B1ls 1,2,3 None
virtualMachines CanadaEast Standard_B1ls None
virtualMachines CentralIndia Standard_B1ls 1,2,3 None
virtualMachines centralus Standard_B1ls 1,2,3 None
virtualMachines CentralUSEUAP Standard_B1ls 1 None
virtualMachines eastasia Standard_B1ls 1,2,3 None
virtualMachines eastus Standard_B1ls 1,2,3 None
virtualMachines eastus2 Standard_B1ls 1,2,3 None
virtualMachines EastUS2EUAP Standard_B1ls 1,2,3 None
virtualMachines EastUSSTG Standard_B1ls None
virtualMachines FranceCentral Standard_B1ls 1,2,3 None
virtualMachines GermanyWestCentral Standard_B1ls 1,2,3 None
virtualMachines japaneast Standard_B1ls 1,2,3 None
virtualMachines japanwest Standard_B1ls None
virtualMachines KoreaCentral Standard_B1ls 1,2,3 None
virtualMachines KoreaSouth Standard_B1ls None
virtualMachines northcentralus Standard_B1ls None
virtualMachines northeurope Standard_B1ls 1,2,3 None
virtualMachines NorwayEast Standard_B1ls 1,2,3 None
virtualMachines QatarCentral Standard_B1ls None
virtualMachines SouthAfricaNorth Standard_B1ls 1,2,3 None
virtualMachines southcentralus Standard_B1ls 1,2,3 None
virtualMachines SouthCentralUSSTG Standard_B1ls None
virtualMachines southeastasia Standard_B1ls 1,2,3 None
virtualMachines SouthIndia Standard_B1ls None
virtualMachines SwedenCentral Standard_B1ls 1,2,3 None
virtualMachines SwitzerlandNorth Standard_B1ls None
virtualMachines UAENorth Standard_B1ls None
virtualMachines uksouth Standard_B1ls 1,2,3 None
virtualMachines ukwest Standard_B1ls None
virtualMachines westcentralus Standard_B1ls None
virtualMachines westeurope Standard_B1ls 1,2,3 None
virtualMachines westus Standard_B1ls None
virtualMachines westus2 Standard_B1ls 1,2,3 None
virtualMachines WestUS3 Standard_B1ls 1,2,3 None

Працюють лише ті, які показав я... Звісно цікаво отримати список ВСІХ локейшинів, які цю віртуалку в принципі підтримують, але потім будеш як сліпе кошеня безрезультатно тикатись намагаючись зробити таку віртуалку.

Це одна й та сама команда, просто фільтрация по розміру іміджа в неї підтримується із коробки, не обовьязково фільтрувати за допомогою grep.
Доступніть імажей може залежити від типу аккаунта. В мене звичайний платний аккаунт pay-as-you-go, і результат команди з grep не відрізняється від команди з параметром

—size Standard_B1ls

.
Якщо вас цікавить якась певна локація, ві можете подивитись які віртуальни машини вона підтримує та вибрати найдешевшу з них.
Команда для цього виглядає так

az vm list-skus --location westeurope --size standard_b1 --output table
Де в параметрі —location треба зазначити локацію що вас цікавить.
Зазвичай найдешевши імажи — це ті, що мають розмір Satndard_B1<буква>. Після B1ls найдешевша йде B1s — $7.6 на місяць в eastus2. Потім B1ms — $15.2

Підписатись на коментарі