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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PPLRunner — Windows에서 서명된 자식 프로세스를 AM-PPL(Anti-Malware Protected Process-Light)로 실행하는 ELAM 드라이버와 서비스를 빌드하며, 보안 연구용입니다. | Kitploit
도구/GitHubGitHub/pathtofile/pplrunner
Defensive ToolsPrivilege EscalationPersistence MechanismsExploitationMalware AnalysisPapers & ResearchRed Teaming
GitHubpathtofile/pplrunner

PPLRunner

Windows에서 서명된 자식 프로세스를 AM-PPL(Anti-Malware Protected Process-Light)로 실행하는 ELAM 드라이버와 서비스를 빌드하며, 보안 연구용입니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PPLRunner

이 프로젝트는 연구 목적으로 '임의*' 프로세스를 Anti Malware Protected-Process-Light(PPL)로 실행할 수 있게 하는 것을 목표로 합니다. (* 자세한 내용은 제한 사항 섹션을 참조하세요)

자세한 내용과 이 프로젝트의 배경이 되는 이유는 제가 작성한 이 블로그 글을 참조하세요.

개요

시스템 보호 프로세스는 Windows의 보안 모델로, 시스템 및 안티바이러스 프로세스를 관리자/SYSTEM에 의한 경우에도 변조나 내부 검사로부터 보호하도록 설계되었습니다.

Anti Malware 'Protected Process-Light'(PPL)로 시작된 프로세스는 수행할 수 있는 작업이 제한되며, 서명된 코드만 로드할 수 있고, 보호되지 않은 프로세스에 의해 디버깅, 검사 또는 중지될 수 없습니다. 또한 Microsoft-Windows-Threat-Intelligence ETW 공급자와 같은 특수 데이터에 접근할 수 있습니다.

이 프로젝트는 ELAM(Early-Launch Anti Malware) 드라이버와 사용자 모드 서비스를 생성합니다. 이 서비스는 시작될 때 구성 가능한 자식 프로세스를 실행하며, 이 자식 프로세스 역시 PPL로 표시됩니다.

자식 바이너리는 서비스와 동일한 인증서로 서명되어야 하며, 몇 가지 다른 제한 사항도 충족해야 하지만, 그 외에는 원하는 바이너리와 명령줄 인수를 사용할 수 있습니다.

솔직히 말해 ELAM과 PPL이 무엇인지 잘 설명하지 못하고 있으므로, 대신 다음에서 시작하는 것을 권장합니다:

  • Chapter 3, Windows Internals Part 1 (솔직히 Windows 관련 모든 것의 최고 자료)
  • https://docs.microsoft.com/en-us/windows/win32/services/protecting-anti-malware-services-
  • https://www.crowdstrike.com/blog/protected-processes-part-3-windows-pki-internals-signing-levels-scenarios-signers-root-keys/
  • https://googleprojectzero.blogspot.com/2018/10/injecting-code-into-windows-protected.html

사전 빌드/간편 모드

Releases에서 미리 빌드되고 서명된 PPLRunner 서비스와 커널 모듈을 받을 수 있습니다. 릴리스에는 자동 생성된 인증서와 개인 키가 .pfx 파일로 포함되어 있으며, 이 파일은 비밀번호 password로 보호됩니다. 이건 연구 목적 전용이라고 말했었죠?

수동 설치

자신만의 프로젝트를 생성하고 빌드하려면:

설정

Windows SDK가 설치되어 있는지 확인하세요.

generate_cert.ps1과 sign_file.ps1을 열고 $password 변수를 다른 값으로 변경하세요(두 파일의 값이 서로 일치해야 합니다).

generate_cert.ps1을 실행하세요. 그러면 새로운 개인 및 공개 인증서가 포함된 ppl_runner.pfx가 생성됩니다. 이 인증서는 PPLRunner에서 사용하는 모든 바이너리에 서명하는 데 사용됩니다.

빌드

ppl_runner.sln을 빌드하세요. 그러면 3개의 바이너리가 생성됩니다:

elam_driver.sys

인증서 정보가 포함된 ELAM 커널 드라이버입니다. 이 드라이버는 실제로 아무 작업도 하지 않으며 실제로 로드되지도 않습니다. 단지 서명 인증서를 담는 그릇으로만 사용됩니다.

ppl_runner.exe

서비스 설치 프로그램 및 바이너리입니다. PPL 서비스로서 시작되면 자식 프로세스를 PPL로 실행한 다음 중지하고 종료합니다.

child_example.exe

빌드 시 Visual Studio에 의해 올바른 인증서로 서명될 예제 실행 파일입니다. PPLRunner는 거의 모든 바이너리를 실행할 수 있으며, 이것은 자동으로 서명될 예제일 뿐입니다.

설치

참고 운영 환경이나 가정용 PC가 아닌 테스트 머신에만 설치하세요.

  1. 빌드가 완료되면 elam_driver.sys와 ppl_runner.exe를 대상 머신의 폴더에 복사하세요.

  2. 관리자 권한 프롬프트에서 다음을 실행하여 테스트 서명을 활성화한 후 재부팅하세요:

bcdedit /set testsigning on
  1. 관리자 권한 명령 프롬프트에서 복사한 실행 파일이 있는 폴더로 이동한 후 다음을 실행합니다:
ppl_runner.exe install

이렇게 하면 ppl_runner라는 이름의 서비스가 설치됩니다.

구성

바이너리를 서명하여 실행하려면 sign_file.ps1 스크립트를 사용하거나, 직접 signtool.exe를 실행하여 ppl_runner.pfx 인증서로 서명하십시오. signtool.exe가 없다면 Windows SDK에 포함되어 있습니다.

레지스트리 키 HKLM\SOFTWARE\PPL_RUNNER를 생성하십시오. 기본/빈 키를 REG_SZ로 설정하고, 실행할 바이너리의 전체 경로와 명령줄 인수를 포함시키십시오. 예를 들어 명령줄에서 다음과 같이 합니다:

REG.exe ADD HKLM\SOFTWARE\PPL_RUNNER /ve /t REG_SZ /d "C:\path\to\binay --argument 1"

실행

서비스가 실행 파일을 시작하도록 하려면, 관리자 권한 프롬프트에서 다음을 실행하세요:

net start ppl_runner

PPL 서비스로서, ppl_runner는 시작되면 레지스트리 키를 읽고, 자식 프로세스도 PPL로 실행한 뒤, 중지하고 종료합니다. 실행에 성공해도 여전히 the service failed to run이라고 표시되지만, sc query ppl_runner로 반환 코드를 확인하면 0, 즉 ERROR_SUCCESS여야 합니다.

자식 프로세스는 보이지 않지만, Debug Output과 DBGView.exe를 사용해 어떤 형태로든 출력을 얻을 수 있습니다(child_example 코드 참조).

정리/제거

서비스가 Anti Malware PPL이기도 하므로, 비슷한 수준의 프로세스만이 이를 중지하고 삭제할 수 있습니다. 그러나 PPLRunner를 사용해 스스로를 제거할 수 있으며, 간단히 레지스트리 키의 명령을 다음과 같이 설정하면 됩니다:

C:\path\to\ppl_runner.exe remove

그리고 서비스를 실행합니다. 즉, 다음을 실행합니다:

REG.exe ADD HKLM\SOFTWARE\PPL_RUNNER /ve /t REG_SZ /d "C:\path\to\ppl_runner.exe remove"
net start ppl_runner

제한 사항

  • 이 프로젝트는 testsigning 모드에서만 작동합니다.
  • 재부팅할 때마다 ppl_runner.exe install을 다시 실행해야 합니다.
  • 자식 바이너리는 서비스와 동일한 인증서로 서명되어야 합니다.
  • 바이너리가 로드하는 모든 DLL도 서명되어야 합니다.

디버깅

Sysinternals의 DBGView를 실행하고 Win32 Global을 로깅하며 *[PPL_RUNNER]*로 필터링하세요. 이렇게 하면 서비스와 설치 프로그램의 모든 로그를 볼 수 있습니다.

사용 예시

추후 작성 예정 - Sealighter 블로그

유사 프로젝트

James Forshaw는 기존 PPL 프로세스에 코드를 주입하는 멋진 프로젝트를 만들었습니다.

추가 자료 및 감사의 말

ELAM과 PPL에 대해 더 배우는 가장 좋은 방법은 아마도 Alex Ionescu를 팔로우하는 것일 것입니다. 다음부터 시작하는 것이 좋을지도 모릅니다: https://www.crowdstrike.com/blog/protected-processes-part-3-windows-pki-internals-signing-levels-scenarios-signers-root-keys/

Matthew Graeber와 James Forshaw를 팔로우하는 것도 또 하나의 좋은 방법입니다.

인증서에서 'To-Be-Signed' 해시를 얻기 위한 powershell 스크립트를 제공해 주신 Matt에게 큰 감사를 드립니다.

James는 PPL과 그 결함에 대해 많이 글을 썼습니다.

도구 다운로드