BTC 96882.3$
ETH 3133.75$
Tether (USDT) 1$
Toncoin (TON) 5.55$
telegram vk Х
telegram vk Х
Russian English

Что такое обфускация?

Дата публикации: 30.12.2023
1537
Поделись с друзьями!
1

Введение

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

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

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

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

2

Как работает обфускация?

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

Читателем компьютерного кода может быть человек, вычислительное устройство или другая программа. Обфускация также используется для обмана антивирусных инструментов и других программ, которые в значительной степени полагаются на цифровые подписи для интерпретации кода. Декомпиляторы доступны для  Java, операционных систем Android и iOS, и платформ разработки NET. Они могут автоматически реконструировать исходный код; цель обфускации – затруднить декомпиляцию этих программ.

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

Эту запутанную версию практически невозможно проследить человеческим глазом.

3

Методы обфускации

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

Программы, написанные на компилируемых языках программного обеспечения C# и Java, легче запутать. Это связано с тем, что они создают инструкции промежуточного уровня, которые обычно легче читать. Напротив, C++ сложнее запутать, поскольку он компилируется в машинный код, с которым людям труднее работать.

Некоторые распространенные методы запутывания включают в себя следующее:

  • Переименование. Обфускатор изменяет методы и имена переменных. Новые  названия могут включать непечатаемые или невидимый персонажи.
  • Упаковка. Это сжимает всю программу, делая код нечитаемым.
  • Управление потоком. Декомпилированный код выглядит как спагетти-логика, которая является неструктурированной и трудно поддерживаемой кодом со скрытым ходом. Результаты этого кода неясны, и, глядя на него, трудно сказать, в чем смысл кода.
  • Преобразование шаблона инструкции. Этот подход использует общие инструкции, созданные компилятором, и заменяет их более сложными и менее распространенными инструкциями, которые фактически делают то же самое.
  • Вставка фиктивного кода. В программу можно добавить фиктивный код, чтобы затруднить ее чтение и реконструирование, но это не влияет на логику или результат программы.
  • Удаление метаданных или неиспользуемого кода. Неиспользуемый код и метаданные дают читателю дополнительную информацию о программе, подобно аннотациям в документе Word, которая может помочь ему прочитать и отладить ее. Удаление метаданных и неиспользуемого кода оставляет читателю меньше информации о программе и ее коде.
  • Непрозрачная вставка предиката. Предикат в коде — это логическое выражение, которое может быть истинным или ложным. Непрозрачные предикаты — это условные ветви (или операторы «если-то»), результаты которых нелегко определить с помощью статистического анализа. Вставка непрозрачного предиката вводит ненужный код, который никогда не выполняется, но озадачивает читателя, пытающегося понять декомпилированный вывод.
  • Антиотладка. Настоящие разработчики программного обеспечения и хакеры используют инструменты отладки для проверки кода построчно. С помощью этих инструментов инженеры-программисты могут обнаружить проблемы в коде, а хакеры могут использовать их для обратного проектирования кода. Специалисты по ИТ-безопасности могут использовать инструменты защиты от отладки, чтобы определить, когда хакер запускает программу отладки в рамках атаки. Хакеры могут запускать средства защиты от отладки, чтобы определить, когда используется средство отладки, и определить изменения, которые они вносят в код.
  • Защита от взлома. Эти инструменты обнаруживают подделанный код и, если он был изменен, останавливают программу.
  • Строковое шифрование. Этот метод использует шифрование, чтобы скрыть строки в исполняемом файле, и восстанавливает значения только тогда, когда они необходимы для запуска программы. Это затрудняет просмотр программы и поиск определенных строк.
  • Транспонирование кода. Это изменение порядка подпрограмм и ветвей в коде без видимого влияния на его поведение.
4

Как измерить успех обфускации

Успех методов запутывания можно измерить с помощью следующих критериев:

  • Сила. Степень, в которой преобразованный код сопротивляется попыткам автоматической деобфускации , определяет его надежность. Чем больше усилий, времени и ресурсов требуется, тем надежнее код.
  • Дифференциация. Степень, в которой преобразованный код отличается от оригинала, является еще одним показателем его эффективности. Некоторые из этих способов включают в себя:
  1. Количество предикатов, содержащихся в новом коде.
  2. Глубина дерева наследования (DIT) — показатель, используемый для обозначения сложности кода. Более высокий DIT означает более сложную программу.
  3. Расход. Экономически эффективный метод запутывания будет более полезным, чем дорогой, особенно когда речь идет о том, насколько хорошо он масштабируется для более крупных приложений.
  4. Сложность. Чем больше слоев добавляет обфускатор, тем сложнее будет программа, что делает обфускацию более успешной.
5

Преимущества и недостатки обфускации

Основные преимущества обфускации заключаются в следующем:

  • Секретность. Обфускация скрывает ценную информацию, содержащуюся в коде. Это преимущество для законных организаций, желающих защитить код от конкурентов и злоумышленников. И наоборот, злоумышленники извлекают выгоду из секретности обфускации, чтобы скрыть свой вредоносный код.
  • Эффективность. Некоторые методы запутывания, такие как удаление неиспользуемого кода, приводят к уменьшению размера программы и снижению ее ресурсоемкости при запуске.
  • Безопасность. Обфускация — это встроенный метод обеспечения безопасности, иногда называемый самозащитой приложения. Вместо использования внешнего метода безопасности он работает внутри того, что защищается. Он хорошо подходит для защиты приложений, которые работают в ненадежной среде и содержат конфиденциальную информацию.

Недостатки обфускации

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

Общие методы, которые используют авторы вредоносных программ, включают:

  • Эксклюзивное или (XOR). Операция, которая скрывает данные путем применения к коду значений XOR, чтобы только тренированный глаз мог их расшифровать.
  • РОТ-13. Инструкция, которая заменяет кодом случайные символы.

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

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

6

Обфускация и SolarWinds

Атака на SolarWinds, производителя программного обеспечения для управления и мониторинга ИТ в Остине, штат Техас, которая, как полагают, началась еще в сентябре 2019 года, привела к взлому множества других компаний и правительственных учреждений. Атака была обнаружена в декабре 2020 года и приписывается российским хакерам. Первоначально он скомпрометировал платформу управления ИТ Orion компании SolarWinds.

Злоумышленники использовали вредоносное ПО Sunburst, которое сочетало в себе запутывание, машинное обучение и методы искусственного интеллекта для установки бэкдора в обновлениях программного обеспечения для платформы Orion . Чтобы замаскировать свои усилия и обойти защиту, они изменяли журналы аудита, удаляли файлы и программы после использования и имитировали активность, чтобы они выглядели как законные приложения в сети.

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

1537
12
12
Поделись с друзьями!
Другие вопросы