Pull to refresh

Как капчи рассказали об уязвимости Яндекса

Reading time 2 min
Views 12K

Привет, Хабр!


Присаживайтесь поудобней, заварите себе чайку, ибо я пишу немного затянуто и через правое ухо. Итак, Вы готовы? Отлично, тогда приступаем.


ВНИМАНИЕ! Информация, описанная ниже, написана исключительно в исследовательских целях и не предназначена для использования в корыстных целях!


Начну, пожалуй с предыстории. А именно, с разработки сетевого накопителя, сектора которого находятся в облаке. Суть данной технологии позволяла сделать из нескольких аккаунтов (ну около 100 или 1к аккаунтов) того же Яндекс.Диск по 10 Gb каждый (может измениться на момент прочтения) один большой диск, скажем на 10Tb. Вот...


Взялся я, значит, за разработку данной программы пару лет назад (программу я все же написал, но об этом в другой статье) и возник вопрос — как вводить YaCaptcha.


Вот несколько примеров:
image
image
image
image

Значится посмотрел я на данную капчу, погуглил маленько и думаю — надо бы TensorFlow использовать, а после перевести на FANN. Расстроился, конечно, немного, но делать нечего. Дай, думаю, скачаю пока несколько картинок (~100к), чтобы можно было потом потренировать нейрончики, а пока загрузка вспомню U-net сегментацию. Ну, набросал пару строк кода на Delphi + Synapase, запустил и пошел про нейронку гуглить. Скачалось за время поисков, надо сказать, до… много, в общем. И тут-то самое интересное начинается.


Зашел, значится, я в папочку с картиночками и вижу — одни повторы! Да-да, повторяющихся картинок было много. Ну, думаю, так дело не пойдет, и скачал первую попавшуюся программу по удалению одинаковых файлов (кажется, если память не изменяет, clonespy). Запустил ее, да завалился на печку спать. На утро посмотрел на статистику да призадумался: из 100к изображений было удалено 76к повторов, причем они не просто похожи — они 100% одинаковы! Что это значит, спросите вы? А я сейчас объясню.


Если взять нейронку, то получить можно где-то распознания ~18%, как пишет наш товарищ (ну, мне кажется, можно выжать до 45-50% при желании). Но даже если так, не будем забывать, сколько возни с подобными методами (базы данных нужно создать, самим вручную ввести дох… много капчи, после этого нужно ещё всё систематизировать и ждать пока это всё соберется) и сколько места это займет, да и время выполнения ни сказать, что велико будет у программы.


А можно ли как-то пойти другим путем? — спросите вы. И тут я предлагаю посчитать — у нас есть 100к изображений, из которых 76к повторы, т.е. если мы забьем базу из этих изображений (например, возьмем хеш суммы), то получим процент распознания аж 76%, что выше, чем нейронка, а вес базы данных примерно тот же (если не меньше), что и у таблицы весов для TensorFlow. При этом, данный способ будет работать везде и не нуждается в куче библиотек.


Получаем, что Яндекс нехило так накосячили, создав столь мало вариаций капчи. И благодаря этому можно написать программу, о которой я писал выше. Не это ли наглядная уязвимость системы. Или вы считаете over 100Tb места на жестком диске дешево стоют?


Спасибо за просмотр!


Использованная информация:
Tags:
Hubs:
+13
Comments 45
Comments Comments 45

Articles