[UEFI] Oob 탐지 스크립트 검증 데이터 생성 -1
·
CS/Graduation project
Oob 담당 팀원의 스크립트를 검증하기 위해, 테스트 데이터를 만들어보고 테스트를 진행했다. 나는 보편적인 취약점을 가진 드라이버를 만들고, 그걸 탐지해 보면서 스크립트의 부족한 부분을 찾아봐야 한다는 생각을 했었다. 그런데 “보편적 데이터가 무엇일까?”, “편향의 가능성은 없을까?” 등등의 생각부터 시작해서, 팀원들의 스크립트의 성격이 다른 것도 더해져 답을 내리지 못했다. 팀원들은 스크립트를 짜면서 경로 폭발을 마주했지만, 난 스스로 생각하다가 경로 폭발이 일어났다. 아무튼 그래서, 그냥 기존의 스크립트가 탐지할 수 있는 취약점을 가진 드라이버 기준으로 이것저것 방해물만 넣어보는 식으로 테스트를 진행했다. 탐지에 사용한 데이터 기존에 동건이가 만들어 놓은 취약점 드라이버를 기준으로 변형을 시도했다. ..
[UEFI] DEPEX Cycle Vulnerability 가능성 판단하기
·
CS/Graduation project
DEPEX 담당의 가설을 검증해 보라는 교수님의 말씀에 따라, 자료들을 찾아보며 가능성을 파악해 봤다. DEPEX 담당이 선택한 2가지 취약점 Missing Protocol Vulnerability 와 Cycle Vulnerability 중 Cycle Vulnerability를 먼저 시도했다. 내가 이해하기 위한 디스패처의 의존성 평가 및 상태 전이 방식DXE 코어가 시스템 메모리와 FV을 파싱하여 내부의 드라이버들을 찾아내면, EFI_CORE_DRIVER_ENTRY 구조체 형태로 식별되어 mDiscoveredList라는 전역 연결 리스트에 추가된다. 이때 드라이버들은 아직 실행 조건이 충족되지 않았기 때문에 모두 Dependent 플래그가 설정된 대기 상태로 머무르게 된다. 이후 디스패처는 각 드라..
[UEFI] SMI 발생 원리 및 처리 방법
·
CS/Graduation project
Ring -2 권한인 SMM으로 진입하기 위해서는, CPU에게 하던 일을 멈추도록 명령하게 하는 SMI를 발생시키는 방법 밖에 없다. SMI가 발생하는 원리SMI는 크게 하드웨어적 접근과 소프트웨어적 접근 두 가지 원리로 발생한다.하드웨어적 접근 (HW SMI): 메인보드의 온도 센서가 과열을 감지하거나 사용자가 전원 버튼을 누르는 등, 하드웨어 부품이 물리적인 신호를 보내는 방식소프트웨어적 접근 (SW SMI): 운영체제 환경에서 동작하는 소프트웨어가 펌웨어에게 특정한 작업을 요청하기 위해 APM I/O 포트(일반적으로 0xB2 포트)에 특정한 값을 기록함으로써 인위적으로 인터럽트를 유발하는 방식APM: Advanced Power Management최근에는 전원관리를 ACPI가 대체한다. 근데 특정 ..
Taint Analysis 개념 정리
·
CS/Graduation project
졸업프로젝트의 Ghidra 스크립트를 구현하기 위해 Taint Analysis 방식을 사용한다고 들었다. 이에 따라 선행 개념을 복습하고 Taint Analysis에 대한 개념을 정리해 보려고 한다. 1. Basic Block(BB)컴파일러가 프로그램을 분석할 때, 가장 먼저 하는 일은 코드를 베이직 블록 단위로 쪼개는 것이다. 베이직 블록은 오직 첫 번째 명령어(Entry)를 통해서만 진입할 수 있고, 마지막 명령어(Exit)를 통해서만 빠져나갈 수 있는 연속된 명령어의 묶음을 뜻한다. 즉 블록의 첫 번째 명령어가 실행되면 마지막 명령어까지 무조건 실행된다는 보장이 있는 안전한 구역이다. 2. Control Flow Analysis와 Data Flow Analysis컴파일러는 베이직 블록들을 ..
[UEFI] Ghidra에서 edk2 함수 P-code로 확인해 보기
·
CS/Graduation project
X86-64 환경의 edk2 펌웨어에서 주요 테이블과 함수들을 추출하고, Ghidra의 P-CODE 상에서 어떻게 표현되는지 정리해봤다. 동일한 X86-64 아키텍처라 하더라도 바이너리에 따라 P-code에서 사용되는 레지스터나 임시 변수명은 달라질 수 있다. 하지만 구조체의 오프셋과 핵심 명령어는 변하지 않는다는 점을 인지!!! 해야한다. (코드에서 변하지 않는 요소들은 볼드 처리해 뒀으니 참고) 분석 대상으로 삼은 것은 DXE 및 SMM 디스패처 취약점, 메모리 커럽션, NVRAM 변수 취약점, SMM Callout 취약점 등을 다룰 때 자주 등장하거나 필수적으로 사용되는 gBS와 같은 시스템 서비스와 함수들이다. 그 외 필요한 게 있을 때마다 추가하려고 한다.. 0. 기드라 설정ghidra-fi..
[UEFI] gRT(Runtime Services)란?
·
CS/Graduation project
1. gRT(Runtime Services)란?gRT는 UEFI 런타임 서비스 테이블(EFI_RUNTIME_SERVICES)을 가리키는 전역 포인터이다. gBS(Boot Service)가 제공하는 메모리 할당이나 화면 출력 같은 기능들은 OS 부팅 직전인 ExitBootServices() 호출 시점에 메모리에서 모두 해제되고 소멸된다. 하지만 gRT가 제공하는 기능들은 OS 커널이 로드된 후(Runtime Phase)에도 메모리에 계속 유지되며, OS가 펌웨어 하드웨어(NVRAM 플래시, RTC 칩 등)에 접근할 수 있는 표준 API를 제공한다. 윈도우나 리눅스에서 efibootmgr로 부팅 순서를 바꾸거나, 펌웨어 업데이트를 스케줄링하고 시스템을 재부팅하는 모든 동작이 내부적으로는 OS 커널을 통해 ..