Аутентификация токена Api как избежать man-in-the-middle

#api #security #rest #ssl #access-token

#API #Безопасность #rest #ssl #токен доступа

Вопрос:

Давайте представим, что я не использую SSL и отправляю токен в заголовках HTTP. Токен содержит идентификатор пользователя и зашифрован.

Я могу себе представить, что злоумышленник «человек посередине» может захватить токен и использовать его. Если я использую SSL, он должен быть достаточно безопасным? Но если я не использую SSL…

Могу ли я добавить что-то к токену, например, IP-адрес пользователя, чтобы я мог проверить, совпадают ли IP-адрес запроса и зашифрованный IP-адрес в токене?

Может ли злоумышленник man-in-the-middle подделать IP-адрес жертвы? Могу ли я использовать любую другую информацию, связанную с пользователем, при создании токена?

Спасибо!

Ответ №1:

Может ли злоумышленник «человек посередине» (MITM) подделать IP-адрес жертвы?

Поскольку вы описываете возможную атаку как «человек посередине», да, злоумышленник может подделать IP-адрес жертвы.

Могу ли я использовать любую другую информацию, связанную с пользователем, при создании токена?

Конечно, попросите пользователя сгенерировать случайное число, которое никогда не отправляется в открытом виде. И лучше убедитесь, что сервер также делает то же самое, чтобы злоумышленник «человек посередине» не мог просто воспроизвести старый запрос. И как пользователь может быть уверен, что он общается с реальным сервером, а не с злоумышленником? Лучше подтвердите идентификацию сервера с помощью сертификата.

При разработке протокола, защищенного от атак «человек посередине», возникает много подобных вопросов. Если вы обратитесь ко всем из них, вы, вероятно, получите что-то очень похожее на SSL. Для многих разработчиков просто не стоит тратить время на создание собственного безопасного транспортного протокола.

Комментарии:

1. Спасибо за вашу помощь.

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

Ответ №2:

В дополнение к отличному ответу @guest:

Может ли злоумышленник man-in-the-middle подделать IP-адрес жертвы?

Это зависит от того, где находится MITM:

  • Если они находятся на другом компьютере в той же сети, что и жертва (но не сервер), тогда они могут использовать один и тот же общедоступный IP-адрес в любом случае. MITM перехватывает трафик жертвы, но ему не нужно будет подделывать IP-адрес, поскольку ваша система будет видеть только общедоступный IP-адрес, который будет таким же.
  • Если они находятся в сети вашей серверной инфраструктуры, то могут использовать что-то вроде отравления ARP для перехвата трафика — здесь не требуется подмена IP-адреса жертвы.
  • Если они находятся где-то посередине (например, контролируемое правительством магистральное соединение), то подделка IP-адреса может быть более сложной, если не невозможной (подделка IP-адреса означает, что злоумышленник не сможет прочитать какие-либо ответы на свои пакеты, поскольку они будут отправлены обратно на поддельный IP-адрес).

Короче говоря, используйте SSL (или, более технически, TLS).

Комментарии:

1. Спасибо за ваши комментарии. Если кто-то может использовать другой компьютер в той же сети, это не то, что я действительно могу контролировать (я просто разрабатываю веб-фреймворк), пользователи должны защищать свою собственную частную сеть. Сеть хостинга должна быть достаточно безопасной (поставщик IaaS, такой как Amazon или Microsoft). Случай, который заставляет меня беспокоиться, — это «где-то посередине». Я хочу убедиться, что если кто-то не использует TLS, моя платформа по-прежнему будет максимально безопасной, основываясь на вашем ответе, я думаю, что буду использовать IP как часть токена и рекомендовать использовать TLS пользователям платформы