
wsb-detect를 사용하면 Windows Sandbox ("WSB")에서 실행 중인지 감지할 수 있습니다.
wsb-detect를 사용하면 Windows Sandbox("WSB")에서 실행 중인지 감지할 수 있습니다. 이 샌드박스는 Windows Defender가 동적 분석에 사용하며, 일반적으로 보안 분석가 등이 수동으로 사용합니다. 2019년 말, Microsoft는 Windows Sandbox(줄여서 WSB)라는 새로운 기능을 도입했습니다. WSB를 식별하는 데 사용되는 기술은 아래 기술 섹션에 설명되어 있습니다. 지문 식별 아이디어가 있으면 자유롭게 풀 리퀘스트를 제출해 주세요 🎉. 저는 이것저것 만져보고 있으며, Windows Sandbox에 대한 더 많은 내용을 곧 올리겠습니다.
Windows Sandbox를 사용하면 15초 이내에 Hyper-V 기반의 일회용 가상 머신을 빠르게 생성할 수 있으며, 클립보드 공유, 디렉터리 매핑 등 일반 VM이 가진 모든 기능을 갖추고 있습니다. 이 샌드박스는 Hyper-V가 활성화된 호스트에서 동적 분석을 위한 Microsoft Defender Application Guard(WDAG)의 기반이기도 하며, Windows 10 Pro 또는 Enterprise 버전에서 활성화할 수 있습니다. 특별히 흥미로운 것은 아니지만, 임플란트 개발에 유용할 수 있습니다. 샌드박스 내부를 탐구할 때 지도해 준 친구 Jonas L에게 감사드립니다 (자세한 내용은 추후 공개).
detect.h 헤더는 감지 여부를 확인하기 위해 결합할 수 있는 모든 함수를 내보냅니다.
#include <stdio.h>
#include "detect.h"
int main(int argc, char** argv)
{
// example vmsmb & username check
if (wsb_detect_dev() || wsb_detect_username())
{
puts("We're in Windows Sandbox!");
return 0;
}
return 1;
}
wsb_detect_proc내부에서 많은 작업을 처리하는 컨테이너 실행 서비스인 CExecSvc.exe를 확인합니다.
wsb_detect_time샌드박스 이미지는 2019년 12월 7일 토요일 오전 9:14:52경에 빌드된 것으로 보입니다. 이는 Windows Sandbox가 대중에게 공개된 시점입니다. 이 검사는 mountmgr 드라이버의 생성 타임스탬프를 교차 참조합니다.
wsb_detect_username현재 사용자 이름이 샌드박스에서 기본 계정으로 사용되는 WDAGUtilityUserAccount인지 확인합니다.
wsb_detect_suffixGetAdaptersAddresses를 사용하여 어댑터 목록을 순회하고 DNS 접미사를 샌드박스에서 기본적으로 사용되는 mshome.net과 비교합니다.
wsb_detect_dev호스트와 SMB 통신에 사용되는 원시 장치 \\.\GLOBALROOT\device\vmsmb를 열 수 있는지 확인합니다.
wsb_detect_cmd시작 시 HKEY_LOCAL_MACHINE의 RunOnce 키에서 비밀번호가 만료되지 않도록 설정하는 명령을 검색합니다.
wsb_detect_genuine샌드박스 감지에 있어 더 일반적인 방법이지만, 테스트 결과 Windows가 VM에서 정품으로 확인되지 않는 것으로 보입니다.
더 빠르게 연락하고 싶다면 트위터 또는 이메일로 연락 주세요. 또한 호스트 측에서 WindowsSandboxMutex라는 뮤텍스를 생성할 수 있는지 확인하여 샌드박스가 실행 중인지 감지할 수 있습니다. 이는 샌드박스를 호스트당 하나의 가상 머신으로 제한하지만, 핸들을 복제하고 ReleaseMutex를 호출하면 이 뮤텍스를 해제할 수 있습니다. 이렇게 하면 다중 인스턴스를 실행할 수 있습니다.
