2010-06-03 2 views
13

Я собираюсь внедрить API RESTful на наш сайт (на основе служб данных WCF, но это, вероятно, не имеет значения).Как предотвратить атаки грубой силы на службы данных RESTful

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

Какой рекомендуемый подход для предотвращения нападений грубой силы в этом сценарии?

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

ответ

8

Блокировка на основе IP сама по себе является рискованной из-за количества шлюзов NAT.

Вы можете замедлить (смоляную яму) клиента, если он сделает слишком много запросов быстро; то есть преднамеренно вставить задержку в пару секунд до ответа. Люди вряд ли будут жаловаться, но вы затормозили ботов.

+7

Хм, как вы хотите поместить CAPTCHA в RESTfull API? AFAIU все клиенты не должны быть людьми. – SergGr

+0

Хорошо, я, должно быть, моргнул над бит RESTful. Tricky. – crazyscot

+0

captcha - это то, что я использую прямо сейчас для своего обычного веб-сайта. Но, как отметил Iphone beginner, это не вариант для спокойного api. Тарпитинг может быть хорошей идеей. –

3

Я бы использовал тот же подход, что и с веб-сайтом. Следите за количеством неудачных попыток входа в определенное окно - скажем, разрешите 3 (или 5 или 15) в течение некоторого разумного промежутка времени, скажем, 15 минут. Если превышено пороговое значение, заблокируйте учетную запись и отметьте время блокировки. Вы также можете зарегистрировать это событие. После того, как пройдет еще один подходящий период, скажем, час, откройте учетную запись (при следующей попытке входа). Успешные логины сбрасывают счетчики и последнее время блокировки. Обратите внимание, что вы никогда не пытаетесь ввести логин в заблокированную учетную запись, вы просто возвращаете логин.

Это позволит эффективно ограничить любую атаку грубой силой, сделав атаку на разумный пароль очень маловероятным. Злоумышленник, используя мои номера выше, сможет попробовать только 3 (или 5 или 15) раз за 1.25 часа. Используя ваши журналы, вы можете обнаружить, когда такая атака могла произойти, просто путем поиска нескольких локаутов из одной учетной записи в тот же день. Поскольку ваша служба предназначена для использования программами, как только программа, обращающаяся к службе, имеет свои учетные данные, установленную правильно, она никогда не будет испытывать ошибку входа в систему, если не будет проведена атака. Это было бы еще одним признаком того, что атака может произойти. Как только вы узнаете, что атака находится в процессе, вы можете принять дополнительные меры для ограничения доступа к нарушившимся IP-адресам или вовлечь власти, если это необходимо, и прекратить атаку.

+2

Не будет ли еще проще запускать атаки DOS на учетные записи пользователей? Например, недобросовестный конкурент нашего веб-сайта может сознательно блокировать пользователей, отправляя неверные пароли. Он не получит доступ к своим счетам, но ему удастся сделать наш сайт ненадежным. Вот почему я рассмотрел IP-подход - злоумышленнику придется подменять ip-адрес реального пользователя, чтобы заблокировать его. –

+0

@Adrian - да, но это другая проблема. Использование подхода, основанного на IP-адресе для его решения, может сделать ваш сервис действительно ненадежным, так как может быть, пользователь просто забыл обновить свой скрипт после смены пароля.В этом случае пользователь может просто подождать, пока тайм-аут не пройдет, и повторите попытку, не привлекая вас. Используя ведение журнала, вы все равно сможете обнаружить атаку DOS и поместить в блок IP с злонамеренного сайта, и в этом случае обратитесь в органы власти точно. – tvanfosson

 Смежные вопросы

  • Нет связанных вопросов^_^