Скоро жизнь антивирусных компаний может сильно усложниться. «Конец (простого) анализа зловредов :D», — написал в твиттере известный торговец эксплоитами the grugq, когда увидел анонс хакерской конференции SyScan со списком докладов. Конференция пройдёт в марте в Сингапуре.

Среди докладчиков упомянут Якоб Торри (Jacob Torrey), который намерен представить новую схему шифрования исходного кода программ под названием Hardened Anti-Reverse Engineering System (HARES).

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

«Это делает приложение полностью непрозрачным, — говорит Якоб Торри, который работает в нью-йоркской компании Assured Information Security в сфере информационной безопасности.

Если технология работает как заявлено, то её могут использовать разработчики ПО вроде Adobe или Autodesk в качестве DRM-подобного механизма. Ну и, конечно, авторы зловредов.

Если конкретнее, то для реализации описанного алгоритма используется десинхронизация буфера TLB (Split TLB) на процессорах Intel и AMD. Код программы разделяется на части в оперативной памяти, при этом часть с зашифрованными инструкциями каким-то образом расшифровывается ключом не из памяти, а из процессора. То есть для других программных приложений эти инструкции никак не могут быть доступны. Такой метод защищает даже от сложных методов с физической заморозкой оперативной памяти.

Не совсем понятно, как конкретно происходит дешифровка. Остаётся надеется, что на конференции 26-27 марта автор всё подробно разъяснит.



24 комментария

  1. 12.02.2015 at 17:17

  2. 12.02.2015 at 17:18

    Как будто раньше крипторов не было. Я на ассеблере криптор писал в 2004-м. новинка запоздала =)

    • 12.02.2015 at 18:35

      все новое — хорошо забытое старое ))

    • 12.02.2015 at 21:12

      А можно ссылку на хакерскую конференцию, где ты её показывал, а там посмотрели и сказали: «Да! Это правда работает, а не фейк.»? А то в комментах-то многие могут писать.

    • 13.02.2015 at 08:11

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

    • 24.02.2015 at 10:10

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

  3. 12.02.2015 at 22:07

    Причем здесь крипторы как таковые? Речь о новом принципе в работе зашиты приложения.

  4. 12.02.2015 at 23:19

    >Не совсем понятно, как конкретно происходит дешифровка

    Наоборот всё понятно. Я думал на досуге об этом.
    1 каждый процессор имеет в своём составе физически неклонируемую функцию (PUF), её обозреваемый снаружи (с помощью специальной инструкции) шифротекст (в процессоре зашито 2 публичных ключа letni, на выход даётся аутентифицированный (подписанный) шифротекст) может получить любая программа. Сама PUF используется для вывода ключа для расшифровки программы вместе с секретным ключом, который тоже зашит в процесор, и хранится в базе letni. Используется CTR-режим, ключ для каждого блока выводится из адреса в памяти секретного ключа, которым является PUF.

    Возможно, тут где-то есть уязвимость к атаке по сторонним каналом, так как от кода зависит, что будет делать процессор, что скажется на памяти, на регистрах, которые должны быть видны, иначе ОС не сможет переключать контекст, на энергопотреблении. Посмотрим, что тот чувак скажет.

    2 копирасты пишут программу и договариваются с letni о деньгах и посылают им бинарник или исходники
    3 при продаже лицензии копирасты просят от пользователя шифротекст puf, через апи посылают запрос letni, letni им возвращает зашифрованный бинарник.
    4 копирасты пересылают бинарник пользователю.

    Преимущества схемы для фашисто-копирастов:
    1 исходник зашифрован, расшифровывается только внутри процессора, в памяти — мусор.
    2 ключ можно получить, только уничтожив процессор (и он будет бесполезен), надавив на интел или применив атаку по сторонним каналам
    3 Интел может мониторить, какие платные программы кто покупал
    4 можно запретить продажу некоторых или всех платных программ определённым лицам, организациям и государствам. Для этого нужно просто перестать шифровать для них программы. Конечно, копирасты могут сделать версию без дрм, но тогда она может утечь, и весь контракт с letni псу под хвост.
    Можно перманентно прекратить продажу, уничтожив ключи в базе letni.

  5. 13.02.2015 at 09:46

    На самом деле, нечто подобное давным-давно применял протектор Armadillo. Страницам памяти с кодом выставлялся атрибут PAGE_NOACCESS, поэтому при обращении к таким страницам возникала ошибка Page Fault, которая обрабатывалась криптором. Страница, к которой произошло обращение, расшифровывалась, другая, ранее расшифрованная, зашифровывалась снова. Конечно, можно лишь догадываться, насколько улучшен алгоритм, но непробиваемым он никак не выглядит.

  6. 13.02.2015 at 10:09

    Круто круто круто
    Люблю внимательных исследователей. Вообще считаю что на сегодня кучу багов ещё буду находить не в самом коде какой-либо программы, а все больше уязвимостях будут находить в фундаментальных технологиях. Будущие хакинга ещё грядёт.

  7. 13.02.2015 at 10:30

    Вот только вчера об этом думал, всё гениалное посто.

    • 13.02.2015 at 11:03

      «всё гениалное посто» — Вы имели в виду «genial posto»? Не все здесь понимают по-португальски, Большая Шишка. 🙂

  8. 13.02.2015 at 11:33

    > используется десинхронизации буфера
    Журнал оккупировали цыгане!

  9. 13.02.2015 at 12:46

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

    Может я ошибаюсь, но чует мое сердце. ждем подробностей доклада.

    • 13.02.2015 at 13:53

      Вот-вот, мне вспомнился трюк, описанный давным-давно в Infected Voice с отключением промахов кэша, неужели реинкарнация? 🙂

  10. 14.02.2015 at 07:33

    Антивирусы фтопку

  11. 16.02.2015 at 01:22

    Не понимаю в чем проблема… АВП видет, что программа зашифрована, загружает её в свою виртуалку и запускает на этом же процессоре. Анализирует команды и действия программы. Да, конечно это займёт чуть больше времени, но даже если пользователь скачает и сразу запустит зловред, скажем через 5 секунд, АВП срабатывает, вырубает все процессы и очищает диск. Эти пять секунд никакого приемущества зловреду не дают…

  12. 10.03.2015 at 07:57

    Новый виток проприетарного ПО

  13. 13.04.2015 at 15:40

    вы чё как дети ведётесь на сказки и магию, процессор ведь откуда-то берёт начальные вводные, с них оперирую идёт дальше накачивая регистры для дешифра, так же и вы в той же последовательности способны на листочке тетради всё исследовать.. неужели НЕРЕАЛЬНО пронаблюдать за кодом?? Или тут обсуждается квантовый компьютер с его непонятной инопланетной технологией квант-байтстелс-4D-вируса))) вот лол так лол читать подобное, неужели в ЦПУ зашиты все ключи дешифра?) Ну так а если он их берёт откуда-то о и никто не мешает так же и вам от туда их взять! Несмотря на процессор.. или я по своему не прав?

  14. 01.05.2015 at 04:15

    Недавно «думал» о написании своего подобного инструмента. Все идеи упираются в проблему первого ключа — он должен быть известен как минимум процессору и исполняемым приложению => известен всем. Поэтому всегда без эмуляции можно разреверсить криптованную программу.

    А теперь интересный вопрос: почему не существует до сих пор крипто-интерпретаторов?
    Т.е условно.:
    1) Пусть у нас есть некоторый исполняемый бинарь X
    2) Берем бинарь и разделяем на некотоыре куски(например блоки без переходов ) X = X_1 & X_2 & … X_N
    3) Изменяем каждый такой блок по динамически генерируемому правилу(при кажом шифровании одного и того же бинаря правила должны различаться) и запоминаем все правила
    4) Генерируем из всех правил интерпретатор измененного бинаря
    Если в качестве дополнительных аргументов при шифровании блока использовать любые данные, известны на момент до старта шифрования, но неизвестны после — то полная расшифровка равносильна полной эмуляции. Осталось научиться генерировать подобный интерпретатор программно.

    Где я ошибаюсь, почему идея неверная? Стоит пробовать или уже кто-то сделал подобное?

Оставить мнение