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에서도 사용할 수 있도록 해석하는 플러그인이다.

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

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

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

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

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

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

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

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