вторник, 1 февраля 2011 г.

FlylinkDC + битая база = DoS атака

Привет.

Нам удалось найти базу данных клиента, который выполняет
бесконечный цикл запросов TTH
и повторить это в лабораторных условиях.

Данная ошибка происходит из-за разрушенной базы данных на той стороне.

C:\777777777777777777771>echo PRAGMA integrity_check; | sqlite3.exe FlylinkDC.sqlite
*** in database main ***
Main freelist: freelist leaf count too big on page 50621
Page 51783: btreeInitPage() returns error code 11
On tree page 21791 cell 14: Rowid 10 out of order (previous was 197822)
On tree page 21791 cell 14: invalid page number 1768300021
On page 50828 at right child: invalid page number 51787
Fragmentation of 9 bytes reported as 0 on page 3020
On tree page 50994 cell 79: 2nd reference to page 50621
On tree page 50994 cell 79: Child page depth differs
On tree page 50994 cell 80: Child page depth differs
Page 51784: btreeInitPage() returns error code 11
Error: near line 1: database disk image is malformed



В версии выше r401 это исправлено и приводит к завершению работы приложения в случае любого исключения при работе с базой данных.
В версии 403 и выше к сообщению будет добавлена краткая инструкция как в этих случаях поступать пользователю.

Предлагаю обсудить способ, как бороться со старыми клиентами, которые остаются у пользователей

Рабочая версия такая
1. в bool UploadManager::prepareFile(UserConnection& aSource, const string& aType, const string& aFile, int64_t aStartPos, int64_t& aBytes, bool listRecursive)

При помощи map-контейнера ведем счетчик загрузок по ключу Юзер + aFile когда aFile имеет тип: TTH/
2. Если счетчик по паре превышает N раз - то
- зовем aSource.disconnect() и убиваем соединение.
- баним aSource.error("Вы забанены т.к. у вас старая версия клиента - обновитесь");
Возможно, дополнительно шлем сообщение личкой

кто что скажет?

повторить DoS атаку можно так:.
1. на клиенте А старой версии r398 нужно поставить битую базу данных
FlylinkDC-sqlite-corrupt.rar

2. на клиенте В расшарить 21.Одеяло.avi
это мультик с TTH - HDWK5FVECXJDLTECQ6TY435WWEE7RU25RSQYYWY
через некоторое время А начнет досить В

42 комментария:

Анонимный комментирует...

Сделайте автоматическое обновление как у Chrome и проблем таких не будет, многие не умеют/боятся переустанавливать программы.

Анонимный комментирует...

давно пора это сделать

Анонимный комментирует...

Норм, только бан на сколько времени и бан на что (ип\ник\др)?
В личку нужно отправлять тоже, текст изменить бы, для особо не понятливых...

Анонимный комментирует...

Сделайте автоматическое обновление как у Chrome и проблем таких не будет, многие не умеют/боятся переустанавливать программы.

Сделать то сделают, вопрос в другом - Как бороться с древними версиями? Зачастую пользователь такого "спамера" и не догадывается что Ддосит другие клиенты. Попробуй заставь народ обновиться до последней версии - многие даже не знают как настроить клиент.

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

Анонимный комментирует...

"Тут помогут админы хабов (если им больше нечем заняться конечно)"

Помогают бесполезно типа качает и ладно, многие не знают как это делать.

Предлагаю так: чтоб выводило сообщение что доступна новая версия( что в принципе и так есть) и в настройках поставить автообновление и поставить галку ( если оно включено чтоб выводило ваш клиент будет закрыт для обновления, и отчет времени) типо наверно так.

Анонимный комментирует...

Лучше более радикальное решение. В программе сделать опцию Забанить старые клиенты (по умолчанию включить), при бане отправлять сообщение о том, что клиент устарел и ссылку на скачивание нового клиента. А лучше сделайте автообновление в r500, чтобы такой проблемы вообще не возникало.

Анонимный комментирует...

Я за принудительное обновление, тока сделать надо грамотно и всё учесть. А что допустим если вы выпустите версию которая всё время падает и клиенты обновятся до неё, и что тогда? Будет падать пока вручную не обновишь... Надо всё предусмотреть, как вариант сделать лаунчер или апдейтер которые будут висеть в трее и проверять наличие обнов...

Анонимный комментирует...

Обычно делают лаунчер, который запускает прогу, и фоне проверят наличие новых версий, и если есть но скачивает и заменяет файлы, а при следующем запуске запускает уже новую версию.

Анонимный комментирует...

Последний вариант самый лучший. Главное чтобы обновление шло совсем втихаря. А то есть такие товарищи, которые могут оборвать скачку обновления (умру, но дам клиенту обновиться).

ssa комментирует...

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

Анонимный комментирует...

Мне понравилась идея про серверную часть. Т.е. если нету выхода в интернет в сети то:

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

-на хабе/сервере ставиться "блок" к которому иногда коннектяться лаунчеры клиентов и проверяют наличие обнов. если есть обновляются в фоновом режиме.

-серверная часть должно быть устроена так, чтобы её можно было принести на флешке(с актуальной на данный момент версией) и оперативно установить.

-если интернет есть, то тогда без вопросов обновляем всё в фоновом режиме.

если это соберётесь это реализовывать, то нужно подумать как снизить нагрузку на хаб/сервер.

Анонимный комментирует...

Ну тогда уже если делать такой "локальный сервер обновлений"? то пусть он программе выдает магнетку, и флай уже сам качает новую версию прям с хаба.

Анонимный комментирует...

К сожалению пока не произойдёт достаточно таких эксцессов как этот никто из имеющих отношение к разработке флая и даже сам Павел никогда не посмотрят в сторону разумной и крайне необходимой идеи. По сути мы наблюдаем на примере русскую народную пословицу: Пока гром не грянет мужик не перекрестится.
Я уверен это будет настоящей эпопеей.
Вы никогда не знали как нужно делать клиент и что нужно людям.
Работаете тут за бесплатно для кучи баранов и кретинов. Все идеи которые появились в первые в грейлинке и которые вы спёрли вы и то по сей момент нормально реализовать не можете. Только мучаете тех кто следит за флайлинком понимая что чуда не произойдёт но всё же хочет быть в курсе событий. Вы просто бездарности. Сами ничего не можете придумать. Хорошие и классные идеи отвергаете. То взяли от грейлинка взяли криво и забыли. Над разработчиками всегда берут шествие личности творческие, вдохновители, креативщики и большие идейщики. У вас в команде все узколобые и глупые программеры включая Павла.

NightOrion комментирует...

Уважаемый аноним
К сожалению пока не произойдёт достаточно таких эксцессов как этот никто из имеющих отношение к разработке флая и даже сам Павел никогда не посмотрят в сторону разумной и крайне необходимой идеи. По сути мы наблюдаем на примере русскую народную пословицу: Пока гром не грянет мужик не перекрестится.,

Идею в студию.

Работаете тут за бесплатно для кучи баранов и кретинов. Все идеи которые появились в первые в грейлинке и которые вы спёрли вы и то по сей момент нормально реализовать не можете.

А они могут нормально реализовывать ? посмотрите их лог изменений, там тоже не мало всяких ляпов, это раз. В вторых им очень удобно тырить идеи с других клиентов с открытым кодом, от них же мы еле допросились формат TTH NTFS Stream. Не успели мы прикрутить MediaInfo как поддержка тут же появилась и у них. вы всё просите DCLS ссылки... давно бы сделали, если бы грей не закрывал свой код, они это придумали и нам приходится по увиденному придумывать велосипед, а это не такая и простая задача, мы не китайцы, которые увидев что-то могут в точности скопировать и у нас нет пары сотен китайцев в подвале, которые это с легкостью бы сделали.

NightOrion комментирует...

Да и банить не надо, лучше просто скидывать подключение, на некоторых хабах за бан кикают с хаба ботом автоматически

Pavel Pimenov комментирует...

Анонимная творческая личность
прошу воздержаться от оскорблений
и стараться писать по теме с конкретными техническими предложениями.

Pavel Pimenov комментирует...

Алгоритма автоматического обновления
у нас нет.
предлагаю в теме обсудить алгоритм защиты от DoS атаки.

Анонимный комментирует...

Алгоритм защиты от DoS атаки:
Автообновление + блокировка старых клиентов с отправкой в личку сообщений о необходимости обновится.

Анонимный комментирует...

Не давать скачивать старым версиям <400, и писать в личу о том что их клиент устарел. А то так получается история как с IE6, уже всем миром с ним борятся, сама M$ и даже некоторые европейские страны заявляли, что это "прокисшее молоко", а толку нету. Разработчики веба ломают мозг и пишут костыли под IE6, пользователи видят, что всё нормально показывает и не видят причин обновляться, вот так и получается замкнутый круг.

Patrik комментирует...

Давно борюсь за обновнение юзерами Флайлинка, прошу обновиться тех, кто просит слот. Отказ в выдаче слота действует далеко не всегда.
Бан старых версий нужен. Как и в автобане надо сделать сообщение в статусной графе закачки, а не в ЛС

Анонимный комментирует...

Пока молния в жопу не ударит, мужик не перекрестится!

Так же сделать, чтобы инсталляк определял директорию, в которой находится Flylink, и инсталил новую версию туда, а то устанавливается по умолчанию в C:\Flylink. Надеюсь, не надо объяснять, что это сильно упростит обновление программы неграмотным пользователям.

DjKING комментирует...

Я считаю, что бан - это слишком.
Считаю, что вполне достаточно кика с сообщением в личку и в статусной графе закачки.
Автообновление с "нуля" трудновыполнимо:
Во-первых будет излишне нагружать хабы, во-вторых может переписать нормальную версию глючной.
Абсолютно бредовая идея всяких обновлялок, сидящих в трее - вам мало мусора в трее???
Если воплощать обновление, то это должно выглядить как в программе mTorrent, поставить по-умолчанию галку "проверка обновлений" и возможность установить галку "обновляться до бета-версий".
Вот примерно так. А программы все воруют друг у друга - и это правильно)))

LEXSOR комментирует...

Добавить в автобан или реализовать по другому эту функцию...

Лс или в строка передачи не важно, главное достучаться до пользователя со старым клиентом что необходимо обновление

Анонимный комментирует...

Только не через лс, делайте в строке передачи. Иначе в бан на многих хабах раздающие залетят.

Анонимный комментирует...

>Абсолютно бредовая идея всяких обновлялок, сидящих в трее - вам мало мусора в трее?

Зачем в трее, делается без трея и без окна, проверят наличие новой версии и сама закрывается она не сидит постоянно а только при запуске флая.

Анонимный комментирует...

>Анонимная творческая личность
прошу воздержаться от оскорблений

Это критика.

>и стараться писать по теме с конкретными техническими предложениями.

В этом нет никакого смысла так как большинство моих предложений за всё время существования флайлинка сочли бредовыми.

>Алгоритма автоматического обновления
у нас нет.
предлагаю в теме обсудить алгоритм защиты от DoS атаки.

Знаете Павел а вы ведь этим постом подтвердили что вы скажем так помягче дурак. Автоматическое обновление это крайне важно.

Pavel Pimenov комментирует...

Вы слепой?
Я не говорил что, авто-обновление не важно, я сказал, что у нас нет алгоритма применимого к флаю.

Сотрясать воздух анонимно проще всего.
если такой умный пришли хоть один патч на публичное обозрение.
и только после этого можешь строить из себя нахального крутого программера.

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

Pavel Pimenov комментирует...

Анонимная публикация сообщений в данный блог с сегодняшнего дня запрещена.

L. комментирует...

Анонимная публикация сообщений в данный блог с сегодняшнего дня запрещена.

До полной кучи и голосовать запретить надо.

L. комментирует...

Кстати всех недовольных прошу обратить внимаение что поддерживается OpenID, в том числе и от AOL, т.е. по номеру ICQ, думаю анонимным крутым тру программистам не составит труда включить его поддержку в своём профиле.

L. комментирует...

Бороться со старыми версиями можно просто:

1) не пускать на хабы, если владельцы хабов не понимают чем плохи старые клиенты, ну что же их дело.
2) переводить хабы на ADC протокол, старые клиенты с ним просто не заработают ;)

На счёт ADC: во всю идёт разработка моста к ADCH++ по поддержки скриптов от Ptokax, простые уже работают на ура, скрипты вроде Экзекутора должны заработать в ближайшем релизе 2.53.

cmaik комментирует...

будут ещё обновления?

NightOrion комментирует...

будут, пока тестируем новый функционал, не хотим вам давать сырую бетку

modbex комментирует...

бета70 86 - зависла при долгом развернутом виде, с открытой очередью закачки..

"не хотим вам давать сырую бетку" -улыбнуло

Gap51 комментирует...

Нужен автобан на старые версии. Потихонечку заставим всех обновиться )

Andre комментирует...

странно
но в последнее время стало таких дос атак больше
но шара у досящих людей =0 а клиент стронг 2.42

автобан необходим людей которые так досят :(

Вад комментирует...

Т.к. я наиболее часто освещал данную проблему флайлинка. И ещё год назад намекал на проблему именно sqlite, правда разработчики флайлинка не шли на контакт. Пришлось собственным разработчиком обзавестись. Ну так вот, не очень сложно было найти место в коде, которое при определённых условиях могло отсылать сотни запросов в секунду.
Т.к. на нашем хабе 90% сидят на нашем автоматически обновляемом клиенте. Проблему решали именно на проблемном клиенте. Т.е. не давали столько запросов отсылать.
Но как бы сказал Хаус нужно лечить не симптомы, а болезнь.
Т.к. такой человек ничего скачать не может. А база сама чиниться не умеет, вот мне кажется надо в этом направлении думать. Для начала хотя бы просто удалять её.

Pavel Pimenov комментирует...

У вас целый год был патч исправляющий ошибку и вы им не поделились?

Вад комментирует...

О да, это единственное что вы удосужились написать. Вы в своём репертуаре Павел. Больше походит на оправдание своей инертности, как главного по проекту.

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

Поиск места, где не контролируемо могут отсылаться запросы, то же было простой задачей(считаю по потраченным деньгам).

Ну, а о том что sqlite ломается и это ставит крест на возможности скачать что-то, известно с тех пор как появился sqlite в flylink(и рекомендации были удалять битую базу).
Не было известно лишь о том что флуд связан именно sqlite(хотя намёки я вам давал (1 пост)). Можно было обратить внимание и проверить.

P.s. в наших реализ версиях ещё нет, готового варианта. Т.к. я считаю защита от флуда лишь половина проблемы. Хаб и проблемный клиент всё ещё испытывают сопутствующие проблемы.

misha комментирует...

проблема старая. давно замечал такую хрень у клиентов. кто на старых версия программ тупо качают файлик TTH и бесконечно так. всегда таких добавлял в списки друзей и блокировал скачивание :D

misha комментирует...
Этот комментарий был удален автором.
Serx комментирует...

а как разрушается эта база данных?
У одной девушки когда она ставит новую версию флайлинка он похоже работает до первого перезапуска... потом при запуске выдается ошибка базы данных. Затем она ставит старую версию, которая работает. Как быть, когда ждать версию которая "лечит" базу данных ?