
OpenPetya v2.0.0
부트킷 및 UEFI 부트 애플리케이션의 개념 증명(PoC)으로, Petya 랜섬웨어에서 영감을 받았으며 Assembly, C, C++로 작성되었습니다.
OpenPetya
Petya 랜섬웨어에서 영감을 받은 개념 증명(PoC) 부트킷 및 UEFI 부트 애플리케이션으로, Assembly, C, C++로 작성되었습니다.
이 프로젝트가 유용하거나 정보를 제공한다고 생각되신다면, 저장소에 ⭐를 남겨주시면 정말 감사하겠습니다. 여러분의 지원은 이 도구를 계속 개선할 수 있는 큰 동기부여가 됩니다.
개요
OpenPetya는 부트킷과 저수준 랜섬웨어가 내부적으로 어떻게 작동하는지 연구하기 위해 설계된 교육용 프로젝트입니다.
이 프로젝트는 다음에 중점을 둡니다:
- 커스텀 MBR 부트로딩
- 다단계 부트 프로세스
- 보호 모드(Protected Mode) 전환
- NTFS 마스터 파일 테이블(MFT) 암호화
- Salsa20 기반 암호화
- 비밀번호 검증 및 복원 워크플로우
- UEFI 프로그래밍
OpenPetya는 Petya 또는 NotPetya의 정확한 재구현을 목표로 하지 않습니다. 대신, 학습 및 연구 목적으로 설계된 단순화된 개념 증명입니다.
OpenPetya에는 명령 및 제어(C2) 기능이 포함되어 있지 않다는 점을 언급할 가치가 있습니다. 또한 OpenPetya는 암호화 후 평문 MFT 백업 데이터를 숨겨진 섹터에 저장합니다. 이 동작은 교육 목적으로 의도적으로 설계되었습니다. 이러한 기능은 이 프로젝트에서 구현된 핵심 부트로더 및 암호화 메커니즘에 비해 비교적 사소하기 때문입니다. 그러나 필요한 경우 이러한 기능을 수정하거나 제거할 수 있습니다.
참고: 버전 2.0.0에서는 현대 Windows 운영 체제를 손상시키는 데 악용될 수 있다는 우려로 UEFI용으로 구현하지 않기로 결정했습니다.
프로젝트 동기
v1.0.0
지난 몇 달 동안 저는 다음을 연구해 왔습니다:
- 악성코드 분석
- 부트로더
- 루트킷 및 부트킷
- Windows 내부 구조
- 운영 체제 기초
- 저수준 Assembly 프로그래밍
Petya와 NotPetya를 조사하는 동안, 많은 온라인 리소스가 기본 부트 프로세스가 실제로 어떻게 작동하는지 시연하지 않고 전체 워크플로우만 간략히 설명한다는 것을 깨달았습니다.
또한 기존의 많은 Petya 관련 프로젝트는 로직을 처음부터 구현하기보다 추출된 부트로더 바이너리나 수정된 원본 구성 요소에 의존합니다.
따라서 저는 OpenPetya를 다음을 이해하기 위한 실용적인 프로젝트로 개발하기로 결정했습니다:
- 커스텀 MBR 부트킷이 어떻게 작동하는지
- 2단계 부트로더가 어떻게 작동하는지
- 디스크 암호화 워크플로우가 어떻게 기능하는지
- 비밀번호 검증 및 복원 메커니즘이 어떻게 구현되는지
이 프로젝트는 부트킷, 저수준 악성코드 및 운영 체제 내부 구조에 대한 지속적인 연구의 일부이기도 합니다.
관련 기사:
- Analyzing Petya
- Analyzing NotPetya
- Simple MBR And Bootloader
- OpenBootloader
- Rootkits and Bootkits Notes
- PC Assembly Language Notes
- Serious Cryptography Notes
v2.0.0
버전 2.0.0에서는 현대 부트킷이 어떻게 작동하는지 궁금해졌습니다(Alex Matrosov, Eugene Rodionov, Sergey Bratus의 "Rootkits and Bootkits" 마지막 여러 장에서 다루는 내용). 따라서 EFI 애플리케이션 프로그래밍을 처음부터 공부하기로 결정했습니다. 그리고 그것이 예상보다 훨씬 어렵다는 것을 알게 되었습니다(디버깅 측면에서).
어쨌든, 몇 가지 간단한 EFI 애플리케이션을 작성한 후 OpenPetya v2.0.0을 공개했습니다!
기능
v1.0.0
-
커스텀 MBR
OpenPetya는 커스텀 마스터 부트 레코드(MBR)를 사용하여 2단계 페이로드를 로드합니다.
-
커스텀 2단계 부트로더
2단계 부트로더에는 프로젝트의 핵심 기능이 포함되어 있습니다:
- Salsa20 암호화/복호화
- 비밀번호 검증
- 복원 로직
- 사용자 인터페이스
-
보호 모드 전환
부트로더는 고급 로직을 실행하기 전에 16비트 리얼 모드에서 32비트 보호 모드로 전환합니다.
-
MFT 암호화
원본 Petya와 유사하게, OpenPetya는 Salsa20을 사용하여 NTFS 마스터 파일 테이블(MFT)의 중요한 부분을 암호화합니다.
-
비밀번호 검증
OpenPetya는 잘못된 키로 인한 돌이킬 수 없는 손상을 방지하기 위해 복호화 전에 입력된 비밀번호를 검증합니다.
-
자동 복원
올바른 비밀번호가 입력되면:
- 암호화된 데이터가 복원됩니다
- 원래 부트 체인이 복구됩니다
- OpenPetya가 자동으로 제거됩니다
v2.0.0
OpenPetya v2.0.0은 커스텀 EFI 애플리케이션(petya.efi)에 MFT 암호화를 포함하지 않습니다. 간단한 로그인 패널을 제공하며 비밀번호가 올바르면 체인로딩을 수행합니다.
EFI 애플리케이션에 MFT 암호화를 구현하지 않기로 선택한 이유는 현대 Windows 운영 체제를 손상시키는 데 악용될 수 있기 때문입니다. 반면 v1.0.0에서는 위협 행위자가 이미 2016년에 이를 시연했기 때문에 구현했습니다.
구성 요소
OpenPetya.exe
사용자 모드 설치 프로그램 및 제어 애플리케이션.
기능:
- 드라이브 선택
- 설치
- 재부팅 트리거
- 유틸리티 인터페이스
mbr.bin
다음을 담당하는 커스텀 마스터 부트 레코드(MBR) 코드:
- 2단계 로딩
- 초기 부트 실행
stage2.bin
OpenPetya의 핵심 페이로드.
역할:
- 보호 모드 전환
- Salsa20 암호화 작업
- MFT 암호화/복호화
- 비밀번호 검증
- 복원
- 부트 시 인터페이스
petya.efi
OpenPetya의 핵심 페이로드.
기능:
- 비밀번호 검증
- 체인로딩
워크플로우
BIOS
OpenPetya(MBR + 부트로더)의 워크플로우는 아래에 요약되어 있습니다.
- 사용자는
OpenPetya.exe를 사용하여 OpenPetya를 설치하고 비밀번호를 선택합니다. - 설치 프로그램에서 제공하는 BSOD(
NtRaiseHardError) 메커니즘을 통해 또는 수동으로 머신을 재부팅합니다. - 부팅 중에 커스텀 MBR이 2단계 페이로드를 로드합니다.
- 2단계 페이로드가 CPU를 보호 모드로 전환합니다.
- OpenPetya가 NTFS 마스터 파일 테이블(MFT)의 선택된 부분을 암호화합니다.
- 암호화 후 머신이 다시 재부팅됩니다.
- 부트 시 인터페이스가 사용자에게 비밀번호를 요청합니다.
- 비밀번호가 올바른 경우:
- 암호화된 데이터가 복호화됩니다
- 원래 부트 체인이 복원됩니다
- OpenPetya가 자동으로 제거됩니다
- Windows가 정상적으로 다시 부팅됩니다.
원본 Petya 랜섬웨어와 달리, OpenPetya는 가짜 CHKDSK 화면이나 사회공학적 행동으로 사용자를 속이려 하지 않습니다. 이 프로젝트는 순수하게 교육 및 연구 목적으로 설계되었습니다.
UEFI
OpenPetya(UEFI)의 워크플로우는 아래에 요약되어 있습니다:
- 부트 시 인터페이스가 사용자에게 비밀번호를 요청합니다.
- 비밀번호가 올바른 경우:
- 시스템이 체인로딩을 수행합니다
- 사용자가 커스텀 EFI 프로그램을 수동으로 제거합니다
빌드
아래 명령어를 사용하여 프로젝트를 빌드할 수 있습니다.
make # Build mbr.bin and stage2.bin
./build.sh # Build OpenPetya.exe
사용법
경고: 가상 머신에서 실행하세요!
아래 명령어는 커스텀 MBR 및 2단계 부트로더를 설치하는 방법을 보여줍니다(관리자 권한 필요):
레거시 BIOS:
OpenPetya.exe --list
OpenPetya.exe --drive 0 --install mbr.bin stage2.bin
UEFI:
OpenPetya.exe --is-admin
OpenPetya.exe --firmware
OpenPetya.exe --uefi-secure
OpenPetya.exe --drive 0 --uefi-install petya.efi
OpenPetya.exe --drive 0 --uefi-restore
기술 노트
다음에 대한 자세한 설명:
- MBR 부트 프로세스
- 리얼 모드와 보호 모드
- Salsa20 구현
- MFT 암호화 워크플로우
- 부트킷 설계
- Petya와 NotPetya에 대한 추가 논의
- 문서화되지 않은 API(예:
NtRaiseHardError) 사용 방법
은 이 문서에 기록되어 있습니다.
면책 조항
이 프로젝트는 순수하게 교육 및 연구 목적으로 개발되었습니다.
OpenPetya의 목표는 다음을 연구하는 것입니다:
- 부트킷
- 운영 체제 내부 구조
- 저수준 악성코드 기술
- 부트로더 아키텍처
이 프로젝트를 불법 활동이나 소유하지 않았거나 테스트할 명시적 권한이 없는 시스템에 사용하지 마십시오.
저자는 이 소프트웨어의 어떠한 오용에도 책임을 지지 않습니다.
데모 (Windows 7)
스크린샷
런타임 데모
향후 계획
- 개선된 복구 워크플로우
- 더 나은 NTFS 파싱
- 더 정확한 Petya 동작 시뮬레이션
- 추가 부트킷 연구
- 전체 화면 그래픽 모드
- Linux 지원
감사의 말
이 프로젝트를 확인해 주셔서 감사합니다. 피드백과 제안을 환영합니다.