Simpleator («Simple-ator»)-это инновационный эмулятор приложений для пользовательского режима, ориентированного на Windows, который использует несколько новых функций, которые были добавлены в обновление Windows 10 Spring (1803), также называемое «Redstone 4», с дополнительными улучшениями, которые были сделаны в обновлении Windows 10 октября (1809), AKA «Redstone 5».
А именно, Simpleator полагается на:
Это предназначено как подтверждение концепции того, как могут быть построены более простые и более быстрые среды детонации в песочнице, а также еще больше контейнеров с ограниченными ресурсами, которые могут запускать без серверов рабочие нагрузки (AWS Lambdas / Azure), не требуя гостевой операционной системы.
Simpleator может быть построен из Visual Studio 2017 и последних Windows SDK (1809). Обратите внимание, что более старые SDK не могут быть использованы, так как они не поддерживают более новые определения WHVP, и что сам Simpleator поддерживает только 64-разрядные системы Windows 10, работающие на сборниках 17763 или выше (Redstone 5/1809).
Основное окно монитора, которое прослеживает системные вызовы, показанные здесь, отображая вывод консоли из тестового приложения гостя:
Окно регистра, которое можно использовать, когда есть утверждение/проблема с эмулятором (поток пользовательского интерфейса замерзает, отсюда и сообщение «не отвечать»):
И, наконец, если включить флаг FLG_SHOW_LDR_SNAPS в PEB, в окне отладки отображаются вызовы DbgPrint из загрузчика (в противном случае любые другие вызовы DBGPRINT будут отображаться независимо):
TBD TBD Добавить ссылки
Разработчики писали и использовали технологии эмуляции на протяжении десятилетий, так зачем писать еще один эмулятор?
Во-первых, введение фактического API виртуализации в сердце Windows является недооцененным драматическим (позитивным) сдвигом к предыдущему закрытому характеру гипер-V платформы. В то время как были недокументированные API и IOCTL через библиотеку устройства инфраструктуры виртуализации (VID), поддерживаемый и стабильный уровень Win32 является приветственным улучшением. В настоящее время QEMU поддерживает использование WHVP для его ускорения, и VirtualBox 6.0, вероятно, также будет поставляться с этой поддержкой (он уже реализован в репозитории). Только VMware стоит один и вызывающе. По этой теме научиться использовать этот новый API не обязательно простая тема, поэтому я хотел учиться - и поделиться с другими - как работают эти новые интерфейсы.
Во -вторых, при рассмотрении технологий эмуляции обычно есть три современные движущие силы для его использования:
Мой основной интерес состоял в том, чтобы взглянуть на третью пулю, которая до сих пор была достигнута с помощью полной эмуляции системы, с некоторыми пользовательскими реализациями, которые используют модели с чрезмерной подписью, но все еще приводят к большому количеству сложности, что является тем, что является большинством антивирусных эмуляторов, таких как тот, который реализован в Defender Windows (см. Некоторые отличные исследования [здесь] и [здесь]). Кроме того, исследователи, знакомые с Qilin, вероятно, уже видели множество простых привязков Python, которые легко опираются на него, чтобы быстро «развернуть» процесс Windows, используя модель с чрезмерной подписанием, используя QEMU в качестве полноценного эмулятора, но без основного изображения ОС.
Я решил заняться другим проспектом-своего рода внедрением «пользовательского режима Windows», в которой единственными двоичными файлами, нанесенные в гостевом адресном пространстве, будет загрузчик ОС хоста (ntdll.dll) и целевой двоичный бинар, и где будет предоставлено адресное пространство 256 ГБ, которое было бы на основе примечания. песочница). Пока эмулятор будет обеспечивать основные структуры данных, основанные на ядрах, для погрузчика и системных DLL, хост может работать на собственных скоростях, а только привилегированные кольцевые переходы вызывают выходы.
Затем, для простоты, поставщик системных вызовов перехватывает системные вызовы, которые производятся гостевой виртуальной машиной, и может работать одним из трех способов:
В зависимости от того, где потребности находятся между производительностью, сложностью, совместимостью и безопасностью, необходимы менее 500 строк кода для реализации достаточного количества пуль 1 и 2 выше, чтобы получить простое тестовое приложение для загрузки, отобразить сообщение «Hello World» и выход, с множеством потенциальных проблем безопасности при обработке его системных вызовов. Удвоение кодовой базы, вероятно, может реалистично смягчить большинство проблем безопасности в системных вызовах (за вычетом фактических уязвимостей в ядре ОС хоста, с которой песочница может смягчить).
Но даже в 1000 строк кода, поскольку все системные вызовы в конечном итоге направляются в операционную систему, Simpleator ведет себя скорее как реализация «SecComp» поверх CGROUP на Linux, а не гораздо более сложных эмуляторов, которые мы видим сегодня.
Наконец, стоит отметить, что в облачных вычислениях/контейнеризации возникает возобновление интереса, чтобы минимизировать ресурсы, необходимые для запуска рабочих нагрузок, таких как Amazon Lambdas или Functions Azure, которые представляют собой серверные фрагменты кода, которые работают в контейнерах, которые по -прежнему требуют вращения всей операционной системы госте. Благодаря более строгим контролю границ безопасности, которые обеспечивает Simpleator, можно представить возможность запустить ядро JVM или .NET в качестве специального приложения, не требуя полной гостевой ОС.
TBD TBD
Есть 3 основных интересных частях (для меня) о том, как Simpleator достигает уникальной среды выполнения гостей, которая значительно упрощает запуск приложений Windows:
Создание PEB и TEB с тем же видом данных, что и функции MiCreatePebOrTeb , но с конкретными флагами, чтобы облегчить работу в гостевой среде, включая
Создание картирования 1: 1 между адресами гостя и хоста и использованием новых функций «требований к адресу» для блокировки ассигнования на этот диапазон. Обратите внимание, что на данный момент Simpleator отображает подлинную область KUSER_SHARED_DATA на 0x7FFE0000 , что означает, что время «прохождение» видно, что приглашенная виртуальная машина благодаря обновлению SystemTime и полей InterruptTime , которые поддерживаются хостом. Изоляция этого региона потребует периодического таймера для подражания обновлению этого значения.
Сопоставление подлинного изображения Ntdll.dll и использование системных вызовов ОС -хост -ОС, чтобы изначально выполнить большую часть процесса загрузки, обеспечивая доступ к кольцевым переходам INT 2E , SYSCALL и INT 2C .
Кроме того, на основе модульности Simpleator состоит из трех двоичных файлов:
Simpleator.exe , который реализует монитор отладки. Этот компонент отвечает за отображение пользовательского интерфейса для монитора, отладки и регистрации Windows, размещения именованной трубы, которая позволяет эмулятору общаться с ним, и загружать эмулятор соответствующей средой (сегодня это означает, что настройка резервации адреса адреса 256 ГБ. В будущем это также будет означать песочницу).Provider.dll , который реализует поставщика системных вызовов для Windows 10 1809 (RS5) и Windows 10 1903 (19h1), поддерживаются текущие сборки.Emulator.exe , который реализует фактический код эмулятора с ускоренным WHVP. В основном он отвечает за общение с монитором отладки над трубой, обработка кода перехода кольца, чтобы общаться с поставщиком системных вызовов, а также выполнение начальной настройки адресного пространства и загрузки PE в библиотеке загрузки Ntdll.dll и бинарном целевом приложении. Во-первых, вы должны установить платформу Hypervisor Windows, которая также требует установки и включения Hyper-V. Вы можете сделать это либо с помощью следующей командной строки:
Dism /Online /Enable-Feature /FeatureName:HypervisorPlatform
Или запустив графический интерфейс, как ниже:
OptionalFeatures.exe
А затем проверяя флажки «Hyper-V» и «Hypervisor Platform» Windows, как видно на скриншоте ниже.
Вы должны иметь административные права на использование любой из этих команд.
Очевидно, что, пожалуйста, убедитесь, что ваше оборудование поддерживает технологию виртуализации оборудования (например, Intel VT-X).
Если вы хотите узнать больше о моих исследованиях или работе, я приглашаю вас проверить мой блог по адресу http://www.alex-ionescu.com, а также мою компанию по обучению и консалтингу, Winsider Seminars & Solutions Inc., по адресу http://www.windows-internals.com.
TBD TBD
Simpleator предназначен для минимизации размера и сложности кода - это составляет стоимость надежности и, самое главное, безопасность. Например, в текущей реализации NtCreateFile , NtOpenFile и NtWriteFile полностью передаются в ядро хоста ОС, что означает, что «вредная» полезная нагрузка может перезаписать любые файлы на диске, к которым имеет доступ к эмулятору хоста, поскольку в хосте нет дополнительной песочницы.
Кроме того, обратите внимание, что было реализовано только строгое минимальное количество системных вызовов , чтобы получить приложение Testapp.exe для запуска, распечатки текста и выхода. Запуск более сложного приложения, такого как Cmd.exe потребует значительно большей работы, особенно если некоторые API ожидают, что соединение с CSRS будет выполнено через LPC и для возврата конкретных данных. В настоящее время Simpleator притворяется, что это защищенный VTL-1, который значительно ограничивает то, что некоторые из Apis предпринимаются, и, следовательно, определенные вызовы откровенно (например, некоторые из тех, кто находится вокруг локали).
Более сложная эмуляция и модификация адресного пространства гостя потребуются для разблокировки такого использования API.
Simpleator не делает много проверки ошибок, проверки и обработки исключений. Это не надежное программное обеспечение, предназначенное для использования производства, а скорее база эталонного кода .
Copyright 2018 Alex Ionescu. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY ALEX IONESCU ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALEX IONESCU
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the authors and
should not be interpreted as representing official policies, either expressed or implied, of Alex Ionescu.