TL;DR — дата рождения или номер социального страхования не является хорошей идеей для обеспечения доступа к данным.
Головоломка — в чем разница между двумя картинками ниже?
![](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_647,h_324/https://my127001.pl/wp-content/uploads/2020/11/image-13.png)
![](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_737,h_379/https://my127001.pl/wp-content/uploads/2020/11/image-12.png)
Но начнем с самого начала. К сожалению, как это часто бывает в мире ИТ, удобство не идет рука об руку с безопасностью. Я думаю, что на этот раз все было похоже. Тем не менее, существует набор конфиденциальных данных, где компромиссы не должны быть сделаны. Такие данные включают, но не ограничиваются ими, информацию о нашем здоровье.
Встревоженный сообщением от моего друга Kacpra о том, как предоставляется доступ к лабораторным результатам, я решил исследовать решение, ответственное за это, более подробно.
Как видно на графике выше – для доступа к вашему результату через функционал «упрощенного логина» вам понадобятся две информации:
- Идентификатор заказа, где последующие номера заказов увеличиваются;
- заказ даты рождения человека [день=X&месяц=X&год=X]
Согласно определенным предположениям, количество комбинаций дат рождения, которые могут быть назначены идентификатору заказа, составляет всего около 19 000 комбинаций. Нетрудно догадаться, что сгенерировать все подобные комбинации и проверить, соответствуют ли они порядковой номеру, не является серьезной проблемой.
Оказалось, что мои предположения верны и после нескольких сотен перечислений удалось сопоставить данные доступа:
![злоумышленник перечисления](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_953,h_534/https://my127001.pl/wp-content/uploads/2020/11/image-4.png)
Это позволило и всё более конфиденциальную информацию о пациенте, такую как:
- имя;
- имя;
- песель;
- дата рождения;
- адрес проживания;
- результат испытаний;
![Результаты теста на коронавирус](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_580,h_186/https://my127001.pl/wp-content/uploads/2020/11/image-5-1024x330.png)
![Результаты теста на коронавирус](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_604,h_384/https://my127001.pl/wp-content/uploads/2020/11/image-6.png)
Другой пример успешной попытки перечисления:
![перечисление отрыжки злоумышленника](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_1024,h_367/https://my127001.pl/wp-content/uploads/2020/11/image-7-1024x367.png)
![Результаты теста на коронавирус](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_987,h_685/https://my127001.pl/wp-content/uploads/2020/11/image-11.png)
Как только я подтвердил свою восприимчивость, я сообщил об этой ошибке ответственному программному обеспечению вместе с рекомендациями по ремонту:
![Сообщение электронной почты об ошибке безопасности](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_1024,h_162/https://my127001.pl/wp-content/uploads/2020/11/image-3-1024x162.png)
Что делать, как жить?
Одной из наиболее распространенных мер безопасности против этих типов атак является реализация капчи. После нескольких (например, трех) неудачных попыток доступа к данным заказа пользователю приложения будет предложено переписать отображаемый код капчи. Обратите внимание, однако, что реализация такого механизма является лишь (или до тех пор) замедлением злоумышленника, который в простейших случаях сможет в дальнейшем брутфорсировать дату рождения с помощью сканеров OCR или специализированных сервисов чтения капч.
Лучшей и рекомендуемой функцией безопасности является доступ к результатам заказа через достаточно длинный, случайный пароль,который придет на номер телефона клиента.
К счастью, ошибка была исправлена довольно быстро, реализовав механизм reCAPTCHA от google:
![](https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_1024,h_373/https://my127001.pl/wp-content/uploads/2020/11/image-2-1024x373.png)