Технические трудности содержания или способы DoSа SA-MP серверов

На данной страничке собрана информация об уязвимостях, с которыми хозяевам SA-MP серверов приходится бороться каждый день.

Сразу хочется заметить, что информация, приведенная тут, может быть полезна как владельцем SA-MP серверов, которые хотят обезопасить свои сервера от разных угроз, так и потенциальным DoSерам, которые хотят напакостить другим. Мы это все прекрасно понимаем, но считаем, что информация подобного рода должна быть массово доступна, чтобы подобные уязвимости устранялись наибыстрейшим образом, а замалчивание вредит всему сообществу, так как эти уязвимости продолжают жить годами в наших серверах, но все равно найдутся те, кто ими будет пользоваться. Поэтому чтобы не походить на страуса с головой в песке была написана данная статья.
Ошибки скриптов

Я думаю, что из-за данной категории больше всего проблем. Скрипты пишут люди, которым свойственно ошибаться или чего-то не знать. Если сервер падает, то скорей всего именно из-за ошибки в вашем собственном коде.
Длинные числа

Штатная функция перевода из строки в число (strval) содержит уязвимость, которая заключается в том, что если ей передать слишком большую строку (более 50 символов, а лучше больше сотни) то почти совсем перестает работать amx машина, в которой работал данный скрипт. Данная уязвимость уже очень давно описана на официальном форуме сампа.

Это значит, что если код команд написан не правильно, то можно в любую команду, которая принимает числовые параметры передать очень длинное число (например, длиной в 100 символов) и выполнить данную команду несколько раз, то мод или фильтрскрипт, который содержит данную команду, перестанет (почти) функционировать.  Даже если на сервере стоит правильно написанный мод, то с очень большой вероятностью можно убить кривой фильтр скрипт (например, популярные скрипты анимаций).

В SA-MP 0.3 данная уязвимость устранена

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

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

Очень часто в скриптах никто не ограничивает значения, которые вводит пользователь. Подобная уязвимость есть в некоторых модах, где закупка оружием происходит командой, притом количество патронов указывает игрок. Если указать очень большое количество патронов, то при подсчете суммы, которой необходимо списать с игрока (количество патронов умножить на цену 1 патрона) произойдет переполнение (будет отрицательное число), в результате чего игроку будет ДАНО много денег и много патронов. То есть скрипт вместо списания денег с игрока за оружие, даст ему оружие и еще за это сам заплатит игроку.

Учитывайте в своих скриптах возможность переполнения при операциях с целыми числами, и ограничивайте все входные параметры.

Данные ошибки часто могут нарушить логику работы скриптов.
Ошибки SA-MP сервера

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

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

За время содержания сервера встречались 2 сценария проведения подобных атак:

    * Наиболее распространенный: просто с помощью специальной программы в общий чат печатается, какой либо текст в очень большом объеме (иногда доходит до 2000 строк в секунду). Часто есть механизмы, делающие соседние сообщения разные (чтобы сервер не мог просто блокировать повторяющиеся сообщения). Могут слаться и личные сообщения.
    * Второй алгоритм: специальная программа подключается к серверу вместо клиента, отсылает 1 – 2 сообщения, отключается и начинает цикл заново. Имя подключившегося игрока может меняться. Против такой атаки обычно беспомощны стандартные механизмы антифлуда.

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

В самп сервере администраторы могут подключиться через консоль к серверу и выполнять rcon команды. Для этого не требуется установленной ГТА или самого сампа, нужна лишь программа rcon.exe, которая идет в поставке сампа. Чтобы удостовериться, что подключился именно администратор, с каждой командой посылается пароль rcon.

Эту особенность часто используют программы для подбора пароля rcon: они посылают множество команд консоли с разными паролями и ждут, пока подберут пароль. Обычно пароль подобрать они не могут (нужно перебрать очень много комбинаций, при условии, что пароль rcon на сервере нормальный, а не 12345), но они создают нагрузку на сервер (могут увеличиться пинги всех игроков) и захламляют лог сервера (могут увеличивать лог сервера на несколько десятков мегобайт в день).

В SA-MP 0.3 имеется возможность отключить удаленную консоль (rcon)

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

В самп сервере есть понятие слота: это ячейка, которую занимает игрок, подключившийся к серверу. Когда игрок отключается от сервера, то эту ячейку может использовать вновь подключившийся игрок. Количество слотов в сампе лимитировано и задается в файле настройки сервера – это определяет, сколько одновременно игроков может быть на сервере.

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

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

Часто данную атаку проводят сразу несколько человек с разных компьютеров, что увеличивает эффективность атаки.

Диагностировать данный тип атак можно по большому числу подключений в короткий момент времени с 1 ip адреса. В логе сервера данная атака никак не фиксируется. Если штатными средствами сампа забанить ip адрес атакующего(их) то атака будет отбита.

Удачно проведенная атака почти полностью блокирует работу самп сервера на время, пока атака проводится.
Атака через неправильный тюнинг (модификацию) транспорта

В GTA SA на транспорт можно устанавливать дополнительные компоненты (гидравлику, азот, менять колеса). На каждый вид транспорта можно установить определенный тип компонентов тюнинга. Если установить не правильный компонент, то игра скорей всего упадет с ошибкой. Серверу неправильные компоненты как правильно не вредят, и он их благополучно синхронизирует со всеми игроками: то есть если на сервере оказался неправильно затюненный транспорт, то с ошибками будут вылетать все игроки. Чтобы это проверить, можно поставить азот на мотоцикл. Обычно тюнинг происходит на стороне игрока, и передается на сервер, что дает возможность проводить данный тип атак.

Обычный алгоритм проведения атаки: игрок с помощью специальной программы устанавливает неправильный компонент тюнинга (часто id=-1) и неправильную аэрографию (paintjob) (часто id=32) на весь транспорт сервера. Притом он может успеть сделать это (затюнить весь транспорт) несколько раз :) Обычно на это уходит не более 2х секунд. После этого обычно атаковавший сам вылетает со всеми остальными игроками сервера.

Успешно проведенная атака блокирует возможность играть на сервере до пересоздания транспорта (или перезагрузки сервера).
DoS SA-MP сервера на сетевом уровне

Подобным атакам подвержены все сервера, которые предоставляют, какие либо услуги. Никакими программными средствами противостоять таким атакам нельзя. Есть аппаратные решения, но они довольно дороги. Правда, как показывает практика, атаки подобного класса очень редко проводятся на SA-MP сервера, поэтому просто будем знать, что подобное можно провести.