С древнейших времен (хорошо, что все они были на нашей памяти) айтишники обожают сокращения — как в бытовом (все эти AFK, BTW, AFAIK), так и в профессиональном общении. Поэтому иногда при чтении профессиональной литературы по безопасности мозг даже прилично подготовленного хакера может встать в позу речного скорпиона. Чтобы этого не произошло, мы подготовили для тебя статью, в которой разобрали несколько самых распространенных аббревиатур и акронимов (наш литературный редактор говорит, что это разные вещи, придется загуглить разницу), означающих нечто, осложняющее жизнь честному хакеру или вирмейкеру.
UAC (User Account Control)
Что такое?
Начнем с самого легкого. Контроль пользовательских учеток, как все прекрасно помнят, был впервые введен в Висте и аналогичной серверной системе Windows Server 2008. Да, это было давно. UAC был добавлен для предотвращения атак, которые оказались возможны в Windows из-за неполноценности ее подсистемы передачи сообщений. Приложение, имеющее более низкие привилегии, могло отправить сообщение (с внедренным шелл-кодом) приложению, выполняющемуся с правами администратора, а оно уже запросто могло запустить приманку, так как имеет разрешения.
Такой порядок сохранился от старых операционных систем, основанных на MS-DOS. В них не было разделения между юзером и админом, и, хотя в Windows NT ситуация была исправлена, пользователи по старинке работали под учетной записью администратора. До поры до времени такое положение дел всех устраивало, но потом (после знаменитой публикации независимого эксперта по информационной безопасности Криса Паджета) стали появляться эксплойты, использующие уязвимость подрывной атаки. И когда проблема стала угрожающей, в новой на то время версии своей операционки Microsoft попыталась исправить ситуацию, внедрив UAC. Строго говоря, последний представляет собой только оболочку — пользовательский интерфейс, тогда как всю работу на самом деле выполняет механизм UIPI (User Interface Privilege Isolation). Посредством использования MIC (Mandatory Integrity Control, это ключевая фича безопасности, управляющая уровнями доступа процессов) UIPI запрещает процессу с низкими правами посылать сообщения процессу с высокими. В случае с UAC выбор между запретом или разрешением отдается на откуп пользователю. Но проблема в том, что многие юзеры, не вдаваясь в детали, разрешают выполнение приложения, которое стало причиной вопроса.
UAC поднимает тревогу не только при запуске недоверенного процесса, но также при выполнении многих других задач, в числе которых изменение настроек «родного» файрвола, добавление/удаление пользовательских учеток, установка драйверов, запуск дефрагментации диска и другие. По этой причине работа с системой стала медленнее, и появилось много негативных сообщений юзеров.
В результате UAC не стал панацеей от всех бед, но все же предотвратил часть атак и поставляется со всеми последующими версиями операционных систем от Microsoft.
Как отламывают?
Еще Марк Руссинович отметил, что UAC не стоит рассматривать как механизм безопасности, — если пользователь разрешит, то выполнится любой код, поэтому чаще всего UAC обходят спрятанные за красивой этикеткой зловреды. То есть юзер разрешает на выполнение какое-то безобидное на первый взгляд приложение, полученное из недостоверного источника, при этом вместе с приложением выполняется деструктивный код.
UAC — настройка выдачи уведомлений
DEP (Data Execution Prevention)
Что такое?
За аббревиатурой DEP скрывается фича безопасности современных операционных систем. Она разрешает приложению выполнять код только в области памяти, помеченной как исполняемая, то есть код, закинутый малварью в область данных — кучу или стек (которая помечена, как неисполняемая), работать не будет. Хотя существуют два способа предотвратить выполнение кода — программный и аппаратный, современные операционные системы стали поддерживать DEP только после того, как такая возможность появилась в процессорах. Страница виртуальной памяти, данные в которой не предназначены для выполнения, помечается битом NX (в терминологии AMD) и битом XD (по Intel). DEP предотвращает не только атаки, но и ошибки операционной системы, просто завершая приложение.
Если камень не поддерживает бит NX, тогда в бой вступает программная реализация DEP. Она существенно уступает аппаратной, так как защищает лишь отдельные системные файлы операционной системы, но при этом работает на любых процессорах.
Кроме настольных операционок, DEP также включен в Android начиная с версии 4.1 Jelly Bean.
Как отламывают?
Способы атаки на DEP подробно описаны Крисом Касперски в его книге «Искусство дизассемблирования». Хакер может ломать DEP как локально, так и удаленно. И хотя существует множество механизмов контроля кучи и стека, они плохо справляются со своими задачами: хакер по-прежнему может из-за отсутствия контроля границ локальных буферов затереть адрес возврата из функции для помещения сюда указателя на шелл-код или, воспользовавшись переполнением кучи, перезаписать любую модифицируемую ячейку в адресном пространстве уязвимого процесса.
KPP (Kernel Patch Protection)
Что такое?
Защита ядра от модификации появилась вместе с выходом 64-разрядной версии Windows в 2005 году (первый сервис-пак для Windows XP). Следовательно, в 32-битных версиях она отсутствует. Дальше — больше. В 64-битной семерке механизм защиты был улучшен для поддержки интерфейса ACPI современных процессоров, в том числе режимов выполнения и сна процессоров в многопроцессорной системе. Модификация ядра осуществляется путем внутренних системных вызовов и недокументированных возможностей для замены кода в критических структурах ядра Windows.
Модификация ядра направлена на следующие ядерные объекты: таблицу системных вызовов, глобальную таблицу дескрипторов, таблицу дескрипторов прерываний, образы ядра, HAL, NTFS, BOOTVID, TCPIP и другие, ядерные стеки, списки процессов, набор MSR, KdpStub и так далее.
Конкретно в Windows технология защиты ядра от модификации имеет название PatchGuard.
К примеру, без защиты ядра программист мог изменить указатель на функцию в таблице системных вызовов, которая, по сути, является массивом указателей на функции системных сервисов. Следовательно, когда происходит вызов ядра и оно обращается по указателю, который, по идее, должен указывать на ядерную функцию, ядро со всеми своими привилегиями обращается не пойми куда (и выполняет — подсунутый, возможно, зловредный код).
Модификация ядра используется не только зловредами, но и полезными приложениями. Например, антивирус может модифицировать ядро для нужд своей работы, чтобы ядерный вызов проходил через него. Однако теперь это запрещено, борцам с малварью приходится искать обходные пути. Тем не менее, даже когда это было разрешено, модификация ядра была крайней мерой и плохой идеей: одновременно нарушались три критических свойства операционной системы: надежность, производительность, безопасность. Надежность страдала по той простой причине, что внедрялся потусторонний код, который в принципе невозможно протестировать. Так как добавленный код вклинивался посреди ядерных вызовов, это не лучшим образом действовало на производительность. Модификация кода ядра однозначно приводила к неизвестным последствиям, в результате чего возрастала угроза атаки зловредами.
В современных версиях Windows, если попытаться пропатчить ядро, операционная система выведет синий экран и уйдет на перезагрузку, поскольку посчитает это критической неисправностью без возможности продолжить выполнение.
Как отламывают?
Между тем взломать KPP все равно можно, но в таком случае от хакера потребуется довольно высокая квалификация в области системного программирования и написания драйверов в частности. Чтобы сломать KPP, необходимо написать драйвер, который будет последовательно и выборочно использовать техники атаки, такие как, например, Firing a patchguard check (более подробно в докладе от Positive Technologies — www.ptsecurity.com/press/Windows_81_Kernel_Patch_Protection_Analysis.pdf), и, таким образом, полностью заблокирует механизмы Kernel Patch Protection. В случае успеха хакер сможет беспрепятственно модифицировать структуры и код ядра.
ASLR (Address space layout randomization)
Что такое?
Рандомизация адресного пространства используется в современных операционных системах для размещения критичных структур данных (таких как куча, стек, образы исполняемых файлов, библиотеки) случайным, независимым образом. Применение этой технологии во многом усложняет написание зловредов и эксплуатацию уязвимостей. Главным образом это происходит благодаря тому, что хакер, разрабатывая малварь, не может привязывать свой код к определенным адресам, где может находиться атакуемая структура данных, так как при следующей загрузке «изучаемой» системы все объекты сменят свое расположение в адресном пространстве. Наибольшее развитие ASLR получила в последних версиях операционки от Microsoft — Windows 8.0/8.1. ASLR служит последним рубежом, который может остановить малварь, обошедшую DEP.
Чтобы ASLR использовалась в определенном приложении, его надо скомпилировать с соответствующими параметрами.
Как отламывают?
На 32-битных машинах с рандомизацией адресного пространства вполне можно бороться: так как для добавления случайности доступно только порядка 16 бит, требуемый адрес можно подобрать брутфорсом. Отсюда следует возможность применения атаки возврата в библиотеку, когда через переполнение буфера адрес функции в стеке подменяется адресом другой функции в программе. На платформе x64 ситуация для взломщика усложняется.
Алгоритм рандомизации памяти
SEHOP (Structured Exception Handler Overwrite Protection)
Что такое?
Технология SEHOP (защита от перезаписи обработчика структурных исключений) в Windows призвана бороться с эксплойтами, реализующими атаку на обработчик структурных исключений (SEH).
SEH, в свою очередь, предоставляет структурную обработку исключений, которая позволяет прикладным приложениям получать управление при программных и аппаратных сбоях. Этими исключениями могут быть нарушение доступа к памяти, деление на ноль и другие запрещенные инструкции. Получив управление, приложение может само попытаться обработать исключение, не прибегая к услугам операционной системы. Отсюда следует, что SEH не только позволяет контролировать обработку ошибок, но и является отладочным средством. SEH реализуется путем использования ключевых слов __try, __finally, __except вместо аналогов C++, а также путем применения флага /SAFESEH во время компиляции.
Как отламывают?
Распространен следующий сценарий атаки с использованием SEH. Хакер, воспользовавшись, например, переполнением буфера, внедряет вредоносный код, а чтобы передать на него управление, перезаписывает указатели на SEH-обработчики. Они в подавляющем большинстве хранятся в SEH-фреймах, которые затираются также с помощью переполнения буфера. Подобные атаки имеют лаконичное название SEH overwrite.
SEHOP предназначена только для защиты 32-битных приложений, поскольку в 64-битном коде реализовать атаку с перезаписью структурного обработчика исключений не удастся. По умолчанию SEHOP включена только в серверных системах, так как в клиентских версиях Windows из-за SEHOP возможны несовместимости со старым программным обеспечением, которое о ней ничего не знает.
Атаки на SEHOP аналогичны атакам на ASLR, то есть производятся через переполнение буфера и перезапись адресов функций.
SEH
EMET (Enhanced Mitigation Experience Toolkit)
Что такое?
Набор EMET — это системная программа от Microsoft, позволяющая предотвратить эксплуатирование уязвимостей в программном обеспечении благодаря технологиям снижения рисков. Эти технологии не обеспечивают стопроцентной защиты, тем не менее они максимально усложняют задачи вирмейкерам. Хотя изредка возникают несовместимости между набором EMET и защищаемым программным обеспечением, в большинстве случаев с помощью EMET можно защитить любое ПО от любого производителя. Для своей работы EMET требует .NET Framework 4.0.
EMET может защищать всю систему в целом или определенные приложения. В качестве механизмов защиты он использует описанные выше технологии (DEP, ASLR, SEHOP). К примеру, EMET может защитить от следующих угроз: ROP — минуя DEP, исполняет на стеке подмешанный код, используя кодовые фичи; SEH overwriting (рассмотрен выше, повторяться не будем); Stack pivoting — перемещает регистр стека ESP в нужный зловреду адрес; heap spray — многочисленное выделение памяти для помещения туда кода малвари, в расчете, что будет выполнен хотя бы один из помещенных образов.
После установки EMET сразу начинает выполнять свои защитные функции в отношении Internet Explorer, Office, Java VM, Adobe Acrobat. В этот список можно и нужно включить дополнительные приложения, в первую очередь те, что могут быть использованы удаленно: различные приложения для обмена данными и сообщениями, браузеры и прочее.
Однако EMET не заменяет собой антивирусное ПО или HIPS и не служит панацеей от эксплойтов.
Как отламывают?
Так как EMET служит лишь конфигуратором для описанных выше защитных технологий, то и взламывать его не имеет смысла.
EMET
CSRSS
Что такое?
Client/Server Runtime Subsystem — модуль операционных систем Windows NT, поставляется начиная с Windows 2000. Так как многие компоненты подсистемы Win32 были вынесены в режим ядра, этот системный компонент представляет собой способ управления системной консолью из пользовательского режима, он работает как системный сервис пользовательского режима. По сути, это критический компонент операционной системы, принудительное завершение которого непременно приведет к краху оси.
WIM (Windows Integrity Mechanism)
Что такое?
Механизм целостности — это ключевой компонент в системе безопасности Windows. Он ограничивает возможности пользователя и/или приложения, основываясь на списке его прав. В Висте данный механизм был расширен — к нему был добавлен уровень целостности (Integrity Level). Уровень целостности представляет собой уровень достоверности выполняемого процесса и объектов, принадлежащих ему, например созданных им файлов или потоков.
Механизм целостности обеспечивает возможность менеджерам ресурсов, таким как файловые системы, использовать заранее определенные политики безопасности таким образом, что процессы с более низким уровнем целостности не могут ни читать, ни записывать, ни выполнять объекты, созданные процессом с более высоким уровнем целостности. Механизм целостности позволил операционной системе Windows повысить уровень безопасности, так как раньше (до его внедрения) невозможно было определить права с помощью списков контроля доступа настолько гибко (дело ограничивалось раздачей прав пользователям и группам).
Безопасность в среде Windows главным образом обеспечивается выдачей определенных прав юзерам на чтение, запись, выполнение (эти же права наследуются порождаемыми данным юзером объектами, например запускаемыми приложениями). Список прав для каждого пользователя хранится в структурах SID (Security Identifier), которые создаются вместе с учетными записями пользователей и прикрепляются к ним. В идентификаторе безопасности, в свою очередь, сохраняются все данные пользователя, начиная от его имени, группы принадлежности и заканчивая сетевым доменом и правами на управление системными объектами. Когда юзер обращается к определенному объекту, сведения этого объекта сравниваются со сведениями, хранящимися в идентификаторе безопасности данного пользователя. В современных версиях Windows, кроме прав, в игре участвует уровень целостности. Как я отметил выше, безопасность Windows была улучшена добавлением уровня целостности, значение которого хранится в списке контроля доступа — Access Control List (ACL). Последний сохраняется в токене доступа — Access Token. При попытке доступа к объекту, кроме сравнения прав доступа, монитор контроля безопасности (security reference monitor) сравнивает уровень целостности в дескрипторе безопасности и токене доступа, используя для этого функцию AccessCheck. В случае если пользователь обладает правами на запрашиваемое действие, а также если уровень доступа у него выше, чем у объекта, к которому запрашивается доступ, операционная система его удовлетворяет, иначе запрещает.
Как отламывают?
Windows Integrity Mechanism — это комплекс компонентов безопасности, поэтому и хакают его не «в целом», а по частям. Разделяй и властвуй!
AppContainer
Что такое?
Начиная с Windows 8, AppContainer представляет собой песочницу для выполнения приложений Магазина Windows. При разработке приложения программист указывает, какие средства операционной системы нужны его приложению, и после развертывания аппликации на устройстве пользователя программа будет ограничена только заданными правами на использование окружения. Кроме того, песочница ограничивает приложение на использование системных ресурсов, поэтому, если даже оно будет взломано, атакующий получит очень ограниченные возможности взаимодействия с атакованной системой. Он не сможет ни читать, ни записывать, ни выполнять вне каталога взломанного приложения. Кроме того, ограничения накладываются на взаимодействия процессов. А кто бы мог сомневаться, это же песочница! В общем, приложение Магазина Windows, выполняемое в AppContainer, — такая же песочница, как приложения мобильных операционных систем или вкладки браузера. То есть для выполнения каждой песочнице присваивается определенный уровень доверенности (Integrity Level, подробнее о нем см. предыдущий раздел).
Как отламывают?
По умолчанию AppContainer получает Low Integrity Level. Это означает, что он может выполнить довольно мало вещей. Тем не менее помочь коду выйти из песочницы AppContainer может классическое приложение, обладающее наивысшими правами. Если приложение Магазина Windows связать с классическим приложением, тогда для первого можно добиться повышения привилегий. Для этого классическому приложению надо создать глобальный именованный объект, от которого смогут наследоваться одно или несколько приложений Магазина Windows, имеющие более низкие уровни достоверности. Этим именованным объектом может быть, например, разделяемый между всеми процессами текущего юзера мьютекс.
Взаимодействие AppContainer с операционной системой
EFS (Encrypting File System)
Что такое?
Шифрующая файловая система поставляется как компонент операционной системы начиная с Windows 2000. Именно с последней была выпущена файловая система NTFS 3.0, где EFS — ее часть. Изначально EFS ничего не шифрует, однако способна защищать отдельные файлы, папки и дисковые тома. Все это предназначено для защиты информации от взломщиков (похитителей информации), имеющих физический доступ к компьютеру. В связи с распространением мощных мобильных платформ потребность в тотальном шифровании только увеличилась (Капитан Очевидность поясняет, что смартфону или планшету значительно проще, чем ПК или ноуту, попасть в чужие руки).
Хотя Windows предотвращает вход в систему неавторизированного пользователя, запрашивая пароль, взломщик, имея физический доступ к компу, тможет запросто изъять жесткий диск и, подключив его к другой системе, считать информацию. Шифрующая файловая система защищает информацию от таких посягательств. При этом для защиты информации используется пароль, и чем он надежнее, тем надежнее защита.
Как отламывают?
Здесь имеется два типа угроз. Первая угроза связана с тем, что оригинальный файл после шифрования сразу не удаляется. Атакующий может воспользоваться средствами для редактирования диска на физическом уровне и восстановить незашифрованную информацию. Вторая угроза заключается в том, что для каждого пользователя создается сертификат в момент первого использования шифратора; этот сертификат содержит как открытый, так и секретный ключи юзера. Кроме пользовательских сертификатов, в момент установки операционной системы создается сертификат агента восстановления, его открытый ключ также применяется для шифрования FEK и сохраняется в Data Recovery Field (DEF). По умолчанию агентом восстановления является администратор. Следовательно, чтобы расшифровать любые файлы любого пользователя, надо зайти в систему с учеткой админа.
CCMP
Что такое?
Протокол блочного шифрования с кодом аутентичности сообщений и режимом сцепления блоков и счетчика представляет собой часть стандарта 802.11i. Более того, он является протоколом шифрования для Web и WPA2. Для шифрования в нем используется алгоритм AES (Advanced Encryption Standard), который управляет целостностью ключей и сообщений с использованием 128-битного блока и такого же ключа по стандарту FIPS-197.
В основе CCMP лежит алгоритм шифрования CCM AES в отличие от устаревшего TKIP. CCM использует алгоритм CTR для обеспечения конфиденциальности, одновременно для проверки подлинности и целостности данных применяется алгоритм CBC-MAC.
Как отламывают?
Целых шесть лет он считался неломаемым, однако в 2010 году была опубликована информация об уязвимости Hole 196 в протоколе WPA2. Если хакеру удалось авторизоваться в сети, то он может использовать данную уязвимость, чтобы расшифровать данные других пользователей, при этом ни взлом ключей, ни брутфорс не используется.
Заключение
Любому из специалистов по защите информации приходится постоянно работать с документами по информационной безопасности, и, конечно же, в каждом из них встречаются различные аббревиатуры. Сегодня мы рассмотрели одиннадцать самых распространенных аббревиатур и выяснили, что за ними скрывается.
Впервые опубликовано в журнале Хакер #197.
Автор: Юрий «yurembo» Язев
Подпишись на «Хакер»
PavelMSTU
Можете пояснить, почему только для 32-битных приложений?