Деанонимизация программиста возможна не только через исходный код, но и через скомпилированный бинарный файл

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

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


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


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





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

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

    Подробнее
    Реклама
    Комментарии 45
    • +32
      Не все так плохо.

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

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

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

        И даже по поводу деанонимизации по исходному коду у меня один вопрос:
        Любой достаточно большой опен-сорс проект (достаточно — это когда один человек не в состоянии охватить весь проект полностью) имеет стайл-гайд, кучу контрибьюторов и, что более важно, несколько единиц или десятков мейнтейнеров. Можно ли как-то отличить мой код от кода некоего мейнтейнера Томаса, если учесть, что он, как и некий Бернард, был моим ревьювером? И всё это шлифовалось Томасом во время коммита в транк. Причем всё, начиная от именования и до типа применяемого цикла.
        • +5
          — Я не говнокодю, я обфусцирую
          Опенсорщиков вычислять мало толку, но вот для поимки вирусописателей может пригодиться.
          • 0
            Ога. Как же. Поймаете Вы вирусописателя по бинарю )))
            Уверяю Вас, разве что пионера сможете, да и то не факт. А уж опытного малварщика так сказать со стажем тут Вам ничего не светит ;)
            • 0
              Да и с пионерами тоже не особо. Пионер зачастую чужой код использует. Или даже разный код из разных источников.
            • 0
              для поимки — вряд ли. а вот отфильтровывать их новые произведения может быть
            • –2
              Обычно git blame/hg annotate/svn blame более чем достаточно ,)
              • +1
                Хех, gcc:trunk:r219682. Удачи вычислить изменения, сделанные неким Ilmir Usmanov. Ибо bulk-commit, конечно, зло, но без него разработка GCC сильно бы замедлилась.
              • +2
                Open_source кажется совсем другая история. Source ведь open и доступен, более того в серьезных проектах(да всех на github) сохраняется история issue, request, commit, revue, accept. Так что персональная ответственность за код вполне прозрачна
                • 0
                  Интересно, а не взламывают ли аккаунты на гитхаб, чтобы туда свой левый репозиторий подложить?
              • –2
                В целом, если есть возможность с узить круг поиска, то надо ее использовать. Именно для для этого такие методы и исследуют.
                Про суд очень слабый аргумент. Если сделаете какую нибудь бяку, то будут желающие вас найти из безо всяких судов.
                К тому же, ректальный криптоанализ еще никто не отменял. Вполнее могут появиться улики и для суда.
                • +1
                  Конечно надо, только у метода столько недостатков, что его практическое использование практически невозможно вообразить, что собственно и имелось в виду.
                  А искать конечно будут. Только без ордера у них будет на порядок меньше возможностей.
                  • 0
                    Для выдачи ордера достаточно обоснованных подозрений, что этот метод, типа, даёт (хотя я сильно сомневаюсь, что это на самом деле так). Подозреваю, они именно так собираются монетизировать свою «разработку» — подрабатывать экспертами в расследовании киберпреступлений.
                  • 0
                    Если есть возможность сузить круг, то нужно приложить все усилия к уничтожению этой возможности.
                    В противном случае нас ждёт международная охота на ведьм, контрибутящих в неудобные политикам опенсорс-проекты.
                • 0
                  Отчасти с вами не соглашусь.
                  Подобный алгоритм вполне может себя показать при комбинации с другими методами и пусть не найти нужного кодера на 100%, но существенно сузить область поиска.
                  По поводу доказательной базе в суде… На мой субъективный взгляд, найди власти %COUNTRY_NAME% с помощью подобной технологии настоящего создателя Bitcoin — ни про какой суд речи даже идти не будет. В конце концов закроют за цп или за связь с бенладеном
                  • +2
                    Зависит от %COUNTRY_NAME% :)
                    • 0
                      Или пришлют вестника крылатой демократии.
                    • 0
                      Теперь мне понятен стиль libstdc++: пишут как пишут, а потом прогоняют через что-то, что делает код таким, будто его писал робот — что бы не догадались, кто что писал :)
                      • 0
                        Забавно, если эта статья (прочитав соседнюю статью про взломы в кино) будет использоваться в будущем киношниками ))
                      • +35
                        > настоящие авторы таких разработок как Bitcoin, TrueCrypt и известных вредоносных программ.

                        Напомнило: «Можно сказать: „космонавты и педерасты“. Мы не сказали ничего плохого про космонавтов, но неприятный осадок остался». Переформулируйте, пожалуйста.
                        • +1
                          Вы правы, пожалуй :)
                          • +2
                            «А велосипедиста-то за что???» (с)
                          • +1
                            У метода есть очевидный недостаток: чтобы он работал, нужна большая база кода у которого авторы изестны и при этом в этой базе кодить все должны отдельно.
                            • +1
                              github? :)
                              • +1
                                гитхаб не подходит потому что там далеко не каждый пишет под своим именем как в паспорте. У меня там например штук десять аккаунтов с именами вроде 1h27sh (чуть ли не для каждого проекта свой аккаунт) и логика за этим стоит простая: даже если я такой неуловимый Джо который никому не нужен, не стоит складывать все яйца в одну корзину.
                                • +2
                                  А имейлы для регистрации берете из 10minutemail?
                                  • +1
                                    «Если вы параноик, то из этого ещё не следует, что за вами никто не следит!» (с)
                                    • 0
                                      Это был не сарказм. Мне действительно интересен способ генерации (почти) одноразовых имейлов, отличный от 10minutemail.
                                      • 0
                                        Собственный сервер на просторах интернета, на котором взведён sendmail, и правка aliases. Лично у меня так.
                                        • 0
                                          Хм, все, оказывается, просто. А домен один или несколько?
                                          • 0
                                            У меня один, но не вижу никаких причин, почему бы не завести несколько (кроме того, что лично мне одного вполне хватает, а дополнительные надо регистрировать и т.п.).
                                            • 0
                                              Ну вот по домену-то вас и отловят.
                                              • –1
                                                Ну, во-первых, при регистрации домена паспорт (пока) предьявлять не требуют, поэтому у Васисуалия Пупкина так много доменов; а во-вторых, ilmirus не уточнял, что его интересуют именно неотслеживаемые государством емейлы — я его вопрос понял так, что его интересует защита от спамеров уровня BugMeNot.
                                    • 0
                                      в гмейл регистрирую: десять секунд дел
                                    • +1
                                      для многих акк на гитхабе — это своего рода лицо программиста. его можно указать во всевозможных резюме и профайлах. для такого никто не регит левые акки. а между делом кодер может писать вирусы и ботнет админки, т.к. там очень хорошо платят.
                                      • 0
                                        Про это я не забываю и все мои акки выглядят как хеш от моего имени/фамилии + что то (условная «соль»). Если мне когда либо понадобиться показать пару проектов, я дам ссылки и скажу как получено имя аккаунта — для того, кто способен понять что я там накодил это будет очевиным доказательством того, что акк мой, но случайный человек его не найдёт.
                                        • +1
                                          я не про тебя конкретно говорю в данный момент. а про тенденцию в целом. а она такова, что огромное количество кодеров выкладывает свой код в гитхаб акк и прилепляет этот акк к своему резюме. это первое.
                                          второе — случайным людям не нужно искать. достаточно владельцам гитхаба дать специальным людям просканить все сорцы в репозиториях, а потом по нужным дать данные про почтовый ящик и про айпи, с которого осуществлен был доступ.
                                          • 0
                                            Не понял про просканить. Вот у нас есть условный тор/и2п/биткоин автора которого очень хочет найти тот у кого длинные руки: он берет код/бинарник и… дальше что? Ищет по этому коду похожий код в гитхабе? Так ведь машинное обучение работает наоброт: ему надо дать 100500 репозиториев одного автора и тогда нейросеть сможет с 60% вероятностью сказать является ли этот человек автором данного куска кода или нет.
                                  • +1
                                    Даже не так — нужна большая база кода, в которой разные программисты решали одну и ту же задачу, в противном случае их решение работать не будет
                                    Плюс тут еще много тонкостей — в GCJ почти у всех участников есть свои «шаблоны» решений, в которых для ответа на поставленную задачу чаще всего достаточно дописать только одну функцию. Отсюда и такое качество классификации, т.к. шаблоны чаще всего индивидуальны
                                  • 0
                                    Деанонимизация программиста возможна не только через исходный код, но и через скомпилированный бинарный файл
                                    Похоже, нас ждёт новый этап охоты на Сатоши Накамото. Запасаемся попкорном…
                                    • +1
                                      Google Code Jam? Вы серьёзно что ли?
                                      GCJ – соревнование по программированию для алгоритмистов (в подавляющем большинстве случаев это призёры финала ACM ICPC), которые (внимание, сильно утрирую!) годами учатся писать по памяти пачку алгоритмов из книжки, а на соревновании (всё на нервах и с нехваткой времени) придумывают, как эти алгоритмы модифицировать, чтобы решить конкретные задачи. Программисты участвуют в аналогичных соревнованиях много лет подряд, поэтому у каждого есть своя библиотечка шаблонов. Этот код не предназначен для работы на продакшне, под нагрузкой в 100K RPS и какой-либо поддержки в дальнейшем. Утверждать про какую-либо связь GCJ с реальной разработкой open source-кода промышленного качества может утверждать разве что большой шутник.
                                      • 0
                                        >> GCJ – соревнование по программированию для алгоритмистов (в подавляющем большинстве случаев это призёры финала ACM ICPC)

                                        Не преувеличивайте, начальные этапы под силу любому практикующему программисту, знакомому с базовыми алгоритмами.
                                        Полуфинал-финал — другое дело, туда действительно попадают в основном только профессиональные спортсмены.
                                      • +1
                                        Мне кажется, что исследованы либо близкие к идеальным случаи, либо наборы кода относительно небольшого объема.
                                        Например, в проекте с >300к строк кода опытный программист, если он уважает коллег и заботится о своем коде, в разных модулях/подпрограммах/библиотеках может быть разный стиль кодирования, такой, который лучше всего подходит по контексту.
                                        Ну а проекты с >1кк исходников, которые могу сопровождать несколько человек, говорить даже не буду. Воистину garbage in — garbage out
                                        • 0
                                          С другой стороны, можно будет легко подделать «почерк», вставив хорошо узнаваемый чужой кусок.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Интересные публикации