TL;DR — дата рождения или номер социального страхования не является хорошей идеей для обеспечения доступа к данным.
Головоломка — в чем разница между двумя картинками ниже?
Но начнем с самого начала. К сожалению, как это часто бывает в мире ИТ, удобство не идет рука об руку с безопасностью. Я думаю, что на этот раз все было похоже. Тем не менее, существует набор конфиденциальных данных, где компромиссы не должны быть сделаны. Такие данные включают, но не ограничиваются ими, информацию о нашем здоровье.
Встревоженный сообщением от моего друга Kacpra о том, как предоставляется доступ к лабораторным результатам, я решил исследовать решение, ответственное за это, более подробно.
Как видно на графике выше – для доступа к вашему результату через функционал «упрощенного логина» вам понадобятся две информации:
- Идентификатор заказа, где последующие номера заказов увеличиваются;
- заказ даты рождения человека [день=X&месяц=X&год=X]
Согласно определенным предположениям, количество комбинаций дат рождения, которые могут быть назначены идентификатору заказа, составляет всего около 19 000 комбинаций. Нетрудно догадаться, что сгенерировать все подобные комбинации и проверить, соответствуют ли они порядковой номеру, не является серьезной проблемой.
Оказалось, что мои предположения верны и после нескольких сотен перечислений удалось сопоставить данные доступа:
Это позволило и всё более конфиденциальную информацию о пациенте, такую как:
- имя;
- имя;
- песель;
- дата рождения;
- адрес проживания;
- результат испытаний;
Другой пример успешной попытки перечисления:
Как только я подтвердил свою восприимчивость, я сообщил об этой ошибке ответственному программному обеспечению вместе с рекомендациями по ремонту:
Что делать, как жить?
Одной из наиболее распространенных мер безопасности против этих типов атак является реализация капчи. После нескольких (например, трех) неудачных попыток доступа к данным заказа пользователю приложения будет предложено переписать отображаемый код капчи. Обратите внимание, однако, что реализация такого механизма является лишь (или до тех пор) замедлением злоумышленника, который в простейших случаях сможет в дальнейшем брутфорсировать дату рождения с помощью сканеров OCR или специализированных сервисов чтения капч.
Лучшей и рекомендуемой функцией безопасности является доступ к результатам заказа через достаточно длинный, случайный пароль,который придет на номер телефона клиента.
К счастью, ошибка была исправлена довольно быстро, реализовав механизм reCAPTCHA от google: