
취약한 DCOM 애플리케이션을 열거하기 위한 Powershell 스크립트
DCOMrade는 Powershell 스크립트로, 측면 이동, 코드 실행, 데이터 유출 등에 악용될 수 있는 취약한 DCOM 애플리케이션을 열거할 수 있습니다. 이 스크립트는 Powershell 2.0에서 작동하도록 설계되었지만 그 이상의 모든 버전에서도 작동합니다. 현재 이 스크립트는 다음 Windows 운영 체제(x86 및 x64 모두)를 지원합니다:
현재 HackDefense에서 인턴십을 진행하면서 기존 DCOM 측면 이동 기술을 연구하고 이러한 기술(및 새 기술)의 열거를 자동화하는 방법을 찾고 있습니다. 이 연구를 통해 이 스크립트와 아래 링크된 관련 연구 논문이 작성되었습니다.
이 스크립트는 Matt Nelson(@enigma0x3)의 연구, 특히 라운드 2 블로그 게시물을 기반으로 제작되었습니다. 해당 게시물에서는 침투 테스터와 레드 팀에게 유용할 수 있는 DCOM 애플리케이션을 찾는 방법을 다루고 있습니다.
먼저 대상 시스템과의 원격 연결이 설정되며, 이 연결은 스크립트 전체에서 다양한 작업에 사용됩니다. 대상 시스템에서 Powershell 명령이 실행되어 모든 DCOM 애플리케이션과 해당 AppID를 검색합니다. AppID는 Windows 레지스트리를 순회하고 해당 항목에 LaunchPermission 하위 키가 설정되지 않은 AppID를 확인하는 데 사용됩니다. 이러한 AppID는 저장된 후 관련 CLSID를 검색하는 데 사용됩니다.
스크립트는 각 OS에 대해 특정 블랙리스트를 사용하므로 대상 운영 체제에 따라 다른 옵션이 있습니다. 블랙리스트는 활성화할 수 없는 DCOM 애플리케이션으로 인해 스크립트가 중단될 수 있는 CLSID 항목을 건너뜁니다. 이렇게 하면 대상 시스템의 부하를 줄이고 스크립트 완료 시간을 단축할 수 있습니다.
CLSID를 사용하여 연결된 DCOM 애플리케이션을 활성화할 수 있습니다. 'Shortcut' CLSID는 연결된 MemberTypes의 개수를 세는 데 사용되며, 이는 기본 MemberTypes 개수를 확인하기 위함입니다. 이 숫자는 이 개수와 다른 CLSID를 확인하는 데 사용됩니다. 스크립트는 'Shortcut'의 CLSID()를 사용하여 이를 수행합니다. 이 CLSID는 Microsoft Windows 운영 체제에서 공유되는 CLSID이기 때문입니다. 다른 개수의 를 가진 CLSID는 (악)용될 수 있는 또는 를 포함할 수 있으며, 배열에 추가됩니다.
HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}MemberTypesMethodProperty배열에 있는 CLSID는 MemberTypes에서 (악)용 가능성을 나타낼 수 있는 문자열을 확인합니다. 이 문자열 목록은 VulnerableSubset 파일에서 찾을 수 있습니다. 이 목록은 모든 취약한 DCOM 애플리케이션을 찾기 위한 완전한 목록은 아니지만, 스크립트 사용자가 자신의 목적에 유용할 수 있는 DCOM 애플리케이션의 기능을 나타낼 수 있는 특정 문자열을 검색할 수 있는 동적 프로세스의 일부입니다.
스크립트의 결과는 HTML 보고서로 출력되며, 예방 조치로 시스템을 감사하는 데 사용할 수 있습니다. 공격 측면을 위해 Empire 모듈을 만들었으며, 작성 시점 기준으로 마스터 브랜치에 추가 승인을 기다리고 있습니다. 직접 Empire에 추가하려면 여기에 있는 모듈을 추가하면 됩니다.
아이디어, 스크립트 및 가능한 탐지 방법에 대한 전체 기술 설명은 관련 연구 논문을 참조하십시오.
Empire 모듈로 사용되지 않을 때 이 스크립트는 작동 방식과 대상 시스템과의 연결 방식이 다르기 때문에 몇 가지 제한 사항이 있습니다.
Public으로 설정된 경우 대상 시스템에서 Windows Remote Management 서비스를 사용하려면 다음 명령을 실행해야 합니다: Enable-PSRemoting -SkipNetworkProfilecheck -ForceMicrosoft Windows 도메인에 있을 때:
.\DCOMrade.ps1 -ComputerName [컴퓨터 이름 / IP] -User [로컬 관리자] -OS [운영 체제] -Domain [도메인 이름]
Microsoft Windows 도메인에 없을 때:
.\DCOMrade.ps1 -ComputerName [컴퓨터 이름 / IP] -User [로컬 관리자] -OS [운영 체제]

이 스크립트는 Eva Tanaskoska가 진행한 DCOM 측면 이동 워크숍에서 영감을 받았습니다. 이 워크숍이 없었다면 자동화된 방식으로 이러한 열거를 시도하려는 아이디어 자체가 떠오르지 않았을 것입니다.
Matt Nelson(@enigma0x3)의 연구 덕분에 자동화 형태를 구상할 충분한 정보를 찾을 수 있었습니다.
Philip Tsukerman의 기사는 측면 이동에 사용 가능한 대부분의 DCOM 기술을 요약하고 그 작동 방식을 설명합니다.