Предотвращение флуда/DOS-атак в приложении Java/AMF

Я работаю над серверной частью Java для веб-игры Flash - клиент и сервер взаимодействуют с использованием формата сообщения действия (AMF). Несколько недель назад продукт другой команды нашей компании был взломан пользователем, который декомпилировал Flash-клиент и использовал измененную версию, чтобы залить серверную часть поддельными запросами. Мы хотим предотвратить подобные атаки в нашей новой игре.

(Подробнее: используемый веб-сервер — Tomcat, клиент AMF — BlazeDS.)

Я хотел бы знать, как лучше всего предотвратить такого рода атаки. Некоторые идеи, которые у меня были:

  • конфигурация nginx казалась лучшим местом для ограничения скорости, но я не могу найти никаких ресурсов о том, как nginx взаимодействует с AMF. Отправляются ли запросы AMF прямо в Tomcat?

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

  • Делая то же самое, что и выше, но используя IP-адреса вместо идентификаторов пользователей, может работать. Однако я не могу сказать, можно ли получить IP-адрес из запроса AMF.


person Isaac Lewis    schedule 15.08.2011    source источник
comment
Во-первых, это не называется взломанным, когда кто-то реконструирует клиент, а вы вообще уверены, что клиент был реконструирован? С таким же успехом это мог быть человек, который только что создал флэш-файл, который рассылает спам AMF по IP-адресу вашего сервера. Но чтобы быть немного полезным, вам нужно настроить сеанс для каждого клиента и убедиться, что вы отслеживаете сеансы и отключаете всех, кто отправляет данные о наводнении. en.wikipedia.org/wiki/Universally_Unique_Identifier Это должно помочь вам получить общее представление о том, как разделить клиентов, если вы еще этого не сделали.   -  person    schedule 15.08.2011
comment
Потом конечно нужно отслеживать входящие данные, и если клиент флудит или делает плохие запросы, отключаете или блокируете их.   -  person    schedule 15.08.2011


Ответы (1)


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

person Rytis Alekna    schedule 25.10.2011