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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
MCPTrace — Windows 및 Linux 메모리 덤프에서 MCP/JSON-RPC 메시지 후보를 카빙하고, 검증을 위해 원시 바이트, 주소, SHA-256을 보존하는 Volatility 3 플러그인입니다. | Kitploit
도구/GitHubGitHub/kowntaewook/mcptrace
Memory ForensicsForensicsInformation GatheringMalware AnalysisDigital ForensicsIncident ResponseAI SecurityLog Analysis
GitHubkowntaewook/mcptrace

MCPTrace

Windows 및 Linux 메모리 덤프에서 MCP/JSON-RPC 메시지 후보를 카빙하고, 검증을 위해 원시 바이트, 주소, SHA-256을 보존하는 Volatility 3 플러그인입니다.

저장소 보기
7487일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MCPTrace

MCPTrace는 Windows 및 Linux 메모리 덤프에서 MCP/JSON-RPC 메시지 후보를 추출하기 위한 Volatility 3 플러그인입니다. 프로세스 메모리에서 요청, 응답, 알림, 도구 이름, 호출 인자를 조사한 뒤, 복구된 콘텐츠를 메모리 내 위치와 함께 기록합니다.

이 프로젝트는 분석가가 검사하고 검증할 수 있는 증거에 초점을 맞춥니다. 각 아티팩트는 원본 바이트, 프로세스 ID, 가상 주소, 인코딩, 길이, SHA-256 해시를 유지합니다. 결과는 추가 분석이나 다른 로그와의 비교를 위해 JSONL로 내보낼 수 있습니다. MCPTrace는 획득된 메모리 이미지에서 동작하며, LLM이나 외부 AI API가 필요하지 않습니다.

기능

  • 읽을 수 있는 프로세스 메모리에서 UTF-8 및 UTF-16LE JSON-RPC 아티팩트를 추출합니다.
  • tools/call 이름과 인자를 포함한 MCP 관련 메서드 및 응답 형태를 식별합니다.
  • 나중에 이미지와 대조하여 검증할 수 있도록 원본 바이트와 주소를 보존합니다.
  • 동일한 PID와 타입이 지정된 요청 ID를 사용하여 요청/응답 관계를 제안합니다.
  • 경로 또는 URL 검사와 같이 분석가가 정의한 선택적 규칙을 도구 인자에 적용합니다.
  • 읽을 수 없는 바이트, 오류, 검색 한도를 포함한 아티팩트 및 프로세스별 요약을 내보냅니다.

현재 분석 대상은 Windows x64와 Linux x86-64입니다. 플러그인 이름은 Volatility를 실행하는 데 사용된 OS와 무관하게 메모리 이미지의 운영 체제를 가리킵니다.

동작 방식

MCPTrace는 Volatility의 프로세스 열거와 주소 변환을 사용합니다. Windows에서는 프로세스의 **VAD(Virtual Address Descriptor)**를 순회하고, Linux에서는 **VMA(Virtual Memory Area)**를 순회합니다. 이러한 매핑이 검사할 프로세스 주소 범위를 정의합니다. 두 어댑터는 동일한 메시지 카빙, 상관관계, 정책, 내보내기 코드를 공유합니다.

읽을 수 있는 범위 내에서 스캐너는 리터럴 JSON-RPC 버전 마커를 검색하고 그 주변에서 후보 JSON 객체를 찾습니다. 중첩 객체, 이스케이프된 문자, 문자열 내부의 중괄호, 연속된 읽기 청크에 걸친 메시지를 처리합니다. 중복 키가 있거나 지원되지 않는 식별자가 있는 JSON은 조용히 재해석되지 않고 거부됩니다. MCP 관련성은 알려진 메서드 이름, 응답 형태, 연관된 요청 ID를 기반으로 판단되며, 전체 MCP 스키마 검증은 아닙니다.

누락된 메모리는 누락된 상태로 유지됩니다. 리더는 0으로 빈틈을 채우거나 별도의 VAD/VMA에 걸쳐 바이트를 이어 붙이지 않습니다. --include-partial을 사용하면 파싱되지 않은 조각을 별도로 표시할 수 있으며, 누락된 ID나 인자를 만들어내지 않습니다. 매핑되지 않은 큰 범위는 페이지 테이블 정보를 사용하여 건너뛸 수 있으며, 읽을 수 없는 주소 범위는 스캔 통계에 계속 표시됩니다.

상관관계는 의도적으로 보수적으로 처리됩니다. 1과 같은 숫자 ID는 문자열 ID "1"과 구별되며, 서로 다른 프로세스의 메시지는 자동으로 연결되지 않습니다. 하나의 ID와 연관된 여러 개의 서로 다른 표현은 모호한 것으로 표시됩니다. 후보 관계는 그 자체로 세션, 메시지 방향, 실행 타임라인을 재구성하지 않습니다.

설치

**Python 3.10+**이 필요합니다. 설치에는 고정된 프레임워크 의존성 volatility3==2.28.2가 포함됩니다. 저장소의 plugins/ 디렉터리를 사용 가능한 상태로 유지하세요. Python 패키지는 pip로 설치되지만, Volatility 어댑터는 -p plugins로 로드됩니다.

git clone https://github.com/Kowntaewook/MCPTrace.git
cd MCPTrace
python -m venv .venv

셸 환경을 활성화합니다:

  • Windows PowerShell: .\.venv\Scripts\Activate.ps1
  • Linux/macOS 셸: source .venv/bin/activate

그런 다음 MCPTrace를 설치합니다:

python -m pip install .

사용법

가상 환경을 활성화한 상태에서 저장소 루트에서 다음 예제를 실행하세요. 이미지 경로와 PID를 증거 및 대상 프로세스로 바꾸세요. MCP 클라이언트와 서버는 별도 프로세스에서 실행될 수 있으므로, 해당되는 경우 둘 다 검사하세요.

Windows

MCPTrace를 실행하기 전에 Volatility가 이미지를 해석하고 프로세스를 열거할 수 있는지 확인하세요. Windows 심볼 준비에는 네트워크 액세스가 필요할 수 있습니다.

vol -f windows.raw windows.info.Info
vol -f windows.raw windows.pslist.PsList
mkdir output-windows
vol -p plugins -f windows.raw -o output-windows windows.mcptrace.MCPTrace --pid 4242 5252 --dump

Linux

덤프의 정확한 커널 빌드와 일치하는 ISF 심볼을 symbols/linux/에 배치하세요. linux.pslist.PsList가 커널 또는 레이어 요구 사항을 해결할 수 없는 경우, MCPTrace 출력을 해석하기 전에 이미지/심볼 설정을 해결하세요.

vol -s symbols -f linux.lime linux.pslist.PsList
mkdir output-linux
vol -p plugins -s symbols -f linux.lime -o output-linux linux.mcptrace.MCPTrace --pid 4242 --dump
  • 모든 프로세스를 스캔하려면 --pid를 생략하거나, 여러 PID를 전달하세요: --pid 4242 5252.
  • --dump는 -o로 지정한 디렉터리에 프로세스별 JSONL 파일을 내보냅니다.
  • 모든 옵션을 확인하려면 vol -p plugins windows.mcptrace.MCPTrace -h(또는 Linux의 동등한 명령)를 사용하세요.

전체 결과 테이블의 JSON 렌더링을 얻으려면 전역 -r json 옵션을 플러그인 이름 앞에 두세요. 이는 --dump로 생성되는 프로세스별 JSONL 내보내기와는 별개입니다.

vol -p plugins -f windows.raw -r json windows.mcptrace.MCPTrace --pid 4242 > findings.json

공통 옵션

옵션용도
--pid 4242 5252프로세스 ID를 선택합니다. 생략하면 어댑터가 열거한 모든 프로세스를 검사합니다.
--dump표시된 아티팩트와 스캔 요약을 전역 -o 디렉터리를 사용하여 JSONL로 내보냅니다.
--include-partial누락된 필드를 재구성하지 않고 원시의 파싱되지 않은 조각을 포함합니다.
--include-rpcMCP 관련성이 확인되지 않은 일반 JSON-RPC 후보도 표시합니다.
--policy PATH도구 인수에 로컬 규칙을 적용합니다. Windows 및 Linux 예제를 참조하십시오.
--suspicious-only정책 일치 항목과 요약을 표시합니다. 비어 있지 않은 정책이 필요합니다.
--max-records N필터링 전에 프로세스당 후보 레코드 수를 제한합니다. 기본값: 10000.
--max-object-bytes N하나의 완전한 JSON 객체의 크기를 제한합니다. 기본값: 65536바이트.
--max-bytes N프로세스당 시도되는 주소 범위 바이트를 제한합니다. 0은 무제한을 의미합니다.

정책 결과는 분석가가 제공한 규칙에 대한 일치 항목을 설명합니다. 일치 항목이 악성 활동을 입증하는 것은 아닙니다. 다른 사례에 적용하기 전에 예제 경로, 호스트, 도구 이름을 검토하십시오.

출력 읽기

mcptrace.pid-4242.jsonl과 같은 파일에는 메타데이터 레코드, 아티팩트 레코드, 그리고 최종 스캔 요약이 포함됩니다. 메타데이터는 프로세스, 대상 OS, 주소 공간을 식별합니다. 아티팩트 레코드는 파싱된 메시지와 정확히 복구된 바이트를 모두 보존합니다.

필드의미
pid, virtual_address, region_start증거의 프로세스 및 위치입니다. 주소는 이미지 파일 오프셋이 아닌 프로세스 가상 주소입니다.
message, method, tool, request_id사용 가능한 경우 파싱된 메시지 내용과 선택된 필드입니다.
raw_base64, byte_length, raw_sha256원본 바이트, 그 길이, 검증용 SHA-256입니다.
state, encoding레코드가 완전한지 조각인지 여부와 바이트가 인코딩된 방식입니다.
relation, candidate_virtual_addresses후보 대응 위치와 관계가 모호한지 여부입니다.
findings선택적 인수 정책 검사의 결과입니다.

아티팩트를 검증하려면 raw_base64를 디코딩하고 길이와 해시를 확인한 다음, 해당 프로세스 메모리 계층을 통해 해당 범위를 다시 읽으십시오. message를 JSON으로 재포맷하면 공백이나 이스케이프가 변경될 수 있으므로 정확한 비교에는 보존된 바이트를 사용하십시오. 서로 다른 메모리 사본은 별도의 증거 레코드로 남습니다.

아티팩트와 함께 스캔 요약을 읽으십시오. 스캔 요약은 스캔된 영역, 읽을 수 있는 바이트와 읽을 수 없는 바이트, 유효하지 않은 영역, 건너뛴 프로세스, 오류, 제한 이벤트를 보고합니다. 읽을 수 없는 바이트에는 사용되지 않는 예약 주소 공간이 포함될 수 있습니다. 메시지가 없는 결과라고 해서 MCP 활동이 결코 발생하지 않았음을 입증하는 것은 아닙니다.

벤치마크

벤치마크는 세 개의 새 Windows Server 2022 VM 캡처를 사용했습니다. 각 VM은 stdio를 통해 공식 Python MCP SDK를 사용하는 두 개의 클라이언트/서버 쌍을 실행했습니다. WinPmem으로 물리적 RAM을 획득하기 전에 실제 트래픽이 교환되었으며, 테스트 메시지는 결과 이미지에 주입되지 않았습니다.

각 조건은 초기화, 알림, 도구 검색을 포함하여 64회의 도구 호출과 133개의 논리 메시지를 완료했습니다. 페이로드에는 ASCII, 한국어/이모지, 이스케이프된 문자, 공백, 2 KiB 문자열이 포함되었습니다. 조건은 다음과 같습니다:

  • 보존 프레임 목록 없음: 직렬화된 프레임의 별도 목록을 유지하지 않고 SDK 송수신 경계에서 정답을 기록합니다.
  • 보존 프레임 대조군: 동일한 정답을 기록하고 직렬화된 프레임을 메모리에 유지합니다. 또한 캡처당 의도적으로 전송되지 않은 MCP 형태의 JSON 객체 하나를 유지합니다.

복구 수는 각 캡처 내의 클라이언트와 서버를 합산하고 논리 메시지를 중복 제거합니다. 표는 세 캡처에 걸친 평균과 범위를 보고합니다.

조건메시지 / 133: 평균 (범위)도구 쌍 / 64: 평균 (범위)
보존 프레임 목록 없음59.7 (55-66)18.3 (15-21)
보존 프레임 대조군133.0 (133-133)64.0 (64-64)

프레임을 보존하지 않은 실행에서는 각각 66, 58, 55개의 메시지와 21, 19, 15개의 완전한 도구 요청/응답 쌍을 복구했습니다. 캡처 전체를 합산하면 179/399 메시지와 55/192 쌍입니다. 프레임을 보존한 대조군은 각 캡처에서 133개의 메시지와 64개의 쌍을 복구했습니다. 양쪽 엔드포인트에서 발견된 쌍이 반드시 하나의 프로세스 안에 완전히 존재하는 것은 아닙니다.

세 번의 캡처 중 두 번은 후보 검색 한도에 도달하여 4회와 3회의 백트래킹 한도 이벤트를 보고했습니다. 해당 실행은 명시적으로 completed_with_limits로 표시되며 표에 계속 포함됩니다. 이 이벤트는 누락된 고유 메시지의 개수가 아닙니다. 최종 세 번의 캡처에서는 프로세스 읽기 오류, 건너뛴 대상, 레코드/바이트 예산 한도가 관찰되지 않았습니다.

각 이미지는 세 번 분석되어 선택된 네 개의 엔드포인트 프로세스에 대한 아홉 번의 CLI 스캔을 수행했습니다. 런타임은 중앙값 53.95초, 평균 53.94초, 범위 53.32-54.48초였습니다. 러너는 4개의 논리 CPU와 약 16 GiB의 RAM을 보고했습니다.

타이밍에는 CLI 시작, Volatility automagic, 프로세스 스캔, JSON 렌더링, JSONL 내보내기가 포함됩니다. 획득, 초기 심볼 준비, 별도의 바이트 검증은 제외됩니다. 이미지는 스캔 전에 이미 해시 및 검사되었으므로, 이는 콜드 캐시나 전체 프로세스/전체 이미지 처리량 측정이 아닙니다.

내보낸 1,339개 레코드 / 562,402바이트 전부가 바이트, 해시, 가상 주소, VAD 경계에 대한 네이티브 프로세스 계층 검사를 통과했습니다. 반복 스캔은 바이트 단위로 동일한 JSONL을 생성했고, 이미지 해시는 변경되지 않았으며, 임시 RAM 이미지는 분석 후 삭제되었습니다. 평가 가능한 2,480개의 방향성 후보 링크 중 잘못된 링크는 관찰되지 않았습니다. 이 수에는 메모리 복사본 간의 링크가 포함됩니다.

의도적으로 전송하지 않은 세 개의 대조군도 복구되었습니다. 이는 중요한 해석상의 한계를 보여줍니다. MCP 형태의 객체는 전송되지 않았더라도 메모리에 존재할 수 있습니다. 증거를 평가할 때 로그, 캐시된 값, 예제를 고려해야 합니다.

두 조건 모두 메모리를 변경하는 로깅을 포함하며, 프레임 보존은 유리한 대조군입니다. 이 결과는 소규모 SDK 픽스처를 설명하는 것으로, 일반적인 재현율, 정밀도, 공격 탐지 성능이 아닙니다. 워크로드가 이전의 8회 호출 양성 검증과 다르므로, 두 결과는 통제된 전후 비교가 아닙니다. 전체 측정값, 캡처별 통계, 재현 지침은 벤치마크 보고서와 기계 판독 가능 결과에 있습니다.

검증 및 구현 결과

벤치마크는 조기 한도 카운터 증가 문제를 드러냈습니다. 133개의 유효한 SDK 메시지를 포함한 로컬 스트림이 완전히 복구되었지만 228개의 후보 한도 이벤트를 생성했습니다. 이제 카운터는 이전 후보가 제외된 후 제한된 백트래킹이 실패할 때만 증가합니다. 검색 한도 자체는 변경되지 않았으며, 실제 한도 이벤트는 출력에 계속 표시됩니다. 초기 실패 시도와 수정 사항은 벤치마크 보고서에 문서화되어 있습니다.

도구 다운로드