Ддос атака с хаба

Общение админов хабов и их юзеров.
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Я один пытался зайти к ним на хаб и что-то рассказать - отправили открывать issue на багтрекер. Написал про проблему - иссуй удалён.
Тут нужно коллективное донесение мыслей и фактов по проблеме.
И проблему нужно обсудить не только с разработчиками флайлинка, но и с dev-ами всех других популярных клиентов, обсудить все нюансы и принять какое-то внутреннее соглашение, что и как и почему.
Аватара пользователя
Быстрый ответ
Сообщения: 436
Зарегистрирован: 16 авг 2010, 00:21

Сообщение Быстрый ответ »

Какие страсти, какие эмоции...Люди больше не встречаются, не влюбляются и не женятся...Рушатся судьбы, ZOMG TEH DRAMA!!!11
Я всё жду, будет ли хоть какой-то выхлоп от этих сломанных копий в форумах. Но нет...
А ведь между прочим, скрипт защиты от "ддос атаки с хаба" занимает, как обычно, 3 строчки. Где же вы, где, о великие скриптеры, которые спасут страдальцев... :-D

И еще... В Стронге в своё время появилось предупреждение о том, что "кто-то с айпи такого-то пытается использовать ваш клиент для спама". Это относилось к запросам на соединение на порт 80. То есть отследить такие запросы несложно. Так что мне непонятно, что мешало (и продолжает мешать) разработчикам, вместо непонятных и бесполезных сообщений, просто отбрасывать такие запросы...
Аватара пользователя
Kimbo
Сообщения: 772
Зарегистрирован: 09 авг 2010, 18:05

Сообщение Kimbo »

Быстрый ответ писал(а):А ведь между прочим, скрипт защиты от "ддос атаки с хаба" занимает, как обычно, 3 строчки. Где же вы, где, о великие скриптеры, которые спасут страдальцев...
оп-оп... даю небольшую подсказку

Код: Выделить всё

Core.SuspendAccepts()
for PtokaX :-P дальше сами.
У меня скрипт автоматически блокирует и снимает блокировку если "атакующий устал" :-D
Аватара пользователя
Быстрый ответ
Сообщения: 436
Зарегистрирован: 16 авг 2010, 00:21

Сообщение Быстрый ответ »

Kimbo писал(а):Core.SuspendAccepts()
Core.SuspendAccepts(nTime) - Приостановить прослушивание сокета(ов) на указанное время в секундах. Хаб выглядит так, как будто не работает.
Прикинуться мёртвым, это конечно весьма "умно"... Но новые юзеры зайти не смогут, а это и есть основная цель атаки. То есть, что без защиты, что с такой "защитой" результат будет одинаков. Кстати, Core.Shutdown() защитит от атаки еще надёжнее. :-D
Kimbo писал(а):У меня скрипт автоматически
Да что ты говоришь... Автоматически, это путём подачи команды через меню?
1. Если вы заметили, что ваш хаб атакуют, то через меню можете заблокировать хаб для всех входящих. По умолчанию - на 5 минут (это регулируется в настройках хаба), также в меню есть блокирование на желаемое время (тоже в минутах). Разблокирование через меню либо по прошествию заданного времени.
А если ты будешь спать в это время, то что тогда? Короче - садись, два. Я вообще-то говорил о "великих скриптерах", а ты не великий и даже не скриптер... *JOKINGLY*
Последний раз редактировалось Быстрый ответ 22 мар 2013, 01:24, всего редактировалось 1 раз.
Аватара пользователя
Kimbo
Сообщения: 772
Зарегистрирован: 09 авг 2010, 18:05

Сообщение Kimbo »

Быстрый ответ писал(а):Автоматически, это путём подачи команды через меню?
не угадал :-P

Код: Выделить всё

local iCounter = 0; -- Счетчик. Всегда вначале = 0
local iLimit = 50; -- Лимит - это предел. После которого хаб блочится на блок тайм.
local iBlockMinutes = 1; -- Блокировка хаба в минутах
local iDownInterval = 1; -- Интервал - это интервал остывания. Т. е. каждую минуту счетчик если не ноль уменьшается на 1. 
Быстрый ответ писал(а):Прикинуться мёртвым, это конечно весьма "умно"... Но новые юзеры зайти не смогут, а это и есть основная цель атаки. То есть, что без защиты, что с такой "защитой" результат будет одинаков.
зато сидящих юзеров не тронут :-)
Быстрый ответ писал(а):Короче - садись, два.
отдохни Александер, не узнал какой скрипт, а уже радостный с пеной у рта сидишь . :-P
Аватара пользователя
Быстрый ответ
Сообщения: 436
Зарегистрирован: 16 авг 2010, 00:21

Сообщение Быстрый ответ »

Kimbo писал(а):local iCounter = 0; -- Счетчик. Всегда вначале = 0
local iLimit = 50; -- Лимит - это предел. После которого хаб блочится на блок тайм.
И что ж это мы считаем своим счетчиком... не иначе пятна на солнце :-) или 50 - это лимит числа ворон, которые пролетят мимо окна? :-D
Kimbo писал(а):интервал остывания
*ROFL* Это просто порвало... но, а где же тогда интервал нагревания?! ;D
Kimbo писал(а):зато сидящих юзеров не тронут
Так "сидящих" и без твоей защиты эта атака не затронет. Если она полностью не забьет твой канал. А если забьёт - то тогда и "сидящие" вылетят со свистом. Читай еще раз по губам:
То есть, что без защиты, что с такой "защитой" результат будет одинаков.
Kimbo писал(а):отдохни Александер, не узнал какой скрипт
Да лучше и не знать таких "скриптов", которые ничего не делают. Тем более, ты-то самостоятельно и двух строчек наваять не сможешь - вот это я знаю уже давно. :-X
Аватара пользователя
Kimbo
Сообщения: 772
Зарегистрирован: 09 авг 2010, 18:05

Сообщение Kimbo »

;-) ок, дальше можешь сидеть с пеной у рта :-P
Аватара пользователя
Быстрый ответ
Сообщения: 436
Зарегистрирован: 16 авг 2010, 00:21

Сообщение Быстрый ответ »

Ну что ж ты так быстро слился. Я ведь только начал отдыхать - по твоему совету. :-P
Подготовься получше в следующий раз ;-)
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Быстрый ответ писал(а):Какие страсти, какие эмоции...Люди больше не встречаются, не влюбляются и не женятся...Рушатся судьбы, ZOMG TEH DRAMA!!!11
Я всё жду, будет ли хоть какой-то выхлоп от этих сломанных копий в форумах. Но нет...
А ведь между прочим, скрипт защиты от "ддос атаки с хаба" занимает, как обычно, 3 строчки. Где же вы, где, о великие скриптеры, которые спасут страдальцев...

И еще... В Стронге в своё время появилось предупреждение о том, что "кто-то с айпи такого-то пытается использовать ваш клиент для спама". Это относилось к запросам на соединение на порт 80. То есть отследить такие запросы несложно. Так что мне непонятно, что мешало (и продолжает мешать) разработчикам, вместо непонятных и бесполезных сообщений, просто отбрасывать такие запросы...
Печально, что админы хабов между собой что-то обсудить и договориться не могут. А с разработчиками клиентов тем более.

Отследить запросы можно, но проблема не появилась бы вообще (не в таком объеме точно), если бы разработчики изначально руководствовались 2-мя простыми принципами
1) Не доверять любой входящей информации (не только со стороны клиента, но и со стороны хаба). Проблема известна давно http://en.wikipedia.org/wiki/Direct_Con ... oS_attacks , а воз и ныне там.
2) Придерживаться хоть отдалённо хоть каких-нибудь стандартов. Открываем википедию http://ru.wikipedia.org/wiki/%D0%A1%D0% ... 1%81%D1%8B, смотрим
0 — 1023 Общеизвестные порты Номера портов назначены IANA и на большинстве систем могут быть использованы исключительно процессами системы (или пользователя root) или прикладными программами, запущенными привилегированными пользователями.

Не должны использоваться[2] без регистрации IANA. Процедура регистрации определена в разделе 19.9 RFC 4340 (англ.).
Т.е. дц-клиенты для соединения между собой не должны использовать порты 0-1023.
Если подключиться к какому-то IP на какой-то порт не удалось - не пытаться соединяться с этим IP по любому порту в течение некоторого времени (игнорировать все команды подключения на данный IP, полученные от хаба).

И всё, такого большого ддоса уже не будет
Последний раз редактировалось HackFresse 22 мар 2013, 11:05, всего редактировалось 1 раз.
Аватара пользователя
Быстрый ответ
Сообщения: 436
Зарегистрирован: 16 авг 2010, 00:21

Сообщение Быстрый ответ »

То что админы не могут договориться, это нормально. Они независимы друг от друга и даже как бы конкурируют. Если вдруг они договорятся и создадут один большой хаб "Корпорация добра", то это будет намного хуже... Другое дело, что мелкие хабы, как правило, содержат "недоадмины"-школота, и это противостояние выливается порой просто в комические формы. Как например в данном случае с "ддос-войнами".

А вот что касается разработчиков... Да, я тоже не понимаю, что им мешает. У "буржуев" ведь тоже несколько лет назад были крупные ддос-войны, в том числе с участием хаблистов... Это до нас только сейчас волна докатилась, усилиями недоумков-фазеусов и иже с ними. И тем не менее, разрабы клиентов так до сих пор и не пофиксили эти вещи. Разрабы Флайлинка, наверно заняты другими вещами, типа добавления в инсталлятор набора Яндекс-приблуд и прочего шлака. Имеют свою копеечку с этого и довольны жизнью.
Изображение

Но, как я уже сказал выше, способ защиты есть - силами самого хабсофта. Правда, с оговоркой, что этот софт Ptokax под Linux (другие варианты я не рассматривал за ненадобностью). И без всяких там тупых Core.SuspendAccepts(). Протокол NMDC доступен всем, информации более чем достаточно. Что мешает "великим скриптерам" написать-таки эти 3 строчки кода? Наверно, то же, что и разработчикам клиентов. Да и скучно было бы без нынешней клоунады, я за то чтобы она продолжалась :-D

Видео по обсуждаемой теме: http://www.youtube.com/watch?v=KMU0tzLwhbE
Аватара пользователя
slav
Сообщения: 617
Зарегистрирован: 15 янв 2012, 19:12
Хаб: adc://kremlin.ru
Откуда: Интернет

Сообщение slav »

Быстрый ответ писал(а):То что админы не могут договориться, это нормально. Они независимы друг от друга и даже как бы конкурируют.
Как бы не так. В некоторых вопросах админы успешно договариваются. Например, в том чтобы установить себе плагин Фазеуса и под управлением Фазеуса ДДОСить других.
Админы не спешат бороться с ДДОСерами, т.к. не малая часть из них и есть эти самые ддосеры.
У Фазеуса нет своих хабов. (один какой-то маленький)
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):Т.е. дц-клиенты для соединения между собой не должны использовать порты 0-1023.
Может ограничится списком портов на которые обычно идет атака.
по письмам я понял, что это 80 и 411
ведь под виндой в отличии от linux нет ограничения, что нельзя юзерскому процессу слушать порты ниже 1024?
HackFresse писал(а):Если подключиться к какому-то IP на какой-то порт не удалось - не пытаться соединяться с этим IP по любому порту в течение некоторого времени (игнорировать все команды подключения на данный IP, полученные от хаба).
И всё, такого большого ддоса уже не будет
Я готов внести изменения в ветки флайлинка r5xx и r4xx
но как бы это потестить в боевых условиях?

Кто может создать мне тестовый хаб и включить подобную атаку для теста?
в начальном посте я вижу $ConnectToMe - в почте я видел способы атак через поиск...
поищу в архиве..

В общем кто хорошо в этой теме - присоединяйтесь к обсуждению.
придумаем алгоритм.
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

А что тут думать-то? из сообщения моего чуть выше по пунктам, очень простые доработки:
1) Добавить паузу между частыми попытками соединиться на один и тот же IP . Отключаться от хаба, который использует дц-клиент как часть ботнета (количество определённых запросов с хаба в единицу времени превышает заданное значение).

2) Игнорировать все запросы на соединение с другим клиентом (не хабом) на портах, меньших 1024.
То, что нету программного ограничения на использование этих портов, вовсе не значит, что их надо обязательно использовать для входящих соединений при обмене файлами. Плюс есть международная договорённость/стандарты
0 — 1023 Общеизвестные порты Номера портов назначены IANA и на большинстве систем могут быть использованы исключительно процессами системы (или пользователя root) или прикладными программами, запущенными привилегированными пользователями.
Не должны использоваться[2] без регистрации IANA. Процедура регистрации определена в разделе 19.9 RFC 4340 (англ.).
Если в линуксах запретили, то и в винде использовать не надо. Для файлозакачки оно не нужно, никаких проблем не вызовет
А атака идёт обычно именно на сервисы, висящие на портах <1024

Если очень интересно - могу дать старый LUA-скрипт (модуль Экзекутора), через который ддос и проводится.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):Добавить паузу между частыми попытками соединиться на один и тот же IP
Добавлять еще одну настройку? как оценить "частыми"?
отлавливать $ConnectToMe или вообще все коннекты на уровне сокета?
HackFresse писал(а):2) Игнорировать все запросы на соединение с другим клиентом (не хабом) на портах, меньших 1024.
А если клиенты прокинули себе уже в систему порты (в роутере)?
ведь этим ограничением мы их обломаем и все кто обновят флая не получат доступ к тем юзерам
(хотя они сидят на хороших каналах - единственно чем они провинились - открыли запретный порт.)

Скрипт если можно кинь в личку или <pavel.pimenov@gmail.com>
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Тут пригодилась бы помощь админов крупных хабов, собрать статистику по $ConnectToMe *:[0-1024]. Сомневаюсь, что их много.

Да и среднюю частоту тоже - взять самый активный период времени для закачек на хабе, высчитать {$ConnectToMe}/{$userCount}, потом плясать уже от этого значения.
Если на каком-то хабе частота выше обычной - выносить на "суд хаблиста". Проверять вручную, делать выводы какие-то. тут такие хабы когда-то банили :-D
Кстати, да - посидеть на хабах, которые были замечены в ддосе, и посмотреть частоту запросов там
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Встроил во флай логирование команды connecttome в sqlite
пособирал сутки стату:
http://yadi.sk/d/IolHjtsoHKkrg

интересно...
Аватара пользователя
KCAHDEP
Сообщения: 245
Зарегистрирован: 19 янв 2012, 11:21
Хаб: dchub://dc.kcahdep.online

Сообщение KCAHDEP »

flylinkdc писал(а):Встроил во флай логирование команды connecttome в sqlite
пособирал сутки стату:
http://yadi.sk/d/IolHjtsoHKkrg

интересно...
https://app.box.com/shared/m0pjm4es3n вот еще для мониторинга :-)
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Нашел код во флае

1.
http://flylinkdc.googlecode.com/svn/tru ... anager.cpp

Раньше там блокировалось подключение к 80 и 2501 портам
но наш разработчик закомментил эту ветку в 2011 году вот таким коммитом
a.rainman@gmail.com 30.11.2011 8:12:11
# В bool ConnectionManager::checkIpFlood(...) исправлена преждевременная блокировка. TODO обсудить необходим ли код по блокировке "спама". ИМХО он бесполезен, и даже вреден: раздражает пользователей, мешает файло обмену.
* Исправлена установка SSL соединений между клиентами на NMDC и NMDCS хабах.
# Установка SSL соединений "сломана" в r5 21.04.2007 т.е. уже при добавлении файла.

Код: Выделить всё

bool ConnectionManager::checkIpFlood(const string& aServer, uint16_t aPort, const string& userInfo)
{
	// [!] IRainman fix: no data to lock!
	/* [-] IRainman
	// Temporary fix to avoid spamming
	if (aPort == 80 || aPort == 2501)
	{
	    // FlylinkDC Team TODO: this code do we need?
	    // IRainman: Hubs are the same kick when sending requests to a foreign IP. So if a port is selected then it is really necessary.
	    AutoArray<char> buf(512);
	    snprintf(buf.get(), 512, CSTRING(ATTEMPT_TO_USE_SPAM_MESSAGE_CM), userInfo.c_str(), aServer.c_str(), aPort);
	    LogManager::getInstance()->message(buf.get());
	    return true;
	}
2. Ниже идет проверка на долбежку по порту - она была активна но тупо скипалась

Код: Выделить всё

// We don't want to be used as a flooding instrument
	int count = 0;
	for (auto j = m_userConnections.cbegin(); j != m_userConnections.cend(); ++j)
	{
	
		const UserConnection& uc = **j;
		
		if (uc.socket == nullptr || !uc.socket->hasSocket()) // TODO 2012-04-23_22-28-18_ETFY7EDN5BIPZZSIMVUUBOZFZOGWBZY3F4D2HUA_2B5B184F_crash-stack-r501-build-9812.dmp
			continue;
			
		if (uc.getPort() == aPort && uc.getRemoteIp() == aServer) // https://www.box.net/shared/amuyfgz5q3o4f4ng8v76
		{
			if (++count >= 5)
			{
				// More than 5 outbound connections to the same addr/port? Can't trust that..
				LogManager::getInstance()->message("ConnectionManager::connect Tried to connect more than 5 times to " + aServer + ":" + Util::toString(aPort));
				dcdebug("ConnectionManager::connect Tried to connect more than 5 times to %s:%hu, connect dropped\n", aServer.c_str(), aPort);
				return true;
			}
		}
	}
	return false;
я добавил спам в лог системный

LogManager::getInstance()->message("ConnectionManager::connect Tried to connect more than 5 times to " + aServer + ":" + Util::toString(aPort));

Уже некоторые жалуются :)
изучаю проблему дальше...

Описывайте свои соображения.
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Переход от разговоров непосредственно к действиям - круто, тут это большая редкость *CRAZY*

По поводу скрина - кроме выделенного 80 порта, я бы еще заострил внимание на порты 413, 411, 135 - это точно попытки завалить чей-то хаб. Проблемных целевых IP на скрине не так уже и много.

По поводу кода - я бы считал количество соединений на один IP (без порта), после превышения некой константы игнорил бы соединения на этот адрес в течение некоторого времени, без записи в лог попыток (кроме первой).

Т.е. перед установлением соединения
1) проверять наличие IP в стоп-листе
2) проверять количество готовых соединений на данный адрес, при превышении - писать мессагу в лог и пополнять стоп-лист
3) Устанавливать соединение и работать как обычно. Чистить стоп-лист по времени или перед/после установления нового какого-то соединения проверять время экспайра записи - не важно.

По-моему, такой вариант действий может частично решить проблему, потому что
1) будут игнорироваться частые коннекты на адрес потенциально жертвы.
2) файлообмен вообще не пострадает. игнориться будут только множественные подключения на один адрес ( причем очень маловероятно, что этот адрес что-то вообще расшаривает), нормальные запросы будут нормально обрабатываться.
3)
[2014-02-05 04:48:55] <KMV_VS> флай сам себя вешает записью системного лога
не нужно писать в лог каждую попытку соединений выше нормы, достаточно оповестить о первой попытке раз в N минут
4) технически просто, всё уже почти готово (только добавить 1 массив и его очистку). Я первоначально говорил про обработку частоты запросов, но количество одновременных соединений на адрес для первого времени тоже сойдёт
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

fizkultira, епт
Вложения
flood.jpg
flood.jpg (73.96 КБ) 14245 просмотров
Аватара пользователя
KCAHDEP
Сообщения: 245
Зарегистрирован: 19 янв 2012, 11:21
Хаб: dchub://dc.kcahdep.online

Сообщение KCAHDEP »

досють хаб сасиська) фатал_еррора который сам же и раздал всем желающим скрипт доса для птоки :-) в свою очередь по его словам скрипт ему дал Артем *CRAZY*
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

а порты 135 и 3939 зачем сасиське дергают - у него там что-то тоже поднято ценное?

Алгоритм блока подобного к флаю прикручу или сегодня вечером или завтра.
активный спам в лог тоже уберется.
Аватара пользователя
KCAHDEP
Сообщения: 245
Зарегистрирован: 19 янв 2012, 11:21
Хаб: dchub://dc.kcahdep.online

Сообщение KCAHDEP »

просто долбят все открытые порты...
Аватара пользователя
slav
Сообщения: 617
Зарегистрирован: 15 янв 2012, 19:12
Хаб: adc://kremlin.ru
Откуда: Интернет

Сообщение slav »

flylinkdc писал(а):Алгоритм блока подобного к флаю прикручу или сегодня вечером или завтра.
активный спам в лог тоже уберется.
Что-то у меня опять появляется желание восстановить свой хаб :)

Осталось ещё решить проблему, чтобы ФлайЛинк нельзя было использовать для ДДОС-атак на сам хаб и можно думать о восстановлении :)
HackFresse писал(а):fizkultira, епт
Подобный флуд я неоднократно видел даже на своём локальном хабе. Там бьют по пользователю, а не по хабу.
Частенько попадаюсь на подобное, когда захожу на крупный хаб. Из-за чего это происходит я не знаю, но тот кто долбит, обычно незнакомые мне люди. Я решал просто, добавлял в чёрный список и всё пропадало.
Аватара пользователя
KCAHDEP
Сообщения: 245
Зарегистрирован: 19 янв 2012, 11:21
Хаб: dchub://dc.kcahdep.online

Сообщение KCAHDEP »

slav писал(а): Подобный флуд я неоднократно видел даже на своём локальном хабе. Там бьют по пользователю, а не по хабу.
Частенько попадаюсь на подобное, когда захожу на крупный хаб. Из-за чего это происходит я не знаю, но тот кто долбит, обычно незнакомые мне люди. Я решал просто, добавлял в чёрный список и всё пропадало.
Скорее не по пользователю, а пытаются использовать уязвимость которая давно закрыта, по крайней мере в верлике, а в итоге получают дос самого себя так как хаб меняет ип на правильный (ип атакера)))
Так же новую версию верлика (юзеров) невозможно использовать для ctm flood`а :-P
Последний раз редактировалось KCAHDEP 05 фев 2014, 13:53, всего редактировалось 1 раз.
Ответить