SimpleAtor(“ Simple-Ator”)是一種創新的以Windows為中心的X64用戶模式應用程序模擬器,它利用Windows 10 Spring Update(1803)中添加的幾個新功能,也稱為“ Redstone 4”,在Windows 10 10月10日更新(1809)中進行了其他改進(1809),AKA“ Redstone 5”。
也就是說,SimpleTor依賴於:
它是指概念概念,以構建如何更簡單,更快的沙盒爆炸環境,以及甚至不需要訪客操作系統的無服務器工作負載(AWS lambdas / azure功能)的更多資源有限的容器(AWS lambdas / azure功能)。
可以使用Visual Studio 2017和最新的Windows SDK(1809)構建SimpleAtor。請注意,不能使用較舊的SDK,因為它們不支持較新的WHVP定義,而SimplEator本身僅支持運行的64位Windows 10系統構建17763或更高(Redstone 5/1809)。
跟踪系統調用的主監視器窗口,此處顯示,顯示從測試訪客應用程序顯示控制台輸出:
寄存器窗口,可以在模擬器有斷言/問題時使用(UI線程將凍結,因此“不響應”消息):
最後,如果啟用peb中的FLG_SHOW_LDR_SNAPS flag,調試窗口將顯示從加載程序中呼叫DbgPrint (否則,任何其他dbgprint調用都會顯示出任何其他dbgprint調用):
TBD TBD添加鏈接
幾十年來,開發人員一直在寫作和利用仿真技術,為什麼還要寫另一個仿真器呢?
首先,在Windows的心臟中引入實際的虛擬化API是一個鮮為人知的戲劇性(以積極的方式)轉移到Hyper-V平台的先前封閉性質。儘管通過虛擬化基礎架構設備(VID)庫有無證的API和IOCTL,但受支持且穩定的Win32層是一個受歡迎的改進。 QEMU現在已經支持使用WHVP進行加速,而VirtualBox 6.0也可能會在此支持的情況下發貨(它已經在存儲庫中實現)。只有VMware獨自站立和反抗。在這個主題上,學習如何利用這個新的API並不一定是一個簡單的話題,因此我想學習並與他人分享這些新接口如何工作。
其次,在查看仿真技術時,通常會有三種現代驅動力來使用:
我的主要興趣是看第三個子彈 - 到目前為止,它已經通過完整的系統模擬來實現,其中一些自定義實現使用了過度訂閱模型,但仍然帶來了很多複雜性 - 一個很好的例子是大多數防病毒模擬器,例如在Windows辯護人中實現的模擬器(請參閱一些出色的研究[此處]和[此處]和[此處])。此外,熟悉QILIN的研究人員可能已經看到了許多簡單的Python綁定,它們很容易建立在其基礎上,以便通過利用QEMU作為完整的系統模擬器來快速“旋轉” Windows進程,但沒有主要的OS圖像。
我決定追求另一條途徑 - 一種“用戶模式窗口”的實現,在這裡繪製的唯一二進製文件將是主機的OS裝載機(ntdll.dll)和目標二進製文件,以及將提供256 GB地址空間,在其中提供256 GB的地址空間,可以在賓客映射和sand bobles中使用本機的1:1訪問權限,並在sand box中遇到了sand bobers of sand of sand of sand of sand'''sand''sand'sand''沙箱)。只要模擬器將為加載程序和系統DLL提供基本的內核結構數據結構,主機就可以以本機速度運行,只有特權環轉換導致退出。
然後,為簡單起見,系統呼叫提供商攔截了來賓VM進行的系統調用,並且可以以三種方式之一:
根據性能,複雜性,兼容性和安全性之間的需求,需要少於500行的代碼來實施上面的子彈1和2的足夠的子彈1和2,以獲取一個簡單的測試應用程序,以加載,顯示“ Hello World”消息並退出,並在處理其係統呼叫方面存在許多潛在的安全問題。代碼庫的加倍可能實際上可以減輕系統調用中的大多數安全問題(減去主機OS內核中的實際漏洞 - 沙盒可能會減輕這些漏洞)。
但是,即使在1000行代碼中,由於所有系統調用最終都被本地發送到操作系統,SimplEator的行為更像是在Linux上的CGroup上的“ SecComp”實現,而不是我們今天看到的更為複雜的模擬器。
最後,值得指出的是,對雲計算/容器化空間有新的興趣,以最大程度地減少運行工作負載所需的資源,例如Amazon Lambdas或Azure功能,這些功能是在容器中運行的無服務器件,這些代碼仍需要旋轉整個訪客操作系統。通過更嚴格地控制SimpleAtor提供的安全邊界,人們可以想像能夠將JVM或.NET Core作為專用應用程序運行而無需完整的訪客操作系統。
TBD TBD
關於SimpleAtor如何實現獨特的來賓執行環境,有3個主要的有趣部分(對我來說),這使運行Windows應用程序變得更加簡單:
創建具有與內核MiCreatePebOrTeb功能相同的數據的PEB和TEB的創建
在來賓和主機地址之間創建1:1映射,並利用新的“地址要求”功能鎖定對該範圍的分配。請注意,目前,SimpleAtor在0x7FFE0000處映射正宗的KUSER_SHARED_DATA區域,這意味著,由於更新了SystemTime和InterruptTime字段,這些時間是由訪客VM“看到”的,這些字段是由主機保留的。隔離該區域將需要一個定期計時器才能模擬更新此值。
映射真實的Ntdll.dll映像並利用主機OS系統呼叫本機上執行大部分加載過程,從而訪問INT 2E , SYSCALL和INT 2C環轉換。
此外,從模塊化的基礎上,SimpleTor由三個二進制組成:
Simpleator.exe實現了調試監視器。該組件負責顯示監視器,調試和註冊窗口的UI,託管一個命名的管道,該管道允許模擬器與其進行通信,並使用適當的環境加載仿真器(這意味著設置256 GB地址預留,將來,這也意味著沙盒)。Provider.dll實現了Windows 10 1809(RS5)和Windows 10 1903(19H1)的系統調用提供商,當前的構建受支持。Emulator.exe實現了實際WHVP加速模擬器代碼。它主要負責與管道上的調試監視器進行通信,處理環形轉換代碼與系統呼叫提供商進行交談,並執行Ntdll.dll Loader庫和目標應用程序二進制的初始地址空間設置和PE加載。 首先,您必須安裝Windows管理程序平台,該平台還需要安裝和啟用Hyper-V。您可以使用以下命令行:這樣做:
Dism /Online /Enable-Feature /FeatureName:HypervisorPlatform
或通過以下啟動GUI:
OptionalFeatures.exe
然後檢查“ Hyper-V”和“ Windows Hypervisor平台”複選框,如下屏幕截圖所示。
您必須擁有任何這些命令的管理權。
顯然,請確保您的硬件支持硬件虛擬化技術(例如Intel VT-X)。
如果您想了解有關我的研究或工作的更多信息,我邀請您在http://www.alex-ionescu.com上查看我的博客,以及我的培訓與諮詢公司WinSider Sensidars&Solutions Inc.,網址為http://www.windows-internals.com。
TBD TBD
SimplEator旨在最大程度地減少代碼大小和復雜性 - 這確實是以穩健性和最重要的安全性為代價的。例如,在當前實施中, NtCreateFile , NtOpenFile和NtWriteFile已完全傳遞到主機OS內核,這意味著“惡意”有效負載可以覆蓋主機模擬器進程可以訪問的磁盤上的任何文件,因為主機周圍沒有其他SAND盒。
此外,請注意,僅實施了嚴格的最小系統調用,以獲取Testapp.exe應用程序以啟動,打印其文本和退出。運行更複雜的應用程序(例如Cmd.exe將需要更多的工作,尤其是因為某些API期望通過LPC與CSRS建立連接,並返回特定數據。當前,SimpleAtor假裝這是一個安全的VTL-1保護過程,它極大地限制了一些來賓API嘗試執行的操作,因此,某些呼叫徹底崩潰(例如,例如,某些地方周圍的某些人)。
需要更複雜的仿真和修改來賓地址空間才能解除此類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.