Не секрет, что многие разработчики программного обеспечения с открытым исходным кодом и не только, по разным причинам желают сохранить свою анонимность. Совсем недавно группа исследователей опубликовала работу, в которой описываются методы деанонимизации программиста по его стилю кодирования через анализ исходных кодов. Авторы утверждают, что им удалось достигнуть средней точности идентификации в 94%.

С помощью построения абстрактных синтаксических деревьев на основе разбора исходного текста, им удалось выделить устойчивые отличительные признаки при написании кода, которые трудно скрыть даже целенаправленно. Используя машинное обучение и набор эвристик, удалось добиться впечатляющей точности определения авторства среди выборки из 1600 программистов Google Code Jam.


В своей новой работе, исследователи продемонстрировали, что деанонимизация возможна и через анализ уже скомпилированных бинарных файлов в отсутствии исходных кодов (видео презентации доклада). В этот раз для исследования использовались исходные коды 600 участников Google Code Jam, которые были скомпилированы в исполняемые файлы, а потом подвергались разбору. Благодаря тому, что задания на соревнованиях были одинаковы для всех, разница файлов заключалась в значительной степени именно в стиле программирования, а не в алгоритме. Изначально, при сборке бинарных файлов отключались оптимизации компилятора и не применялась обфускация исходных кодов. Но, как утверждают авторы работы, некоторые отличительные признаки сохраняются и при применении этих способов сокрытия авторства, снижая точность деанонимизации до 65%.


С помощью дизассемблирования и декомпиляции, применяя все те же абстрактные синтаксические деревья, проводится анализ графа потока управления, выделяются отличительные признаки кодирования и производится обучение классификатора на основе векторов признаков.





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

Авторы уверены, что с помощью подобных методов когда-нибудь будут выявлены настоящие авторы таких разработок как Bitcoin, TrueCrypt, а также разработчики известных вредоносных программ.

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


  1. DeOhrenelli
    05.01.2016 09:37
    +32

    Не все так плохо.

    1 — Большая часть используемой информации недоступна в стрипнутом бинарнике
    2 — Даже оптимизация (обычный -О3) снижает точность аттрибуции на 20%
    3 — Хорошая обфускация не исследована вовсе
    4 — Все исследования производились на коде, который явно писал только один программист (а не группа)
    5 — Слабая точность не позволяет использовать результаты в суде

    Короче говоря, много шума из ничего, обычное современное «давайте засунем в рандом форест че найдем и посмотрим на результаты которые хоть чуть чуть лучше случайных», что и дает, как и любой матметод, результат по принципу garbage in — garbage out.


    1. ilmirus
      05.01.2016 09:59
      +5

      Согласен с вами.

      И даже по поводу деанонимизации по исходному коду у меня один вопрос:
      Любой достаточно большой опен-сорс проект (достаточно — это когда один человек не в состоянии охватить весь проект полностью) имеет стайл-гайд, кучу контрибьюторов и, что более важно, несколько единиц или десятков мейнтейнеров. Можно ли как-то отличить мой код от кода некоего мейнтейнера Томаса, если учесть, что он, как и некий Бернард, был моим ревьювером? И всё это шлифовалось Томасом во время коммита в транк. Причем всё, начиная от именования и до типа применяемого цикла.


      1. Goodkat
        05.01.2016 11:31
        +5

        — Я не говнокодю, я обфусцирую
        Опенсорщиков вычислять мало толку, но вот для поимки вирусописателей может пригодиться.


        1. EvilsInterrupt
          05.01.2016 19:27

          Ога. Как же. Поймаете Вы вирусописателя по бинарю )))
          Уверяю Вас, разве что пионера сможете, да и то не факт. А уж опытного малварщика так сказать со стажем тут Вам ничего не светит ;)


          1. nochkin
            06.01.2016 01:02

            Да и с пионерами тоже не особо. Пионер зачастую чужой код использует. Или даже разный код из разных источников.


        1. teecat
          06.01.2016 08:16

          для поимки — вряд ли. а вот отфильтровывать их новые произведения может быть


      1. grossws
        05.01.2016 16:28
        -2

        Обычно git blame/hg annotate/svn blame более чем достаточно ,)


        1. ilmirus
          06.01.2016 04:18
          +1

          Хех, gcc:trunk:r219682. Удачи вычислить изменения, сделанные неким Ilmir Usmanov. Ибо bulk-commit, конечно, зло, но без него разработка GCC сильно бы замедлилась.


      1. uvelichitel
        05.01.2016 16:39
        +2

        Open_source кажется совсем другая история. Source ведь open и доступен, более того в серьезных проектах(да всех на github) сохраняется история issue, request, commit, revue, accept. Так что персональная ответственность за код вполне прозрачна


        1. icoz
          06.01.2016 11:36

          Интересно, а не взламывают ли аккаунты на гитхаб, чтобы туда свой левый репозиторий подложить?


    1. solver
      05.01.2016 11:52
      -2

      В целом, если есть возможность с узить круг поиска, то надо ее использовать. Именно для для этого такие методы и исследуют.
      Про суд очень слабый аргумент. Если сделаете какую нибудь бяку, то будут желающие вас найти из безо всяких судов.
      К тому же, ректальный криптоанализ еще никто не отменял. Вполнее могут появиться улики и для суда.


      1. DeOhrenelli
        05.01.2016 12:02
        +1

        Конечно надо, только у метода столько недостатков, что его практическое использование практически невозможно вообразить, что собственно и имелось в виду.
        А искать конечно будут. Только без ордера у них будет на порядок меньше возможностей.


        1. il--ya
          12.01.2016 14:34

          Для выдачи ордера достаточно обоснованных подозрений, что этот метод, типа, даёт (хотя я сильно сомневаюсь, что это на самом деле так). Подозреваю, они именно так собираются монетизировать свою «разработку» — подрабатывать экспертами в расследовании киберпреступлений.


      1. Maccimo
        06.01.2016 02:55

        Если есть возможность сузить круг, то нужно приложить все усилия к уничтожению этой возможности.
        В противном случае нас ждёт международная охота на ведьм, контрибутящих в неудобные политикам опенсорс-проекты.


        1. kovalexius
          12.01.2016 15:58

          Согласен!


    1. Andrey_Perelygin
      05.01.2016 12:00

      Отчасти с вами не соглашусь.
      Подобный алгоритм вполне может себя показать при комбинации с другими методами и пусть не найти нужного кодера на 100%, но существенно сузить область поиска.
      По поводу доказательной базе в суде… На мой субъективный взгляд, найди власти %COUNTRY_NAME% с помощью подобной технологии настоящего создателя Bitcoin — ни про какой суд речи даже идти не будет. В конце концов закроют за цп или за связь с бенладеном


      1. DeOhrenelli
        05.01.2016 12:04
        +2

        Зависит от %COUNTRY_NAME% :)


      1. Mitch
        15.01.2016 03:00

        Или пришлют вестника крылатой демократии.


    1. monah_tuk
      06.01.2016 08:55

      Теперь мне понятен стиль libstdc++: пишут как пишут, а потом прогоняют через что-то, что делает код таким, будто его писал робот — что бы не догадались, кто что писал :)


    1. l2k
      12.01.2016 22:49

      Забавно, если эта статья (прочитав соседнюю статью про взломы в кино) будет использоваться в будущем киношниками ))


  1. mtp
    05.01.2016 11:36
    +35

    > настоящие авторы таких разработок как Bitcoin, TrueCrypt и известных вредоносных программ.

    Напомнило: «Можно сказать: „космонавты и педерасты“. Мы не сказали ничего плохого про космонавтов, но неприятный осадок остался». Переформулируйте, пожалуйста.


    1. Akr0n
      05.01.2016 13:36
      +1

      Вы правы, пожалуй :)


    1. Wesha
      05.01.2016 22:19
      +2

      «А велосипедиста-то за что???» (с)


  1. ankh1989
    05.01.2016 13:17
    +1

    У метода есть очевидный недостаток: чтобы он работал, нужна большая база кода у которого авторы изестны и при этом в этой базе кодить все должны отдельно.


    1. fakedream
      05.01.2016 14:47
      +1

      github? :)


      1. ankh1989
        06.01.2016 06:14
        +1

        гитхаб не подходит потому что там далеко не каждый пишет под своим именем как в паспорте. У меня там например штук десять аккаунтов с именами вроде 1h27sh (чуть ли не для каждого проекта свой аккаунт) и логика за этим стоит простая: даже если я такой неуловимый Джо который никому не нужен, не стоит складывать все яйца в одну корзину.


        1. ilmirus
          06.01.2016 06:44
          +2

          А имейлы для регистрации берете из 10minutemail?


          1. Wesha
            06.01.2016 07:20
            +1

            «Если вы параноик, то из этого ещё не следует, что за вами никто не следит!» (с)


            1. ilmirus
              06.01.2016 07:45

              Это был не сарказм. Мне действительно интересен способ генерации (почти) одноразовых имейлов, отличный от 10minutemail.


              1. Wesha
                06.01.2016 07:51

                Собственный сервер на просторах интернета, на котором взведён sendmail, и правка aliases. Лично у меня так.


                1. ilmirus
                  06.01.2016 07:54

                  Хм, все, оказывается, просто. А домен один или несколько?


                  1. Wesha
                    06.01.2016 07:57

                    У меня один, но не вижу никаких причин, почему бы не завести несколько (кроме того, что лично мне одного вполне хватает, а дополнительные надо регистрировать и т.п.).


                    1. mtp
                      06.01.2016 16:06

                      Ну вот по домену-то вас и отловят.


                      1. Wesha
                        06.01.2016 18:55
                        -1

                        Ну, во-первых, при регистрации домена паспорт (пока) предьявлять не требуют, поэтому у Васисуалия Пупкина так много доменов; а во-вторых, ilmirus не уточнял, что его интересуют именно неотслеживаемые государством емейлы — я его вопрос понял так, что его интересует защита от спамеров уровня BugMeNot.


          1. ankh1989
            06.01.2016 09:44

            в гмейл регистрирую: десять секунд дел


        1. fakedream
          06.01.2016 11:15
          +1

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


          1. ankh1989
            06.01.2016 11:23

            Про это я не забываю и все мои акки выглядят как хеш от моего имени/фамилии + что то (условная «соль»). Если мне когда либо понадобиться показать пару проектов, я дам ссылки и скажу как получено имя аккаунта — для того, кто способен понять что я там накодил это будет очевиным доказательством того, что акк мой, но случайный человек его не найдёт.


            1. fakedream
              06.01.2016 12:06
              +1

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


              1. ankh1989
                06.01.2016 13:41

                Не понял про просканить. Вот у нас есть условный тор/и2п/биткоин автора которого очень хочет найти тот у кого длинные руки: он берет код/бинарник и… дальше что? Ищет по этому коду похожий код в гитхабе? Так ведь машинное обучение работает наоброт: ему надо дать 100500 репозиториев одного автора и тогда нейросеть сможет с 60% вероятностью сказать является ли этот человек автором данного куска кода или нет.


    1. 0x0FFF
      05.01.2016 16:20
      +1

      Даже не так — нужна большая база кода, в которой разные программисты решали одну и ту же задачу, в противном случае их решение работать не будет
      Плюс тут еще много тонкостей — в GCJ почти у всех участников есть свои «шаблоны» решений, в которых для ответа на поставленную задачу чаще всего достаточно дописать только одну функцию. Отсюда и такое качество классификации, т.к. шаблоны чаще всего индивидуальны


  1. Wesha
    05.01.2016 22:14

    Деанонимизация программиста возможна не только через исходный код, но и через скомпилированный бинарный файл
    Похоже, нас ждёт новый этап охоты на Сатоши Накамото. Запасаемся попкорном…


  1. pehat
    06.01.2016 02:21
    +1

    Google Code Jam? Вы серьёзно что ли?
    GCJ – соревнование по программированию для алгоритмистов (в подавляющем большинстве случаев это призёры финала ACM ICPC), которые (внимание, сильно утрирую!) годами учатся писать по памяти пачку алгоритмов из книжки, а на соревновании (всё на нервах и с нехваткой времени) придумывают, как эти алгоритмы модифицировать, чтобы решить конкретные задачи. Программисты участвуют в аналогичных соревнованиях много лет подряд, поэтому у каждого есть своя библиотечка шаблонов. Этот код не предназначен для работы на продакшне, под нагрузкой в 100K RPS и какой-либо поддержки в дальнейшем. Утверждать про какую-либо связь GCJ с реальной разработкой open source-кода промышленного качества может утверждать разве что большой шутник.


    1. Maccimo
      06.01.2016 03:06

      >> GCJ – соревнование по программированию для алгоритмистов (в подавляющем большинстве случаев это призёры финала ACM ICPC)

      Не преувеличивайте, начальные этапы под силу любому практикующему программисту, знакомому с базовыми алгоритмами.
      Полуфинал-финал — другое дело, туда действительно попадают в основном только профессиональные спортсмены.


  1. Woit
    06.01.2016 07:57
    +1

    Мне кажется, что исследованы либо близкие к идеальным случаи, либо наборы кода относительно небольшого объема.
    Например, в проекте с >300к строк кода опытный программист, если он уважает коллег и заботится о своем коде, в разных модулях/подпрограммах/библиотеках может быть разный стиль кодирования, такой, который лучше всего подходит по контексту.
    Ну а проекты с >1кк исходников, которые могу сопровождать несколько человек, говорить даже не буду. Воистину garbage in — garbage out


  1. Equin0x
    08.01.2016 00:51

    С другой стороны, можно будет легко подделать «почерк», вставив хорошо узнаваемый чужой кусок.