
Intel Management Engine JTAG 개념 증명 - 2022 지침
모든 정보는 교육 목적으로만 제공됩니다. 본 지침을 따르는 것은 전적으로 사용자 본인의 책임입니다. 저자나 저자의 고용주는 이 페이지에 포함된 정보에 근거하여 행동하거나 행동하지 않은 개인 또는 조직으로 인해 발생하는 직접적 또는 결과적 손해나 손실에 대해 책임을 지지 않습니다.
소개
필수 소프트웨어
페이로드 생성
잠금 해제 토큰 생성
SPI 플래시 이미지 준비
펌웨어 이미지에 파일 통합
OEM 서명 비활성화
펌웨어 이미지 빌드
메인 CPU BringUP
SPI 플래시에 이미지 쓰기
USB 디버그 케이블 준비
OpenIPC 구성 파일 패치
OpenIPC 구성 파일 복호화
구성에 LMT Core 추가
IPC_PATH 환경 변수 설정
JTAG 작동 가능 여부 초기 점검
CPU ME 스레드 표시
코어 중지
ME 디버깅: 빠른 시작
임의 메모리 읽기
ROM 읽기
왜 TXE인가?
테스트된 플랫폼 목록
저자
라이선스
취약점 INTEL-SA-00086은 Intel Management Engine 코어에 대해 JTAG을 활성화할 수 있게 합니다. 우리는 Gigabyte Brix GP-BPCE-3350C 플랫폼용 [JTAG PoC][8]를 개발했습니다. 예비 연구자들에게는 동일한 플랫폼을 사용할 것을 권장하지만, Intel Apollo Lake 칩셋을 사용하는 다른 제조사의 플랫폼에서도 PoC가 동작할 것입니다 (TXE 버전 3.0.1.1107의 경우).
Gigabyte Brix GP-BPCE-3350C는 더 이상 널리 상용 판매되지 않으므로, 본 지침은 대신 AAEON UP Squared SKU UPS-APLX7-A20-0864 (Intel Atom® x7-E3950)를 대상으로 업데이트되었습니다. 이 보드를 구매하는 경우 전원 공급 장치, 시리얼 어댑터, 그리고 USB-시리얼 어댑터도 함께 구매해야 합니다. 또한 UP Squared는 DCI 디버깅을 수행하는 데 기본적인 USB 디버그 케이블만 필요합니다. USB 디버그 케이블은 여기에 노란색 USB 케이블로 표시된 포트에 연결해야 합니다.
INTEL-SA-00086 취약점은 MFS([내부 ME 파일 시스템][6])에 저장된 파일을 처리할 때 버퍼 오버플로를 유발합니다. 전체 파일 경로는 /home/bup/ct입니다. Intel PCH 칩셋 기반 하드웨어의 OEM에게 Intel이 제공하는 Intel 시스템 도구 중 하나인 *Intel Flash Image Tool(FIT)*을 사용하여 이 파일의 취약점을 악용하는 버전을 ME 펌웨어에 통합해야 합니다.
Intel ME(TXE, SPS) 시스템 도구 유틸리티는 최종 사용자를 위한 것이 아니므로 공식 Intel 웹사이트에서 찾을 수 없습니다. 그러나 일부 OEM은 장치 드라이버와 함께 소프트웨어 업데이트의 일부로 게시합니다. 따라서 PoC를 통합하려면 여기에서 찾을 수 있는 "CSTXE System Tools v3"가 필요합니다.
JTAG 디버깅을 수행하려면 Intel System Studio를 설치해야 합니다. 원래 실험에서는 Intel System Studio 2018을 사용했습니다. 본 지침은 여기에서 얻을 수 있는 Intel System Studio 2020을 기준으로 업데이트되었습니다.
PoC는 Intel TXE 펌웨어 버전 3.0.1.1107을 대상으로 합니다. Win-Raid 포럼의 "CSTXE 3.0" 이미지 저장소에 필요한 TXE 펌웨어 버전이 포함되어 있습니다.
모든 스크립트는 Python으로 작성되었습니다. Python 2.7 사용을 권장합니다. 또한 스크립트에는 pycrypto 패키지가 필요합니다. pycrypto를 설치하려면 다음 명령을 실행하십시오:``` pip install pycrypto
## DCI를 통한 기본 x86 디버깅 수행
이 가이드의 목적은 익스플로잇을 통해 ME에서 JTAG 디버깅을 활성화하는 것이지만, 먼저 기본 상태를 확인하여 DCI를 통해 UP Squared 보드의 일반 JTAG 디버깅을 수행할 수 있는지 확인하는 것이 좋은 방법입니다. AAEON은 더 이상 DCI가 활성화된 BIOS를 제공하지 않습니다. 포럼에서 DCI로 인해 불안정성이 발생한다고 밝혔기 때문입니다. (그리고 DCI가 활성화된 v5.0 이전 BIOS 버전은 DRAM 공급업체의 하드웨어 변경으로 인해 새 하드웨어에서 더 이상 작동하지 않습니다.) 따라서 UP Squared에서 DCI JTAG를 활성화하려면 다음 3단계를 수행해야 합니다.
1) Satoshi Tanda가 [여기](https://forum.up-community.org/discussion/comment/12877#Comment_12877)에서 설명한 바이너리 패치를 수행합니다 (단, 2.8이 아닌 UEFITool 0.28을 사용하라고 명시되어야 합니다).
2) 부팅 시 F7을 눌러 BIOS 구성 메뉴에서 DCI를 활성화합니다. 기본 UP 암호(*upassw0rd*)를 입력하고, Main 메뉴에서 "CRB Setup" -> "CSB Chipset" -> "South Cluster Configuration" -> "Miscellaneous Configuration" -> "DCI Enable (HDCIEN)"로 이동하여 활성화로 설정합니다. 그런 다음 BIOS 설정 메뉴를 종료하고 구성 변경 사항을 저장한 후 시스템을 재부팅합니다.
3) "C:\IntelSWTools\system_studio_2020\system_debugger_2020\target_indicator\bin\TargetIndicator.exe"를 열고 디버그 케이블을 통해 해당 시스템을 UP Squared에 연결했을 때 아래와 같이 DCI가 가능함을 나타내는 파란색 표시기가 표시되는지 확인합니다:

그런 다음 ":\Program Files (x86)\IntelSWTools\sw_dev_tools\system_debugger_2020\system_debug_legacy\xdb.bat"을 시작하고 대상에 연결한 후 중단점을 걸고 단일 스텝을 실행하여 기본 디버깅 기능을 확인할 수 있습니다.
(또한 Alan Sguigna의 블로그 시리즈 [여기](https://www.asset-intertech.com/resources/blog/2020/05/open-source-firmware-explorations-using-dci-on-the-aaeon-up-squared-board/)를 따라 이 플랫폼용 오픈 소스 코드의 Debug 빌드를 만드는 방법을 참고할 수 있습니다. 이 빌드는 리셋 벡터부터 DCI 디버깅이 가능합니다. 그러나 DRAM 하드웨어 변경으로 인해 이 소스에서 빌드된 코드는 새 하드웨어에서 더 이상 완전히 부팅되지 않으며, 대신 부팅 시 멈춘다는 점에 유의하십시오 ([여기](https://forum.up-community.org/discussion/comment/12877)에 명시됨). Intel TianoCore 유지 관리자들은 이 문제를 수정하기를 거부했습니다.)
# 페이로드 생성
**me_exp_bxtp.py** 스크립트를 실행합니다:```
me_exp_bxtp.py -f <file_name>
이 스크립트는 필요한 데이터를 생성하여 지정된 파일로 내보냅니다(전체 파일 경로 또는 현재 디렉터리 내의 이름만 지정할 수 있으며, 기본값은 ct.bin입니다). 이 파일은 나중에 FIT에서 사용됩니다.
utock_gen.py 스크립트를 실행하세요:``` utock_gen.py -f <file_name>
스크립트는 필요한 데이터를 생성하여 지정된 파일로 내보냅니다(전체 파일 경로를 지정하거나 현재 디렉터리 안에서는 이름만 지정하면 되며, 기본값은 *utok.bin*입니다). 이 파일은 나중에 *FIT*에서 사용됩니다.
# SPI 플래시 이미지 준비
## 페이로드 통합
*ct.bin* 및 *utok.bin* 파일을 통합하려면 *CSTXE System Tools v3*에서 얻은 *FIT* 유틸리티(*fit.exe*)를 실행하십시오. 먼저 이 유틸리티를 사용하여 DCI가 활성화된 UP Squared BIOS 이미지(예: "UPA1AM61_DCI_Enabled.bin")를 여십시오.

*FIT*는 이미지를 열 때 전체 SPI 이미지의 여러 섹션(SPI 디스크립터, UEFI/BIOS 펌웨어, Intel ME 펌웨어 및 Unlock Token)을 추출하여 FIT와 동일한 로컬 디렉터리의 *"image_name"/Decomp* 폴더에 저장합니다.

이 작업을 마친 후 구성 XML을 저장하고(예: "UPA1AM61_DCI_Enabled.xml") fit.exe를 종료합니다.
Intel TXE 펌웨어를 취약한 버전인 **3.0.1.1107**로 다운그레이드하려면 <image name>/Decomp/TXE Region.bin 파일을 "3.0.1.1107_B_PRD_RGN.bin" 파일로 교체해야 합니다. 이 작업은 원본 파일의 이름을 "TXE Region.bin.orig"로 바꾼 다음 "3.0.1.1107_B_PRD_RGN.bin"의 이름을 "TXE Region.bin"으로 바꾸는 방식으로 수행해야 합니다.
fit.exe를 다시 열고 저장된 XML 파일에서 구성을 다시 불러오십시오. 파일 시스템에서 파일을 올바르게 교체했다면 Flash Layout 탭의 "Intel(R) TXE Binary File"에 원래 표시되어 있던 버전 대신 3.0.1.1107로 표시되는 것을 확인할 수 있습니다:

# 펌웨어 이미지에 익스플로잇 파일 통합
이제 *FIT*에서 */home/bup/ct*용으로 생성한 파일(**ct.bin**)과 *Unlock Token*(**utok.bin**)을 지정해야 합니다. *FIT*의 *Debug* 탭에서 펌웨어에 통합할 Trace Hub Binary 및 Unlock Token을 지정할 수 있습니다. 이 값들은 앞서 이미 생성한 파일들이어야 합니다.

# OEM 서명 비활성화
Platform Protection 탭 아래에 OEM 공개 키 해시가 있습니다. 32개의 0을 입력하여 이를 제거하십시오:```
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
