В статье рассматривается так называемый "супербан", в отличии от
обычных методов бана, таких как бан по IP-адресу, по нику или по кукам,
"супербан" блокирует пользователя по индивидуальным характеристикам его
машины.
Система блокировки по индивидуальным харакетристикам машины в
последнее время приобретает все больше популярности в интерактивных
web-системах - в чатах, форумах, гостевых книгах и т.п. Рост
популярности объясняется недостатками традиционных методов бана.
Блокировка по IP адресу легко обходится использованием прокси-серверов.
Блокировка по кукам или нику снимается удалением куков или созданием
нового аккаунта. В то же время, обойти супербан не так легко, поскольку
большинство пользователей даже не знают на каком принципе он основан.
В качестве примера супербана, рассмотрим систему бана, применяемую в форумах FastBB ( http://fastbb.ru ).
Страница форума содержит специальный скрипт, выполняющийся на
машине пользователя, и определяющий параметры его машины. Цель данного
скрипта - сформировать уникальный ключ, по которому система будет
определять пользователей. Ключ на каждой машине должен отличаться от
ключей на других машинах, и в то же время быть неизменным.
Вот этот скрипт:
Сначала создается объект oClientCaps. Он
необходим для доступа к параметрам машины.
Далее вычисляются такие параметры как разрешение экрана и глубина
цвета, которые также используются в составе ключа. Затем следует самая
интересная часть. Строке random_line присваивается зашифрованный скрипт, который затем расшифровывается и выполняется в строке eval(fin);. При расшифровке используется переменная random = location.pathname;, которая в форуме fastBB принимает значение /re.pl.
Шифрование скрипта было, видимо, сделано для скрытия от пользователя принципа составления ключа.
Расшифровав содержимое строки random_line, мы получим следующий скрипт:
Как видим, в скрипте перебираются установленные компоненты
системы (около 30 штук) и определяется их версия. Числовые значения
версий складываются, и вычисляется величина RandomNumber, которая затем используется как часть составного ключа.
Составной ключ передается серверу в поле Statistic формы отправки постингов:
Результирующий ключ имеет такой вид (для условной машины):
-20/1024/768/32/modem/ru/ru/uk/13753804173137646
и включает в себя следующие элементы:
код региона (-20)
разрешение экрана (1024/768)
глубина цвета (32)
тип соединения (modem)
языки, установленные в системе (ru/ru/uk)
уникальный ключ версий компонент системы (13753804173137646)
Итак, алгоритм работы бана форума следующий: При возникновении ситуации
бана (например постинг более 10 сообщений в минуту), система добавляет
IP адрес и уникальный ключ в список бана.
Далее, если от пользователя поступает запрос, в котором
присутствует либо забаненый IP, либо забаненый уникальный ключ, то
система не разрешает доступ к форуму, а IP и ключ снова заносятся в
бан-лист (если один из них изменился). Кроме того, уникальный ключ
передается как через поле Statistic формы, так и
запоминается и пересылается серверу в куках. Таким образом, происходит
защита от возможного изменения пользователем параметров своей машины
(например изменения разрешения экрана).
Для разблокировки супербана, необходимо выполнить следующие
действия: Изменить свой IP-адрес, удалить куки форума, поменять свой
ник, и выполнить какие-либо действия, меняющие уникальный ключ
(например изменить разрешения экрана). После рефреша страницы сайта,
система сгенерирует новый уникальный ключ, запрос поступит с нового
IP-адреса и система не сможет "узнать" забаненного пользователя.
Для упрощения снятия бана, была разработана программа AntiBan.
Эта программа позволяет разблокировать бан на форумах fastBB, в чатах
chat.php.spb.ru и в других системах, основанных на "супербане".