Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
DVS — D(COM) V(ulnerability) S(canner) 일명 교활한 스위스 군용 칼 - DCOM 객체를 이용한 측면 이동 | Kitploit
도구/GitHubGitHub/scorpioneslabs/dvs
ExploitationLateral MovementPost-ExploitationPenetration TestingCommand and ControlRed Teaming
GitHubscorpioneslabs/dvs

DVS

D(COM) V(ulnerability) S(canner) 일명 교활한 스위스 군용 칼 - DCOM 객체를 이용한 측면 이동

저장소 보기
25647276년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

D(COM) V(ulnerability) S(canner) 일명 교활한 스위스 군용 칼 - DCOM 객체를 사용한 측면 이동

내부 네트워크를 통해 측면 이동을 어떻게 할 수 있을지, 또는 EDR에 경고 없이 원격 시스템과 상호 작용하는 방법에 대해 궁금해한 적이 있나요?
유효한 자격 증명이 있거나 원격 시스템에 접근할 수 있는 활성 세션이 있지만, 알려져 있거나 예상되거나 높은 수준의 모니터링이 되는 방식(예: WMI, 작업 스케줄러, WinRM, PowerShell Remoting)으로 원격으로 프로세스를 실행할 수 없는 상황을 가정해 봅시다.

이러한 시나리오를 위해 DVS 프레임워크가 도움을 줍니다.

DVS 프레임워크는 스위스 군용 칼과 같아서 원격 DCOM 객체의 취약한 기능을 열거하고, 실행하며, 이를 사용한 공격도 수행할 수 있습니다.

이 프레임워크는 "레드 팀" 마인드셋으로 개발되었으며 은밀한 방법을 사용하여 원격 시스템을 손상시킵니다.

DVS 프레임워크는 원격으로 DCOM 액세스를 다시 활성화하고 공격 사용자에게 필요한 권한을 자동으로 부여하여 DCOM에 대한 원격 강화를 우회하는 다양한 방법을 포함합니다.

또한 프레임워크는 원격 시스템의 변경 사항을 공격 전 원래 상태로 되돌려 수비수로부터 이러한 변경을 숨길 수 있습니다.

우리의 주요 통찰력은 이 도구가 aqsome 기술을 통해 취약하지 않은 DCOM 객체를 사용하여 명령을 실행할 수도 있다는 것입니다 (아래 Invoke-RegisterRemoteSchema에 대한 내용 참조).

PowerShell 2.0 이상과 호환됨

Youtube 동영상 PoC: DVS

Disclaimer

이 도구는 테스트 및 교육 목적으로만 제공됩니다. 이 코드의 다른 사용은 허용되지 않습니다. 사용에 따른 책임은 본인에게 있습니다.
저자는 이 도구의 오용에 대해 어떤 책임도 지지 않습니다.
이 도구를 사용함으로써 발생하는 모든 피해는 사용자의 책임임을 동의하는 것입니다.

레지스트리 액세스 - DVS 프레임워크가 해당 프로토콜을 활용하는 방법

  • Remote-Registry access(MS-RRP)

    1. 원격 레지스트리와 상호 작용하기 위해 포트 445를 탐색합니다.
    2. 원격 레지스트리가 활성화되어 있는지 확인합니다.
    3. 원격 레지스트리와 상호 작용합니다.
    4. AutoGrant 모드가 설정된 경우 쓰기 권한을 확인합니다. 그렇지 않으면 읽기 권한을 확인합니다.
  • Standard Registry Provider (원격 레지스트리가 거부된 경우)

    1. WMI를 사용하여 "표준 레지스트리 공급자"와 상호 작용하기 위해 포트 135를 탐색합니다.
    2. StdRegProv에 접근 가능한지 확인합니다.
    3. 표준 레지스트리 공급자와 상호 작용합니다.
    4. AutoGrant 모드가 설정된 경우 쓰기 권한을 확인하고, 그렇지 않으면 읽기 권한을 확인합니다.

이 도구는 왜 이렇게 은밀한가?

DVS 도구는 먼저 다음 단계를 통해 주체 ID가 원격 시스템에 액세스할 수 있는지 확인합니다:

  • 기본 작업

    1. 인증 작업(SkipRegAuth가 설정되지 않은 경우)
      1. 자격 증명이 제공되면 "net-only" 세션을 생성합니다. 그렇지 않으면 현재 로그온된 세션을 사용합니다.
      2. 레지스트리 액세스를 탐색합니다.
    2. DCOM 기능이 활성화되어 있는지 확인합니다.
    3. DCOM 액세스 허용(AutoGrant가 설정된 경우), 그렇지 않으면 실패합니다.
    4. 로그온된 사용자/제공된 사용자 및 사용자가 속한 그룹이 (adsi/WindowsIdentity 기능을 통해) DCOM과 상호 작용할 수 있는 권한이 있는지 확인합니다(원격 레지스트리 쿼리를 통해).
    5. 권한 부여(AutoGrant가 설정된 경우), 그렇지 않으면 실패합니다.
    6. NetBIOS over TCP(NetAPI32 또는 UDP 패킷 사용)를 사용하여 원격 시스템에서 도메인 이름을 확인합니다. 실패하면 레지스트리(HKLM 또는 HKCU 하이브)를 사용하여 시도합니다.
  • Invoke-DCOMObjectScan

    1. DCOM 객체와 상호 작용
    2. DCOM 객체를 열거하고 취약한 함수를 찾음
    3. 악용 가능성 확인
    4. 실행 페이로드 생성
    5. 취약한 DCOM 객체에 대한 개인 정보 가져오기
  • Get-ExecutionCommand

    1. 실행 페이로드 생성
  • Invoke-ExecutionCommand

    1. DCOM 객체와 상호 작용 시도
    2. 명령 실행
  • Invoke-RegisterRemoteSchema

    1. 다음 DCOM 객체 중 하나와 상호 작용 시도:
      • InternetExplorer.Application - InternetExplorer COM 객체
      • {D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E} - Internet Explorer에 속한 다른 COM 객체
      • {C08AFD90-F2A1-11D1-8455-00A0C91F3880} - ShellBrowserWindow
      • {9BA05972-F6A8-11CF-A442-00A0C90A8F39} - ShellWindows
    2. 원격 스키마 등록(예: http://)
    3. 스키마 콘텐츠에서 명령을 실행하도록 스키마 구성
    4. 명령 실행

도구 구성 요소

  • 보안 권한 분석기 - 원격 DCOM 객체에 액세스하기 위한 주체 ID 권한 분석
  • 원격 권한 부여 - 로그온된 사용자에게 원격으로 권한 부여(이미 부여되지 않은 경우)
  • DCOM 스캐너 - 제공된 취약한 함수에 대해 원격/로컬 DCOM 객체를 스캔하고 분석합니다(패턴 및 함수 이름을 지정해야 함). 도구가 취약한 함수를 감지하면 함수에 포함된 인수와 함수가 명령을 실행할 수 있는지 확인합니다.
  • DCOM 명령 생성기 - 원격 시스템에서 실행하기 위해 PowerShell 페이로드 생성
  • 보고서 - 취약한 DCOM 객체에 대한 모든 정보가 포함된 CSV 보고서 생성
  • 명령 실행 - DCOM 객체를 통해 명령 실행

Author

  • Nimrod Levy

라이선스

  • GPL v3

테스트된 시나리오

  • 도메인 외부에서 도메인으로
  • 도메인 내부에서 다른 도메인 가입 시스템으로
  • 도메인에서 도메인 외부로
  • 현재 세션에서 다른 도메인 가입 시스템으로

테스트된 운영 체제

  • Windows 7 SP1
  • Windows 8.1
  • Windows 10
  • Windows Server 2019

크레딧

  • Rafel Ivgi님께 감사드립니다. 멘토링과 도구의 아키텍처 사고를 도와주셨습니다.
  • Yossi Sasi님께 감사드립니다. 스크립트 최적화를 도와주셨습니다.
  • Gleb Glazkov님께 감사드립니다. 완화 및 예방 섹션을 작성해 주셨습니다.

설치:

git clone https://github.com/ScorpionesLabs/DVS
powershell -ep bypass
PS> Import-Module .\DVS.psm1
PS> Get-Help Invoke-DCOMObjectScan -Detailed  # Invoke-DCOMObjectScan 명령에 대한 자세한 정보
PS> Get-Help Get-ExecutionCommand -Detailed # Get-ExecutionCommand 명령에 대한 자세한 정보
PS> Get-Help Invoke-ExecutionCommand -Detailed # Invoke-ExecutionCommand 명령에 대한 자세한 정보
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # Invoke-RegisterRemoteSchema 명령에 대한 자세한 정보

Invoke-DCOMObjectScan

Invoke-DCOMObjectScan 함수는 파일에 포함된 패턴 목록이나 정확한 함수 이름을 통해 DCOM 객체를 스캔하고 취약한 함수를 찾을 수 있게 해줍니다.

  • 예시:

    1. 레지스트리를 쿼리하지 않고 공격자 시스템에서 DC01 호스트로 MMC20.Application (ProgID) 객체를 열거하고 스캔합니다.

         Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
      

    참고: 도구는 ACL 권한을 분석하지 않으며, 성공하면 레지스트리에 언급된 세부 정보(객체 이름, 실행 파일 등)를 제외한 객체의 모든 정보를 확인합니다.

    1. MMC20.Application (ProgID) 객체가 공격자 시스템에서 DC01 호스트로 액세스 가능한지 확인하며, 먼저 DCOM 객체의 액세스 목록을 쿼리하고 확인하지 않습니다.

         PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
      
    2. MMC20.Application (ProgID)가 10.211.55.4/24 범위를 통해 적용 가능한지 확인합니다. 존재하는 경우 도구는 해당 정보를 열거하려고 시도합니다. (현재 로그온된 사용자 세션 사용).

         PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
      
    3. 10.211.55.4 IP 주소를 통해 {00020812-0000-0000-C000-000000000046} CLSID 객체가 존재하고 액세스 가능한지 확인합니다. 존재하는 경우 도구는 해당 정보를 확인합니다. (lab\administrator 자격 증명 사용).

         PS> Invoke-DCOMObjectScan -Type Single -ObjectName "{00020812-0000-0000-C000-000000000046}" -Hostlist "10.211.55.4" -CheckAccessOnly -Username "lab\administrator" -Password "Aa123456!" -Verbose   
      
    4. 10.211.55.4 IP 주소를 통해 지정된 경로(예: C:\Users\USERNAME\Desktop\DVS\objects.txt)에 저장된 모든 객체를 스캔하고, _다음 구성_으로 lab\administrator 자격 증명을 사용하여 vulnerable.txt와 같은 지정된 파일에 있는 함수 목록을 찾습니다:
      최대 깊이: 4
      최대 결과: 1 (각 객체당 1개 결과)
      AutoGrant 모드: 객체에 대한 액세스 권한이 없거나 DCOM 기능이 비활성화된 경우 DCOM 기능을 활성화하고 관련 DCOM 객체에 자동으로 권한을 부여합니다.
      마지막으로 시스템을 공격 전과 동일한 상태로 되돌립니다.

         PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type List -ObjectListFile "C:\Users\USERNAME\Desktop\DVS\objects.txt" -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -AutoGrant -Username "lab\administrator" -Password "Aa123456!" -Hostlist "10.211.55.4" -MaxResults 1 -Verbose
      
    5. 10.211.55.1/24 범위에서 사용 가능한 원격 시스템에 저장된 모든 객체를 스캔하고 선택한 파일(예: C:\Users\USERNAME\Desktop\DVS\vulnerable.txt)에 있는 목록에서 잠재적인 취약 함수를 찾고, 선택한 파일(예: C:\Users\USERNAME\Desktop\DVS\exclude.txt)에 있는 객체를 제외하며, 동일한 객체의 다른 경로에서 동일한 이름의 속성을 건너뜁니다.
      참고: SkipSameProperyName 플래그는 동일한 속성 이름이 다른 기본 설정(메서드/기타 속성) 또는 다른 깊이 체인으로 존재하는 경우 취약 함수를 놓칠 수 있습니다.

         PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type All  -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -ExcludeFileList "C:\Users\USERNAME\Desktop\DVS\exclude.txt" -Hostlist "10.211.55.1/24" -SkipSameProperyName -Verbose
      

Get-ExecutionCommand

Get-ExecutionCommand 함수는 관련 매개변수와 함께 원격 DCOM 함수와 상호 작용하고 실행되는 PowerShell 페이로드를 생성할 수 있게 해줍니다.

  • 예시:
    1. lab\administrator 자격 증명을 사용하여 10.211.55.4 IP 주소를 통해 {00020812-0000-0000-C000-000000000046} CLSID 객체와 상호 작용할 수 있는 권한이 주체 ID에 있는지 확인한 다음 실행 명령을 생성합니다.

         PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
      
    2. DCOM 액세스를 확인합니다.
      주체 ID에 필요한 권한이 없거나 DCOM 기능이 비활성화된 경우 도구는 DCOM 기능을 활성화하고 ID 액세스 권한을 부여하며 lab\administrator 자격 증명을 사용하여 10.211.55.4 IP 주소를 통해 MMC20.Application (ProgID) 객체와 상호 작용한 후 실행 명령을 생성합니다.
      마지막으로 시스템을 공격 전과 동일한 상태로 되돌립니다.

         PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
      
도구 다운로드