Цифровые подписи в исполняемых файлах и обход этой защиты во вредоносных программах / Хабрахабр. Хабрапривет! Ну вроде как удалось решить вопросы с кармой, но они ником образом не касаются сегодняшней темы, а лишь объясняют некоторое опоздание её выхода на свет (исходные планы были на ноябрь прошлого года). Сегодня я предлагаю Вашему вниманию небольшой обзор по системе электронных подписей исполняемых файлов и способам обхода и фальсификации этой системы. Также будет рассмотрен в деталях один из весьма действенных способов обхода. Несмотря на то, что описываемой инфе уже несколько месяцев, знают о ней не все. Использование подписанных драйверов. Подписанные файлы драйвера (включая INF-файлы) нельзя изменять. При внесении любых изменений в любой файл драйвера действие цифровой подписи драйвера прекращается. Если файл содержит некорректную цифровую подпись, то это. Ошибка может выглядеть следующим образом: «INF стороннего производителя, не содержит информации о подписи», либо код ошибки 0xe000022f. Компания Microsoft предлагает, чтобы все драйвера имели цифровую подпись. Производители описываемых ниже продуктов были уведомлены об описываемом материале, так что решение этой проблемы, если они вообще считают это проблемой, на их ответственности. Потому как времени было предостаточно. ТЕОРИЯИдея и технология электронной подписи для исполняемых файлов возникла ещё в эпоху Windows NT. C момента появления Windows Vista компания Microsoft начала активную компанию по продвижению этой технологии. По задумке производителя, подписанный код может идти только от доверенного автора этого кода, а следовательно гарантированно не наносит вреда системе и защищён от ошибок (три ха- ха). Тем не менее, поскольку в механизме подписи чаще всего используется довольно сложный криптоустойчивый механизм, общее доверие к подписанному коду распространилось. Не ушли от этого и антивирусные вендоры. Верно: если код подписан, то он явно не может быть вирусом, а потому ему можно доверять априори, тем самым снизив вероятность ложных срабатываний. Поэтому в большинстве современных антивирусных продуктов по умолчанию стоит обход проверки подписанных файлов, что повышает скорость сканирования и снижает вероятность ложных срабатываний. Более того, зачастую подписанные программы автоматически заносятся в категорию «доверенных» поведенческих анализаторов ака хипсов. Становится ясно, что подписав свои творения валидной подписью, вирусмейкер получает довольно богатую аудиторию клиентов, у которых даже с активным и регулярно обновляемым антивирусом произойдёт заражение. Очевидно, что это — весьма лакомый кусочек, что легко заметно на примере уже ставшего знаменитым вируса Stuxnet, где код был подписан валидными сертификатами Realtek (позже сообщалось и о подписях от JMicron). Но у этого подхода есть и оборотная сторона: после выявления скомпрометированной подписи она немедленно отзывается, а по самому факту подписи АВ- вендоры ставят сигнатурный детект, понятно, что с 1. Учитывая то, что приобрести украденный сертификат, необходимый для подписывания крайне дорого, ясно, что вирусмейкеры заинтересованы в тотальном обходе механизма проверки подписи, без валидных private- ключей или с помощью самостоятельной генерации таких ключей. Это позволит обходить защиту не только антивирусных продуктов, но и устанавливать драйвера и Active. X- компоненты без предупреждений, да и вообще как- то пробиться в мир х. Но об этом — подробнее на практике. ПРАКТИКАКто- то из великих сказал, что чтобы опередить врага, надо начать мыслить как он. Итак, если мы вирусмейкеры, то что мы можем сделать? Скопировать информацию о сертификате с какого- нибудь чистого файла. Это наиболее популярный способ на данный момент. Копируется информация подписи до мельчайших подробностей, вплоть до цепочки доверенных издателей. Понятно, что такая копия валидна только на взгляд пользователя. Однако то, что отображает ОС вполне может сбить с толку неискушённого и быть воспринято как очередной глюк — ещё бы, если все издатели правильные, то почему это подпись невалидна? Увы и ах — таких большинство. Использовать самоподписанные сертификаты с фэйковым именем. Аналогично выше описанному варианту за исключением того, что даже не копируется цепочка в пути сертификации. Наличие цифровой подписи гарантирует (в какой-то мере), что драйвер Генерируем cat файл драйвера на основе inf файла. Цифровая подпись пакета драйвера находится в файле каталога (файл с расширением.CAT). Убедитесь, что используемый для установки пакета драйвера INF-файл содержит ссылку на файл каталога. В дополнение к этому, для драйвера тестового устройства «Toaster». Наличие цифровой подписи гарантирует (в какой-то мере), что драйвер. Генерируем cat файл драйвера на основе inf файла. Ключевой компонент установочного пакета драйвера. Данные файлы содержат цифровые подписи каталогов и . INF-файл управляет процессом установки пакета драйвера. Цифровая подпись пакета драйвера находится в файле каталога (файл с . Поэтому где то есть цифровая подпись INF файла (в файле драйвера или например в CAT файле). Так как вы написали свой собственный INF то подпись больше не совпадает и драйвер в целом больше не подписан.Подделать MD5. Несмотря на то, что слабость алгоритма MD5 уже давно описана (тут и тут), он до сих пор часто используется в электронных подписях. Однако реальные примеры взлома MD5 касаются или очень маленьких файлов, или приводят к неправильной работе кода. На практике не встречаются вирусы с поддельными взломанными подписями на алгоритме MD5, но тем не менее такой способ возможен теоретически. Получить сертификат по обычной процедуре и использовать его в злонамеренных целях. Одна из наиболее распространённых методик авторов так называемых riskware, adware и фэйковых антивирусов. Примером может послужить фэйковый Perfect Defender (стандартный развод: «просканируйтесь бесплатно — у вас вирус — заплатите нам и мы его удалим») существует с подписями нескольких контор. Например Rapid. SSL для проверки использует просто e- mail. Если переписка ведётся из адресов типа admin, administrator, hostmaster, info, is, it, mis, postmaster, root, ssladmin,ssladministrator, sslwebmaster, sysadmin или webmaster@somedomain. А вот славная компания Digital River (DR), промышляющая аутсорсингом и электронной коммерцией, вообще предоставляет сертификаты всем своим клиентам. Немудрено, что MSNSpy. Monitor, Win. Fixer, Quick. Key. Logger, Error. Safe, ESurveiller, Spy. Buddy, Total. Spy, Spynomore, Spypal и вообще около 0,6% из всех подписанных DR файлов являются малварью, а потенциально нежелательными являются и того больше — более 5% всех подписанных DR файлов. Справедливости ради отмечу, что подписать х. Найти какого- нибудь работника доверенной компании и попросить его подписать Ваш код. Без комментариев. Вопрос только в сумме : )6. Украсть сертификат. На данный момент известно три больших семейства троянцев, «заточенных», в частности, под похищение сертификатов. Возможно, это козырь в рукаве? Заразить систему разработки доверенного разработчика и внедрять злонамеренный код в релизы до подписания. Яркий пример такого заражения — вирус- концепт Induc. Вирус внедряет код на этапе компиляции, заражая систему разработки. В итоге разработчик даже не знает, что в его программе появился невидимый «довесок». Релиз проходит подпись и выходит в свет с полноценным сертификатом. В нашем примере будет рассмотрен модифицированный вариант 1 и 2, описанные выше. Итак, что нам потребуется?— Make. Cert. exe— cert. 2spc. Думаю, что для хабрачитателя не составит труда найти эти компоненты, но для самых ленивых выкладываю первые три здесь. Последние два не выкладываю в виду жёсткой привязки к железу, полному отсутствию кроссплатформенности и специфичности кода : )Итак, создадим какой- либо сертификат доверенного издателя. Попробуем максимально скопировать информацию о том же Veri. Sign: Make. Cert. CN=. Цепочку можно продолжать долго, задуривая наивного пользователя. Но итог будет один: сертификат не будет валидным, потому как в цепочке есть один недоверенный элемент. НО! В Windows имеется возможность установки любого сертификата, в том числе и самоподписанного, в качестве доверенного. Это удобно: в ряде случаев разработчик может сделать себе самоподписанный сертификат, ввести его в доверенные и спокойно работать со своими приложениям. В нашем случае это удобно вдвойне, потому как такой внос — очевидно, простое внесение информации в реестр. Отследим, где произошло изменение — и voila! Мы можем сделать дамп соответствующей ветки реестра, после чего засунуть её в инсталлер. В итого, наш инсталлер вносит в реестр инфу, автоматически превращая сертификат первичного издателя в доверенный и валидируя всю цепочку. Чтобы окончательно не открывать все карты, скажу только, что в моём случае дамп реестра имел вид. Windows Registry Editor Version 5. Ну а подписать наш код с помощью полученного сертификата вообще просто, достаточно батника: cert. Не знаю, что сейчас, но вроде как некоторые ветки заблокировали. Понятно, что подписи он не ломает, но даёт куда более гибкие возможности для заполнения полей X5. Вот тут возможно скачать любопытный пример. В архиве — файл популярной замены Блокноту bred. Аналогично, файл key - . Отследите путь сертификации — он любопытен : )Сразу обращаю внимание на то, что автор «примера» прописал собственный таймстамп- сервер, так что любые манипуляции приведут к тому, что автор узнает Ваш IP — и дальше, как описывалось. Если хотите, то можете отследить эти обращения и отписаться в комментах ; )Если потребуется, в следующей статье я расскажу, как настроить хипс для защиты соответсвующих веток реестра во избежание описанного внесения сертификатов в доверенные. Отписывайтесь в комментах — возможно, что эту уязвимость уже пофиксили. В статье использован материал презентации Jarno Niemela (F- Secure).
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2016
Categories |