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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
IntelTXE-PoC — 인텔 관리 엔진 JTAG 개념 증명 | Kitploit
도구/GitHubGitHub/ptresearch/inteltxe-poc
Embedded Systems SecurityPayload GenerationVulnerability AnalysisReverse EngineeringDebuggersHardware HackingHardware SecurityFirmware AnalysisBinary ExploitationArchived
GitHubptresearch/inteltxe-poc

IntelTXE-PoC

54910676년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

인텔 관리 엔진 JTAG 개념 증명

저장소 보기

고지 사항

모든 정보는 교육 목적으로만 제공됩니다. 이 지침을 따르는 것은 사용자 본인의 책임입니다. 저자와 해당 고용주는 이 페이지에 포함된 정보를 기반으로 행동하거나 행동하지 않은 개인이나 조직으로 인해 발생하는 직접적 또는 간접적 손해나 손실에 대해 책임을 지지 않습니다.

목차

소개
필요한 소프트웨어
페이로드 생성
잠금 해제 토큰 생성
SPI 플래시 이미지 준비
펌웨어 이미지에 파일 통합
OEM 서명 비활성화
펌웨어 이미지 빌드
메인 CPU 기동(BringUP)
SPI 플래시에 이미지 쓰기
USB 디버그 케이블 준비
OpenIPC 구성 파일 패치
OpenIPC 구성 파일 복호화
구성에 LMT 코어 추가
IPC_PATH 환경 변수 설정
JTAG 작동 가능 여부 초기 확인
CPU ME 스레드 표시
코어 정지
ME 디버깅: 빠른 시작
임의 메모리 읽기
ROM 읽기
왜 TXE인가?
테스트된 플랫폼 목록
작성자
라이선스

소개

취약점 INTEL-SA-00086을 통해 Intel Management Engine 코어에 대한 JTAG을 활성화할 수 있습니다. 우리는 Gigabyte Brix GP-BPCE-3350C 플랫폼을 대상으로 JTAG PoC를 개발했습니다. 연구를 시작하는 연구자들에게 동일한 플랫폼을 권장하지만, Intel Apollo Lake 칩셋을 사용하는 다른 제조업체의 플랫폼에서도 PoC가 작동할 것입니다 (TXE 버전 3.0.1.1107 기준).

필요한 소프트웨어

Intel 시스템 도구

INTEL-SA-00086 취약점은 MFS(내부 ME 파일 시스템)에 저장된 파일을 처리할 때 버퍼 오버플로를 유발합니다. 전체 파일 경로는 /home/bup/ct입니다. Intel PCH 칩셋 기반 하드웨어의 OEM을 위해 Intel이 제공하는 시스템 도구 중 하나인 *Intel Flash Image Tool(FIT)*을 사용하여 이 파일을 ME 펌웨어에 통합해야 합니다. 다음은 Intel 시스템 도구 패키지 루트 디렉터리의 구조입니다:

스크린샷

Intel ME(TXE, SPS) 시스템 도구 유틸리티는 최종 사용자용이 아니므로 공식 Intel 웹사이트에서 찾을 수 없습니다. 그러나 일부 OEM은 장치 드라이버와 함께 소프트웨어 업데이트의 일부로 이를 게시합니다. 따라서 PoC를 통합하려면 온라인에서 찾을 수 있는 Intel TXE 시스템 도구 버전 3.x가 필요합니다.

Intel System Studio

Intel System Studio를 설치해야 합니다. 평가판은 Intel 사이트에서 다운로드할 수 있습니다. 실험에서는 Intel System Studio 2018을 사용했습니다.

Intel TXE 펌웨어

PoC는 Intel TXE 펌웨어 버전 3.0.1.1107을 대상으로 합니다. Gigabyte GB-BPCE-3350C 버전 F5용 SPI 플래시 이미지에는 필요한 펌웨어 버전이 포함되어 있습니다.

Python

모든 스크립트는 Python으로 작성되었습니다. Python 2.7을 사용하는 것이 좋습니다. 또한 스크립트에는 pycrypto 패킷이 필요합니다. pycrypto를 설치하려면 다음 명령을 실행하십시오:

root@kitploit:~
pip install pycrypto

AMIBCP

이 유틸리티는 CPU를 기동해야 하는 경우에만 필요합니다.

EFI HII(Human Interface Infrastructure)는 UEFI에서 사용자 인터페이스를 생성하고 사용자 입력을 처리 및 관리하는 특수 메커니즘입니다. EFI HII는 숨겨진 옵션을 포함한 모든 옵션의 기본값을 식별합니다. DCI와 관련된 옵션을 찾으면 기본 구성에 대해 활성화할 수 있으며, BIOS 공장 설정을 복원하여 DCI를 활성화할 수 있습니다. 메인 CPU를 기동하려면 온라인에서도 찾을 수 있는 AMI BIOS 구성 프로그램 버전 5.xx가 필요합니다.

페이로드 생성

me_exp_bxtp.py 스크립트를 실행합니다:

root@kitploit:~
me_exp_bxtp.py -f <file_name>

스크립트는 필요한 데이터를 생성하여 지정된 파일로 내보냅니다(전체 파일 경로 또는 현재 디렉터리 내에서 이름만 지정할 수 있으며, 기본값은 ct.bin입니다). 이 파일은 나중에 FIT에서 사용됩니다.

잠금 해제 토큰 생성

me_utok_bxtp.py 스크립트를 실행합니다:

root@kitploit:~
me_utok_bxtp.py -f <file_name>

스크립트는 필요한 데이터를 생성하여 지정된 파일로 내보냅니다(전체 파일 경로 또는 현재 디렉터리 내에서 이름만 지정할 수 있으며, 기본값은 utok.bin입니다). 이 파일은 나중에 FIT에서 사용됩니다.

SPI 플래시 이미지 준비

DCI 옵션 활성화

CPU를 기동할 필요가 없다면 이 단계를 건너뛰십시오.

DCI Enable 옵션을 활성화하려면 AMIBCP 유틸리티를 실행하고 플랫폼과 함께 제공된 SPI 펌웨어 이미지를 여십시오. Gigabyte Brix GP-BPCE-3350C의 경우 위의 Gigabyte 링크에서 다운로드한 파일을 엽니다(아카이브의 이미지 파일 경로: F5/image.bin).

스크린샷

이제 Setup Configuration 탭에서 HDCIEN 옵션을 활성화해야 합니다.

페이로드 통합

ct.bin 및 utok.bin 파일을 통합하려면 FIT 유틸리티(fit.exe)를 실행하고 이를 사용하여 SPI 펌웨어 이미지를 엽니다.

스크린샷

기타 하드웨어 플랫폼

다른 하드웨어 플랫폼을 사용 중이고 TXE 3.0.1.1107에 접근할 수 없는 경우, Gigabyte GB-BPCE-3350C 버전 F5용 SPI 플래시 이미지를 다운로드하여 FIT를 통해 TXE 섹션을 추출할 수 있습니다. FIT는 이미지를 열 때 전체 SPI 이미지의 여러 섹션(SPI 디스크립터, UEFI/BIOS 펌웨어, Intel ME 펌웨어 및 잠금 해제 토큰)을 추출하여 *"image_name"/Decomp * 폴더에 저장합니다.

스크린샷

따라서 필요한 Intel TXE 펌웨어가 포함된 파일을 /Decomp/TXE Region.bin에서 찾을 수 있습니다. 그런 다음 FIT에서 특정 플랫폼의 SPI 이미지를 열고 Intel TXE 펌웨어가 포함된 파일을 GB Brix 3350c 이미지에서 얻은 버전으로 교체합니다(Flash Layout 탭의 "Intel(R) TXE Binary File"):

스크린샷

펌웨어 이미지에 파일 통합

이제 FIT에 /home/bup/ct 및 Unlock Token용으로 생성한 파일을 지정해야 합니다. FIT의 Debug 탭에서 펌웨어에 통합할 Trace Hub Binary와 Unlock Token을 지정할 수 있습니다. 이는 이미 생성한 파일이어야 합니다.

스크린샷

OEM 서명 비활성화

FIT에서 OEM 공개 키 해시 필드를 제거하기만 하면 됩니다:

스크린샷

펌웨어 이미지 빌드

Build menu에서 Build Image를 선택하여 이미지를 빌드합니다.

스크린샷

BootGuard 설정에 대한 메시지는 무시하십시오("Yes" 클릭):

스크린샷

지금까지 모든 작업이 올바르게 수행되었다면 빌드 프로세스가 성공하고 FIT는 다음과 같은 콘솔 메시지를 출력합니다:

스크린샷

메인 CPU 기동(BringUP)

CPU를 기동할 필요가 없다면 이 단계를 건너뛰십시오.

CPU를 기동하려면 HAP 모드를 활성화해야 합니다. 오프셋 +0x102의 바이트 0비트를 설정해야 합니다:

스크린샷

SPI 플래시에 이미지 쓰기

SPI 플래시에 이미지를 쓰려면 SPI 프로그래머를 사용하는 것이 좋습니다.
문제가 발생할 경우 복원할 수 있도록 원본 펌웨어를 반드시 백업하십시오!

USB 디버그 케이블 준비

플랫폼에 연결하려면 USB 3.0 디버그 케이블이 필요합니다. 전용으로 제작된 케이블을 구입하거나 USB 3.0 AM–AM 케이블에서 D+, D-, Vcc 접점을 분리하여 직접 만들 수 있습니다.

스크린샷

OpenIPC 구성 파일 패치

Intel은 플랫폼과 메인 CPU의 JTAG 디버깅에 사용할 수 있는 두 가지 소프트웨어 패키지를 개발하여 사용자에게 제공합니다: DAL(DFx 추상화 계층)과 OpenIPC. DAL과 OpenIPC는 모두 Intel System Studio의 일부입니다. Intel System Studio 2018을 설치하면 OpenIPC는 다음 디렉터리에 나타납니다:

Windows

root@kitploit:~
C:\Intel\OpenIPC_1.1740.2381.100

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/openipc

OpenIPC 구성은 암호화되어 있으며 TXE 코어를 지원하지 않습니다. 따라서 구성을 복호화하고 TXE 설명을 추가하십시오.

OpenIPC 구성 파일 복호화

구성 파일을 복호화하려면 IDA Pro 스크립트 openipc_key_extract.py를 사용하여 OpenIPC/Bin의 StructuredData 라이브러리(리눅스: libStructuredData_x64.so, Windows: StructuredData_x64.dll)에서 키를 추출하십시오. 키(이 경우 4504fb02be0a9c4c84df2a89cf508bc3)를 OpenIPC 디렉터리 경로와 함께 config_decryptor.py 스크립트에 전달하십시오.

root@kitploit:~
config_decryptor.py –k 4504fb02be0a9c4c84df2a89cf508bc3 –p C:\Intel\OpenIPC

구성에 LMT 코어 추가

제공된 OpenIPC 버전에는 TXE 코어에 대한 필요한 정보가 없습니다. 따라서 복호화된 OpenIPC 구성 파일에 패치(patch.diff)를 적용해야 합니다. 방법은 다음과 같습니다:

root@kitploit:~
patch -p2 < patch.diff

IPC_PATH 환경 변수 설정

복호화와 패치 후 IPC_PATH 환경 변수를 새 OpenIPC 디렉터리로 설정하여 ipccli가 수정된 OpenIPC 버전을 사용하도록 하십시오. 예를 들어:

Windows

root@kitploit:~
set IPC_PATH=c:\Intel\OpenIPC\Bin

JTAG 작동 가능 여부 초기 확인

activator는 JTAG이 활성화된 후 BUP 프로세스를 루프에 유지하여 이후의 부팅을 차단합니다. 실행 후 플랫폼은 어떤 징후도 보이지 않습니다(모니터가 켜지지 않고, 키보드 표시등이 켜지지 않으며, BIOS POST 사운드가 재생되지 않습니다). 따라서 DCI 디버깅을 통해 플랫폼이 BUP 모듈에 "갇혀" 있는지 확인해야 합니다.

DAL과 마찬가지로 OpenIPC 라이브러리에는 Python으로 작성된 CLI(명령줄 인터페이스)가 포함되어 있으며, Intel System Studio의 일부로 Python 라이브러리로 제공됩니다. pip를 사용하여 시스템에 설치할 수 있습니다. ipccli 설치 패키지는 다음 경로에 있습니다: Windows

root@kitploit:~
<Program Files(x86)>\IntelSWTools\system_debugger_2018\debugger\ipccli\ ipccli-1.1740.544.100-py2.py3-none-any.whl

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/ipccli/ipccli-1.1811.727.100-py2.py3-none-any.whl

ipccli를 설치하려면 다음 콘솔 명령을 실행하십시오:

root@kitploit:~
pip install ipccli-1.1740.544.100-py2.py3-none-any.whl

설치가 완료되면 ipccli는 해당 Python 버전(pip가 호출된 버전)의 런타임 내에서 사용할 수 있습니다. OpenIPC를 시작하려면 Python 콘솔에서 다음 명령을 실행하십시오:

root@kitploit:~
import ipccli
ipc = ipccli.baseaccess()

DCI를 통한 대상 플랫폼 연결 메커니즘이 실행되며, 다음과 같은 콘솔 출력이 표시됩니다:

스크린샷

연결이 설정되지 않은 경우(예: 플랫폼에 전원이 공급되지 않거나 DCI를 통해 물리적으로 연결되지 않은 경우) 메시지는 다음과 유사합니다:

스크린샷

DCI 연결이 성공하면 DFX_AGGRAGATOR 장치의 PERSONALITY 레지스터가 3인지 확인하십시오. PERSONALITY 레지스터의 IR(Instruction Register) 코드는 0x54입니다. 이를 읽으려면 다음 명령을 실행하십시오:

root@kitploit:~
dfx_agg = ipc.devs.mdu_dfx_agg_tap0
ipc.irdrscan(dfx_agg, 0x54, 32)

해당 명령의 결과는 다음과 같아야 합니다:

스크린샷

ME 디버깅: 빠른 시작

ipccli 유틸리티에는 상당히 상세한 HTML 문서가 포함되어 있으며, ipccli Python 패키지 폴더에서 찾을 수 있습니다:

root@kitploit:~
<Python Dir>\Lib\site-packages\ipccli\html\Index.html

CPU ME 스레드 표시

이전 단계를 올바르게 수행했다면 ipccli를 통해 플랫폼에 연결했을 때 TXE 코어는 CSE Tap을 통해 접근할 수 있으며, ipccli는 다음 ipccli 경로를 적용하여 접근할 수 있게 해줍니다:

root@kitploit:~
ipc.devs.cse_c0.threads[0]

그러나 PoC는 메인 CPU가 초기화될 때까지 플랫폼의 부팅을 차단하므로, 그 코어는 JTAG을 통해 접근할 수 없으며 ME 코어는 다음 명령을 통해 접근할 수 있습니다:

root@kitploit:~
ipc.threads[0]

코어 정지

ME 프로세서 명령어 실행을 중지하려면 다음 명령을 실행하십시오:

root@kitploit:~
me = ipc.devs.cse_c0.threads[0]
me.halt()

CPU 프로세서 명령어 실행을 중지하려면 다음 명령을 실행하십시오:

root@kitploit:~
core = ipc.threads[0]
core.halt()

스크린샷

콘솔은 중지가 이루어진 명령어의 논리적 주소를 표시합니다.

임의 메모리 읽기

OpenIPC를 사용하면 중지 후 메모리를 읽을 수 있습니다. 예를 들어:

root@kitploit:~
ipc.threads[0].mem("0xf0080004P", 4)

논리 주소(sel:offset), 선형 주소(L 수정자) 또는 물리 주소(P 수정자)를 지정할 수 있습니다.

ROM 읽기

ME 시스템 에이전트(MISA)는 ME 리셋 벡터가 포함된 ROM 영역의 초기 물리 주소를 얻을 수 있게 해줍니다. 오프셋 0xe20 MISA MMIO(0xf0000000P)에 있는 Hunit ROM Memory Base(HROMMB) 레지스터를 통해 ROM 주소를 얻을 수 있습니다:

스크린샷

ROM은 항상 ROMBASE부터 0xffffffff까지에 있습니다. ROM을 파일로 복사하려면 다음 명령을 실행하십시오:

root@kitploit:~
ipc.threads[0].memsave("<file path>", "0xfffe0000p", 0x20001)

크기를 0x20000이 아닌 0x20001로 지정하는 것이 중요합니다(그렇지 않으면 32비트 ME 코어에서 불가능한 64비트 액세스 문제로 인해 OpenIPC에 오류가 발생합니다). 파일의 마지막 바이트는 ROM의 일부가 아니므로 버릴 수 있습니다.

왜 TXE인가?

이 플랫폼은 특수 Intel CCA-SVT 어댑터 없이도 더 많은 디버깅 기회를 제공하며, 일반 USB 디버그 케이블을 통해 TXE 코어의 초기 단계를 디버깅할 수 있습니다.

관련 URL:

Intel ME: 정적 분석의 길

Intel DCI 비밀

Intel ME: 플래시 파일 시스템 설명

꺼진 컴퓨터를 해킹하거나 Intel Management Engine에서 서명되지 않은 코드를 실행하는 방법

Intel Management Engine 내부

문서화되지 않은 모드를 통한 Intel ME 11 비활성화

테스트된 플랫폼 목록

  • Gigabyte Mini-PC Barebone (BRIX) GB-BPCE-3350C (rev:1.1, 1.2)
  • Beelink M1

작성자

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

연구 팀

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

Dmitry Sklyarov (@_Dmit)

라이선스

저작권 (c) 2018 Mark Ermolov, Maxim Goryachy (Positive Technologies)

이 소프트웨어 및 관련 문서 파일(이하 "소프트웨어")의 사본을 얻은 모든 사람에게는 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. 여기에는 소프트웨어 사본을 사용, 복사, 수정, 병합, 게시, 배포, 재라이선스 및/또는 판매할 수 있는 권리와 소프트웨어가 제공되는 사람이 이러한 행위를 할 수 있도록 허가할 수 있는 권리가 포함되지만 이에 국한되지 않으며, 다음 조건에 따릅니다. 위의 저작권 고지 및 이 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함되어야 합니다.

소프트웨어는 "있는 그대로" 제공되며, 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않는 어떠한 명시적 또는 묵시적 보증도 없이 제공됩니다. 어떤 경우에도 저자나 저작권 보유자는 소프트웨어나 소프트웨어의 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타 방식으로 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.

도구 다운로드