
직접 메모리 접근 (DMA) 공격 소프트웨어
PCILeech는 PCIe 하드웨어 장치를 사용하여 대상 시스템 메모리를 읽고 씁니다. 이는 PCIe를 통한 DMA를 사용하여 수행됩니다. 대상 시스템에 드라이버가 필요하지 않습니다.
PCILeech는 LeechCore 라이브러리에서 지원하는 다양한 소프트웨어 메모리 획득 방법과 함께 하드웨어 없이도 작동합니다. 여기에는 DumpIt 또는 WinPmem을 사용한 원격 라이브 메모리 캡처가 포함됩니다. PCILeech는 로컬 메모리 캡처 및 여러 메모리 덤프 파일 형식을 지원합니다.
PCILeech는 여러 메모리 획득 장치를 지원합니다. 하드웨어 기반과 소프트웨어 기반 모두 가능합니다. USB3380 기반 하드웨어는 기본적으로 4GB의 메모리만 읽을 수 있지만, 커널 모듈(KMD)이 대상 시스템 커널에 먼저 삽입되면 모든 메모리를 읽을 수 있습니다. FPGA 기반 하드웨어 및 소프트웨어 기반 방법은 모든 메모리를 읽을 수 있습니다.
PCILeech는 대상 커널에 다양한 커널 임플란트를 삽입할 수 있어 '마운트된 드라이브'를 통해 라이브 RAM 및 파일 시스템에 쉽게 액세스할 수 있습니다. 로그온 암호 요구 사항 제거, 서명되지 않은 드라이버 로드, 코드 실행 및 시스템 셸 생성도 가능합니다. PCILeech는 Windows 및 Linux에서 실행됩니다. 현재 지원되는 대상 시스템은 x64 버전의 UEFI, Linux, FreeBSD 및 Windows입니다. 이를 위해서는 메모리에 대한 쓰기 액세스 권한이 필요합니다(USB3380 하드웨어, FPGA 하드웨어, LiveCloudKd 또는 CVE-2018-1038 "Total Meltdown").
시작하려면 저장소의 소스를 클론하거나 최신 바이너리, 모듈 및 구성 파일을 다운로드하세요.
PCILeech용 PushPin GUI 프론트엔드는 일반적인 RedTeam 작업을 매우 쉽게 만듭니다. PushPin은 공식 PCILeech 배포판의 일부가 아닙니다.







*) macOS High Sierra 이상은 지원되지 않습니다.
PCILeech는 하드웨어 기반 및 소프트웨어 기반 메모리 획득 방법을 모두 지원합니다. 모든 메모리 획득은 LeechCore 라이브러리에서 처리됩니다.
지원되는 하드웨어 기반 메모리 획득 방법의 요약은 아래에 나열되어 있습니다. 모든 하드웨어 기반 메모리 획득 방법은 Windows와 Linux에서 모두 지원됩니다. 그러나 FPGA 기반 방법은 Linux에서 약간의 성능 저하가 있으며 Windows에서 150MB/s에 비해 최대 약 90MB/s로 제한됩니다.
지원되는 소프트웨어 기반 메모리 획득 방법의 요약은 아래에 나열되어 있습니다. LeechService는 원격 LeechCore 라이브러리에 대한 네트워크 연결만 제공합니다. 연결되면 하드웨어 및 소프트웨어 기반 메모리 획득을 모두 사용할 수 있습니다.
PCILeech GitHub 저장소(https://github.com/ufrisk/pcileech)를 방문하여 최신 버전의 PCILeech를 보유하고 있는지 확인하세요.
최신 릴리스에서 최신 바이너리, 모듈 및 구성 파일을 받으세요. 또는 저장소를 클론하고 소스에서 빌드하세요.
Windows에서 PCILeech를 실행하는 방법에 대한 정보는 Windows에서 PCILeech 가이드를 참조하세요.
USB3380 하드웨어를 사용하는 경우 Google Android USB 드라이버를 설치해야 합니다. Google Android USB 드라이버를 http://developer.android.com/sdk/win-usb.html#download에서 다운로드하고 압축을 푸세요.
FPGA를 FT601 USB3 애드온 카드 또는 PCIeScreamer와 함께 사용하는 경우 FTDI 드라이버를 설치해야 합니다. FTDI에서 64비트 FTD3XX.dll을 다운로드하여 pcileech.exe 옆에 두세요.
Windows에서 라이브 RAM 및 대상 파일 시스템을 드라이브로 마운트하려면 Dokany2 파일 시스템 라이브러리를 설치해야 합니다. https://github.com/dokan-dev/dokany/releases/latest에서 최신 안정 버전의 Dokany2를 다운로드하여 설치하세요.
Linux에서 PCILeech를 실행하는 방법에 대한 정보는 Linux에서 PCILeech 가이드를 참조하세요.
더 많은 예제는 프로젝트 위키 페이지를 참조하세요. 위키는 구축 단계에 있으며 정보가 누락될 수 있습니다.
대상 시스템 라이브 RAM 및 파일 시스템 마운트, KMD가 로드되어 있어야 합니다. 이 예제에서는 0x11abc000이 사용됩니다.
pcileech.exe mount -kmd 0x11abc000특정 커널 임플란트에 대한 도움말 표시, 이 경우 lx64_filepull 커널 임플란트.
pcileech.exe lx64_filepull -help덤프 명령에 대한 도움말 표시.
pcileech.exe dump -help커널 모듈이 주소 0x7fffe000에 로드된 상태에서 대상 시스템의 모든 메모리를 덤프합니다.
pcileech.exe dump -kmd 0x7fffe000USB3380에서 더 안정적인 USB2 방식을 사용하여 액세스 가능한 메모리 매핑 장치를 포함한 4GB 미만의 메모리 덤프 강제 실행.
pcileech.exe dump -force -device usb3380://usb=2PCIe TLP(트랜잭션 계층 패킷)를 수신하여 화면에 출력합니다(올바르게 구성된 FPGA 개발 보드 필요).
pcileech.exe tlp -vv -wait 1000읽을 수 있는 메모리 페이지 및 최대 메모리를 위해 대상 시스템의 메모리를 프로브/열거합니다(FPGA 하드웨어 전용).
pcileech.exe probe최소 및 최대 주소 사이의 모든 메모리 덤프, 실패한 페이지에서 중단하지 않음. 64비트 메모리에 대한 기본 액세스는 FPGA 하드웨어에서만 지원됩니다.
pcileech.exe dump -min 0x0 -max 0x21e5fffff -force모든 메모리 덤프, 대상 시스템 레지스트리에서 메모리 맵을 찾아 잠재적으로 잘못된 메모리 덤프를 방지하여 대상이 정지되는 것을 방지합니다.
pcileech.exe dump -memmap auto특정 장치 사용 강제(기본 자동 감지 대신). pmem 장치는 자동 감지되지 않습니다.
pcileech.exe pagedisplay -min 0x1000 -device pmem커버로스로 암호화되고 상호 인증된 연결을 사용하여 원격 LeechAgent에서 원격 메모리 덤프.
pcileech.exe dump -device pmem -remote rpc://[email protected]LeechAgent 내장 Python 환경을 사용하여 원격 컴퓨터에서 Python 분석 스크립트 find-rwx.py를 실행합니다.
pcileech.exe agent-execpy -in find-rwx.py -device pmem -remote rpc://[email protected]pid 432(이 예제에서는 lsass.exe)의 가상 프로세스 메모리 패치.
pcileech.exe patch -pid 432 -sig unlock_win10x64.sig이 모든 것이 약간 압도적으로 느껴지시나요? 아니면 간단한 질문을 하고 싶으신가요? Discord의 PCILeech 및 MemProcFS DMA 커뮤니티 서버에 참여하세요!
바이너리는 이 저장소의 릴리스 섹션에서 찾을 수 있습니다. 자체 버전을 빌드하려는 경우 가능합니다. PCILeech 빌드에 대한 자세한 내용은 Windows에서 PCILeech 또는 Linux에서 PCILeech를 참조하세요. PCILeech는 LeechCore에 의존하며 선택적으로 (일부 추가 기능을 위해) Memory Process File System에도 의존하므로 둘 다 별도로 빌드해야 합니다.
PCILeech, MemProcFS 및 LeechCore는 오픈 소스이지만 기여가 개방되지는 않았습니다. PCILeech, MemProcFS 및 LeechCore는 플러그인 형태의 기여를 허용하는 매우 유연한 플러그인 아키텍처를 제공합니다. 핵심 프로젝트에 플러그인이 아닌 기여를 원하시면 개발을 시작하기 전에 저에게 연락해 주십시오.
v1.0-v3.6
v4.0
leechcore.dll/leechcore.so 라이브러리가 사용됩니다. 새로운 장치에는 다음이 포함됩니다:
v4.1
agent-forensic 명령을 사용한 원격 메모리 분석 지원.
./pcileech mount /home/user/fusemnt/leechfs -kmd <your_kmd_address>none 명령 추가.-bar-ro 및 -bar-rw 옵션 추가.-in 옵션에 대상 시스템 커널 System.map 지정.-psname 옵션 추가됨.최신:
-no-kmd-mem 옵션 - KMD가 로드된 경우 KMD 메모리 액세스를 선택적으로 비활성화 (일부 경우 안정성에 유용할 수 있음).-kmd WIN11_X64 - Windows 11 KMD 서명 (WIN10_X64_3의 별칭).| 장치 | 유형 | 인터페이스 | 속도 | 64비트 메모리 액세스 | PCIe TLP 액세스 | 프로젝트 스폰서 |
|---|
| ZDMA | FPGA | Thunderbolt3 | 1000MB/s | Yes | Yes | 💖 |
| GBOX | FPGA | OCuLink | 400MB/s | Yes | Yes | 💖 |
| LeetDMA | FPGA | USB-C | 190MB/s | Yes | Yes | 💖 |
| CaptainDMA M2 | FPGA | USB-C | 190MB/s | Yes | Yes | 💖 |
| CaptainDMA M2 100T | FPGA | USB-C | 220MB/s | Yes | Yes | 💖 |
| CaptainDMA 4.1th | FPGA | USB-C | 190MB/s | Yes | Yes | 💖 |
| CaptainDMA 75T | FPGA | USB-C | 200MB/s | Yes | Yes | 💖 |
| CaptainDMA 100T | FPGA | USB-C | 220MB/s | Yes | Yes | 💖 |
| AC701/FT601 | FPGA | USB3 | 190MB/s | Yes | Yes | |
| USB3380-EVB | USB3380 | USB3 | 150MB/s | No | No | |
| DMA patched HP iLO | BMC | TCP | 1MB/s | Yes | No |
| 장치 | 유형 | 휘발성 | 쓰기 | Linux 지원 | 플러그인 |
|---|
| RAW physical memory dump | File | No | No | Yes | No |
| Full Microsoft Crash Dump | File | No | No | Yes | No |
| Full ELF Core Dump | File | No | No | Yes | No |
| VMware | Live Memory | Yes | Yes | No | No |
| VMware memory save file | File | No | No | Yes | No |
| TotalMeltdown | CVE-2018-1038 | Yes | Yes | No | No |
| DumpIt /LIVEKD | Live Memory | Yes | No | No | No |
| WinPMEM | Live Memory | Yes | No | No | No |
| LiveKd | Live Memory | Yes | No | No | No |
| LiveCloudKd | Live Memory | Yes | Yes | No | Yes |
| Hyper-V Saved State | File | No | No | No | Yes |
| LeechAgent* | Remote | No | No |