AI 지원 역공학을 활용한 ThinkPad X61의 coreboot 포팅

ThinkPad X61은 성공적으로 coreboot에 포팅되었으며, 대형 언어 모델(LLM)이 레거시 펌웨어 역공학을 크게 가속화할 수 있음을 보여줍니다. 공급업체 BIOS 모듈을 분석하기 위해 AI 에이전트를 활용함으로써, 개발자는 일반적으로 3~6개월이 걸리는 과정을 몇 주로 단축했지만, 이 프로젝트는 정확성과 업스트리밍을 위해 깊은 도메인 전문 지식이 여전히 필수적임을 강조합니다.

AI 지원 역공학 워크플로우

LLM은 바이너리 블롭 분석을 자동화하고 이를 사용 가능한 코드로 변환함으로써 펌웨어 역공학 속도를 크게 향상시킬 수 있습니다. ThinkPad X61의 경우, 이 과정은 여러 개별 단계로 구성되었습니다:

데이터 추출 및 도구

기준을 설정하기 위해, 개발자는 전통적인 coreboot 도구를 사용하여 정상 작동 시스템에서 알려진 좋은 값을 덤프했습니다. 여기에는 PCI 구성 및 칩셋 레지스터를 위한 inteltool, ACPI 테이블을 위한 acpidumpiasl, 그리고 임베디드 컨트롤러(EC) RAM 분석을 위한 ectool 사용이 포함됩니다.

벤더인 Phoenix BIOS는 bios_extract를 사용해 모듈로 분리되었습니다. AI 에이전트가 펌웨어와 상호작용할 수 있도록 개발자는 다음을 제공했습니다:

  • ghidra-cli: raminit에 사용되는 Intel Memory Reference Code(MRC)와 같은 PE32 모듈을 분석하는 데 사용됩니다.
  • radare2: 16비트 실모드 글루 코드를 분석하는 데 사용됩니다.

코드 생성에서 LLM의 역할

개발자는 처음에 "vibe reverse engineering"(코드를 보지 않고 두 번의 프롬프트만으로 작동 코드를 생성)이라고 농담했지만, 실제로는 상당한 인간의 조정이 필요했습니다. LLM은 raminit 초기화 시퀀스를 추출하는 데 사용되었지만, 개발자는 유사 플랫폼(X60 및 X200)에 대한 지식을 바탕으로 중요한 수정 사항을 제공해야 했습니다.

LLM이 수동 개입이 필요했던 주요 영역은 다음과 같습니다:

  • Hardware Specifics: SPD/EEPROM 가시성에 영향을 주는 GPIO42의 SMBUS용 GPIO 멕스 식별.
  • Register Accuracy: 32비트 쓰기를 16비트 레지스터에 맞게 수정하고 GMCH FSB 주파수에 대한 올바른 MCHBAR 레지스터 식별.
  • Memory Semantics: coreboot의 CAS 인코딩과 MRC의 인코딩 사이의 혼동 해결.
  • Hardware Limits: 메모리 컨트롤러 지원을 DDR2 533MT/s 및 666MT/s(666/800MT/s가 아니라)로 수정.

하드웨어 테스트 및 플래싱

X61을 구동하려면 시리얼 출력을 위한 RS232 UART 커넥터가 있는 도킹 스테이션을 이용한 물리적 테스트 루프가 필요했습니다.

펌웨어를 플래시하기 위해, 개발자는 보드 하단의 SOIC8 플래시 칩에 클립을 부착한 CH341A SPI 프로그래머를 사용했습니다. 사용된 플래시 명령은 다음과 같습니다: flashprog -p ch341a_spi --ifd -i bios -w build/coreboot.rom

개발자는 ICH9/ICH10 노트북의 경우, Management Engine(ME) 펌웨어를 제거하여 coreboot을 위한 공간을 확보할 수 있으며, 이 과정이 X61에도 적용될 가능성이 있다고 언급했습니다.

업스트리밍 및 품질 보증

"bring-up hack"에서 업스트리밍 가능한 칩셋 코드로 전환하려면 엄격한 검토 과정이 필요했습니다. Angel Pons의 리뷰에서 AI 지원 프로세스로 인해 도입된 여러 문제가 밝혀졌습니다:

  • Hallucinations: 코드에 잘못된 레지스터 이름이 포함되어 있었고, GM965 0xa00 MCHBAR 범위에서 레지스터 블록 의미가 허구로 나타났습니다.
  • Logic Errors: 타이밍 테이블이 잘못 인덱싱되었으며, 일부 비트필드가 잘못된 의미를 가지고 있어 개발자의 특정 DIMM 조합에서만 작동하는 코드가 되었습니다.
  • Hardcoding: 사우스브리지 코드에 X61에 특화된 하드코딩된 초기화 비트와 디바이스 활성화가 포함되어 있었습니다.

펌웨어에 대한 더 넓은 함의

이 프로젝트는 폐쇄형 펌웨어 역공학에 대한 진입 장벽이 낮아지고 있음을 시사합니다. 개발자는 이것이 결국 Intel FSP(Firmware Support Package)의 역공학을 가능하게 할 수 있다고 추측합니다. FSP는 Ghidra가 효과적으로 분석할 수 있는 32비트 PE 코드이기 때문입니다.

커뮤니티 인사이트

커뮤니티 내 토론에서는 이 접근법이 비개발자에게도 유용함을 강조했습니다. 한 사용자는 디자이너 친구가 지원되지 않는 Wacom 태블릿용 작동 드라이버를 "vibe coded" 방식으로, 플러그인, 데이터 획득, 변환을 반복하는 유사한 과정으로 만들었다고 언급했습니다. 다른 사람들은 LLM이 "idiots"가 포트를 시도하는 장벽을 낮추지만, 수동 역공학을 통해 얻는 깊은 기술 습득이 손실되는 약간의 트레이드오프가 있다고 지적했습니다.

향후 확장

coreboot 외에도, ThinkPad X61은 Rust로 작성된 coreboot/u-boot 대안인 fstart가 지원하는 최초의 x86 플랫폼 중 하나로 포팅되었습니다.

Sources