Я пытаюсь провести мозговой штурм по потенциальным уязвимостям безопасности для этого сценария (кстати, я задал связанный вопрос несколько дней назад , однако из ответов я понял, что объясняю сценарий EXACT Это чрезвычайно важно, потому что многие ответы были (немного) неуместны из-за этого. Я также включил уязвимости, которые я определил до сих пор, и способы их устранения, поэтому отзывы о них будут оценены. Итак, мы идем :
a) Вся система будет представлять собой систему «билетов», но не обычный билет, а «систему пропусков». Значение: клиент идет и заказывает «пропускающий» билет, который дает ему доступ к определенным льготам в определенных местах (например, бесплатный вход в музеи) на КОНКРЕТНЫЙ период времени. Это означает, что это билет, срок действия которого истекает через 1-7 дней (но не более 7 дней).
б) «Поток» пользователя:
- Пользователь заходит на сайт, заказывает билет на определенный период времени, который дает ему льготы в определенных местах (музеях и т. Д.)
- После успешного заказа веб-сайт печатает строку из 6 букв (идентификатор). Пример:
GFZ-GFY
. Есть 26 ^ 6 (~ 308 миллионов) потенциальных комбинаций. Конечно, эти идентификаторы будут храниться в защищенной базе данных.
- Затем пользователь идет в музей (или другое место) и показывает строку из 6 букв. Сотрудник проверяет его действительность с помощью веб-приложения или отправляя SMS-сообщение на номер, сразу же получая статус действительности (в обоих случаях код будет запрашивать базу данных для проверки действительности билета).
Пока что я выявил 2 потенциальных проблемы:
а) Атаки грубой силой
Там будет 2 "поверхности атаки", под которыми это может происходить:
- Сотрудник музея будет иметь закрытый доступ к веб-приложению (для проверки действительности билета). Способ, которым я смягчаю это, ограничивает количество просмотров до 1000 в день для каждой учетной записи пользователя.
- Пользователь сможет проверить статус своего заказа. Я уменьшу это несколькими способами: во-первых, URL-адрес не должен быть «общедоступным» и доступен только пользователям, которые приобрели билет. Во-вторых, я реализую ReCaptcha v3 , запрет IP на более чем 10 неудачных запросов в час.
- Ожидается, что количество «активных» билетов за раз будет 5000 (на пике), обычно будет около 500-1000, так что, учитывая сотни миллионов комбинаций, потребуется значительное усилие для злоумышленник перебивает путь через это.
Второй (и более простой) подход, который может использовать злоумышленник, - это просто купить билет и переиздать его, либо опубликовать в Интернете для любого использования. Я буду смягчать это путем:
- После того, как музей проверит действительность пропуска, если они проверят его еще раз, появится уведомление о том, что в данный момент этот пропуск проверен в этом месте: [дата-время].
- Хотя я планирую повторно использовать тот же код, я позабочусь о том, чтобы между периодами был период не менее 90 дней. Возможно, в этом есть какая-то уязвимость, о которой я не знаю. Код МОЖЕТ или МОЖЕТ не использоваться снова через 90 дней после истечения срока его действия. Все, что я говорю, это то, что он будет выпущен в «пуле» потенциальных (более 300 миллионов) кодов, которые могут быть использованы. Может быть, это не очень хорошая идея?
- Клиенту будет предоставлен (отправлен по адресу или получен запрос на получение) пустой билетный билет, на котором будет написан код (или ему придется написать код с ручка на билете). Это усложнит атаку, поскольку теперь злоумышленнику потребуется иметь ОБА доступ к коду + принтер, который может печатать такие карты с тем же материалом.
Видите ли вы еще какие-нибудь потенциальные атаки, которые можно было бы сделать? Есть ли что-то, чего мне не хватает в моих нынешних подходах к смягчению?