
Hardware backdoors in x86 CPUs
: x86 CPU의 하드웨어 백도어
github.com/xoreaxeaxeax/rosenbridge // domas // @xoreaxeaxeax
project:rosenbridge는 일부 데스크톱, 랩톱 및 임베디드 x86 프로세서에서 하드웨어 백도어를 공개합니다.
백도어는 링 3(사용자 영역) 코드가 프로세서 보호를 우회하여 링 0(커널) 데이터를 자유롭게 읽고 쓸 수 있게 합니다. 백도어는 일반적으로 비활성화되어 있지만(활성화하려면 링 0 실행이 필요), 일부 시스템에서는 기본적으로 활성화되어 있음을 발견했습니다.
이 저장소에는 프로세서가 영향을 받는지 확인하고, 백도어가 존재하는 경우 닫고, 백도어를 발견하고 분석하는 데 사용된 연구 및 도구를 포함하는 유틸리티가 포함되어 있습니다.
rosenbridge 백도어는 CPU의 메인 x86 코어와 함께 내장된 작은 비-x86 코어입니다. 모델 특정 레지스터 제어 비트로 활성화되고, _launch-instruction_으로 토글됩니다. 그런 다음 내장 코어는 특별히 포맷된 x86 명령어로 감싸진 명령을 받습니다. 코어는 이러한 명령(우리가 '깊이 내장된 명령어 세트'라고 부름)을 실행하여 모든 메모리 보호 및 권한 검사를 우회합니다.
백도어는 활성화되기 위해 커널 수준 액세스가 필요해야 하지만, 일부 시스템에서는 기본적으로 활성화되어 있어 권한이 없는 모든 코드가 커널을 수정할 수 있음이 관찰되었습니다.
rosenbridge 백도어는 Management Engine 또는 Platform Security Processor와 같은 x86 CPU의 다른 공개적으로 알려진 코프로세서와 완전히 구별됩니다. 알려진 어떤 코프로세서보다 더 깊이 내장되어 있으며, CPU의 모든 메모리뿐만 아니라 레지스터 파일 및 실행 파이프라인에도 액세스할 수 있습니다.
이 문제는 VIA C3 CPU만 영향을 받는 것으로 생각됩니다. C-시리즈 프로세서는 산업 자동화, POS, ATM 및 의료 하드웨어와 다양한 소비자 데스크톱 및 랩톱 컴퓨터를 대상으로 판매됩니다.
이 취약점의 범위는 제한적입니다. C3 이후의 CPU 세대는 더 이상 이 기능을 포함하지 않습니다.
이 작업은 사례 연구 및 사고 실험으로 공개되어, 점점 더 복잡해지는 프로세서에서 백도어가 어떻게 발생할 수 있는지, 연구자와 최종 사용자가 그러한 기능을 어떻게 식별할 수 있는지 보여줍니다. 여기에 제공된 도구와 연구는 더 깊은 프로세서 취약점 연구의 출발점을 제공합니다.
CPU가 영향을 받는지 확인하려면:
git clone https://github.com/xoreaxeaxeax/rosenbridge
cd rosenbridge/util
make
sudo modprobe msr
sudo ./bin/check
제공된 유틸리티는 베어메탈(가상 머신이 아닌)에서 실행되어야 하며 알파 상태입니다. 백도어가 포함되지 않은 시스템에서 충돌, 패닉 또는 정지가 발생할 수 있습니다.
여기에 제공된 유틸리티는 특정 프로세서 제품군 및 코어를 대상으로 설계되었습니다. 안타깝게도 연구된 형태에서 약간이라도 수정된 경우 도구가 백도어를 놓칠 수 있습니다.
일부 시스템은 백도어가 기본적으로 활성화되어 있어 권한 없는 코드가 허가 없이 커널 수준 액세스를 얻을 수 있습니다. 'CPU 확인' 단계에서 CPU가 취약하다고 표시되면 부팅 프로세스 초기에 백도어를 닫는 스크립트를 설치할 수 있습니다.
cd fix
make
sudo make install
reboot
이렇게 하더라도 커널 수준 액세스 권한이 있는 공격자는 여전히 백도어를 다시 활성화할 수 있습니다. 이 스크립트는 부팅 프로세스 중 문제를 수정하기 위한 개요로 제공되지만, 다른 시스템에 맞게 조정이 필요할 수 있습니다.
sandsifter 유틸리티는 이 연구에서 알려지지 않은 명령어를 발견하는 데 광범위하게 사용되었습니다.
asm
깊이 내장된 명령어 세트(DEIS)를 위한 어셈블러입니다. 사용자 정의 rosenbridge 어셈블리로 작성된 프로그램을 x86 명령어로 변환하며, launch-instruction 이후에 실행되면 명령을 숨겨진 CPU 코어로 보냅니다.
esc
권한 상승을 위해 rosenbridge 백도어를 사용하는 개념 증명입니다.
fix
모델 특정 레지스터 업데이트를 통해 가능한 범위 내에서 영향을 받는 시스템의 취약점을 닫기 위한 대략적인 개요입니다.
fuzz
알 수 없는 launch-instruction 및 _bridge-instruction_을 분리하고 rosenbridge 코어의 명령어 형식을 해결하기 위해 x86 및 rosenbridge 코어 모두를 퍼징하는 데 사용되는 유틸리티 모음입니다.
deis
숨겨진 CPU 코어의 효과와 기능을 탐색하는 데 사용되는 퍼저입니다.
exit
일부 프로세서에서는 DEIS 시퀀스 끝에서 x86 코어로 다시 전환하기 위해 종료 시퀀스가 필요하다고 생각됩니다. 이 디렉터리에는 연구 초기 단계에서 종료 시퀀스를 검색하는 데 사용된 유틸리티가 포함되어 있지만, 그러한 시퀀스가 필요하지 않은 프로세서가 발견되면서 중단되었습니다.
manager
작업자 네트워크에 분산된 퍼징 작업을 모니터링하고 관리하도록 설계된 Python 유틸리티 모음입니다.
wrap
x86 코어에서 숨겨진 rosenbridge 코어로 명령을 보내는 브리지 명령어를 식별하는 데 사용되는 sandsifter 퍼저의 축소 버전입니다.
kern
퍼징된 DEIS 명령어로 인한 변경 사항을 모니터링하기 위해 커널 메모리 및 레지스터를 감시하는 데 사용되는 도우미 유틸리티 모음입니다.
lock
rosenbridge 백도어를 잠그거나 잠금 해제하는 유틸리티입니다.
proc
퍼징 로그에서 패턴을 식별하여 DEIS 명령어 동작 클래스를 식별하는 도구입니다.
test
연구 초기에 사용된 도구로, 알려진 RISC 명령어를 실행하여 숨겨진 코어의 아키텍처를 식별하려고 시도합니다.
util
프로세서가 rosenbridge의 영향을 받는지 여부를 감지하는 알파 상태 도구입니다.
(TODO: link to whitepaper)
(TODO: link to slides)
이 작업에 제시된 세부 사항과 의미는 설명된 연구에서 파생된 저자의 추론 및 의견입니다. 연구는 설명된 CPU에서 인지된 보안 취약점을 식별하고 수정하려는 목적으로 수행되고 제공됩니다. VIA 프로세서는 낮은 전력 소비와 임베디드 설계의 우수성으로 유명합니다. 설명된 기능은 임베디드 시장을 위한 유용한 기능으로 선의로 생성되었으며, 일부 초기 세대 프로세서에서 의도치 않게 활성화된 상태로 남겨졌다고 생각합니다. 악의적인 의도는 없습니다.
project:rosenbridge는 Christopher Domas(@xoreaxeaxeax)의 연구 노력입니다.