Ghidra에서 IDA FLIRT 시그니처 사용하기: SigAnalyzer 플러그인 가이드

Ghidra에서 IDA FLIRT 시그니처 사용하기: SigAnalyzer 플러그인 가이드

이전에 작성한 "Delphi 악성 파일 분석"에서 언급했듯이, Delphi, .NET 과 같은 언어로 빌드된 PE 파일은 고유한 런타임 라이브러리 API를 사용하는데 이런 코드를 직접 하나하나 분석하는 건 대단한 시간 낭비다. 만약 PE 파일 내에 이와 관련된 심볼 정보가 있다면 디버거에서 자동으로 인식하거나, 복구하여 사용할 수도 있겠지만 남아있지 않다면 공격자가 직접 작성한 유저 코드와 런타임 라이브러리 코드를 구분할 수 없다. 최근 유행하는 GoLang 이나 Rust 같은 언어로 빌드된 PE 파일도 이런 특징을 보여 분석하기 난해한 면이 있다.

최근 트위터에서 발견한 SigAnalyzer 플러그인이 이 문제를 많은 부분 해결할 수 있게 도와주어 소개한다.

1. 작동 원리

SigAnalyzer 를 설명하기에 앞서 우선 IDA FLIRT 에 대해 먼저 설명한다. FLIRT 는 Fast Library Identification and Recognition Technology 의 약자로, 유명 디버거인 IDA 에서 개발한 표준 라이브러리 함수를 식별하는 기술이다. 앞서 언급했듯이 각 언어에서 사용되는 표준 라이브러리 함수의 코드만 보고 어떤 함수인지 식별할 수 있어야 하는데, 이를 위해 모든 컴파일러, 버전에 따른 코드와 함수 이름을 저장하는건 대단히 비효율적이다. 또한 각 함수 코드 중에는 주소 값과 같이 파일에 따라 변화하는 값을 포함하는 경우, 컴파일러 최적화에 따라 코드가 변하는 경우도 존재한다.

FLIRT 는 함수의 가변적이지 않은 초기 32바이트를 패턴화해 저장하고, 이와 동일한 패턴을 가질 경우 동일한 패턴으로 간주하여 식별하는 방식으로 문제를 해결했다. SigAnalyzer 는 IDA 에서 사용하기 위해 작성된 FLIRT 시그니처를 Ghidra에서도 사용할 수 있도록 해석하는 플러그인이다.

IDA FLIRT 페이지

2. 사용법

우선 IDA를 개발한 hex-rays 사이트에서 FLIRT 시그니처 파일을 다운로드해야 한다. 다운로드하기 위해서는 계정 가입, 로그인이 필요하다. My hex-rays 에 접속하면 Download center를 선택, 적절한 버전을 선택한 후 SDK and Utilities 에서 signatures bundels 를 선택해 다운로드한다.

My hex-rays 페이지

다음은 SigAnalyzer 플러그인을 Ghidra 에 적용한다. SigAnalyzer 저장소 Release 페이지에서 플러그인 ZIP 파일을 다운로드한다.

SigAnalyzer 저장소 Release 페이지

이후 Ghidra 를 실행하고 File - Install Extensions 를 클릭한다.

File - Install Extensions

팝업된 창에서 우측 상단의 + 버튼을 클릭하고 앞서 다운로드한 SigAnalyzer ZIP 파일을 선택한다. 플러그인 설치 후에 적용하기 위해 Ghidra 를 재시작해야 한다.

Install Extensions 창

설치가 완료되면 File - Install Extensions 에서 SigAnalyzer 를 확인할 수 있다. 플러그인이 적용되지 않았다면 체크 클릭해서 적용한다.

SigAnalyzer 플러그인 설치 후

다음은 CodeBrowser를 실행해서 IDA FLIRT 패턴을 로딩해야 한다.
CodeBrowser 의 Tools - SigAnalyzer - Open SigAnalyzer 를 선택하면 패턴 추가 창이 팝업된다.

Tools - SigAnalyzer - Open SigAnalyzer

처음엔 아무런 패턴이 로딩되지 않아 비어있을 거다. 우측 상단의 + 버튼을 클릭해 앞서 다운로드한 IDA FLIRT 패턴을 선택해야 한다. 다운로드한 signatures-bundles ZIP 파일을 압축 해제하면 windows,linux,rust,golang 과 같이 OS, 언어에 따라 패턴이 분류돼 있다. 모든 패턴을 한번에 로딩하면 패턴 충돌로 인해 잘못된 함수 이름으로 rename 될 가능성이 있다. 예를 들어 분석 중인 파일은 windows PE 파일인데 Linux 함수 패턴까지 로딩하면 일부 함수 이름이 Linux 에서 사용되는 함수 이름으로 변경되기도 한다.

signatures-bundles 폴더

SigAnalyzer 창에서 패턴을 선택해 로딩 후, Analysis - One Shot - SigAnalyzer 를 선택해 플러그인을 실행할 수 있다. 또는 실행 파일을 처음으로 CodeBrowser로 열면 선택되는 분석 기능 중 SigAnalyzer가 자동으로 선택되기도 한다.

Analysis - One Shot - SigAnalyzer

3. Reference