вторник, 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
через некоторое время А начнет досить В

Отправить комментарий