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


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


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


Начну, пожалуй с предыстории. А именно, с разработки сетевого накопителя, сектора которого находятся в облаке. Суть данной технологии позволяла сделать из нескольких аккаунтов (ну около 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 места на жестком диске дешево стоют?


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


Использованная информация:

Комментарии (34)


  1. Eagle_NN
    09.10.2018 11:59
    +1

    Проблема в том, что они в любой момент могут перегенерировать массив из капч. В результате для пользователя все будет выглядеть как обычно, а для примитивной распознавалки % результата снизится до 0.


    1. SlimRG Автор
      09.10.2018 12:09

      Но за 2а года этого не


  1. SlimRG Автор
    09.10.2018 12:20
    -1

    произошло!
    Да и сомневаюсь, что произойдет.
    С учётом того, что сейчас идёт новый вид капчи… Точнее антикапчи.
    И к тому же, да


    1. riky
      09.10.2018 18:55

      когда заметят злоупотребления — прикроют.
      особенно после вашей статьи.
      там же вроде при регистрации почты ввод номера мобильного сейчас обязателен?


      1. SlimRG Автор
        09.10.2018 21:02

        Там есть пункт — нет


        1. SlimRG Автор
          09.10.2018 21:03

          номера


  1. SlimRG Автор
    09.10.2018 12:27
    -1

    и оперативностью Яндекс особо никогда не блистал


    1. AngelNet
      09.10.2018 17:43

      Они ею блещут, жаль в другом месте: а именно на поле борьбы с блокерами рекламы и скриптами для сокрытия яндекс-директа.
      Порой код меняется раз в 1 час, вот уж куда они направляют силы сотрудников.


  1. Intrinit
    09.10.2018 12:27

    если от старости мои мозги еще не заржавели, то 76% дублей означают только то, что есть 24% оригинальных изображений. Вот если ты зальешь в базу эти оригиналы, то получишь ~100% распознавания (ну для сферической капчи в вакууме).Это я про то, что «76% распознавания» это некорректный подсчет шансов.


    1. SlimRG Автор
      09.10.2018 12:31

      76% — это то, что программа удалила, т.е
      Может, конечно, посчитано не верно, но если 76% точно имеют дубль в 24% то получим, что вероятность, что попадется дубль — 76%


    1. maxys146
      09.10.2018 17:28

      Совершенно верно.
      Если из 100к 76 удалены, то оригиналов 24к.
      Если-бы программа по сливу капч работала чуть дольше, то скорее всего процент дублей был-бы намного больше. Но оригиналов останется так-же 24к.


  1. Anton23
    09.10.2018 12:58

    Хорошо. Тогда зачем вы это пишете? Вы же собирались получить пару Tb дискового пространства, и вашим «врагом» была капча. Вы нашли способ, как ее обойти, и выложили его в сеть. Теперь этот способ прикроют, и вы не сможете получать Тб пространства.


    1. ivan386
      09.10.2018 13:15

      Может он за честную игру. Если исправят то будет новый уровень сложности. Там и фикс то простой.


      1. SlimRG Автор
        09.10.2018 14:17

        Я же написал выше, что все действия, что я производил — были сделаны мною ИСКЛЮЧИТЕЛЬНО в исследовательских целях и почти без корыстных


    1. iig
      09.10.2018 14:24
      +1

      Автор не нашел способа обойти капчу, воще то. Он обнаружил возможность повторного использования результатов распознавания. А все потому, что картинки генеренные по словам из словаря.
      Для эксплуатации уязвимости базу данных из 24к картинок надо еще распознать… И обидно будет, если она превратится в тыкву… А перегенерить картинки несложно.


      1. ITurchenko
        09.10.2018 14:34

        Для эксплуатации уязвимости базу данных из 24к картинок надо еще распознать

        интернет называет цифру в 50-100р за распознавание 1000 капч
        что для 24к картинок означает 1200-2400р общей стоимости


        1. iig
          09.10.2018 14:45

          Что для 100к картинок вызывает удорожание атаки в 4 раза.


          1. Nordicx86
            09.10.2018 15:47

            те до 5000-10 000р. что сопоставимо с Бюджетом Простенькой DDoS атаки (порядка 90-100$)


            1. SlimRG Автор
              09.10.2018 15:58

              1)Ну, перегенерить — они неперегенерили за 2а года, поэтому, вряд ли сделают это.


              2) Данная статья создана НЕ для корыстных целей (а то сейчас набегут мамкины хацкеры), а для исследовательских целей (типа, как НЕ нужно делать)


              1. iig
                09.10.2018 17:26

                как НЕ нужно делать


                Это да. Среди 100500 способов сделать велосипед они выбрали достаточно странный. Интересно, почему.


                1. SlimRG Автор
                  09.10.2018 17:33

                  Потому, что:
                  1) Они используют кириллицу, а значит пилили с нуля
                  2) Они используют слова, а не набор букв (А значит они используют словарь)
                  3) Они отказываются потихоньку от капчи в пользу мобилок
                  4) Классическая политика Яндекс — сделать криво, но раньше Google

                  Что это нам дает:
                  1) Обновлений в капчу они делать не планируют (планировали, до этой статьи?)
                  2) Набор, который они смогли сгенерить — это все, что есть в некоем словаре


          1. marperia
            09.10.2018 17:34

            Извините, а зачем вам все 100к картинок? Там ведь написано: только четверть картинок оригинальные, то есть достаточно добавлять распознанные картинки в базу, а новые сравнивать на предмет схожести хэша изображения к базе.
            Короче говоря, если у «Яндекса» всего 24к капч — то и атака на все их сервисы будет стоить 50-100*24000 рублей + время программиста.


            1. SlimRG Автор
              09.10.2018 17:36

              Именно так я и сделал — сначало сравнение, если не найдено — Welcome по облако, а дальше уже распознается и добавляется…
              Тфу, только время зря потратили…
              По секрету скажу — там всего 26721 вид капчи и уже более года новых видов не поступало


              1. iig
                09.10.2018 17:47

                уже более года новых видов не поступало


                Проект завершен, деньги потрачены, сотрудники уволены работают над другими задачами;)


                1. marperia
                  09.10.2018 17:56

                  Шутки-шутками, но причём тут деньги?
                  Сделать скрипт генерации каптч (ну не вручную же они их рисовали?) нужно один раз и запускать его ну, допустим, раз в месяц. Хотя лично мне кажется, что 24к картинок можно обновлять еженедельно без заметной нагрузки на сервера, а уж «Яндекс» может это делать хоть каждый день!


                  1. SlimRG Автор
                    09.10.2018 21:08

                    Я согласен с вами, но мне почему-то кажется, что они тупо взяли словарь и сделали капсулы по нему. Причем словарь типа Ушакова. А после тупо все забросили...


                  1. bano-notit
                    10.10.2018 02:18

                    В оригинале капчи вообще должны генерироваться на каждого нового запрашивающего отдельно. С мощностями Яши можно было сделать 3d слова и генерить искажения прямо в потоке видео (я кажется придумал новый идиотский способ капчи). Но они так не сделали.


                    1. marperia
                      10.10.2018 08:30

                      del


  1. algotrader2013
    09.10.2018 19:30

    Понимаю, что задача решалась не ради выгоды, а ради решения самого по себе, но все же, интересно, а в чем практическая ценность хранения 100Тб данных с такими ограничениями?

    Основная проблема, что чтобы не спалиться совсем уж по-детски, необходимо будет заходить каждый раз через прокси.

    Если не шардить, то для эффективной работы с таким количеством данных необходимы очень быстрые прокси в больших количествах, и дешево (вряд ли это возможно законно). Думаю, что для человека, для которого это не проблема, есть и более легкие способы спрятать 100 Тб (например, на 2-3х чужих корпоративных СХД с жирными каналами в 10Г, втайне от их владельцев).

    Если хорошо пошардить, то большой скорости на каждом логине не надо, но и Яндекс по паттерну использования очень быстро сможет эти аккаунты, которые вдруг все одновременно начинают читать/писать маленькие файлики равного объема, объединить у себя, и устроить санкции (к примеру, заблокировать один из них под предлогом подозрения на взлом, и предложить предоставить паспорт, или поставить скорость скачивания в 56к на все эти акки).

    Тут можно возразить, что люди, которые используют базу из 24К капч, не смогут объединить по паттерну, но не забываем, что навести порядок в капчах = релиз с тестированием и выливкой на прод, который затрагивает много людей и приоритеты с роадмапами, а разовый сеанс датасаенса = 1-2 часа одного человека + немного времени операторов.

    Понимаю, что фактор репликации > 1 (что тоже накладывает ограничение, так, как придется таки делать файлы бинарно разными, чтобы запалив 1 аккаунт, Яндекс не накрыл всю сеть сравнением хешей файлов, которое есть у Яндекса 100%, и используется для дедупликации).

    Короче, гемора что-то совсем много)


    1. SlimRG Автор
      09.10.2018 20:57

      Вы правы почти во всем.
      Программа, которая разрабатывается эмулирует работу жесткого, но вы не учли некоторые моменты.
      1) Для подключения к разным аккам можно использовать разные tor ip и получить хорошую скорость(я не стал пилить vpn, т.к. не уверен в их безопасности)
      2) Часто используется склеивание секторов
      И их удаление
      3) Внутряняя скруктура некоторых секторов имеет схожесть с exel файлами
      4) При файлообороте выше 2Gb требуется привязка к телефону, НО в отличается от регистрации она не реагирует на номера однодневки
      5) Скорость работы низкая, из-за чего статьи по программе ещё


  1. SlimRG Автор
    09.10.2018 21:01
    -1

    Чувство меня не возьмут работать в Яндекс, придется идти в Google :(


  1. youlose
    10.10.2018 10:10

    Может они просто кешируют их некоторое время, то есть следующий день уже будут другие 24 тысячи?


    1. iig
      10.10.2018 10:37

      Это вряд ли. Раз автор утверждает, что за год картинки не поменялись… Да и словарь это тоже несерьезно. Если словарь известен, то самая плохая самодельная распознавалка + подбор по словарю == очень хороший результат.
      Думаю, это просто солонка капча для приличных людей, а не для хакеров.


      1. SlimRG Автор
        10.10.2018 13:45

        Народ — народ, видимо кто-то из Яндекса все же посмотрели статью ^_^
        В базу добавилось еще 12к картинок буквально с 10:35 по 11:42
        Дальше все по старому :3