Simpleator ( "Simple-Ator")는 혁신적인 Windows 중심 X64 사용자 모드 애플리케이션 에뮬레이터로, "Redstone 4"라고도 불리는 Windows 10 Spring Update (1803)에 추가 된 몇 가지 새로운 기능을 활용하며 Windows 10 10 월 업데이트 (1809), 즉 "Redstone 5"에서 추가로 개선되었습니다.
즉, 단순화기는 다음에 의존합니다.
이는 게스트 운영 체제를 필요로하지 않고 서버리스 워크로드 (AWS Lambdas / Azure 함수)를 실행할 수있는 더 많은 리소스 제한 컨테이너뿐만 아니라 얼마나 단순하고 빠른 샌드 박스 폭발 환경을 구축 할 수 있는지에 대한 개념 증명입니다.
Simpleator는 Visual Studio 2017 및 최신 Windows SDK (1809)로 구축 할 수 있습니다. 기존 SDK는 최신 WHVP 정의를 지원하지 않기 때문에 구형 SDK를 사용할 수 없으며 단순한 자체는 17763 이상 빌드를 실행하는 64 비트 Windows 10 시스템 만 지원합니다 (Redstone 5 / 1809).
테스트 게스트 애플리케이션에서 콘솔 출력을 표시하는 시스템 호출을 추적하는 기본 모니터 창.
에뮬레이터에 어설 션/문제가있을 때 사용할 수있는 레지스터 창 (UI 스레드가 얼어 붙지 않아서 "응답하지 않음"메시지) :
마지막으로, PEB에서 FLG_SHOW_LDR_SNAPS 플래그를 활성화하면 디버그 창에는 로더에서 DbgPrint 호출이 표시됩니다 (그렇지 않으면 다른 DBGPRINT 호출이 나타납니다).
TBD TBD 추가 링크
개발자들은 수십 년 동안 에뮬레이션 기술을 작성하고 활용해 왔습니다. 왜 또 다른 에뮬레이터를 작성해야합니까?
첫째, Windows의 핵심에 실제 가상화 API를 도입하는 것은 hyper-V 플랫폼의 이전 닫힌 특성으로의 긍정적 인 극적 (긍정적 인) 전환입니다. VID (Virtualization Infrastructure Device) 라이브러리를 통해 문서화되지 않은 API 및 IOCTL이 있었지만 지원되는 안정적인 Win32 레이어는 환영받는 개선입니다. 이미 QEMU는 이제 가속도에 WHVP 사용을 지원하며 VirtualBox 6.0 은이 지원을 통해 배송 될 가능성이 높습니다 (이미 저장소에서 구현되었습니다). VMware만이 혼자 있고 도전적입니다. 이 주제 에서이 새로운 API를 활용하는 방법을 배우는 것이 반드시 쉬운 주제는 아니기 때문에 이러한 새로운 인터페이스의 작동 방식을 배우고 다른 사람들과 공유하고 싶었습니다.
둘째, 에뮬레이션 기술을 살펴보면 일반적으로 사용하기위한 3 개의 현대식 주행 세력이 있습니다.
저의 주요 관심사는 지금까지 전체 시스템 에뮬레이션으로 달성 된 세 번째 글 머리 기호를 보는 것이 었습니다. 전체 시스템 에뮬레이션을 통해 과도한 구독 모델을 사용하지만 여전히 많은 복잡성을 가져다주는 몇 가지 사용자 정의 구현 (Wind 또한 Qilin에 익숙한 연구자들은 아마도 전체 시스템 에뮬레이터로 QEMU를 활용하여 초과 소비 모델을 사용하여 Windows 프로세스를 빠르게 '스핀 업'하기 위해 쉽게 구축하는 간단한 파이썬 바인딩을 이미 보았을 것입니다.
나는 게스트 주소 공간에 매핑 된 유일한 바이너리가 호스트의 OS 로더 (ntdll.dll)와 대상 바이너리가 될 수있는 일종의 '사용자 모드 Windows'구현, 그리고 256GB의 주소 공간이 1 : 1 가상 매핑과 호스트 가상 맵핑 사이에 기본적으로 접근 할 수있는 256GB 주소 공간이 제공되는 다른 길을 추구하기로 결정했습니다. 샌드 박스). 에뮬레이터가 로더 및 시스템 DLL에 대한 기본 커널 구성 데이터 구조를 제공하는 한 호스트는 기본 속도로 실행될 수 있으며, 권한이있는 링 전환 만 출구로 유발할 수 있습니다.
그런 다음 단순화를 위해 시스템 통화 공급자는 게스트 VM이 작성한 시스템 호출을 가로 채고 세 가지 방법 중 하나로 작동 할 수 있습니다.
성능, 복잡성, 호환성 및 보안 사이의 요구 사항에 따라, 위의 총알 1과 2를 충분히 구현하기 위해 500 줄 미만의 코드 라인이 필요합니다. 간단한 테스트 응용 프로그램을로드하고 "hello world"메시지를 표시하고 종료하고 시스템 호출을 처리하는 데 많은 잠재적 보안 문제가 있습니다. 코드베이스의 배가는 아마도 시스템 호출의 대부분의 보안 문제를 현실적으로 완화 할 수 있습니다 (호스트 OS 커널의 실제 취약점을 제외하고 샌드 박스가 완화 할 수 있음).
그러나 1000 줄의 코드에서도 모든 시스템 호출이 궁극적으로 운영 체제로 기본적으로 전송되기 때문에 Simpleator는 오늘날 우리가 볼 수있는 훨씬 더 복잡한 에뮬레이터보다는 Linux의 CGroup 위에서 'SECComp'구현과 비슷합니다.
마지막으로, Amazon Lambdas 또는 Azure 함수와 같은 작업량을 실행하는 데 필요한 리소스를 최소화하기 위해 클라우드 컴퓨팅/컨테이너화 공간에 대한 새로운 관심이 있다는 점을 지적 할 가치가 있습니다. 컨테이너에서 실행되는 서버리스 코드 인 Amazon Lambdas 또는 Azure 기능과 같은 작업량을 실행하는 데 필요한 리소스를 최소화합니다. Simpleator가 제공하는 보안 경계를 엄격하게 제어하면 전체 게스트 OS를 필요로하지 않고 JVM 또는 .NET Core를 전용 응용 프로그램으로 실행할 수있는 기능을 상상할 수 있습니다.
TBD TBD
Simpleator가 독특한 게스트 실행 환경을 달성하는 방법에 대한 3 가지 주요 흥미로운 부분이 있습니다.
커널의 MiCreatePebOrTeb 기능과 동일한 종류의 데이터를 갖춘 PEB 및 TEB를 생성하면 특정 플래그가 포함되어있어 게스트 환경에서 더 쉽게 실행할 수 있습니다.
게스트와 호스트 주소 사이에 1 : 1 매핑을 작성하고 새로운 "주소 요구 사항"기능을 활용하여 해당 범위로 할당을 잠그십시오. 현재 Simpleator는 0x7FFE0000 의 정통 KUSER_SHARED_DATA 영역을 맵핑합니다. 즉, 호스트가 최신 상태로 유지되는 SystemTime 및 InterruptTime 필드의 업데이트로 인해 Guest VM에서 시간의 흐름이 '보인다'는 것을 의미합니다. 이 영역을 분리하려면이 값을 업데이트하는주기적인 타이머가 필요합니다.
정통 Ntdll.dll 이미지를 매핑하고 호스트 OS 시스템 호출을 활용하여 대부분의 로딩 프로세스를 기본적으로 실행하여 INT 2E , SYSCALL 및 INT 2C 링 전환에 대한 액세스를 제공합니다.
또한 모듈 식 기준으로 단순화기는 세 가지 바이너리로 구성됩니다.
Simpleator.exe . 이 구성 요소는 모니터, 디버그 및 등록에 대한 UI를 표시하고, 에뮬레이터가 통신 할 수있는 이름의 파이프를 호스팅하고, 적절한 환경으로 에뮬레이터를로드하는지 (오늘, 이는 향후 256GB 주소 공간 예약을 설정하는 것을 의미합니다. 이는 또한 샌드 박스를 의미합니다).Provider.dll , 현재 빌드는 지원됩니다.Emulator.exe 실제 WHVP Accelerated Emoured Code를 구현합니다. 주로 파이프를 통해 디버그 모니터와 통신하고, 링 전환 코드를 시스템 통화 공급자와 대화하고 처리 할 수 있도록하고, Ntdll.dll 로더 라이브러리의 초기 주소 공간 설정 및 PE 로딩을 수행합니다. 먼저 Windows Hypervisor 플랫폼을 설치해야하며 Hyper-V를 설치하고 활성화해야합니다. 다음 명령 행을 사용하여 다음을 수행 할 수 있습니다.
Dism /Online /Enable-Feature /FeatureName:HypervisorPlatform
또는 아래와 같이 GUI를 시작함으로써 :
OptionalFeatures.exe
그런 다음 아래 스크린 샷에서 볼 수 있듯이 "Hyper-V"및 "Windows Hypervisor Platform"확인란을 확인하십시오.
이러한 명령 중 하나를 사용해야 할 관리 권한이 있어야합니다.
분명히 하드웨어가 하드웨어 가상화 기술 (예 : Intel VT-X)을 지원하는지 확인하십시오.
내 연구 나 업무에 대해 더 알고 싶다면 http://www.alex-ionescu.com (http://www.alex-ionescu.com)과 http://www.windowsinternals.com의 Winsider Seminars & Solutions Inc. (Winsider Seminars & Solutions Inc.)를 확인하십시오.
TBD TBD
Simpleator는 코드 크기와 복잡성을 최소화하도록 설계되었습니다. 이는 견고성과 가장 중요한 보안 비용으로 이루어집니다. 예를 들어, 현재 구현에서 NtCreateFile , NtOpenFile 및 NtWriteFile 호스트 OS 커널로 완전히 전달됩니다. 즉, 호스트 에뮬레이터 프로세스가 액세스 할 수있는 디스크의 모든 파일을 덮어 쓸 수 있습니다.
또한 Testapp.exe 응용 프로그램을 시작하고 텍스트를 인쇄하고 종료 할 수 있도록 엄격한 최소 시스템 호출 수만 구현되었습니다. Cmd.exe 와 같은보다 복잡한 응용 프로그램을 실행하려면 특히 특정 API가 LPC를 통해 CSRSS와의 연결이 필요하고 특정 데이터가 다시 반환 될 것으로 기대하기 때문에 훨씬 더 많은 작업이 필요합니다. 현재 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.