Время прочтения: 3 мин.
В современном мире подавляющее большинство онлайн систем передают конфиденциальную информацию пользователей (например: медицинскую, финансовую и персональную), используя API. Согласно Comnews, на май 2020 года, подавляющее большинство систем имеют критические уязвимости, позволяющие злоумышленникам получить несанкционированный доступ к конфиденциальной информации компаний, пользователе и клиентов и совершать различные действия под видом аутентифицированного пользователя. Исходя из вышесказанного, всем сотрудникам, участвующим в проверках информационных систем, требуется знать о существующих брешах в организации доступа к API различных сервисов и систем, а также знать как с ними можно и нужно бороться.
По данным сообщества OWASP (открытый проект обеспечения безопасности веб-приложений), существует несколько «особо опасных» уязвимостей, которые могут быть допущены при проектировании и разработке REST API. Одна из таких уязвимостей это нарушенная аутентификация пользователей (Broken User Authentication). Далее разберем данную уязвимость более подробно, а также рассмотрим самые распространенные методы борьбы с ней.
Broken User Authentication — уязвимость, при которой злоумышленник, не проходя процедуру проверки подлинности, либо «обойдя» ее, может получить доступ к информации передаваемой через API. Далее перечислим основное методы борьбы с данной уязвимостью.
API key — уникальный ключ, который передается клиентом в теле самого запроса к серверу. На сервере этот ключ проверяется на валидность и в случае успеха отправляет ответ клиенту. Данный метод позволяет легко защититься от неправомерного доступа к API, а также отслеживать лимиты активности.
Пример API key:
https://api-maps.yandex.ru/2.1/?lang=ru_RU HYPERLINK "https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=df78s6dfsdgs8d7f87sdf68sdfsdf"& HYPERLINK "https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=df78s6dfsdgs8d7f87sdf68sdfsdf"apikey= HYPERLINK "https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=df78s6dfsdgs8d7f87sdf68sdfsdf"df78s6dfsdgs8d7f87sdf68sdfsdf
Basic Authentication – данный метод используется для аутентификации пользователя, по двум параметрам, например: логину и паролю. Данные при этом методе передаются не так явно, как в предыдущем методе. Они передаются в закодированном виде (Base64) в параметре Authorization, в заголовке HTTP запроса.
Пример Basic Authentication:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Cookie-Based Authentication — в этом методе для аутентификации пользователя используются cookie. При успешной авторизации в системе сервер направляет клиенту, в заголовке параметр Set-Cookie, имя и значение cookie.
Пример параметра Set-Cookie отправляемого сервером:
Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/
Далее, при обращении к API, клиент автоматически передает и Cookie в заголовке HTTP запроса.
Пример Cookie-Based Authentication:
Cookie: sessionid=38afes7a8
Token-Based Authentication — этот метод использует, выданный сервером токен, для предоставления доступа аутентифицированному пользователю. В дальнейшем, обращаясь к API, клиент передает данный токен в заголовках самого запроса, по аналогии с методом Basic Authentication. Сервер же, в свою очередь проверяет, полученный от клиента токен, на соответствие определенным требованиям. На данный момент, этот метод считается наиболее надежным.
Схема работы метода Token-Based Authentication:
Пример Token-Based Authentication:
Authorization: Bearer df78s6dfsdgs8d7f87sdf68sdfsdf
Отдельно стоит подчеркнуть, что при любом методе аутентификации для безопасности передаваемых данных, нужно использовать протокол с шифрованием данных, например HTTPS. В противном случае злоумышленник может выдавать себя за авторизованного пользователя, перехватив чужой токен или сессию.
Заключение
Мы разобрали одну из самых опасных уязвимостей REST API и несколько методов борьбы с ней
Как мы видим, не стоит пренебрегать безопасность REST API. Пускай этот мощный механизм взаимодействия человека и машины зачастую скрыт от обычного пользователя, но он может стать причиной многих проблем. Самая большая из которых, на мой взгляд это утечка данных по операциям и персональных данных пользователей, сотрудников и клиентов.
Ссылки: