
IDA Python 플러그인으로, 바이너리에서 오픈소스 라이브러리 심볼을 빠르고 위치 기반으로 매칭하여 대규모 펌웨어 및 악성코드의 효율적인 리버스 엔지니어링과 취약점 분석을 가능하게 합니다.
/$$ /$$ /$$
| $$ /$$/ | $$
| $$ /$$/ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$
| $$$$$/ |____ $$ /$$__ $$|_ $$_/ |____ $$
| $$ $$ /$$$$$$$| $$ \__/ | $$ /$$$$$$$
| $$\ $$ /$$__ $$| $$ | $$ /$$ /$$__ $$
| $$ \ $$| $$$$$$$| $$ | $$$$/| $$$$$$$
|__/ \__/ \_______/|__/ \___/ \_______/
"Karta"(러시아어로 "지도")는 주어진 바이너리에서 오픈소스 라이브러리를 식별하고 매칭하는 IDA Python 플러그인입니다. 이 플러그인은 매우 큰 바이너리(>200,000개 함수)를 지원하면서도 전체 성능에 거의 영향을 주지 않는 독특한 기술을 사용합니다.
매칭 알고리즘은 위치 기반입니다. 즉, 서로 다른 컴파일된 파일을 찾고, 각 파일의 함수를 파일 내 원래 순서에 따라 매칭하는 데 중점을 둡니다. 이렇게 하면 매칭이 N(바이너리 크기) 대신 K(오픈소스 내 함수 수)에 의존하게 되어, 일반적으로 N >> K이므로 상당한 성능 향상을 얻을 수 있습니다.
이 IDA 플러그인에는 세 가지 주요 사용 사례가 있다고 생각합니다.
최신 버전(Python 3 사용)의 경우, 저장소를 git clone하고 setup.py install 스크립트를 실행하기만 하면 됩니다.
Python 3는 v2.0.0 이상에서 지원됩니다.
IDA 7.4 출시 이후, Karta는 IDA 7.4 이상 및 Python 3용으로만 활발히 개발되고 있습니다. Python 2 및 이전 IDA 버전은 v1.2.0 릴리스 버전을 사용하여 계속 지원되며, Python 2.X의 수명 종료로 인해 이 버전이 마지막 지원 버전이 될 가능성이 높습니다.
Karta의 식별자는 더 작은 플러그인으로, 바이너리 내에 존재하는(지원되는) 오픈소스 라이브러리의 존재를 식별하고 버전을 지문(fingerprint)으로 확인합니다. 동일한 오픈소스 라이브러리를 반복해서 리버스 엔지니어링할 필요 없이, 식별자 플러그인을 실행하기만 하면 사용된 오픈소스의 상세 목록을 얻을 수 있습니다. Karta는 현재 10개 이상의 오픈소스 라이브러리를 지원합니다:
사용된 오픈소스를 식별한 후, 특정 라이브러리(예: libpng 버전 1.2.29)에 대한 .JSON 설정 파일을 컴파일할 수 있습니다. 컴파일이 완료되면 Karta는 로드된 바이너리에서 오픈소스의 함수(심볼)를 자동으로 매칭하려고 시도합니다. 또한, 오픈소스가 외부 함수(memcpy, fread, 또는 zlib_inflate)를 사용하는 경우 Karta는 이러한 외부 함수도 매칭하려고 시도합니다.
이 프로젝트는 Check Point의 연구 그룹(Check Point Research)의 도움과 지원을 받아 저(아래 연락처 참조)가 개발했습니다.
이 저장소는 제가 Check Point Research에서 근무하는 동안 저( Eyal Itkin)가 개발하고 유지 관리했습니다. 안타깝게도 연구 그룹을 떠나면서 이 저장소를 더 이상 유지 관리할 수 없게 되었습니다. 주된 이유는 모든 회귀 테스트를 실행하기 위한 많은 요구 사항과 관련된 IDA Pro 버전 때문입니다.
진심으로 사과드립니다.