С какими угрозами можно столкнуться при аутентификации пользователей?
Онлайн системы передают конфиденциальную информацию пользователей (медицинскую, финансовую или персональную) через API. Большинство из систем имеют уязвимости, позволяющие получить несанкционированный доступ к информации. Расскажем про возможные уязвимости при аутентификации пользователей и как с этим бороться.
В современном мире подавляющее большинство онлайн систем передают конфиденциальную информацию пользователей (например: медицинскую, финансовую и персональную), используя API.
Исходя из вышесказанного, всем сотрудникам, участвующим в проверках информационных систем, требуется знать о существующих брешах в организации доступа к API различных сервисов и систем, а также знать как с ними можно и нужно бороться.
По данным сообщества OWASP (открытый проект обеспечения безопасности веб-приложений), существует несколько «особо опасных» уязвимостей, которые могут быть допущены при проектировании и разработке REST API. Одна из таких уязвимостей это нарушенная аутентификация пользователей (Broken User Authentication). Далее разберем данную уязвимость более подробно, а также рассмотрим самые распространенные методы борьбы с ней.
Broken User Authentication — уязвимость, при которой злоумышленник, не проходя процедуру проверки подлинности, либо «обойдя» ее, может получить доступ к информации передаваемой через API. Далее перечислим основные методы борьбы с данной уязвимостью.
API key — уникальный ключ, который передается клиентом в теле самого запроса к серверу. На сервере этот ключ проверяется на валидность и в случае успеха отправляет ответ клиенту. Данный метод позволяет легко защититься от неправомерного доступа к API, а также отслеживать лимиты активности.
Пример API key:
Basic Authentication – данный метод используется для аутентификации пользователя, по двум параметрам, например: логину и паролю. Данные при этом методе передаются не так явно, как в предыдущем методе. Они передаются в закодированном виде (Base64) в параметре Authorization, в заголовке HTTP запроса.
Пример Basic Authentication:
Cookie-Based Authentication — в этом методе для аутентификации пользователя используются cookie. При успешной авторизации в системе сервер направляет клиенту, в заголовке параметр Set-Cookie, имя и значение cookie.
Пример параметра Set-Cookie отправляемого сервером:
Далее, при обращении к API, клиент автоматически передает и Cookie в заголовке HTTP запроса.
Пример Cookie-Based Authentication:
Token-Based Authentication — этот метод использует, выданный сервером токен, для предоставления доступа аутентифицированному пользователю. В дальнейшем, обращаясь к API, клиент передает данный токен в заголовках самого запроса, по аналогии с методом Basic Authentication. Сервер же, в свою очередь, проверяет полученный от клиента токен на соответствие определенным требованиям. На данный момент этот метод считается наиболее надежным.
Схема работы метода Token-Based Authentication:
Пример Token-Based Authentication:
Отдельно стоит подчеркнуть, что при любом методе аутентификации для безопасности передаваемых данных, нужно использовать протокол с шифрованием данных, например HTTPS. В противном случае злоумышленник может выдавать себя за авторизованного пользователя, перехватив чужой токен или сессию.
Заключение
Мы разобрали одну из самых опасных уязвимостей REST API и несколько методов борьбы с ней.
Как мы видим, не стоит пренебрегать безопасность REST API. Пускай этот мощный механизм взаимодействия человека и машины зачастую скрыт от обычного пользователя, но он может стать причиной многих проблем. Самая большая из которых — это утечка данных по операциям и персональных данных пользователей, сотрудников и клиентов.