DOI QR코드

DOI QR Code

macOS 메모리 포렌식을 위한 데이터 수집 및 분석 방법에 대한 연구

A Study on Data Acquisition and Analysis Methods for Mac Memory Forensics

  • 투고 : 2023.12.13
  • 심사 : 2024.02.15
  • 발행 : 2024.04.30

초록

macOS는 Apple 사의 제품군에서만 사용할 수 있고 독자적인 시스템 구조, 비공개 커널, 시스템 무결성 보호를 위한 SIP(System Integrity Protection) 등의 보안 기능 등으로 인해 기존에 알려진 메모리 데이터 수집 도구들이 실제로는 제대로 작동하지 않거나 시스템 재부팅을 필수적으로 동반해야 한다는 문제가 있다. 따라서 본 논문은 macOS와 관련된 메모리 포렌식 관련 연구들과 알려진 도구들의 현황 및 한계점을 분석하고 다양한 macOS버전을 대상으로 메모리 수집과 분석을 위한 방법을 연구했다. 그 결과 OSXPmem과 dd 도구를 사용하여 시스템 재부팅 없이 메모리 데이터를 수집하고 Volatility 2, 3를 활용하여 메모리 데이터를 분석하는 디지털 포렌식 조사에서 실무적으로 활용할 수 있는 메모리 수집 및 분석 프로세스를 개발했다.

macOS presents challenges for memory data acquisition due to its proprietary system architecture, closed-source kernel, and security features such as System Integrity Protection (SIP), which are exclusive to Apple's product line. Consequently, conventional memory acquisition tools are often ineffective or require system rebooting. This paper analyzes the status and limitations of existing memory forensics research and tools related to macOS. We investigate methods for memory acquisition and analysis across various macOS versions. Our findings include the development of a practical memory acquisition and analysis process for digital forensic investigations utilizing OSXPmem and dd tools for memory acquisition without system rebooting, and Volatility 2, 3 for memory data analysis.

키워드

I. 서론

글로벌 시장 조사업체인 statcounter에 따르면 2023년 1월~9월 기준으로 전 세계 데스크톱 운영 체제 시장 점유율이 Windows가 67.77%, macOS가 18.5%, Linux가 2.94%의 점유율을 기록하였다[1]. 가장 점유율이 높은 Windows는 FTK Imager, DumpIt, Belkasoft Live RAM Capturer, Volatility, Rekall 등 다양한 메모리 포렌식 도구들이 존재하며 이러한 도구들을 이용하여 많은 연구가 수행되었다.

Linux의 경우 오픈 소스로 제공되어 많은 연구자나 개발자가 접근하기 쉽고 다양한 기기에서 사용할 수 있어 낮은 사용률 대비 메모리 포렌식에 대한 연구가 많이 수행되었다. 그러나 macOS는 Apple 사의 제품군에서만 사용할 수 있으며, 독자적인 시스템 구조와 시스템 무결성 보호를 위한 SIP(System Integrity Protection) 등의 시스템 보안 기능, 공개되지 않은 커널 구조 등으로 인해 메모리 데이터 수집과 분석에 한계가 존재하며, 이러한 이유로 인해 macOS를 대상으로 수행된 메모리 포렌식 연구는 부족하다. 또한, macOS를 대상으로 수행된 메모리 수집 및 분석 관련 연구들은 대부분 악성코드나 암호화된 데이터를 분석하기 위한 과정에서 사용되었으며 수집 및 분석 시 발생하는 문제점들에 대한 해결방안을 제시한 연구는 존재하지 않았다. 따라서 본 논문에서는 실제 macOS를 대상으로 메모리 포렌식을 위한 메모리 수집 및 분석 연구를 수행하였으며, 이 과정에서 발생하는 여러 문제점을 확인하고 그에 대한 해결방안을 제시하여 실용적인 메모리 수집 및 분석 프로세스를 개발하였다. 본 연구의 기여는 다음과 같다.

⦁ macOS에서 사용할 수 있는 메모리 포렌식 수집 및 분석 도구의 현황과 한계점을 분석했다.

⦁ Bootable 방식이 아닌, macOS 메모리 수집 방법을 연구하고 디지털 포렌식 조사에서 활용할 수 있는 메모리 수집 프로세스를 개발했다.

⦁ macOS에서 전 세계적으로 가장 널리 사용되는 메모리 분석 도구인 Volatility 2, 3를 사용하기 위한 방법과 한계점을 분석하여 Volatility 사용의 핵심인 Profile와 ISF 개발 방법을 개발했다. 또한, 디지털 포렌식 조사에서 활용할 수 있는 메모리 분석 프로세스도 개발했다.

⦁ 메모리 수집 및 분석 프로세스를 적용한 실용적인 메모리 수집 및 절차를 제안함으로써 macOS 메모리 포렌식을 위한 가이드라인을 제시했다.

본 논문은 2절에서는 macOS를 대상으로 수행된 메모리 포렌식 연구와 사용된 도구들을 확인하고, 3절에서는 2절의 내용을 바탕으로 현재 수행 가능한 메모리 수집 및 분석 방법에 대해 논한다. 4절에서는 OSXPmem을 이용하여 macOS 10.13, 10.14, 10.15 버전을 대상으로 메모리 수집을 수행, 5절에서는 Volatility 2, Volatility 3를 이용한 메모리 분석을 수행한다. 이러한 결과를 통해 6절에서는 연구 결과 및 한계점에 대해 논하며 7절에서는 결론으로 마무리한다.

II. 관련 연구 및 배경 지식

2.1 관련 연구

2.1.1 악성코드 분석을 위한 메모리 포렌식 연구

2006년 Burdach 등은 Black Hat USA에서 메모리 포렌식에 대해 처음으로 발표하였으며 최근 DKOM(Direct Kernel Object Manipulation) 등과 같은 안티 메모리 포렌식 기능을 적용한 악성코드나, 파일 시스템에는 흔적을 남기지 않고 메모리에만 상주하는 메모리 상주형 악성코드들이 등장하고 있음을 언급하였다. 이러한 안티 포렌식 및 메모리 상주형 악성코드를 분석하기 위해 Windows, Linux를 대상으로 메모리 포렌식을 수행하였으며 KnTTools, WMFT(Windows Memory Forensic Toolkit) 도구를 사용하여 메모리 수집 및 분석을 수행하여 수집한 메모리 이미지 내 은닉된 악성코드를 탐지하였다[2].

2011년 이경식 등은 macOS를 대상으로 프로세스 은닉기능을 사용하는 악성코드들을 분석하기 위해서는 메모리 수집 및 분석이 필요하나, 대부분의 메모리 포렌식은 Windows를 대상으로 수행되어 macOS에 대한 연구는 부족하다는 것을 언급하였다. 따라서 이 논문에서는 macOS 10.6 버전에서 물리 메모리 분석을 위한 시스템 콜 후킹 탐지하는 방법을 제안하였으며, 물리 메모리 이미지에서 프로세스 정보와 마운트된 장치 정보, 커널 버전 정보, 외부 커널 모듈 정보(KEXT) 등을 추출하여 제안한 방법에 대한 효용성을 입증하였다[3].

2015년 Andrew Case 등은 macOS의 사용률이 급격하게 증가함에 따라 macOS를 대상으로 동작하는 루트킷, 악성코드 및 공격 도구들의 수도 증가하고 있으며, 이러한 macOS를 대상으로 공격하는 악성코드를 탐지 및 분석하기 위한 연구는 부족하다는 것을 언급하였다. 따라서 현재까지의 Windows, Linux에서 악성코드 탐지 및 분석 방법에 대한 관련 연구들을 분석하여 macOS에 적용 가능한 새로운 탐지 및 분석 기술을 개발하였다. 개발한 탐지 및 분석 기술의 유효성을 입증하기 위해 macOS를 대상으로 동작한 은닉기능을 가지는 실제 악성코드를 이용해 분석하려 했으나, 실제 악성코드는 존재하지 않아 Weapon X와 같은 PoC(Proof of Concept)를 이용해 분석을 수행하였다. 또한, 개발한 새로운 탐지 및 분석 방법을 이용해 Volatility 2 플러그인을 개발하였다[4].

2022년 Andrew Case 등은 현재까지의 메모리 포렌식은 주로 커널 영역에서 동작하는 커널 루트킷 악성코드를 대상으로 수행되었으나, 최근 운영체제 수준의 접근 통제 정책 및 기술이 도입되어 감소하는 추세임을 언급하였다. 커널 루트킷과 반대로 키로깅, 클립보드 복사, 웹캠 영상 녹화 등 사용자의 개인정보 및 보안에 위협을 주는 하드웨어 디바이스 모니터링 악성코드들은 증가하고 있으며, 이러한 사용자 영역 악성코드를 탐지하기 위한 연구가 필요함을 강조하였다. 또한, 사용자 영역의 API 함수들을 통해 필요한 정보를 도청하고 추출하는 악성코드에 대한 연구는 Windows에는 일부 존재하나 구식적인 방식을 사용하여 현재 적용할 수 없으며, macOS, Linux에서는 구현조차 되어 있지 않음을 언급하였다. 따라서 Windows, macOS, Linux 3가지 운영체제에서 디바이스 모니터링하는 악성코드를 탐지할 수 있는 메모리 포렌식 알고리즘을 위한 연구를 수행하였으며 새로운 메모리 포렌식 알고리즘을 소개하였다. 또한, 이러한 알고리즘을 적용한 Volatility의 플러그인 개발도 수행하였다[5].

2.1.2 암호화 데이터 대응을 위한 메모리 포렌식 연구

2013년 Kyeong sik Lee 등은 macOS에서 사용자의 메신저 계정, 이메일 계정, 캘린더, 연락처, 인증서 등 민감한 데이터를 저장할 때 독자적인 Keychain 암호 관리 시스템을 이용하여 암호화하여 저장하며, 이러한 Keychain 암호 관리 시스템의 구조가 아직 알려지지 않아 디지털 포렌식을 수행하는 데 어려움이 있음을 언급하였다. 따라서 Keychain이 적용된 macOS 10.7.5, 10.8.2, 10.6.3 대상으로 Mac Memroy Reader를 이용한 메모리 수집을 수행하였다. 수집한 메모리 이미지를 Volafox의 keychaindump 모듈을 이용하여 수집한 메모리 이미지 내 존재하는 Keychain 암호 관리 시스템의 암호화 키와 관련된 정보를 추출하여 암호화가 적용된 데이터를 복호화하는 데 성공하였다. 또한 이러한 결과를 토대로 Keychain 암호 관리 시스템의 암호화 키를 찾는 프로세스를 제안하였다[6].

2018년 Charles B. Leopard 등은 macOS에서 File Vault 2가 적용된 데이터를 복호화하기 위한 연구를 수행하였다. macOS 10.9.5, 10.10.1, 10.10.2 버전을 대상으로 메모리 수집 도구인 MacQuisition, OSXPmem, RECON 3가지와 메모리 분석 도구인 Rekall, Volatility를 이용하여 메모리 내 저장된 데이터에서 File Vault 2 암호화 키, 휘발성 시스템 데이터 등 중요한 아티펙트 추출하여 File Vault 2가 적용된 파일의 복호화에 성공하였다. 또한 이러한 메모리 포렌식을 수행할 때 메모리 수집 도구가 메모리에 훼손을 줄 수 있음을 강조하였으며 3가지 메모리 수집 도구로 수집한 이미지 파일과 VMware의 스냅샷을 비교 분석을 수행하였다[7].

2022년 Norah Almubairik 등은 다양한 SNS 애플리케이션들이 개인정보 및 채팅 기록들을 암호화를 이용해 보호하고 있으며 이러한 암호화 기능을 역이용하여 범죄자들이 범죄 목적으로 활용하고 있음을 언급하였다. 범죄 목적에 사용되는 암호화가 적용된 메시지들을 복호화하기 위해 메모리 수집 및 분석을 수행하였다. 분석 대상 SNS 애플리케이션은 WhatsApp, Telegram, Twitter를 선정하였으며 macOS의 경우 OSXPmem, Windows의 경우 Belkasoft Live RAM Capture 도구를 이용하여 메모리 수집을 진행하였다. 메모리 분석의 경우 Hex-editor를 이용하여 String 문자열 검색 방식을 이용하여 분석을 수행하였다. 수행 결과, Twitter와 WhatsApp의 경우 메모리 내 많은 데이터가 남아 있는 것을 확인하였다. Telegram의 경우 특정 시간 이후, 메모리에서 자동으로 데이터를 삭제하는 기능으로 인해 비밀 채팅에 대한 정보는 전혀 남지 않는 것을 확인하였다. 또한, 운영체제의 차이에 따른 데이터의 변화, 차이는 확인되지 않았으며 이러한 메모리 포렌식 과정을 자동화해주는 WormHex 도구를 개발하였다[8].

2.1.3 라이브 포렌식을 위한 메모리 포렌식 연구

2010년 최준호 등은 macOS 사용률은 지속적으로 증가하고 있으나 macOS 포렌식을 위한 도구와 연구는 부족하다는 것을 언급하였으며 macOS 10.5, 10.6 버전을 대상으로 사용자의 행위 및 흔적들에 대한 정보를 수집하기 위한 라이브 포렌식을 수행하였다. 이러한 라이브 포렌식을 통해 컴퓨터 부팅 및 종료, 로그인 시간, 프로그램 사용 기록, 외부저장매체 사용 내역 등에 대한 데이터들의 위치, 태그, 저장 방식 등에 대한 정보를 추출하였다[9].

2017년 김세호 등은 기존의 볼륨 암호화 기법인 File Vault 2 외에도 Unified Logging으로 불리는 로깅 시스템, APFS 파일 시스템으로 인해 macOS 대상 디지털 포렌식 분석의 어려움을 언급하였으며 이를 해결하기 위해 macOS 10.12, 10.13을 대상으로 디지털 포렌식 분석을 수행하여 디지털 자료 획득 및 분석 시 직면하게 되는 여러 이슈와 이슈별 적용할 수 있는 라이브 포렌식 기법을 제시하였다. 또한, 주요 아티펙트, 로그, 웹 페이지 방문 기록, 메타데이터 등 다양한 데이터들을 획득하고 분석할 수 있는 라이브 포렌식 분석 도구인 macOS Forensic Analyzer 도구를 개발하였다[10].

이러한 macOS와 관련된 연구를 정리하면 다음 Table 1와 동일하다. macOS를 대상으로 메모리 포렌식을 수행한 연구들의 경우, 메모리 수집에서는 Surge Collect Pro, Mac Memory Reader, MacQuisition, OSXPmem, RECON 등의 도구를 사용하였으며, 메모리 분석에는 Volatility 2, Volatility 3, Volafox, Rekall 등을 사용하였다. 이러한 도구를 통해 메모리 포렌식을 수행하였으며 수행된 결과를 이용하여 악성코드 및 암호화된 데이터를 복원하는 데 사용하였다.

Table 1. Related research classification

JBBHCB_2024_v34n2_179_5_t0001.png 이미지

2.2 배경지식

2.2.1 메모리 수집 도구

Mac Memory Reader[11]는 CLI 기반 프리웨어 메모리 수집 도구로 x86, x64 모두 사용할 수 있다. 수집한 결과를 여러 파일로 분할 저장이 가능하며 TCP Socket 기능을 이용해 외부에 전송할 수 있다. 또한 MD5, SHA-1, SHA-256 등 해시값 계산을 지원한다. 하지만 현재 서비스가 중지되어 도구 확보가 불가능하다.

RECON ITR[12]은 SUMURI에서 개발한 취약점 스캐닝 및 보안 평가 도구이다. 모든 Inter 기반 mac과 M1칩 프로세서가 사용되는 macOS뿐만 아니라 Windows, Linux에서도 메모리 수집, 디스크 이미징 등 다양한 기능을 지원한다. 하지만 RECON ITR은 초기 버전인 1.0.X 버전에서만 메모리 수집 기능을 지원하며 현재 최신버전인 6.0.X 버전에서는 메모리 수집 기능을 지원하지 않아 사용 및 도구 확보가 불가능하다.

MacQuisition[13]은 BlackBag에서 개발한 디스크 이미징, 데이터 추출, 라이프 포렌식 3가지 기능을 제공하는 도구로 Xserve, Mac Mini, MacBook, MacBook Air 등의 기기에 대한 메모리 수집이 가능하다. 또한, AFF4, raw, dmg 등 다양한 포맷으로 메모리 수집이 가능하며 해시값 계산을 지원한다. 그러나 현재 Cellebrite의 Digital Collector에 통합되어 도구 확보가 불가능하다.

Digital Collector[14]는 BlackBag의 MacQuisition와 통합하여 Cellebrite에서 개발된 도구로 Windows의 경우 최신 운영체제인 Windows 11까지 모두 지원하며, macOS의 경우 M1, T2 칩셋을 대상으로 사용 가능하며 macOS 10.13 ~ 13 버전을 지원한다. 또한, 전체 디스크 이미징, 파일 선별 수집, 메모리 수집, 라이브 포렌식 기능 등을 제공하며 그 과정에서 MD5, SHA-1, SHA-256 해시 계산 기능도 제공한다. 하지만 Digital Collector는 Bootable USB 방식으로 동작하는 도구이기 때문에 데이터 수집 과정에서 PC의 재부팅 과정이 동반되므로 프로세스를 수집, 분석해야 하는 메모리 포렌식 조사를 위해서는 사용이 부적절하다.

Surge Collect Pro[15]는 Volatility 개발자인 Andrew Case 등이 macOS 10.15, 11, 12 버전에서 메모리 수집에 성공한 연구 기록이 존재한다. 그러나 현재 구매가 불가능하여 사용할 수 없다.

OSXPmem[16]은 사고대응을 위한 라이브 원격 포렌식 프레임워크인 구글의 GRR(Google Rapid Response)의 메모리 포렌식 도구인 Rekall에 내장된 메모리 수집 도구로 Rekall의 업데이트가 중단됨에 따라 개발자인 Velocidex가 OSXPmem을 분리하여 지속적으로 업데이트하였다. Intel 기반 macOS에서 메모리 수집이 가능한 오픈 소스 도구이며 kext(Kernel Extensions)를 이용한 메모리 수집이 가능하며 압축 기능을 지원한다.

2.2.2 메모리 분석 도구

Volatility 2[17]는 2007년 Volatility Foundation에서 처음 배포된 오픈 소스 메모리 분석 도구로 Python 2를 기반으로 제작되었으며 현재 Python 2의 개발이 중단됨에 따라 Volatility 2 또한 개발이 중단되었다. Volatility 2를 사용하기 위해서는 디버그 심볼 정보와 데이터 타입 및 구조 정보를 이용해 제작한 Profile이 필요하며 Volatility 2 공식 홈페이지에서 macOS 10.5 ~ 10.13 버전의 특정 빌드 버전에 대해서만 Profile을 제공한다. 따라서 지원하지 않는 macOS 버전 및 빌드 버전을 대상으로는 직접 생성이 필요하다. Profile을 직접 생성하기 위해서는 먼저 macOS의 특정 빌드 버전에 종속성을 가지고 있는 KDK(Kernel Debug Kit) 설치가 필요하다. KDK를 설치한 이후, macOS의 메모리 데이터 구조를 정의한 파일인 vtypes와 메모리 내 프로그램의 함수, 변수 이름, 주소 등과 관련된 디버그 정보와 symbol 정보를 제공하는 symbol.dysmutil 두 파일을 이용하여 Profile을 생성할 수 있다.

Volatility 3[18]는 2021년 2월 Volatility Foundation에서 배포된 오픈 소스 메모리 분석 도구로 Python 3를 기반으로 제작되었다. Volatility 3는 Volatility 2와는 다르게 특별한 설치작업이 필요 없으며 Profile이 아닌 ISF를 이용하여 메모리 분석을 수행한다. Volatility 3에서 사용하는 ISF를 macOS에서 생성하기 위해서는 Volatility 2와 동일하게 KDK 설치가 필요하며 go 언어, volatility foundation에서 배포하는 dwarf2json 설치가 필요하다. dwarf2json은 디버그 정보 파일인 DWARF(Debug With Arbitrary Record Format) 파일을 JSON 형식으로 변환해주는 도구이며 go 언어를 이용한 빌드가 필요하다.

Volafox[19]는 n0fate가 2016년 2월 출시한 Python 2 기반 오픈 소스 메모리 분석 도구이며 macOS 10.6 ~ 10.11 버전을 대상으로 사용이 가능하다. 또한, Firewire, VMware에서 수집한 raw 이미지, Rekall의 AFF4 형식으로 수집한 메모리 이미지, Mac Memory Reader로 수집된 이미지를 대상으로 사용이 가능하며 Mac Memory Reader로 수집한 이미지의 경우 Volafox에서 지원하는 flatten.py Python 코드를 이용한 파싱이 필요하다.

III. 연구 방법

3.1 메모리 수집 도구 및 OS 버전

2장에서 확인한 메모리 수집 도구들이 지원하는 macOS 버전은 Table 2와 동일하며 OSXPmem은 macOS 11이상 버전을 대상으로는 지원하지 않으며 macOS 10.15 이하의 버전에서 사용이 가능하다. Mac Memory Reader, MacQuisition, RECON ITR 도구들은 현재 서비스가 종료되었거나, 메모리 수집 기능을 지원하지 않기 때문에 본 연구에서는 제외하였다. 또한, Digital Collector는 Bootable USB 방식이기 때문에 연구 대상에서 제외하였다. Surge Collect Pro는 현재 판매하지 않기 때문에 연구 대상에서 제외하였다. 모든 메모리 수집 도구들을 확인해본 결과, 현재 macOS에서 Bootable 방식을 제외한 메모리 수집에 사용할 수 있는 도구는 OSXPmem이 유일한 것을 확인하였으며 OSXPmem을 본 연구에서 메모리 수집 도구로 선정하였다.

Table 2. Available macOS memory acquisition tools

JBBHCB_2024_v34n2_179_6_t0001.png 이미지

3.2 메모리 분석 도구 및 OS 버전

메모리 분석 도구들이 지원하는 macOS 버전은 다음 Table 3와 동일하며 Volatility 2는 10.14 이하의 버전에서 사용할 수 있으며 Volatility 3의 경우 macOS 12 이하의 버전에서 사용할 수 있다. Volafox는 macOS 10.11 이하의 버전에서 사용할 수 있으며 Rekall은 macOS 10.12 이하의 버전에서 사용할 수 있다. 선정한 메모리 수집 도구인 OS XPmem은 10.15 이하의 버전에서 사용할 수 있으므로 메모리 분석 도구의 경우 4가지 도구 모두 사용할 수 있으나, 본 연구에서는 메모리 수집이 가능한 가장 최신 버전인 macOS 10.15, 10.14, 10.13 버전을 대상으로 메모리 수집을 수행하기 위해 Volafox, Rekall 도구는 낮은 버전의 macOS 버전만 지원하기 때문에 연구 대상에서 제외하였다. 테스트 시스템 환경은 다음 Table 4와 같다.

Table 3. Available macOS memory analysis tool

JBBHCB_2024_v34n2_179_7_t0001.png 이미지

Table 4. Test system information

JBBHCB_2024_v34n2_179_7_t0002.png 이미지

IV. 메모리 수집 연구

4.1 OSXPmem 사용을 위한 준비

OSXPmem을 이용해 메모리 수집을 진행하기 위해서는 먼저 kext 명령어를 사용할 수 있는 환경을 만들어야 한다. kext는 커널의 기능을 확장, 변경하여 H/W 드라이버, 파일 시스템, 보안 기능 등 시스템 컴포넌트 구현에 사용되며 KDK(Kernel Debug Kit)가 설치된 환경에서 사용할 수 있다. KDK는 macOS에서 커널 디버깅에 필요한 커널 소스코드, 바이너리 및 디버그 심볼에 대한 정보나 커널 디버깅을 위한 도구 및 유틸리티, 시스템 성능 최적화, 커널 드라이버 개발에 필요한 다양한 정보, 등을 모아둔 도구 모음으로 Apple의 developer 페이지에서 설치할 수 있으며 Table 5와 동일하게 현재 macOS 10.13의 경우 12개, 10.14의 경우 6개, 10.15의 경우 16개의 빌드 버전을 대상으로만 설치가 가능하다. KDK는 대상 시스템의 빌드 버전과 KDK의 빌드 버전이 동일해야만 설치가 가능하다. 따라서 현재 시스템의 빌드 버전을 KDK가 지원하지 않을 경우, KDK를 사용할 수 있는 빌드 버전으로 변경해야 한다.

Table 5. Installable KDK Build version and OS version

JBBHCB_2024_v34n2_179_8_t0001.png 이미지

하위 빌드 버전에서 상위 빌드 버전으로 변경 시에는 Apple에서 지원하는 Security Update를 이용하여 버전 변경이 가능하나, 상위 빌드 버전에서 하위 빌드 버전으로 변경하려면 대상 macOS 버전의 초기 디스크 이미지를 이용하여 재설치 후 Security Update를 이용해 특정 빌드 버전으로 변경해야 한다. 또한, Security Update는 모든 빌드 버전을 대상으로 지원하지 않아 이 경우에는 OSXPmem을 이용한 메모리 수집이 불가능하다.

4.2 OSXPmem을 사용한 메모리 수집

OSXPmem을 이용해 메모리 수집을 진행하기 위해서는 github에서 OSXPmem 소스를 macOS에 설치하고 압축 해제하여 OSXPmem.app 내 존재하는 MacPmem.kext를 kext 로드 및 유효성을 검사해주는 도구인 kextutil를 이용하여 커널에 로드해야 한다. kextutil 명령어를 이용해 MacPmem.kext를 로드할 경우 2가지 이슈 사항이 존재한다. 첫 번째는 macOS에서 kext를 하지 못하게 차단하는 이슈 사항이 존재하며 [설정]-[보안 및 개인정보 보호]에서 kext 관련 권한을 승인하거나, cmd 창에서 root 권한으로 spctl —master-disable 명령어를 이용하여 다운로드한 모든 앱의 권한을 승인하여 kext 차단을 해제해야 한다.

두 번째는 macOS의 SIP(System Integrity Protection)로 인한 권한 변경이 불가능한 이슈 사항이 존재하였다. SIP는 시스템 무결성 보호, 파일 시스템 권한 보호, 서명되지 않은 kext로부터 시스템을 보호하는 기능으로, root 권한으로도 권한 변경이 불가능하며 권한 변경을 위해서는 SIP 해제가 필요하다. SIP 기능을 해제하기 위해서는 재부팅 후, command + R을 이용하여 복구 모드로 진입하여 Fig. 1와 같이 csrutil disable 명령어를 이용하여 SIP 기능을 해제해야 한다.

JBBHCB_2024_v34n2_179_8_f0001.png 이미지

Fig. 1. Disables SIP function in recovery mode

OSXPmem.app/MacPmem.kext를 kextutil을 이용해 로드한 후, osxpmem.app/osxpmem을 이용하여 메모리 수집을 수행할 수 있으며 map, elf, raw 형식의 포맷을 지원하여 원하는 포맷으로 메모리 수집이 가능하다. 그러나 이러한 maps, elf, raw 형식으로 수집한 메모리 이미지의 경우 Volatility에서 수집한 메모리 이미지를 인식하지 못해 분석할 수 없으며, 메모리 수집 시 kextutil를 이용해 MacPmem.kext를 attach하여 생성된 물리 메모리인 /dev/pmem을 dd 명령어를 이용하여 디바이스 장치 메모리를 수집해야만 Volatility를 이용한 메모리 분석이 가능하였다.

4.3 메모리 수집 프로세스 개발

macOS 10.13, 10.14, 10.15에서 메모리 수집을 수행한 결과를 순서도로 표현하면 다음 Fig. 4와 같다. macOS에서 메모리 수집을 하기 위해서는 먼저 macOS의 버전을 확인이 필요하며 macOS 버전이 11 이상일 경우 OSXPmem을 이용한 메모리 수집이 불가능하여 Digital Collector로 메모리 수집을 수행해야 한다. 그러나, Digital Collector은 Bootable 방식을 사용하기 때문에 재부팅이 필요하므로 재부팅 하여 메모리 수집을 수행할 것인지 선택해야 한다. macOS 버전이 10.15 이하일 경우 KDK가 설치 가능한 빌드 버전인지 확인해야 하며 설치 가능한 빌드 버전일 경우 SIP가 켜져 있는지 확인해야 한다. SIP가 켜져 있는 경우 SIP를 해제하기 위해 재부팅을 수행해야 하며 SIP가 꺼져 있거나 해제를 수행한 경우 KDK와 OSXPmem 설치 및 kext 사용 권한 승인이 필요하다. 이후 OSXPmem/Mac Pmem.kext를 로드하고 dd 명령어를 이용하여 메모리 수집하는 순서로 진행할 수 있다.

JBBHCB_2024_v34n2_179_9_f0001.png 이미지

Fig. 2. Memory Acquisition using OSXPmem

JBBHCB_2024_v34n2_179_9_f0002.png 이미지

Fig. 3. Memory acquisition using dd

JBBHCB_2024_v34n2_179_9_f0003.png 이미지

Fig. 4. Memory acquisition process

V. 메모리 분석 연구

5.1 Volatility 2

Volatility 2로 분석하기 위해서는 Profile이 필요하며 Volatility 공식 홈페이지에서 제공하고 있으나, 모든 운영체제 버전 및 빌드 버전에 대해서는 제공하지 않으며, macOS 10.14 이상의 버전부터 지원하지 않는다. Volatility 2에서 지원하는 macOS 10.13에 대한 Profile 목록은 Table 7와 동일하며 총 25개의 빌드 버전을 대상으로 지원한다.

Table 6. Profile List supported by Volatility 2

JBBHCB_2024_v34n2_179_10_t0001.png 이미지

Table 7. ISF List Supported by Volatility 3

JBBHCB_2024_v34n2_179_11_t0001.png 이미지

Profile을 생성하기 위해서는 vtypes, symbol.dsymtuil 2가지 파일을 생성해야 한다. 데이터 타입 및 구조 정보를 포함하는 파일인 vtypes를 생성하기 위해서는 메모리 수집 때와 마찬가지로 KDK가 설치되어 있어야 하며 kernel.dSYM와 Volatility 2에서 지원하는 convert.py Python 코드를 이용하여 생성 가능하다. kernel.dSYM 파일의 경우 2018년 이전에는 /Volume/KernelDebugKit/ 경로에 존재하였으나, 2018년 이후에는 Library/Developer/KDKs/KDK_[os version_Build version].kdk/System/Library/Kermels/ 경로로 변경되었다. 이러한 경로의 kernel.dSYM을 이용하여 dwarfdump 파일을 생성할 수 있다.

이후, Volatility 2에서 지원하는 convert.py Python 코드를 이용하여 변환시켜야 한다. volatility/tools/mac/ 경로의 convert.py는 macOS의 dwarfdump 파일을 Volatility 2에서 읽을 수 있는 Linux 스타일로 파싱해주는 기능을 수행하며, convert.py를 이용해 앞서 생성한 dwarfdump 파일을 변환한다. 이후, 다시 convert.py를 이용해 변환한 dwarfdump 파일을 vtype 파일로 변환해야 한다. symbol.dsymutil를 생성하기 위해서는 kernel.dSYM와 같은 경로의 kernel 파일을 DWARF(Debugging With Attributed Record Formats)로 변환이 필요하며, Fig. 7처럼 dsymutil 명령어를 이용하여 DWARF로 변환하여 symbol.dsymutil 파일을 생성한다.

JBBHCB_2024_v34n2_179_10_f0001.png 이미지

Fig. 5. Creating a dwarfdump file using kernels. dSYM

JBBHCB_2024_v34n2_179_10_f0002.png 이미지

Fig. 6. Convert dwarfdump file using convert.py

JBBHCB_2024_v34n2_179_10_f0003.png 이미지

Fig. 7. Create symbol.dsymutil file

생성한 vtypes, symbol.dsymutil 파일을 zip으로 압축하여 volatility/plugins/overlays/mac/ 경로로 이동시키면 Profile을 이용해 메모리 분석을 수행할 수 있다. 그러나 macOS 10.14 이상일 경우, vtypes 생성 시 사용되는 convert.py가 제대로 파싱하지 못하는 오류가 발생하였으며 Volatility 2 github에서도 convert.py에 대한 이슈 사항이 다수 존재하였다. 그러나, Volatility 2에 대한 지원이 종료되어 개발 및 수정이 진행되지 않기 때문에 macOS 10.14 이상부터 convert.py를 사용이 불가능하여 Profile 생성이 불가능하다.

5.2 Volatility 3

Volatility 3를 사용하기 위해서 ISF 생성이 필요하며, Volatility 3에서 macOS 10.13, 10.14, 10.15를 대상으로 지원하는 ISF 목록은 다음 Table 7와 동일하다. ISF도 Volatility 2의 Profile와 마찬가지로 KDK가 설치된 환경에서 생성 가능하며 추가로 go 언어와 dwarf2json 설치가 필요하다. go 언어의 경우 https://go.dev/dl에서 다운로드 가능하며 dwarf2json은 volatility foundation에서 다운로드 가능하다. 이후, Fig. 8처럼 dwarf2json을 이용하여 ISF 생성이 가능하다.

JBBHCB_2024_v34n2_179_10_f0004.png 이미지

Fig. 8. Create ISF using dwarf2json

JBBHCB_2024_v34n2_179_10_f0005.png 이미지

Fig. 9. Change queue_head_t of created ISF to queue_entry

생성한 ISF는 volatility3/volatility3/symbols 경로에 추가하면 사용할 수 있다. ISF 생성 시 macOS 10.13 버전에서 dwarf2json으로 생성한 ISF을 이용하여 메모리 분석을 수행할 경우, Volatility 3에서 분석하지 못하는 symbol_table_name1!queue_head_t.walk_list 이슈가 발생한다. 이 이슈 사항은 생성한 ISF의 symbol에 존재하는 name 필드의 queue_head_t를 인식하지 못하는 경우 발생하며 name 필드의 queue_head_t를 queue_entry로 변경하면 사용할 수 있다.

5.3 Volatility 2와 Volatility 3 테스트 및 비교 분석

Volatility 2에서 Volatility 3로 전환되면서 Volatility 2의 다양한 기능들이 Volatility 3로 넘어오지 못하거나 제대로 포팅되지 않아 같은 명령어임에도 불구하고 출력 결과에서 얻을 수 있는 정보의 차이가 존재한다. 따라서 앞서 설명한 것처럼 OSXPmem을 이용해 수집한 메모리 이미지와 생성한 Profile, ISF를 이용하여 Volatility 2, 3의 플러그인 중 프로세스 목록을 출력해주는 pslist, 프로세스의 트리 목록을 출력해주는 pstree 명령어의 결과에 대한 비교 분석을 수행하였다. 그 결과, Table 8와 동일하게 pslist 명령어의 경우 Volatility 2에서는 10가지의 항목을 확인할 수 있었지만, Volatility 3의 경우 3가지의 항목만 확인할 수 있었다.

Table 8. Comparison of Volatility 2, 3 output

JBBHCB_2024_v34n2_179_12_t0001.png 이미지

pstree 명령어의 경우 Volatility 2에서는 PID, Uid, Name의 정보, Volatility 3에서는 Name, PID, PPID에 대한 정보를 얻을 수 있었다. 또한, Volatility 2는 실행 중인 프로세스의 pslist, pid_hash, pgrp_hash_table, task processes 등에 대한 정보를 출력하여 프로세스 은닉 여부를 확인할 수 있는 psxview 명령어가 있으나, Volatility 3의 경우에는 psxview 명령어가 존재하지 않았다. 이 결과로 수집한 메모리 이미지를 분석할 경우 Volatility 2를 이용한 분석이 더 다양한 정보를 수집할 수 있는 것을 확인했다.

5.4 메모리 분석 프로세스 개발

5장에서 설명한 macOS 10.13, 10.14, 10.15에서 메모리 분석을 위한 방법을 요약 및 결과를 순서도로 표현하면 다음 Fig. 10와 같다. macOS에서 수집한 메모리를 분석할 때 macOS 10.13의 경우 Volatility 2, Volatility 3 모두 사용이 가능하며 macOS 10.14, 10.15는 Volatility 3만 사용할 수 있다. Volatility 2 또는 Volatility 3 도구 선택이 완료되면 공개된 사용 가능한 Profile, ISF가 있는지 확인이 필요하다. 사용 가능한 Profile, ISF가 없을 경우, Volatility 2의 경우 Profile을 생성해야 하며, ISF의 경우 go, dwarf2json을 설치하여 ISF 생성을 해야 한다. 이렇게 생성한 Profile 또는 ISF, 공개된 Profile 또는 ISF를 이용하여 Volatility 2, 3로 수집된 메모리 분석을 하는 순서로 진행할 수 있다.

JBBHCB_2024_v34n2_179_12_f0001.png 이미지

Fig. 10. Memory analysis process

VI. 연구 결과 및 토론

본 연구에서는 Bootable 방식이 아닌 메모리 수집이 가능한 가장 최신버전인 macOS 10.13, 10.14, 10.15를 대상으로 메모리 수집 및 분석하는 방법에 대해 자세히 분석하고 실무적인 절차를 개발하였다. macOS는 KDK, SIP 등 커널의 여러 조건으로 인해 메모리 수집과 분석에 많은 한계가 존재하여 이에 대해 정확하게 분석하고 수집 및 분석 방법을 제안한 연구가 존재하지 않았다. 따라서 본 논문에서는 macOS의 운영체제 버전과 빌드 버전에 따라 다르게 수행해야 하는 메모리 수집과 분석 방법을 개발하였다. 6가지 메모리 수집 도구 중 OSXPmem과 dd를 이용한 메모리 수집 방법을 제안하였으며, 메모리 분석 도구인 Volatility 2, Volatility 3를 이용한 메모리 분석 방법을 제안하였다. 본 연구의 한계점은 macOS의 특성에 종속적이다. 특히, KDK가 설치되지 않는 등의 빌드 버전이 설치가 되어 있는 경우 메모리 수집 및 분석이 원천적으로 불가하다. 이러한 한계점을 극복하기 위해서는 macOS 커널을 분석하여 해결하거나, KDK 강제 설치 및 SIP 우회 등을 할 수 있는 exploit 개발이 필요하다.

VII. 결론

본 연구에서는 macOS를 대상으로 사용할 수 있는 메모리 포렌식 도구들을 확인하여 현재 사용 가능한 메모리 수집 도구인 OSXPmem과 메모리 분석 도구인 Volatility 2, Volatility 3를 이용하여 macOS 10.13, 10.14, 10.15를 대상으로 메모리 포렌식을 수행하여 다양한 문제점과 해결 방법을 제시하였다. 또한, 현재 사용 가능한 실용적인 메모리 포렌식 프로세스를 제안하였다. 향후 연구에서는 macOS 커널에 대한 연구를 심층적으로 수행하고, Windows, Linux를 대상으로 메모리 수집 및 분석에 대한 연구를 수행할 예정이다.

참고문헌

  1. statcounter, "Desktop Operating System Market Share Worldwide" https://gs.statcounter.com/os-market-share/desktop/worldwide/#monthly-202301-202309, 2023.12.13
  2. Burdach, Mariusz, "Physical memory forensics." USA:Black Hat, Aug. 2006
  3. Lee, Kyeong-Sik, and Sang-Jin Lee, "Research on Mac OS X Physical Memory Analysis." Journal of the Korea Institute of Information Security & Cryptology 21.4, pp. 89-100, Aug. 2011
  4. Case, Andrew, and Golden G. Richard III, "Advancing Mac OS X rootkit detection." Digital Investigation 14, pp. 25-33, Aug. 2015
  5. Andrew Case, Gustavo Moreira, Austin Sellers and Golden G. Richard III, "New Memory Forensics Techniques to Defeat Device Monitoring Malware", USA:Black Hat, Aug. 2022
  6. Lee, Kyeong-Sik, and Hyungjoon Koo, "Keychain Analysis with Mac OS X Memory Forensics." Korea University, CIST, DCWTC 16, 2013
  7. Leopard, Charles B, Neil C. Rowe, and Michael R. McCarrin, "Memory forensics and the Macintosh OS X operating system." Digital Forensics and Cyber Crime: 9th International Conference, ICDF2C 2017, Prague, Czech Republic, October 9-11, 2017,Proceedings 9. Springer International Publishing, pp. 175-180, 2018
  8. Almubairik, Norah, Wadha Almattar, and Amani Alqarni. "WormHex: A Volatile Memory Analysis Tool for Retrieval of Social Media Evidence. "International Journal of Information and Communication Engineering16.6,pp. 233-238, 2022
  9. Choi, Joon-Ho, and Sang-Jin Lee. "The Acquisition Methodology Study of User Trace Data in Mac OSX." The KIPS Transactions: PartC17.4,pp. 335-346, 2010
  10. Kim, SeHo, et al. "macOS Forensic Analysis Technique." Journal of Digital Forensics 11.2, pp. 14-28,2017
  11. Mac Memory Reader, "Mac Memory Redaer", https://www.atcorp.com/cyber-marshal-utilities/mac-memory-reader,2023.12.13
  12. RECON ITR, "RECON ITR", https://sumuri.com/recon-itr-manual/, 2023.12.13
  13. MacQuisition, "MacQuisition", http://www.blackbag.co.kr/sub3_1, 2023.12.13
  14. Digital Collector, "Digital Collector", https://cellebrite.com/en/digital-collector/, 2023.12.13
  15. Surge Collect Pro, "Surge Collect Pro", https://www.volexity.com/products-overview/surge/, 2023.12.13
  16. OSXPmem, "OSXPmem", https://github.com/Velocidex/c-aff4/releases, 2023.12.13
  17. Volatility 2, "Volatility 2", https://github.com/volatilityfoundation/volatility,2023.12.13
  18. Volatility 3, "Volatility 3", https://github.com/volatilityfoundation/volatility3, 2023.12.13
  19. Volafox, "Volafox", https://github.com/n0fate/volafox, 2023.12.13.
  20. go, "go language", https://go.dev./dl,2023.12.13
  21. dwarf2json, "Volatility 2 dwarf2json",https://github.com/volatilityfoundation/dwarf2json, 2023.12.13.