Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
RpcInvestigator — Windows RPC 인터페이스 발굴 및 분석 도구로, 시각적 엔드포인트 열거, PE 파싱, 심볼 해석, 실시간 ETW 스니핑, 그리고 보안 감사를 위한 즉석 클라이언트 코드 생성을 지원합니다. | Kitploit
도구/GitHubGitHub/trailofbits/rpcinvestigator
Vulnerability AnalysisReverse EngineeringPenetration TestingBinary Analysis
GitHubtrailofbits/rpcinvestigator

RpcInvestigator

Windows RPC 인터페이스 발굴 및 분석 도구로, 시각적 엔드포인트 열거, PE 파싱, 심볼 해석, 실시간 ETW 스니핑, 그리고 보안 감사를 위한 즉석 클라이언트 코드 생성을 지원합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

RPC 조사기

저희의 블로그 포스트 공지사항을 읽어보세요.

RPC 조사기(RPCI)는 .NET/C# Windows Forms UI 애플리케이션으로, Windows RPC 엔드포인트에 대한 고급 검색 및 분석 인터페이스를 제공합니다. 이 도구는 NtApiDotNet 플랫폼의 기존 핵심 RPC 기능을 둘러싼 시각적 인터페이스를 제공하며, 다음을 포함합니다:

  • 모든 활성 ALPC RPC 서버 열거
  • 모든 PE 파일에서 RPC 서버 파싱
  • 프로세스 및 해당 프로세스가 로드한 모듈(서비스 포함)에서 RPC 서버 파싱
  • 심볼 서버에서 심볼 정보 가져오기
  • 스크립팅을 위해 직렬화된 .NET 개체로 RPC 서버 정의 내보내기

이러한 핵심 기능 외에도 RPCI는 추가 기능을 제공합니다:

  • 클라이언트 워크벤치: 관심 있는 RPC 서버를 마우스 오른쪽 버튼으로 클릭하여 즉시 RPC 클라이언트 바이너리를 생성 및 실행할 수 있습니다. 워크벤치에는 C# 코드 편집기 창이 있어 클라이언트를 실시간으로 편집하고 코드에서 실행된 RPC 프로시저의 결과를 관찰할 수 있습니다.
  • 발견된 RPC 서버는 검색 가능한 라이브러리로 구성되어, 사용자 정의 검색 인터페이스를 통해 모든 서버의 모든 RPC 프로시저에서 흥미로운 루틴을 검색하는 등 유용한 방식으로 RPC 서버 데이터를 피벗할 수 있습니다.
  • RPC 스니퍼 도구는 RPC 관련 ETW 데이터에 대한 가시성을 추가하여 활성 RPC 호출의 거의 실시간 보기를 제공합니다. ETW 데이터를 NtApiDotNet의 RPC 서버 데이터와 결합하여 진행 중인 RPC 활동에 대한 더 완전한 그림을 구축할 수 있습니다.

일반적인 워크플로

RPC 조사기가 지원하는 여러 워크플로가 있습니다:

  • 감사
    • ALPC 엔드포인트와 통신하는 모든 프로세스에서 활성 ALPC RPC 서버 열거
    • Windows 서비스에서 실행 중인 모든 RPC 서버 열거
    • PE 파일(EXE 또는 DLL 등)에 정의된 오프라인 RPC 서버 로드
  • 대화형
    • 클라이언트 워크벤치: 모든 RPC 서비스에 호출할 수 있도록 사용자 지정 가능한 RPC 클라이언트 코드를 자동 생성합니다.
    • RPC 스니퍼: RPC 관련 ETW(Event Tracing for Windows) 데이터의 실시간 모니터.

예제 워크플로: 작업 스케줄러 RPC 분석

이 예제에서는 예약된 작업을 관리하고 실행하는 데 사용되는 Windows 작업 스케줄러 RPC 서비스를 검사합니다. 서비스를 찾고, 클라이언트 코드를 생성한 다음, 노출된 프로시저 중 하나와 상호 작용하도록 클라이언트를 사용자 지정합니다.

먼저 File -> Load From Service를 클릭하여 Windows 서비스 목록을 로드합니다. 그러면 새 서비스 목록 창이 열립니다:

Windows 작업 스케줄러인 Schedule 서비스를 찾아 서비스를 선택하고 Go를 클릭합니다.

RPCI가 관련된 모든 RPC DLL을 로드하기 전에 확인 메시지가 표시됩니다. 계속하려면 Yes를 클릭하세요. 로드되면 서비스 프로세스에 로드된 모든 모듈에서 발견된 모든 RPC 서버 목록이 표시됩니다. Windows 작업 스케줄러 RPC 서버의 인터페이스 ID는 86D35949-83C9-4044-B424-DB363231FD0C입니다. 이 인터페이스 ID가 있는 행을 목록에서 찾으십시오. 해당 행에는 Task Scheduler라는 실행 중인 서비스가 있어야 합니다. 해당 행을 마우스 오른쪽 버튼으로 클릭하고 New Client를 선택합니다.

클라이언트 창의 왼쪽 부분에는 RPC 서버 메타데이터와 클라이언트 코드의 명령줄 출력이 표시됩니다. 오른쪽에는 두 개의 탭이 있습니다:

  • Client Code - 하나 이상의 프로시저와 상호 작용하도록 사용자 지정할 수 있는 자동 생성된 C# 클라이언트 코드입니다.
  • Procedures - 노출된 RPC 프로시저 목록입니다.

이 예제에서는 SchRpcHighestVersion 프로시저를 호출합니다. 이 메서드는 out int version 하나의 인수를 허용하며, 프로시저 호출 후 이 인수에는 RPC 인터페이스에서 지원하는 가장 높은 작업 스케줄러 프로토콜 버전이 포함됩니다. 상위 16비트는 주 버전이고 하위 16비트는 부 버전입니다.

이 프로시저를 호출하려면:

  1. Client Code 창에서 RPC 클라이언트의 주요 진입점인 Run 메서드를 찾습니다.

  2. Run 메서드 본문을 편집하여 프로시저를 호출합니다:

    root@kitploit:~
    public async Task<bool> Run()
    {
        int version;
        int status = SchRpcHighestVersion(out version);
        if (status == 0) {
            long major = (version & 0xffff0000) >> 16;
            long minor = version & 0x0000ffff;
            Console.WriteLine("highest supported RPC version: {0}.{1}", major, minor);
        } else {
            Console.WriteLine("call to SchRpcHighestVersion failed with error: {0:X}", status);
        }
        return true;
    }
    
  3. 이 코드를 추가한 후 Run 버튼을 클릭하여 클라이언트를 실행합니다. 그러면 C# 코드가 컴파일된 후 Run 메서드가 실행됩니다.

    • 클라이언트 코드를 컴파일할 수 없는 경우 컴파일 오류가 포함된 팝업 상자가 표시됩니다.

컴파일에 성공하면 Output 상자에 다음과 유사한 내용이 표시됩니다:

root@kitploit:~
> Run() output:
highest supported RPC version: 1.6

구성

RPC 조사기에는 여러 구성 설정이 있습니다.

설정설명기본값
dbghelp.dlldbghelp.dll 모듈의 파일 위치설치된 Windows 키트에서 최신 버전 찾기
Symbol PathWindows 심볼 경로(심볼 서버 또는 로컬 디렉터리 가능)기본 공개 Windows 서버: srv*c:\symbols*https://msdl.microsoft.com/download/symbols
Trace Level로깅 추적 수준info

구성 설정은 애플리케이션 내 Edit -> Settings 메뉴를 통해 수정할 수 있습니다.

문제 해결

초기 릴리스 이후 RPC 조사기는 .NET Framework 애플리케이션에서 .NET 7 애플리케이션으로 변환되었습니다. 빌드 문제가 발생하면 Visual Studio가 최신 상태인지 확인하세요. .NET Framework 버전에서 빌드하기 전에 모든 빌드 출력 폴더를 삭제하는 것이 좋습니다.

또한 안전하지 않은 BinaryFormatter 클래스에서 protobuf-net으로 이동했기 때문에 .NET Framework 버전으로 생성된 RPC 라이브러리는 .NET 버전과 호환되지 않습니다.

RPC 조사기에서 무작위 충돌이 발생하는 경우 관리자에게 EDR을 조정해 달라고 요청하여 해결책을 찾을 수 있습니다. 일부 EDR은 JIT 컴파일 언어와 정상적으로 작동하지 않는다는 사실을 발견했습니다.

경우에 따라 RPC 조사기가 EDR에 의해 악성으로 탐지되며, Virus Total에서 일부 오탐(false positive)이 발생하기도 합니다. 이는 알려진 문제입니다. 그 이유는 RPC 조사기에 James Forshaw가 만든 NtObjectManager 패키지가 포함되어 있기 때문입니다. 이 패키지는 Windows Defender를 포함한 많은 EDR에서 탐지(오탐)되는 것으로 알려져 있습니다.

개발 환경

  1. Visual Studio Community 2022를 설치하고, .NET Desktop Development 워크플로를 선택했는지 확인하세요.
  2. 최신 Windows 10 SDK를 다운로드하여 설치합니다. 전체 설치를 수행하여 .NET 4.8.1 및 디버깅 도구가 설치되도록 합니다.
  3. 솔루션을 열고 프로젝트가 올바르게 로드되었는지 확인합니다. .NET 4.8.1 Targeting Pack이 누락되었다는 오류가 발생하면 .NET Framework 4.8.1 Developer Pack을 다운로드하여 설치한 후 Visual Studio를 다시 시작하세요.

추가 자료

Windows RPC는 10년 넘게 인기 있는 연구 주제였기 때문에 여기에 언급할 관련 리소스와 연구 노력이 너무 많습니다. 이 도구를 구축하는 동안 접한 몇 가지를 아래에 나열했습니다:

  • https://clearbluejar.github.io/posts/surveying-windows-rpc-discovery-tools/
  • https://www.powerofcommunity.net/poc2019/James.pdf
  • https://www.tiraniddo.dev/2022/06/finding-running-rpc-server-information.html
  • https://clearbluejar.github.io/posts/from-ntobjectmanager-to-petitpotam/
  • https://itm4n.github.io/from-rpcview-to-petitpotam/
  • https://learn.microsoft.com/en-us/windows/win32/rpc/rpc-security-essentials
  • https://www.cyberark.com/resources/threat-research-blog/understanding-windows-containers-communication
  • https://github.com/silverf0x/RpcView
  • https://github.com/xpn/RpcEnum
  • https://github.com/cyberark/RPCMon
  • https://github.com/tyranid/WindowsRpcClients

RPC 내부에 익숙하지 않거나 기술적인 복습이 필요하다면, 이 주제에 대한 권위 있는 자료 중 하나인 Alex Ionescu의 2014년 싱가포르 SyScan 강연 All about the RPC, LRPC, ALPC, and LPC in your PC를 추천합니다.

도구 다운로드