Управление безопасностью по сокету UDP - PullRequest
4 голосов
/ 03 февраля 2012

Я планирую разработать свою первую многопользовательскую RTS-игру и, естественно, буду использовать UDP-сокеты для приема / отправки данных.

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

Я знаю все о различиях между UDP и TCP, поэтому, пожалуйста, не превращайте это в лекцию об этом.

===================== РЕДАКТИРОВАТЬ =========================

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

Я знаю, что это базовые проблемы, с которыми должен сталкиваться каждый программист, использующий сокет UDP, но я не могу найти какую-либо соответствующую документацию о методах обхода их!

Любое направление будет оценено!

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Методы, которые вам нужны, не будут специфичными для UDP: вам нужна общая аутентификация сообщений для обработки спуфинга, регулирование скорости для обработки DoS и эвристика состояния сервера («имеет ли этот пакет смысл?») Для обработки клиента хаки.

Для эффективной обработки DoS вам необходимы уровни обнаружения. Сначала отбросьте неверные адреса источника, даже не глядя на содержимое. Поместите идентификатор сеанса в начале каждого пакета с идентификатором, который не назначен или не соответствует нужному источнику. Далее следите за показателями прибытия за сеанс. Начните отбрасывать адреса, которые приходят слишком быстро. Эти методы блокируют все, кроме кого-то, кто может прослушивать законные пакеты в режиме реального времени.

Но DoS-атака, основанная на сниффинге в реальном времени, будет очень редкой, и скорость атаки будет ограничена скоростью сети с одним источником. Единственный способ заблокировать перехват пакетов - это использовать шифрование и контрольные суммы, что потребует много работы. Поскольку это ваш «первый многопользовательский RTS», я предлагаю сделать все, кроме шифрования.

Если вы решите использовать шифрование, AES-128 будет относительно быстрым и очень безопасным. Ссылка Брайана Гладмана на реализацию Rijndael является хорошей отправной точкой, если вы действительно хотите оптимизировать, или существует множество библиотек AES. Контрольная сумма данных в открытом тексте может быть выполнена с помощью простого CRC-16. Но это, вероятно, излишне для ваших вероятных векторов атаки.

5 голосов
/ 03 февраля 2012

Самое главное: никогда не доверяй клиенту!Всегда отслеживайте все на стороне сервера.Если приходит пакет, который кажется поддельным (например, единица, перемещающая Y единиц в секунду, в то время как она должна иметь возможность только перемещать X единиц в секунду), тогда просто отбросьте пакет.

Кроме того, если количество пакетов в секундустановится большим, начинайте отбрасывать и пакеты.

И не используйте пакеты UDP для «неважных» вещей ... Игровой чат и подобные вещи могут проходить через обычные потоки TCP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...