
Windows - Update Session Orchestrator 서비스를 이용한 권한 있는 파일 쓰기 무기화
⚠️ 2020-06-06 업데이트: 이 트릭은 최신 Windows 10 Insider Preview 빌드에서 더 이상 작동하지 않습니다. 즉, 여전히 Windows 10 일반 버전에서는 작동하지만, 앞으로 몇 달 내에 _패치_될 것으로 예상해야 합니다.
이 PoC는 Windows에서 __권한 있는 파일 쓰기 취약점을 무기화하는 데 사용할 수 있는 __기법__을 보여줍니다. 이는 James Forshaw (일명 @tiraniddo)가 발견한 DiagHub DLL 로딩 "익스플로잇"에 대한 대안을 제공하며, Microsoft는 빌드 버전 1903부터 이를 수정했습니다.
Windows 10부터 Microsoft는 Update Session Orchestrator 서비스를 도입했습니다. 일반 사용자로서 COM을 사용하여 이 서비스와 상호작용하고 업데이트 검사(예: 업데이트 가능 여부 확인) 또는 보류 중인 업데이트 다운로드를 시작할 수 있습니다. 심지어 이 목적을 위해 usoclient.exe라는 문서화되지 않은 기본 제공 도구도 있습니다.
공격자의 관점에서 이 서비스는 NT AUTHORITY\System으로 실행되며, 업데이트 세션이 생성될 때마다 존재하지 않는 DLL(windowscoredeviceinfo.dll)을 로드하려고 시도하기 때문에 흥미롭습니다.
즉, Windows 또는 일부 타사 소프트웨어에서 권한 있는 파일 쓰기 취약점을 발견하면, 자체 버전의 windowscoredeviceinfo.dll을 C:\Windows\Sytem32\에 복사한 다음 USO 서비스가 이를 로드하도록 하여 NT AUTHORITY\System으로 임의 코드 실행을 얻을 수 있습니다.
자세한 정보: 1부 - https://itm4n.github.io/usodllloader-part1/ 2부 - https://itm4n.github.io/usodllloader-part2/
이 솔루션은 __WindowsCoreDeviceInfo__와 UsoDllLoader 두 프로젝트로 구성됩니다.
QueryDeviceInformation() 함수가 호출될 때마다 로컬호스트 전용 포트 1337에서 바인드 셸을 시작하는 PoC DLL을 제공합니다. 이는 USO 워커가 사용하는 함수의 이름입니다.
usoclient.exe의 축소 버전입니다. 일반 사용자로 실행하여 USO 서비스와 상호작용하고 windowscoredeviceinfo.dll을 로드하도록 할 수 있습니다. 그런 다음 바인드 셸에 연결을 시도합니다. 오류가 발생하면 "알려진 문제" 섹션을 참조하세요.
솔루션은 이미 사전 구성되어 있으므로 컴파일이 쉬워야 합니다. 저는 __Visual Studio 2019__를 사용하고 있습니다. 이전 버전에서는 작동하지 않을 수 있습니다.
Release 구성과 x64 아키텍처를 선택합니다..\x64\Release\WindowsCoreDeviceInfo.dll과 로더 .\x64\Release\UsoDllLoader.exe.테스트 목적으로 다음을 수행할 수 있습니다:
WindowsCoreDeviceInfo.dll을 C:\Windows\System32\에 복사합니다.NT AUTHORITY\SYSTEM으로 셸을 얻습니다.UsoDllLoader.exe가 실패하면 위 작업을 수동으로 수행할 수 있습니다.
WindowsCoreDeviceInfo.dll을 C:\Windows\System32\에 복사합니다.usoclient StartInteractiveScan 명령을 사용합니다. 명령에서 피드백을 받지 못할 수 있습니다.nc.exe 127.0.0.1 1337 명령을 사용하여 바인드 셸에 연결합니다.하나 이상의 업데이트가 설치 대기 중이거나 설치 중인 경우 이 방법은 실패할 가능성이 높습니다.
Windows 버전에 따라 UsoDllLoader.exe가 __다양한 오류 코드로 실패__할 수 있습니다. 이러한 문제는 많이 조사하지 않았습니다. 그 이유는 편의를 위해 개발한 PoC일 뿐이기 때문입니다. 가장 중요한 것은 DLL이며, 로더가 아닙니다. 자세한 내용은 "사용법 2"를 참조하세요.