В этом посте я хочу рассказать о системе IEEE Software Taggant, которую разработала рабочая группа IEEE по вредоносным программам в сотрудничестве с ведущими компаниями по информационной безопасности.
В планы команды разработчиков Guardant давно входило добавить поддержку IEEE Software Taggant в протектор Guardant Armor, и вот наконец мы это сделали. Краткий обзор системы и практические выводы перед вами.
Почему паникует антивирус?
Не найдётся такого пользователя, который бы не сталкивался с проблемой ложного срабатывания антивируса. Реакция рядового человека чаще всего сводится к удалению «подозрительного» файла, который зачастую бывает не только не вредным, а наоборот полезным и подчас ценным. В свою очередь программисты, зная о таких шутках, могут впасть в раздражение близкое к стрессу. Ни то, ни другое не способствует эффективной работе.
Часто такие срабатывания происходят на защищенных различными протекторами файлах. Всё дело в том, что современные протекторы интенсивно используют обфускацию кода. Под обфускацией я имею в виду технологии мутации и виртуализации кода, а также их комбинацию. Обфускация используется с целью затруднения анализа исходного кода для определённого ряда методов и инструментов. Именно обфусцированные участки кода и приводят в панику эвристический анализатор антивируса.
Несколько лет назад между антивирусными компаниями и протекторами развязалась настоящая битва. Проигрывая, антивирусы решили запретить все упаковщики, которые не используются в коммерческом и широко распространенном программном обеспечении. Тогда под запрет попали даже несколько известных упаковщиков. Со временем ситуация нормализовалась, но полного решения проблемы нет до сих пор.
Постоянное развитие технологий обфускации кода, замена оригинального кода на псевдокод, исполняемый в процессе работы защищенного приложения, серьезно усложнили анализ и повлияли на производительность при сканировании защищённых файлов антивирусом. Широкое разнообразие протекторов, используемых в законных, так и в злонамеренных целях, создает проблемы для антивирусной индустрии. Серьезной угрозой безопасности является использование авторами вредоносного кода (трояны, вирусы и т.д.) протекторов для скрытия своего кода от обнаружения. Такая техника стала применяться и на стороне сервера (серверный полиморфизм), в результате выявлять и противодействовать угрозам вредоносного кода стало намного сложнее. Антивирусы не способны определить, что на самом деле находится внутри защищенного файла и вынуждены искать баланс между надежностью и полным отсутствием ложных срабатываний на безвредные программы.
Контроль за распространением защищенных файлов
Эвристический анализ был придуман антивирусными компаниями для выявления новых угроз и отчасти необходим им самим для сбора подозрительных файлов. Вероятность ложных срабатываний в нашем случае гораздо больше, поэтому антивирусы ведут «белые» списки сигнатур для коммерческих пакеров. Это отчасти помогает улучшить ситуацию, но всё равно оставляет возможность антивирусам чувствовать себя «безнаказанно». Словно «боги», играющие в кости, они способны выдать безвредный файл за вирус. Чтобы оправдать свое существование, антивирусы вынуждены усложнять анализ и придумывать дополнительные схемы контроля. Для протекторов они решили реализовать систему полного контроля за распространением защищенных файлов. Система позволяет блокировать только файлы от неблагонадежных издателей защищенного ПО и проявлять лояльность к файлам из проверенных источников.
Антивирусы интенсивно используют цифровые подписи для проверки подлинности файла. Подтвержденные известными организациями, цифровые подписи обеспечивают надежный способ отслеживания источника файла. Такие организации вряд ли станут подписывать вредоносный код своим сертификатом. Но не всегда цифровой подписи оказывается достаточно. Известны случаи заражения, когда файл содержал достоверную цифровую подпись, т.к. вирус внедрялся на стадии компиляции программы. Вместе с тем ответственность за применение цифровой подписи лежит на пользователе протектора, а к издателю сертификата требуется высокий уровень доверия.
В 2010 году рабочая группа IEEE по вредоносным программам начала обсуждать, как разрабатывать систему – теперь называемую IEEE Software Taggant, чтобы помочь идентифицировать конкретного пользователя протектора. Термин «taggant» позаимствован из системы, используемой для взрывчатых веществ, в которую добавляется химический маркер, прослеживающийся до, или даже после, взрыва. IEEE Software Taggant System внедряет криптографический маркер в выходной исполняемый файл, созданный любой установкой протектора. Это позволяет провести идентификацию уникальной лицензии протектора, которая была использована при защите файла.
Появлению системы IEEE Software Taggant предшествовала практика использования «водяных знаков». «Водяные знаки» содержат зашифрованную информацию о лицензии. Наиболее ответственные разработчики протекторов включают два набора «водяных знаков» в исполняемый файл. Один для идентификации протектора, второй для однозначной идентификации лицензии. Тем не менее, единого стандарта использования «водяных знаков» нет, и каждый разработчик протектора свободен в своих действиях.
По словам самих разработчиков системы, введение нового термина «taggant» носит неоднозначный характер. C одной стороны это позволяет отказаться от использования терминов «водяной знак» и сертификат, с другой, система IEEE Software Taggant включает в себя характеристики обоих этих инструментов, хотя при этом очень сильно отличается по своему охвату и исполнению.
Инфраструктура
IEEE Software Taggant эффективна только в случае ее использования одновременно и протектором и антивирусом. Система использует инфраструктуру открытых ключей (PKI), при этом корневой и доверенные центры контролирует IEEE. Если вы являетесь вендором протектора, то вам необходимо зарегистрироваться в IEEE для генерации лицензий Software Taggant. Лицензия должна быть прозрачна для пользователей протектора и интегрироваться в установщик перед продажей.
Перед выпуском нового протектора вендорам рекомендуется защитить репрезентативную выборку из 10-20 файлов с различными параметрами защиты и выложить её на общее обозрение. Антивирусы, в свою очередь, должны убедиться в отсутствии ложных срабатываний эвристического анализатора. Репутация файла с маркером Software Taggant должна быть выше, чем у файла без него.
При обнаружении защищенной вредоносной программы с маркером Software Taggant, лицензия, с помощью которой была защищена вредоносная программа, становится кандидатом на внесение в черный список. Сообщество рекомендует антивирусам оперативно обмениваться информацией для составления полного списка заблокированных лицензий.
Криптографический маркер
Чем же Software Taggant отличается от обычной цифровой подписи Authenticode в системе Microsoft Windows?
Система IEEE Software Taggant допускает вычисление хеш-сумм для небольших критических участков программы, чтобы минимизировать время проверки целостности программного обеспечения (Authenticode всегда охватывает весь файл, поэтому время проверки зависит от размера файла). Это важно для антивирусов, так как позволяет им работать в режиме быстрой проверки. Ещё одна интересная вещь — это то, что при наличии интернет-соединения добавляется доверенная временная метка создания маркера (согласно RFC 3161), которая позволяет антивирусам выборочно дополнять черный список (блокировать ПО только после известного момента компрометации).
Согласно документации, Taggant может быть добавлен не только к файлам PE-формата. В списке форматов присутствуют ELF и JavaScript. Возможно добавить Taggant и к любому неструктурированному формату.
Для PE-формата прослеживается аналогия с цифровой подписью Windows. Структура Taggant записывается в конец PE-файла как оверлей (overlay). Если в файле присутствует оригинальный оверлей, то структура записывается после него. Для вычисления хеш-суммы используется алгоритм SHA2-256. Самый простой способ добавить Taggant к PE-файлу — это воспользоваться утилитой с привычным названием SignTool.
Пример:
>SignTool.exe SimpleTest-x86.exe license.pem
SignTool Application (adds Taggant v2 to files)
SPV Taggant Library version 2
License file is valid, expiration date is Sat Apr 03 23:59:59 2027
File hashes computed successfully
Put timestamp
Timestamp successfully placed
Prepare the taggant
Taggant successfully created
Taggant is written to file
Цифровая подпись Microsoft не конфликтует с Taggant, т.к. добавляется после Taggant структуры и накрывает весь файл, включая Taggant.
Преимущества
Система IEEE Software Taggant разрабатывалась как специализированное и универсальное решение для антивирусов и протекторов, что безусловно является неоспоримым преимуществом перед другими методами проверки подлинности файлов. Антивирусы получают:
- возможность идентифицировать конкретную лицензию, используемую для генерации вредоносного ПО. Это позволяет вносить в черный список отдельные лицензии, не блокируя при этом весь протектор.
- возможность быстро идентифицировать версию и лицензию упаковщика, которые используются в четко определенном безопасном режиме, без необходимости распаковки файлов. Это должно повысить производительность при сканировании файлов.
- возможность идентифицировать измененные версии файлов. Такие файлы могут быть внесены в черный список.
- возможность отслеживать историю лицензии для повышения репутации конкретного пользователя протектора.
Все перечисленные возможности должны снизить риск ложных срабатываний и повысить производительность при сканировании защищенных файлов.
Тестирование
Мы надеялись на уменьшение ложноположительных срабатываний антивирусов, ведь система появилась достаточно давно. Но увы, чуда не произошло. Для начала смотрим на результаты VirusTotal:
Чистый файл:
Защищенный файл без Taggant:
Защищенный файл c Taggant:
Защищенный файл с Taggant и подписью Microsoft:
Малоизвестные антивирусы никак не реагируют на наличие подписи Taggant, точнее реагируют, но наоборот. Для них по-прежнему важным аргументом является подпись Microsoft.
Расстроил нас и Kaspersky Endpoint Security. Он помещает данный файл в карантин независимо от наличия подписи Taggant и подписи Microsoft. Как и раньше, помогает только отключение эвристического анализатора. При этом проверка на VirusTotal антивирусом Kaspersky говорит, что файл чистый.
Заключение
Судя по всему не все антивирусы торопятся встраивать поддержку Taggant в свои движки. Бюрократия IEEE также вызывает опасения. Переписка с данной организацией заняла у нас огромное количество времени. Простому разработчику попасть в «белые» списки легальных распространителей ПО может оказаться сложнее, чем использовать механизм цифровой подписи Microsoft. Тем не менее Taggant является достойной альтернативой «водяных знаков», и мы надеемся, что система будет постепенно внедряться. А пока подпись Microsoft является более весомым аргументом для антивирусов.
Ссылки:
- ICSG: Industry Connections Security Group
- IEEE Anti-Malware Support Service (AMSS)
- GitHub: IEEE_Taggant_System
- Standards and Policies on Packer Use
Автор: mikhazloy