
UEFI 기반 플랫폼을 위한 최초의 오픈 소스이자 공개적으로 이용 가능한 System Management Mode(SMM) 백도어입니다. 다양한 SMM 실험을 위한 범용 플레이그라운드로 적합합니다.
SMM backdoor for UEFI based platforms
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
이것은 중단된 레거시 프로젝트입니다. 최신 버전의 백도어는 SMM Backdoor Next Gen 프로젝트 페이지와 해당 문서를 확인하십시오:
https://github.com/Cr4sh/SmmBackdoorNg
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
이 프로젝트에 대한 자세한 내용은 다음 글을 읽어주세요:
http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
저장소 내용:
SmmBackdoor.py -- UEFI DXE 드라이버의 PE 이미지를 백도어 코드로 감염시키고, 설치된 백도어와 통신하여 SMRAM을 읽고 기타 유용한 작업을 수행할 수 있는 Python 프로그램입니다.
SmmBackdoor/ -- SMM(System Management Mode)에서 실행되는 UEFI 부분의 소스 코드.
SmmBackdoor.efi, SmmBackdoor.pdb -- UEFI 부문 바이너리 및 해당 디버그 기호.
smm_call/ -- 설치된 백도어와 상호작용하여 자체 프로세스에 대한 루트 권한을 얻는 개념 증명 Linux 프로그램.
SmmBackdoor 프로젝트를 빌드하려면 Visual Studio 2008과 EDK2 소스 코드(https://github.com/tianocore/edk2)가 설치된 Windows 머신이 필요합니다.
단계별 지침:
SmmBackdoor 하위 디렉터리를 EDK2 소스 코드 디렉터리로 복사합니다.
Conf/target.txt 파일을 편집하고 ACTIVE_PLATFORM 속성 값을 OvmfPkg/OvmfPkgX64.dsc로 설정합니다.
OvmfPkg/OvmfPkgX64.dsc를 편집하고 파일 끝에 다음 줄을 추가합니다:
#
# 3-rd party drivers
#
SmmBackdoor/SmmBackdoor.inf {
<LibraryClasses>
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
}
4. Visual Studio 2008 명령 프롬프트를 실행하고 EDK2 디렉터리로 cd합니다.
Edk2Setup.bat --pull을 실행하여 빌드 환경을 구성하고 필요한 바이너리를 다운로드합니다.
cd SmmBackdoor && build
컴파일 후 생성된 PE 이미지 파일은 Build/OvmfX64/DEBUG_VS2008x86/X64/SmmBackdoor/SmmBackdoor/OUTPUT/SmmBackdoor.efi에 생성됩니다.
Intel DQ77KB 마더보드를 예로 들어 SmmBackdoor.efi를 인펙터 페이로드로 실행하려면:
하드웨어 SPI 프로그래머를 사용하여 마더보드 펌웨어를 덤프합니다.
덤프된 플래시 이미지를 UEFITool에서 엽니다.
GUID = 26A2481E-4424-46A2-9943-CC4039EAD8F8인 FFS 파일의 PE 이미지를 추출하여 extracted.bin 파일로 저장합니다.
SmmBackdoor.py를 사용하여 추출된 이미지를 SmmBackdoor.efi로 감염시킵니다:
$ python SmmBackdoor.py --infect extracted.bin --output infected.bin --payload SmmBackdoor.efi
UEFITool에서 원래 PE 이미지를 infected.bin으로 교체합니다.
수정된 플래시 이미지를 파일로 저장하고 프로그래머로 마더보드 ROM에 기록합니다.
백도어에는 또한 DXE 단계 디버그 메시지를 화면에 표시하고 런타임 단계 디버그 메시지를 COM 포트를 통해 수신할 수 있는 디버그 출력 기능이 있습니다.
SmmBackdoor.py를 사용하려면 pefile Python 라이브러리(https://pypi.python.org/pypi/pefile)와 Python 바인딩을 포함한 CHIPSEC 프레임워크(https://github.com/chipsec/chipsec)를 설치해야 합니다.
지원되는 명령:
SmmBackdoor.py --infect <source_path> --output <dest_path> --payload <payload_path> - 지정된 백도어 코드로 DXE 드라이버의 PE 이미지를 감염시킵니다.
SmmBackdoor.py --test - 백도어 존재 여부를 확인하고 BACKDOOR_INFO 구조체의 상태 정보를 출력합니다.
SmmBackdoor.py --dump-smram - 사용 가능한 모든 SMRAM 영역을 파일로 덤프합니다.
SmmBackdoor.py --read-phys
- 주어진 주소의 물리 메모리 페이지에 대한 16진수 덤프를 출력합니다.SmmBackdoor.py --read-virt
- 주어진 주소의 가상 메모리 페이지에 대한 16진수 덤프를 출력합니다.SmmBackdoor.py --timer-enable - smm_call에 필요한 주기적 타이머 SMI를 활성화합니다(기본적으로 활성화되어 있음).
SmmBackdoor.py --timer-disable - 주기적 타이머 SMI를 비활성화합니다.
smm_call 사용법:
smm_call [<arg_1> [<arg_2>]] - 지정된 제어 코드와 인수를 SMM 백도어로 전송합니다.
-
smm_call --privesc - 백도어에 호출자 프로세스에 대한 루트 권한을 부여하고 명령 셸을 실행하도록 요청합니다.
이 코드는 Intel DQ77KB 마더보드에서만 테스트되었습니다. 다른 UEFI 호환 하드웨어에서 실행해 볼 수는 있지만 일부 백도어 기능은 작동하지 않을 수 있습니다.
Written by:
Dmytro Oleksiuk (aka Cr4sh)