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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Pyramid — EDR(엔드포인트 탐지 및 대응)의 사각지대에서 운영을 돕는 도구 | Kitploit
도구/GitHubGitHub/naksyn/pyramid
Post-ExploitationPenetration TestingRed Teaming
GitHubnaksyn/pyramid

Pyramid

EDR(엔드포인트 탐지 및 대응)의 사각지대에서 운영을 돕는 도구

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Supported Python versions Twitter

피라미드

이미지

무엇인가요

피라미드는 다음으로 구성됩니다:

  1. Python HTTP/S 서버 – 암호화된 파일(chacha, xor)을 전달할 수 있음
  2. Bloodhound-py, secretsdump, LaZagne, Pythonnet, DonPAPI, pythonmemorymodule, paramiko, pproxy와 같은 공격 도구의 의존성을 메모리에서 로드할 수 있는 Python 모듈
  3. 고정된 Python 의존성 (zip 파일) – 메모리에서 임포트 가능
  4. 피라미드 모듈을 다운로드, 복호화 및 메모리에서 실행하는 Python 크래들

왜 유용한가

피라미드는 사후 침투 작업을 회피적으로 수행하는 데 유용하며, 서명된 바이너리(예: python.exe)에서 의존성을 메모리로 임포트하여 공격 도구를 실행합니다. 이는 다음 이유로 가능합니다:

  1. Python Embeddable 패키지는 좋은 평판을 가진 서명된 Python 인터프리터를 제공합니다.
  2. Python은 많은 합법적인 응용 프로그램이 있으므로, 인터프리터가 API를 기본적으로 실행하기 때문에 python.exe 바이너리에서 다양한 원격 측정 데이터가 발생합니다. 이는 Python.exe 프로세스 내에서 작동하고 python.exe 바이너리의 방대한 "원격 측정 지문"에 섞여 들어가려고 시도함으로써 악용될 수 있습니다.
  3. Python 코드 실행에 대한 감사가 부족합니다. PEP-578이 이를 해결하려 했지만, 기본 python.exe 바이너리에는 감사 기능이 기본적으로 활성화되어 있지 않습니다.
  4. Python 언어를 사용하여 Python 모듈을 동적으로 임포트하여 공격 도구를 실행하고, 일부 BOF 수정 후 Beacon Object Files를 python.exe 내에서 직접 실행하는 등 사후 침투 작업을 Python.exe에서 기본적으로 수행할 수 있습니다.

자세한 내용은 DEFCON30 - Adversary village 발표 "Python vs Modern Defenses" 슬라이드 데크 및 내 블로그 게시물을 확인하세요.

면책 조항

이 도구는 EDR의 일부 사각지대 가정에 기반한 우회 전략을 시연하기 위해 제작되었습니다. 이는 이미 존재하는 기술과 도구를 (제가 아는 한) 새로운 방식으로 결합하여 방어를 회피하는 데 도움이 될 수 있습니다. 이 도구의 유일한 의도는 커뮤니티가 이러한 사용에 대한 인식을 높이고 해결을 가속화하는 데 기여하는 것입니다. 이는 제로데이가 아니며, 완전한 기능을 갖춘 화려한 C2도 아닙니다. 피라미드는 EDR의 잠재적 사각지대를 악용하며, 이에 대한 조명을 비추기 위해 공개되었습니다. 방어에 관한 문단이 포함되어 있으며, 경험 많은 블루팀원들이 기여하고 피라미드가 강조하는 문제에 대한 더 나은 해결 방안을 제시할 수 있기를 바랍니다. 모든 정보는 교육 목적으로만 제공됩니다. 지침에 따르는 것은 본인의 책임입니다. 저자와 그의 고용주는 어떠한 개인이나 조직이 입은 직접적 또는 결과적 손해나 손실에 대해 책임을 지지 않습니다.

크레딧

피라미드의 메모리 내 로딩은 초기에 xorrior의 Empyre - Finder 클래스에서 영감을 받아 확장되었습니다.

기여자

snovvcrash가 mod-DonPAPI.py - mod-LaZagne.py - mod-clr.py 모듈을 구축했습니다.

현재 기능

피라미드 모듈 기능은 Python 인터프리터에서 직접 실행할 수 있으며 현재:

  1. Python 의존성의 다운로드, 복호화 및 메모리 내 로딩
  2. BloodHound Python, impacket secretsdump, DonPAPI, LaZagne의 동적 로딩 및 실행
  3. PythonMemoryModule을 통한 원격으로 가져온 dll 또는 exe의 메모리 내 로딩
  4. SSH 리버스 포트 포워드 터널을 통한 SOCKS5 프록시
  5. Pythonnet을 통한 메모리 내 .NET 어셈블리 로딩

Pyramid HTTP 서버 주요 기능:

  1. 전달할 파일의 온더플라이 암호화 (chacha, xor)
  2. 피라미드 명령줄에 기반한 서버 설정 자동 생성
  3. HTTP 파라미터 (URL) 디코딩 및 복호화
  4. 기본 HTTP 인증

크래들 주요 기능:

  1. 피라미드 모듈의 다운로드, 복호화 및 메모리 내 실행
  2. Python 표준 라이브러리만 사용하는 의존성

설명

피라미드는 대상 머신에 이미 존재하는 Python 인터프리터와 함께 사용하거나, 공식 임베더블 Python 패키지를 압축 해제한 후 python.exe를 실행하여 Python 다운로드 크래들을 실행할 수 있습니다. 이는 일반적이지 않은 프로세스 트리 패턴을 생성하지 않고 정상적인 Python 애플리케이션 사용처럼 보이게 하는 간단한 방법입니다.

피라미드에서는 다운로드 크래들을 사용하여 HTTP/S를 통해 피라미드 서버에 접속해 모듈과 의존성을 가져옵니다.

모듈은 사용하려는 기능에 따라 특화되어 있으며 다음을 포함합니다:

  1. 메모리 내 임포트를 위한 사용자 정의 Finder 클래스 (zip 파일)
  2. 필요한 의존성을 다운로드하는 코드
  3. 실행하려는 프로그램의 주요 로직 (bloodhound, secretsdump, paramiko 등)

Python 의존성은 이미 수정되어 메모리에서 충돌 없이 임포트될 수 있도록 고정되었습니다.

현재 사용 가능한 8개의 피라미드 모듈:

  1. bh.py – 메모리 내에서 python-BloodHound를 임포트하고 실행
  2. secretsdump.py – 메모리 내에서 Impacket secretsdump를 임포트하고 실행
  3. shellcode.py – 간단한 메모리 내 셸코드 인젝터
  4. DonPAPI.py – 메모리 내에서 DonPAPI를 임포트하고 실행. 추출된 결과 및 자격 증명은 Python Embeddable 패키지 디렉토리에 저장됨
  5. LaZagne.py – 메모리 내에서 LaZagne를 임포트하고 실행
  6. tunnel-socks5 – 새 스레드에서 paramiko를 임포트하여 SSH 원격 포트 포워드를 SSH 서버로 생성한 후, 대상에서 로컬로 SOCKS5 프록시 서버를 실행하고 SSH 터널을 통해 원격에서 접근 가능하게 함
  7. clr – Pythonnet을 임포트하여 메모리 내에서 .NET 어셈블리를 로드하고 실행
  8. pythonmemorymodule – PythonMemoryModule을 임포트하여 dll을 메모리에서 로드

사용법

서버 시작

git clone https://github.com/naksyn/Pyramid

HTTP 서버용 SSL 인증서 생성:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

자체 서명된 SSL 인증서를 사용하려면 다음을 준수하세요:

  1. pem 형식 사용
  2. 파일 이름을 key.pem 및 cert.pem으로 변경
  3. 두 파일을 Server 폴더에 배치

모듈 설정

예를 들어 PythonMemoryModule을 피라미드와 함께 사용하려면, 페이로드를 Delivery_files 폴더에 넣은 후 pythonmemorymodule.py를 열고 스크립트 상단에서 필요한 매개변수(페이로드 파일 이름 및 PE가 로드된 후 호출할 프로시저 등)를 구성하세요.

임베더블 패키지 압축 해제 및 대상에서 다운로드 크래들 실행

피라미드 서버가 실행 중이고 Base 스크립트가 준비되면 Agent/cradle.py 파일에서 pyramid_module 변수를 설정하고 대상에서 실행합니다. 크래들은 Python 표준 라이브러리로 실행되도록 설계되었습니다.

예제

SSL 인증서를 사용하고 기본 인증을 제공하며, 전달 파일을 ChaCha로 암호화하고 서버 구성을 모듈에 자동 생성하며 pythonmemorymodule용 붙여넣기 가능한 크래들을 출력하는 피라미드 HTTP 서버 실행 예시:

root@kitploit:~
python3 pyramid.py -p 443 -ssl -u testuser -pass Sup3rP4ss! -enc "chacha20" -passenc "TestPass1" -server "192.168.1.2" -generate -setcradle pythonmemorymodule.py

시작 시 pyramid.py는 자체 폴더 구조를 파싱하여 key.pem, cert.pem을 찾고 Server 폴더에서 파일을 전달합니다.

https://github.com/naksyn/Pyramid/assets/59816245/4fbc997e-af2d-4ead-881b-ee108c91d195

보이는 프롬프트 없이 피라미드 실행을 위한 팁

보이는 python.exe 프롬프트를 띄우지 않고 피라미드를 실행하려면 pythonw.exe를 활용할 수 있습니다. pythonw.exe는 실행 시 콘솔 창을 열지 않으며, 동일한 Windows Embeddable 패키지에 포함되어 있습니다. 다음 그림은 원격 머신에서 pythonw.exe를 사용하여 base-tunnel-socks5.py를 python.exe 콘솔 창 없이 실행하는 예시를 보여줍니다.

image

제한 사항

Python 모듈을 동적으로 로딩할 때 기본적으로 *.pyd 파일(본질적으로 dll)의 임포트를 지원하지 않습니다. 제가 아는 한 이 문제를 해결하는 유일한 공개 솔루션은 CPython 인터프리터를 재설계한 Scythe *(in-memory-execution)에서 제공합니다. 디지털 서명을 유지하기 위해, 기본 Python 임베더블 패키지를 사용할 수 있는 한 가지 해결책은 필요한 pyd 파일이나 휠을 디스크에 저장하는 것입니다. 대부분의 경우 이는 심각한 OPSEC 영향을 미치지 않아야 하지만, 다음 pyd 파일을 포함하는 휠이 동적 로딩을 완료하기 위해 디스크에 저장된다는 점을 명심하세요: *. Cryptodome – Bloodhound-Python, Impacket, DonPAPI, LaZagne에 필요 *. bcrypt, cryptography, nacl, cffi – paramiko에 필요

이 기술로부터 방어하는 방법

python.exe는 좋은 평판을 가진 서명된 바이너리이며 Python 동적 코드에 대한 가시성을 제공하지 않습니다. 피라미드는 이러한 회피 속성을 악용하여 동일한 python.exe 프로세스 내에서 공격 작업을 수행합니다.

따라서 가장 효율적인 해결책 중 하나는 Python Foundation이 서명한 바이너리와 dll을 기본적으로 차단하고, 실제로 Python 바이너리를 사용해야 하는 사용자에 대해서만 예외를 생성하는 것입니다.

임베더블 패키지 다운로드에 대한 알림도 설정할 수 있습니다.

PEP-578을 배포하는 것도 가능하지만 복잡합니다. 이것은 샘플 구현입니다. 그러나 표준 python 바이너리 사용을 차단하지 않고 PEP-578을 배포하면 이 대책이 무용지물이 될 수 있습니다.

도구 다운로드