Администратор ИБ
0,2
рейтинг
5 января в 08:21

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

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

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


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


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





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

Авторы уверены, что с помощью подобных методов когда-нибудь будут выявлены настоящие авторы таких разработок как Bitcoin, TrueCrypt, а также разработчики известных вредоносных программ.
Александр @Akr0n
карма
87,7
рейтинг 0,2
Администратор ИБ
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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
          Согласен!
    • 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
    С другой стороны, можно будет легко подделать «почерк», вставив хорошо узнаваемый чужой кусок.

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