Угроза внедрения вредоносного кода в bios способы защиты
Возможность заражения BIOS существует довольно-таки давно. Одна из лучших, на мой взгляд, статей на эту тему размещена в журнале Phrack, а на ресурсе pinczakko расположено много полезной информации. В данный момент прослеживается очевидная тенденция, которую я бы обозначил как «возвращение к истокам». Заражение MBR, перехваты указателей в различных системных таблицах операционной системы, заражение системных компонентов — все это уже было, и очень давно.
Как и в случае с MBR заражение BIOS позволяет вредоносному коду инициализироваться очень рано, сразу после включения компьютера. С этого момента появляется возможность контролировать все этапы загрузки компьютера и операционной системы. Очевидно, что такой метод загрузки привлекателен для вирусописателей, однако очевидны и трудности, с которыми они сталкиваются. Прежде всего — это неунифицированный формат BIOS: создателю вредоносной программы необходимо поддержать BIOS от каждого производителя и разобраться с алгоритмом прошивки в ROM.
В этой статье я рассмотрю реально существующую вредоносную программу, в которой объединили сразу две технологии заражения — BIOS и MBR; разберу ее установку , защиту от детектирования, но обойду моменты, связанные с проникновением в систему и коммерческой выгодой. В данный момент угроза заражения BIOS существует лишь для владельцев материнских плат с BIOS от компании AWARD.
Установка
Троянец распространяется в виде исполняемого модуля, который содержит в себе все необходимые для работы компоненты. Он детектируется нашими продуктами как «Rootkit.Win32.Mybios.a».
- драйвер для работы с BIOS — bios.sys (устройство DeviceBios);
- драйвер для сокрытия заражения — my.sys (устройство Devicehide);
- компонент BIOS — hook.rom;
- библиотека управления драйвером bios.sys — flash.dll;
- утилита от производителя для работы с образом BIOS — cbrom.exe;
Первым делом дроппер производит нехитрую расшифровку и инициирует процесс инсталляции. Из ресурсов на жесткий диск сбрасывается и запускается драйвер bios.sys, который в дальнейшем используется для получения необходимой информации о BIOS. Подробно о его функционале — ниже.
Следующим на диск сбрасывается драйвер my.sys, прямо в корень системного диска.
Дальнейший алгоритм можно разделить на 2 части.
Если используется AWARD BIOS, то выполняется следующий алгоритм:
- чтение BIOS из памяти, поиск SMI_PORT и определение размера BIOS;
- создание образа BIOS на диске (c:bios.bin);
- в случае отсутствия модуля hook.rom в сохраненном на диске образе BIOS производится добавление его к этому образу;
- прошивка «зараженного» образа с диска в ROM;
Если используется BIOS, отличный от AWARD, то дроппер производит заражение MBR. Данный механизм позволяет руткиту работать на любых системах, вне зависимости от производителя BIOS.
BIOS.SYS и CBROM.EXE
Драйвер bios.sys используется инсталлятором руткита и содержит в себе всего три функции.
Рисунок 1. Dispatch-процедура драйвера bios.sys
Первая функция, которую я назвал FindSMIPORTAndBIOSSize, используется дроппером в том числе и для того, чтобы определить тип BIOS в системе.
Для определения типа BIOS используется поиск «магической» сигнатуры в памяти.
Рисунок 2. «Магическая» сигнатура в BIOS
В случае совпадения сигнатуры функция продолжает свою работу и пытается найти SMI_PORT и определить размер BIOS. Во всех иных случаях функция возвращает ошибку, и дроппер произведет обыкновенное заражение MBR.
В случае если проверка показала, что это BIOS AWARD, и при наличии найденных переменных SMI_PORT и BIOSSize, вызывается функция MakeBIOSBackup, которая сохраняет образ BIOS на диске в файле c:bios.bin.
В сохраненном на диске образе дроппер проверяет наличие своего модуля и в случае его отсутствия добавляет ISA ROM в образ BIOS. Для этого используется утилита cbrom.exe (cbrom c:bios.bin /isa hook.rom). Утилита cbrom.exe хранится также в ресурсах инсталлятора и сбрасывается на диск.
Рисунок 3. BIOS до заражения
Рисунок 4. BIOS после заражения
Обратите внимание на 11-й модуль в списке. Это добавленный вредоносный ISA ROM под именем hook.rom.
Следующим вызовом функции FlashROM зараженный образ прошивается в ROM и будет вызываться при каждом включении компьютера.
MY.SYS
Для сокрытия факта заражения используется довольно простенький руткит-драйвер my.sys. Он перехватывает функции IRP_MJ_READ, IRP_MJ_WRITE и IRP_MJ_DEVICE_CONTROL у драйвера, обслуживающего устройство DeviceHarddisk0DR0. Не самый низкий уровень по сравнению с тем же TDL4. О том, когда и как стартует данный драйвер, будет понятно чуть позже.
Рисунок 5. Перехваченные функции драйвера disk.sys
Останавливаться подробно на перехватах не имеет смысла, так как они довольно тривиальны. В случае чтения подменяется CompletionRoutine, и при попытке чтения охраняемых секторов возвращается пустой буфер.
Рисунок 6. Первый сектор физического диска
Перехват IRP_MJ_WRITE не позволяет записывать данные в охраняемые секторы.
Перехват IRP_MJ_DEVICE_CONTROL контролирует вызовы IOCTL_DISK_GET_DRIVE_LAYOUT_EX, IOCTL_STORAGE_GET_MEDIA_TYPES_EX, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX и возвращает ошибку.
BIOS и MBR
Стартуя из BIOS, вредоносная программа может контролировать любые этапы инициализации компьютера и операционной системы. Что ж, самое время взглянуть на то, что было реализовано вирусописателями.
Модуль, который добавляется в BIOS, отличается от зараженного MBR и последующих секторов всего лишь одной функцией, которая вместе с дополнительной информацией умещается в один сектор (512 байт). ISA ROM занимает 0x1E00 байт, а MBR + доп. секторы 0x1C00 байт.
Рисунок 7. Начало ISA ROM
Рисунок 8. Вызов единственной функции Main в ISA ROM
Единственная задача данной функции — удостовериться, что в MBR находится зараженная копия и восстановить заражение в случае ее отсутствия. Так как зараженная загрузочная запись и сопутствующие секторы находятся в самом модуле ISA ROM, то в случае обнаружения несоответствия можно «перезаразить» MBR прямо из BIOS. Это сильно повышает шансы на то, что компьютер останется зараженным, даже в случае излечения MBR.
Рисунок 9. Функция Main, проверяющая и перезаражающая MBR
Наличие заражения определяется поиском «магической» константы по фиксированному смещению в MBR. Константа «int1» должна присутствовать в зараженном секторе.
Рисунок 10. «Магическая» константа в MBR
Если функция CheckMBRInfected не обнаружит заражения в главной загрузочной записи, то следующим действием будет заражение MBR и 13 следующих за ним секторов.
На этом работа добавленного в BIOS модуля ISA ROM заканчивается.
Основная работа ложится на код, который будет исполняться из MBR.
Как и во всех предыдущих случаях заражения MBR, что мы рассматривали, алгоритм примерно один и тот же — считать секторы, следующие за главной загрузочной записью, и передать управление считанному коду, который и проделает всю основную работу.
Оригинальный MBR сохраняется троянцем при заражении в седьмом секторе диска и используется для получения таблицы разделов (ну и передачи ему управления, как только основная работа будет закончена).
В составе кода, который исполняется на данном этапе, присутствует простенький разборщик форматов файловых систем NTFS и FAT32. Основной целью является поиск секторов на диске, которые соответствуют системным файлам winlogon.exe или wininit.exe — системным компонентам, которые отвечают за вход пользователя в систему.
Рисунок 11. Поиск winlogon.exe или wininit.exe
Если такие секторы найдены, исполняемый файл winlogon.exe или wininit.exe заражается (т.е. используется технология файловых вирусов) прямой записью в секторы диска, на которых он расположен. Шаблон для заражения находится в восьмом секторе диска.
Рисунок 12. Точка входа winlogon.exe до заражения
Рисунок 13. Точка входа winlogon.exe после заражения
Этот код довольно маленький, поэтому он выполняет всего две задачи:
- загрузить из сети определенный файл по ссылке и запустить его;
- запустить руткит-драйвер (тот самый my.sys, расположенный на диске C:), который будет защищать зараженные секторы диска.
Конфуз вышел?
- Flash Aword BIOS form diks c bios.bin success.
- SMI_AutoErase Aword Bios Failed.
- ExAllocatePool read file NonPagedPool failed.
- Backup Aword BIOS to disk c bios.bin success.
- MmMapIoSpace physics address:0x%x failed.
- This is not a Aword BIOS!
Заключение
Вирусописатели нередко соединяют в одной программе разные методы заражения компьютера вредоносным ПО и закрепления его в операционной системе. Одновременно они занимаются поиском новых мест для автозагрузки вредоносных программ. Сейчас создатели вредоносных программ большей частью используют идеи, известные ранее (иногда лишь в виде концепта) и отчасти уже забытые, и реализуют их в конечном продукте. И изъятые из небытия 16-битные технологии — яркий тому пример.
Вероятно, следует ожидать появления подобных руткитов в будущем и для BIOS других производителей.
Методы защиты информации на уровне BIOS: идеология и подходы
О необходимости комплексного подхода к обеспечению должного уровня ИБ, соответствующего современным угрозам, а также о необходимости создания вычислительных систем, в которых средства защиты и контроля информации начинают работать уже на уровне BIOS, редакции журнала “Информационная безопасность / Information Security" рассказал Ренат Юсупов, старший вице-президент компании Kraftway.
Архитектурные особенности х86 систем связаны с поэтапной инициализацией системы: процессор – материнская плата – ОС. Доверенной можно назвать только такую вычислительную систему, в которой контролируется каждый этап работы, каждая функция внутри этапа, а также процесс передачи управления между ними. Большинство используемых средств защиты запускаются только на этапе работы ОС, что не позволяет избавить систему от вредоносных программ, стартующих на более ранних фазах, и в частности в процессе работы BIOS – первого программного кода, исполняемого после старта процессора.
– Какую вычислительную систему можно назвать доверенной и способна ли современная архитектура РС и серверов выполнять на аппаратном уровне задачи по обработке конфиденциальной информации?
– Подавляющее большинство используемых вычислительных систем построено на материнских платах импортного производства и нельзя исключить наличия в их BIOS недекларированных возможностей, так называемых back door, позволяющих обойти любые средства защиты, установленные на данном устройстве. Их выявление в настоящее время практически невозможно.
Если поставщик компьютерного оборудования не способен реализовать непрерывную цепочку доверия (проектирование самой платформы, производство ключевых компонентов и сборка, прошивка всех устройств, установка ПО и приложений, разворачивание у заказчика), то получившаяся IТ-инфраструктура не может быть доверенной. Необязательно (хотя и желательно), чтобы все элементы цепочки были "из одного флакона". Но в любом случае все фазы процесса должны быть контролируемыми, в том числе и переходы с этапа на этап.
– Насколько важен вопрос защиты системного BIOS? Способны ли встроенные в BIOS или интегрированные с ним приложения безопасности обеспечить наиболее эффективную модель превентивной защиты вычислительной системы от проникновения изображения?
– Системный BIOS является потенциально привлекательной целью для атак. Вредоносный код, работающий на уровне BIOS, может получить огромные преимущества по контролю над компьютерной системой. Он может использоваться для компрометации любых компонентов, которые загружаются позднее в процессе загрузки, включая системные функции, загрузчик, гипервизор, ОС, приложения безопасности. BIOS хранится в энергонезависимой памяти, которая сохраняется и после цикла включения/выключения. Вредоносный код, записанный в BIOS, может использоваться для повторного заражения компьютеров даже после установки новых ОС или замены жестких дисков.
Самые опасные вредоносные программы, обнаруженные в последнее время, называемые еще кибероружием: Duqu, Stuxnet, Flame, Gauss, Rakshasa, тем или иным способом связаны с процессами, исполняемыми в фазе BIOS. А наиболее сложные из них используют гипервизоры, запускаемые в фазе исполнения BIOS (Blue Pill, SubVirt, Vitriol).
Поскольку системный BIOS выполняется на компьютере очень рано в процессе загрузки с очень высоким уровнем привилегий, то вредоносный код, работающий на уровне BIOS, бывает очень сложно детектировать. Так как BIOS загружается первым, то антивирусные продукты не имеют возможности его гарантированно проверить. С другой стороны, если на рынке уже существует достаточно большое количество доверенных сборок ОС, то доверенные сборки BIOS возможно производить только компаниям, самостоятельно разрабатывающим и производящим материнские платы. При этом, используя материнские платы зарубежных вендоров, производители ПК и серверов вынуждены использовать недоверенный микрокод BIOS, который по своему объему и сложности сопоставим с микрокодом ОС.
В современных вычислительных комплексах BIOS выполняет не только функции инициализации, но также становится защищенной средой для безопасного запуска и исполнения приложений безопасности, мониторинга и управления системой. При этом функции безопасности и управления гарантированно имеют более высокий приоритет перед любыми другими приложениями, поскольку они начинают работу еще до запуска ОС. Учитывая, что BIOS является замкнутой программной средой с возможностью блокировки несанкционированной модификации пользователем (или злоумышленником), интегрированные на уровне BIOS приложения безопасности и управления обладают иммунитетом к воздействию вредоносного кода. Таким образом, встроенные в BIOS или интегрированные с ним приложения безопасности обеспечивают наиболее эффективную модель превентивной защиты вычислительной системы от проникновения и заражения.
– Каковы основные подходы к обеспечению защиты информационной инфраструктуры организации?
– Поскольку наиболее критические уязвимости лежат на достаточно низком уровне (микропроцессоры, архитектурные уязвимости, низкоуровневый код инициализации систем, скрытые виртуальные машины и т.д.), на котором их практически невозможно обнаружить штатными методами, средства защиты должны иметь принципиально другую основу. К таким основополагающим принципам безопасности можно отнести следующие: превентивность (не исправлять проблемы, а предотвращать их появление), непрерывность (отсутствие лазеек для проникновения), интеграция средств защиты информации еще на уровне проектирования железа и ПО, адаптивность (способность противостоять новым угрозам), приоритет средств защиты. При выполнении этих принципов защита становится не лоскутной, а системной, что позволяет эффективно бороться с внутренними и внешними угрозами.
Одной из основных задач вредоносного кода является обеспечение раннего старта, который позволяет внести необходимые изменения в код операционной системы и системных драйверов — например, установить перехваты — раньше момента инициализации компонентов антивирусного продукта. В результате вредоносные программы и антивирусные продукты играют в кошки-мышки, поскольку находятся на одном уровне: операционная система, системные драйверы и руткиты работают в режиме ядра.
В настоящее время буткиты являются самой продвинутой технологией злоумышленников, позволяющей стартовать вредоносному коду до загрузки операционной системы. И технология эта используется во множестве зловредов.
В прошлом мы неоднократно писали о буткитах (например, о XPAJ и TDSS (TDL4)). В последней по времени публикации с упоминанием буткитов описаны сценарии таргетированных атак с использованием данной технологии в операции «Маска». Однако такие публикации появляются не часто, и у многих специалистов может создаться впечатление, что буткиты, как и файловые вирусы, «умерли», что «доверенная загрузка» сделала свое дело и угроза более не актуальна.
Тем не менее, буткиты существуют, востребованы на черном рынке и активно используются киберпреступниками, в том числе при проведении таргетированных атак.
Часть кода загрузчика вредоносной программы TDSS в MBR
Статистика
Для начала обратимся к статистике KSN. Ниже приведен рейтинг программ, детектируемых нами как Rootkit.Boot.*, в период c 19.05.2013 по 19.05.2014.
Большинство буткитов детектируются проактивно на основе поведенческой технологии еще на этапе своей установки в систему. Или же детектирование происходит при первой автоматической проверке системы антивирусом после ее старта, что приведет к запуску лечения активного заражения. Отметим, что выше приведена статистика детектирования только инфицированной загрузочной области. Кроме того, в эту статистику входят данные, полученные с ранее инфицированных машин, на которые уже после заражения был установлен наш антивирус.
Как видно в таблице выше, производные TDSS – Pihar и SST — входят в TOP 5 детектируемых бутктов. Буткит Harbinger, «прикрывающий» рекламные программы, оказался на 3-м месте по популярности, на 4-м месте Sinowal. Наконец, первое место с заметным отрывом занимает Rootkit.Boot.Cidox. Эта вредоносная программа сыграла особую роль в распространении буткитов, и поэтому на ее истории хотелось бы остановиться подробнее.
Cidox: доступные коды
Cidox предлагается в качестве дополнения к другим вредоносным программам и используется для их защиты. То есть буткит не используется для построения собственного ботнета а-ля TDSS.
Первые версии данной программы появились в антивирусных базах продуктов «Лаборатории Касперского» три года назад — 28.06.2011. Тогда Cidox стал прорывом в области вредоносных технологий, ибо эта программа была первой, способной заражать не MBR, а VBR.
Cidox использовался в том числе для защиты банковского троянца Carberp, а после публикации исходных кодов Carberp «утекли» и исходные коды буткита. В результате Cidox повторил историю знаменитого троянца ZeuS (Zbot). Только после «утечки» исходных кодов ZeuS стало намного проще воровать деньги в системах онлайн-банкинга, а после публикации исходных кодов Cidox любой мало-мальски опытный программист может попробовать свои силы в написании вредоносных программ, работающих на самом низком уровне до загрузки ОС.
Часть исходного кода вредоносной программы Cidox
В настоящее время Cidox используется для загрузки и защиты большого количества разнообразных зловредов, включая мошеннические программы, блокеры и программы для кражи денег в системах онлайн-банкинга.
Таргетированные атаки
Упомянутая выше операция «Маска» — не единственный случай использования буткитов в таргетированных атаках. В свое время мы писали о компании HackingTeam, программные продукты которой (в том числе буткиты) используются при проведении полицейских операций в разных странах мира. Компания FinFisher оказывает аналогичные услуги, а в состав программ, которые она разрабатывает, также входит буткит — Rootkit.Boot.Finfish, который занял последнее место в нашем рейтинге.
Список продуктов и услуг с официального сайта FinFisher
Анализ продуктов FinFisher был представлен в докладе «Лаборатории Касперского» на конференции Virus Bulletin. Презентацию можно посмотреть на сайте VB.
BIOS. В поиске новых стартовых точек
Непрекращающаяся борьба антивирусов и вредоносного кода приводит и тех, и других к очередному эволюционному витку развития. Вирусописателям необходимо искать новые стартовые точки, одной из которых становится BIOS. Однако дальше тестовых исследований дело почти не продвинулось, так как массовая модификация BIOS слишком уж «неудобная операция» для вирусописателей, требующая от них значительных усилий и потому применимая лишь в узкоспециализированных атаках.
Куда приводят мечты
В настоящее время классическая система BIOS является реликтом и несет в себе большое количество неудобств и ограничений. Вследствие этого логичным стало появление совершенно нового унифицированного модульного интерфейса – UEFI, разработанного консорциумом UEFI Forum с подачи компании Intel.
Что предлагает UEFI:
- Поддержку современного оборудования.
- Модульную архитектуру.
- Архитектуру и драйверы независимые от типа процессора (x86, x86-64, ARM/ARMv8) – EFI Byte Code.
- Различные расширения для UEFI, загружаемые с различных носителей, в том числе с портативных устройств.
- Разработку с использованием высокоуровневого языка программирования (диалект языка программирования C).
- Защищенную загрузку (Secure Boot). .
Поддержка UEFI операционными системами:
- Linux с использованием elilo или с использованием специальной версии загрузчика GRUB.
- FreeBSD.
- Apple Mac OS X для Intel-совместимых систем (v10.4 и v10.5 – частичная поддержка, v10.8 – полная).
- Microsoft Windows начиная с Windows Server 2008 и Windows Vista SP1 x86-64. Microsoft Windows 8 получила поддержку в том числе 32х-битного UEFI, а также защищенную загрузку.
Что мы имеем в сухом остатке? Простой, понятный, документированный, унифицированный и удобный способ разработки без использования 16-ти битного ассемблера.
С точки зрения антивирусного решения UEFI – это чрезвычайно удобное место для внедрения чего-то вроде диска восстановления (rescue disk). Во-первых, отработает этот код еще до старта операционной системы и загрузчика, во-вторых, в UEFI присутствует удобный доступ к диску, а также более-менее удобный доступ к сети, в-третьих, в наличии возможность создать простой и понятный графический интерфейс. В случае борьбы со сложными и активно сопротивляющимися угрозами, такими, например, как буткиты – то, что нужно.
С точки зрения разработчика вредоносного кода все вышеперечисленное также является преимуществом и для буткита, обеспечивающим более надежную защиту вредоносных программ. По крайней мере до тех пор, пока разработчики прошивок не озаботятся реализацией правильной защиты.
Но прежде чем переходить к защитному функционалу, хотелось бы остановиться на одном важном моменте. Производители оборудования самостоятельно реализуют собственные прошивки и самостоятельно принимают решение о поддержке опциональных особенностей, предоставляемых UEFI. Такими особенностями являются, прежде всего, защита записи в SPI Flash с прошивкой и защищенная загрузка. В случае с UEFI наблюдается классическая проблема «удобство vs безопасность».
Угрозы и защитные механизмы
Неудивителен тот факт, что в связи с повсеместным внедрением UEFI, на него обратили внимание независимые исследователи, как на потенциальный вектор атак (раз, два, три). Список различных точек внедрения достаточно обширен и включает в себя компрометацию (внедрение, подмену или заражение) загрузчиков ОС и EFI, компрометацию UEFI драйверов, прямой доступ к SPI Flash прямо из операционной системы и многое другое. В случае работы в режиме UEFI+Legacy (CSM) продолжают работать и старые методы инфицирования системы, использующиеся разработчиками буткитов. Вполне очевидным является также и то, что в случае компрометации предзагрузочной среды сходят на нет все защитные механизмы Windows: Patch Guard, проверка подписей драйверов, да и любые другие.
В спецификацию UEFI 2.2 был добавлен протокол защищенной загрузки, который должен обеспечивать безопасную предзагрузочную среду и осуществлять защиту от запуска неправомерного вредоносного кода из потенциально уязвимых точек.
Протокол защищенной загрузки определяет процесс проверки загружаемых модулей, таких как драйверы, загрузчик ОС и приложения. Данные модули должны быть подписаны специальным ключом, а цифровая подпись проверена перед загрузкой. Ключи, используемые для проверки модулей, необходимо хранить в специальном защищенном от проникновения месте (базе данных), например, в TPM. Добавление или изменение ключей происходит с помощью других ключей, которые обеспечивают безопасный способ модификации самой базы.
Таким образом, оптимальным способом видится реализация следующих механизмов защиты со стороны производителей прошивок и операционных систем:
- Защита SPI Flash от вредоносной модификации. Отключение возможности обновления прошивки из операционной системы.
- Блокировка доступа к критичным секциям UEFI, в том числе к большинству переменных среды.
- Полный отказ от CSM.
- Защита системного тома, содержащего драйверы, загрузчик и приложения UEFI от вредоносной модификации.
- Реализация и включение Secure Boot (а также механизма Trusted Boot ОС Windows) со стороны операционных систем и производителей прошивок.
- Защита хранилища ключей от модификации.
- Защита, например, от спуфинг-атак механизма обновления базы данных, содержащей ключи.
- Защита от атак типа «Evil Maid» при непосредственном доступе к компьютеру.
- Использование экспертизы ведущих антивирусных компаний, а также внедрение антивирусных технологий непосредственно в прошивку.
Но стоит учитывать, что с реализацией более продвинутых алгоритмов защиты будут придуманы и более продвинутые методы атаки на UEFI. На текущий момент предлагаются способы, основанные на подмене UEFI загрузчика операционной системы Windows 8. Вредоносный загрузчик ОС во время своей инициализации подгружает в память подмененный загрузчик, отключает защитные механизмы Patch Guard и проверку подписи драйверов, тем или иным способом, устанавливает необходимые перехваты, и передает управление оригинальному коду загрузчика.
В случае с Mac OS, использующей шифрование всего диска, применяется оригинальный подход, который заключается в том, чтобы реализовать простой UEFI кейлоггер для получения секретной фразы, вводимой с клавиатуры пользователем, с помощью которой расшифровывается диск на стадии загрузки. В остальном способ, основанный на подмене или заражении системного загрузчика отработает и в этом случае.
Заключение
Буткиты прошли путь от разработки Proof-of-Concept к массовому распространению и сейчас фактически стали Open Source разработкой. Старт вредоносного кода из главной загрузочной записи (MBR) или из загрузочного кода активного раздела (VBR) позволяет контролировать все этапы загрузки ОС, и у вирусописателей такой тип заражений стал нормой. А для его реализации используются отработанные, изученные технологии, к тому же доступные на различных ресурсах в виде исходных кодов. В дальнейшем это может привести к существенному увеличению поделок на основе этих технологий лишь с небольшими изменениями в логике работы. Мы ждём новых модификаций уже известных злоумышленникам TDSS и Cridex, а также опасаемся их появления на других направлениях атак злоумышленников, например, в системах, где работают технологии Default Deny.
Важно, что современные антивирусные технологии, реализованные в наших продуктах, вполне успешно справляются с такими заражениями. Сейчас сложно предсказать какие конкретно методы маскировки, блокировки или противодействия антивирусным продуктам будут изобретены киберпреступниками в ближайшее время, поэтому внедрение антивирусных технологий непосредственно в прошивку в совокупности с вышеперечисленными механизмами защиты позволит прежде всего, безболезненно справляться с руткитами и буткитами до того, как вредоносный код получит управление. Кроме того, использование антивирусного модуля в UEFI позволит упростить процесс излечения и разработку новых методик обнаружения вновь появляющихся буткитов с новыми передовыми способами маскировки, а так же руткитов, которые нарушают работу системы или антивирусной программы.
P.S. Авторы выражают особую благодарность Василию Бердникову за помощь в подготовке материала.
Когда-то давно, в начале 2014 года, я назвал состояние безопасности большинства реализаций UEFI "полумифическим". С тех пор минуло полтора года, дело осторожно двигается с мертвой точки, но до сих пор очень многие производители ПК для конечного пользователя не обращают на эту самую безопасность почти никакого внимания — «пипл хавает».
В этой статье речь пойдет о модели угроз и векторах атаки на UEFI, а также о защитах от перезаписи содержимого микросхемы BIOS — самой разрушительной по возможным последствиям атаки.
Если вам интересно, как устроена защита UEFI и какие именно уязвимости в ней так и остаются неисправленными на большинстве современных систем — добро пожаловать под кат.
Часть нулевая. Введение
Модель угроз
Прежде чем говорить о защите и уязвимостях, поговорим немного о модели угроз.
Ни одна защита не может защитить от всего сразу. К примеру, защиту прошивки от поражающего действия ядерного взрыва или от сбоев при работе в открытом космосе, я в этой статье рассматривать не буду, хотя с удовольствием почитал бы подобную статью от специалистов в соответствующей области.
Уровни доступа
Определим для атакующего несколько уровней доступа и посмотрим, что и насколько успешно «среднестатистическая» реализация UEFI может противопоставить ему:
— атакующий первого уровня имеет физический доступ к системе, способен загружать любые ОС, изменять настройки UEFI, прошивать свой код UEFI вместо оригинального на программаторе, переставлять джамперы на мат. плате, замыкать выводы микросхем и т.п.
— атакующий второго уровня имеет физический доступ к системе, но программатора у него нет.
— атакующий третьего уровня имеет удаленный доступ к системе в режиме администратора.
Остальные случаи рассматривать не будем, т.к. от более могущественного атакующего, способного менять сидящие на шарах чипы, в UEFI защищаться практически нечем, а более слабых, без прав администратора, остановит ОС.
Векторы атаки
Теперь определим основные векторы и последствия успешно совершенной атаки, в порядке уменьшения опасности:
1. Хранилище основной прошивки (в 95% современных систем — 1-2 микросхемы NOR-flash с интерфейсом SPI )
Суть атаки — вставляем свой код в прошивку, удаляем части имеющегося, воруем, убиваем, молчим про гусей.
Последствия атаки варьируются от получения полного контроля над прошивкой, аппаратурой и ОС в лучшем случае, до DoS в худшем. Физический атакующий может устроить DoS в любом случае (с размаху отверткой в плату — вот тебе и DoS), поэтому подробнее на DoS для атакующих первого и второго уровней останавливаться не буду.
2. Код в SMM
Суть — получаем доступ к особо привилегированному режиму процессора, из которого нам доступна на чтение и запись вся физическая память и много другого вкусного.
Последствия — в лучшем случае доступ к хранилищу прошивки, и далее смотри пункт 1, в худшем — обход механизмов защиты ОС и гипервизора (которые, впрочем, можно было обойти и на уровне ОС, но из SMM это может быть намного проще).
3. Хранилище прошивки PCI-устройств
Суть — вставляем свой код в прошивку какого-либо PCI-устройства (она же Option ROM), к примеру, сетевой карты или контролера Thunderbolt, UEFI выполняет этот код при инициализации устройства, . профит.
Последствия — в лучшем случае смотри пункт 1, в худшем — почти то же самое, только стартуем значительно позже, и потому некоторые вещи уже настроены и заблокированы.
4. Переменные в NVRAM
Суть — получаем возможность изменять настройки UEFI, в том числе скрытые.
Последствия — в лучшем случае можно поотключать все защиты и сразу перейти к пункту 1, в худшем — снова DoS (пишем мусор в NVRAM, перезагружаемся, смотрим, что получилось).
5. SecureBoot
Суть — получаем возможность загрузить любую нужную ОС, в том числе UEFI Shell.
Последствия — в лучшем случае получается загрузить UEFI Shell и сразу оказаться в пункте 4, в худшем — заменить стандартный загрузчик ОС на модифицированный, закрепившись таким образом в ОС, пока бдительный пользователь не включит SecureBoot обратно.
Часть первая. Защиты от записи в хранилище основной прошивки
1. Аппаратная верификация прошивки или её части перед выполнением любого кода
2. Хранилище только для чтения с аппаратным переключателем
3. PR -регистры чипсета
Если аппаратно микросхему SPI защитить от записи не получилось, можно защитить ее силами чипсета. Все современные чипсеты имеют как минимум 4 регистра PR, предназначенных для защиты от чтения и/или записи блока физической памяти, а т.к. микросхема SPI всегда отображается на «дно» первых 4 Гб физической памяти (т.е. последний байт микросхемы SPI всегда находится по физическому адресу 0xFFFFFFFF), но можно защитить всю прошивку или ее часть.
Защита подобного рода тоже не обходится без проблем:
— ее нужно правильно реализовать, не забыв, что при перезагрузке значения регистров тоже сбрасываются, и их нужно восстанавливать.
— нужно не забыть установить (и восстановить после перезагрузки) lock на их конфигурацию, иначе вредоносный код их может банально сбросить.
— защита не может быть отключена, т.е. обновление прошивки из ОС без перезагрузки становится невозможным.
— и, конечно, NVRAM и другие RW-области защитить таким способом не получится.
В отличие от предыдущего пункта, систем с PR'ами на рынке море, и почти на всех защита реализована неграмотно или неполно.
4.1. SMM_BWP и SpiRomProtect
4.2. Intel BIOS Guard, в девичестве PFAT
5. BLE и BIOS_WE
6. Отсутствующая
Хрестоматийный пример «пирожка без никто». Некоторые производители материнских плат для десктопов, не будем показывать пальцем, до сих пор не защищают прошивку от перезаписи вообще. Ваша система — вы и заморачивайтесь, никакой иллюзии безопасности мы вам не даем, только голый BIOS, только хардкор. Вести себя таким образом с каждым днем становится труднее, ведь с одной стороны давит Intel с рекомендациями, а с другой — Microsoft с HSTI , но пока справляются. Безумству храбрых, и все такое.
Заключение
С защитами от прошивки более или менее разобрались, в следующей части поговорим об SMM и атаках на него.
Буду рад любым вопросам и комментариям. Спасибо за внимание.
Национальный институт США по стандартам и технологиям (NIST) обратил внимание на безопасность системы BIOS, с целью защитить её от заражения вирусами, такими как Mebromi и Niwa!mem. Тема довольно специфическая: к настоящему времени существует несколько таких вредоносных программ, в методиках внедрения зловредов в BIOS разбираются считанные специалисты антивирусных компаний. Тем неожиданнее выглядит подобная инициатива со стороны государственной американской организации. Вероятно, эта проблема их сильно тревожит в свете угрозы тотального заражения BIOS на компьютерах, собранных в Китае.
Так или иначе, но NIST предложил новые правила безопасности для BIOS на серверах (черновик стандарта, pdf). Ранее они уже выпустили аналогичный стандарт для защиты BIOS на настольных компьютерах (pdf).
Новый документ представляет собой руководство для производителей серверного оборудования и серверных администраторов с описанием методик, которые помогут избежать попадания вредоносного кода в BIOS.
NIST называет четыре ключевые функции безопасности BIOS:
— Аутентификация при апдейте BIOS с использованием цифровых подписей для проверки аутентичности новой прошивки.
— Опциональный безопасный механизм локального апдейта, которые требует обязательного физического присутствия администратора возле машины для обновления BIOS без цифровой подписи.
— Защита цельности прошивки для предотвращения её изменения способом, который не соответствует двум вышеперечисленным.
— Функции защиты, которые гарантируют, что не существует механизма для процессора или другого системного компонента, чтобы обойти защиту BIOS.
По мнению экспертов NIST, неавторизованная модификация BIOS вредоносными программами представляет собой серьёзную угрозу, поскольку BIOS занимает привилегированное положение в системе и позволяет зловреду сохранить работоспособность даже после переустановки операционной системы.
Специальный сертификат будет размещать в UEFI, при этом UEFI будет осуществлять проверку загрузчика до его запуска. Если какая-либо вредоносная программа сделает подмену загрузчика, UEFI не даст запустить систему.
Читайте также: