
일부 휴리스틱 기반의 SWF 파일 자동 분석. 플러그인을 통해 확장 가능.
참고: 아래 지침은 Python3를 위한 것입니다.
Python2.7에서 FLASHMINGO를 설치해야 한다면 releases 탭에서 1.0 릴리스를 확인하세요. 설치 단계는 기본적으로 동일합니다.
requirements.txt에 나열된 Python3 패키지를 설치하세요.
다음 명령어를 사용할 수 있습니다: pip3 install -r requirements.txt
디컴파일 기능을 사용하려면 Jython을 설치해야 합니다. Ubuntu/Debian 사용자는 apt install jython 명령어를 사용할 수 있습니다.
프로젝트를 클론하거나 zip 파일을 다운로드하세요.
FLASHMINGO는 SWF 파일을 위한 분석 프레임워크입니다. 이 도구는 의심스러운 Flash 파일을 자동으로 분류하고 추가 분석 프로세스를 안내하여 팀의 소중한 리소스를 절약해 줍니다. FLASHMINGO의 분석 모듈을 워크플로우에 쉽게 통합할 수 있습니다.
오늘날까지 포렌식 조사관과 악성코드 분석가는 의심스러운 SWF 파일을 처리해야 합니다. 역사가 반복된다면 2020년 Flash의 종료 이후에도 보안 위협은 더욱 커질 수 있습니다. 시스템은 더 이상 보안 패치로 업데이트되지 않는 레거시 파일 형식을 계속 지원하게 될 것입니다. 자동화는 이 문제를 처리하는 최선의 방법이며, 바로 여기서 FLASHMINGO가 도움이 될 수 있습니다. FLASHMINGO는 SWF 파일을 자동으로 처리하는 분석 프레임워크로, 의심스러운 Flash 샘플을 플래그 지정하고 최소한의 노력으로 분석할 수 있게 해줍니다. 독립 실행형 애플리케이션 또는 강력한 라이브러리로서 다양한 분석 워크플로우에 통합됩니다. 사용자는 사용자 정의 Python 플러그인을 통해 도구의 기능을 쉽게 확장할 수 있습니다.
FLASHMINGO는 단순함을 염두에 두고 설계되었습니다. SWF 파일을 읽고 그 내용과 구조를 나타내는 객체(SWFObject)를 생성합니다. 그 후 FLASHMINGO는 이 SWFObject에 대해 일련의 플러그인을 실행하고 결과를 메인 프로그램에 반환합니다.
아래는 필수 ASCII 아트 흐름도입니다:
+----------+
| |
+------------+----------->+ PLUGIN 1 +------------+
| | | | |
| | +----------+ |
| | |
| | +----------+ |
| | | | |
+---------+ | +----------->+ PLUGIN 2 +--------+ |
|SWF FILE +----------->+ FLASHMINGO | | | | |
+---------+ | | +----------+ | |
| | | |
| | | |
| | | |
| | +-----v---v-+
| | | |
| | | |
+-----+------+------------------------->+ SWFOBJECT |
^ | |
| | |
| +-----+-----+
| |
| |
| |
+---------------------------------------+
자체 프로젝트에서 FLASHMINGO를 라이브러리로 사용할 때는 두 가지 종류의 객체만 처리하면 됩니다:
SWFObject(샘플을 나타냄)Flashmingo 객체. 이는 본질적으로 플러그인과 SWFObject를 연결하는 하네스 역할을 합니다.FLASHMINGO 플러그인은 각각의 디렉토리에 저장됩니다. 짐작하셨겠지만, 바로 plugins 디렉토리입니다.
Flashmingo 객체가 인스턴스화되면 이 디렉토리를 탐색하며 모든 플러그인의 매니페스트를 처리합니다. 매니페스트에서 플러그인이 활성화되어 있음을 나타내면, 나중에 사용할 수 있도록 등록됩니다. 코드 수준에서는 작은 plugin_info 딕셔너리가 plugins 리스트에 추가됩니다.
플러그인은 두 개의 인자를 사용하는 run_plugin API를 통해 호출됩니다:
SWFObject 인스턴스선택적으로, 대부분의 플러그인은 사용자 고유의 사용자 데이터를 전달할 수 있습니다. 이는 플러그인에 따라 다르며(문서 참조), 예제를 통해 더 쉽게 설명할 수 있습니다.
기본 플러그인 SuspiciousNames는 모든 상수 풀에서 의심스러운 부분 문자열('overflow', 'spray', 'shell' 등)을 포함하는 문자열을 검색합니다. 플러그인에 이미 일반적인 부분 문자열 목록이 하드코딩되어 있어 '그대로' 사용할 수 있습니다. 그러나 names 매개변수를 통해 사용자가 정의한 부분 문자열 목록을 전달할 수도 있습니다.
코드 예제:
fm = Flashmingo()
print fm.run_plugin('DangerousAPIs', swf=swf)
print fm.run_plugin('SuspiciousNames', swf=swf, names=['spooky'])
FLASHMINGO에는 유용한 플러그인이 기본 포함되어 있습니다:
쉬운 개발을 위해 템플릿 플러그인이 제공됩니다. FLASHMINGO 확장은 매우 간단합니다. 다음 단계를 따르세요:
run 메서드 재정의준비 완료입니다 :)
docs 디렉토리를 참조하세요.$ pip install sphinxcontrib-napoleon
Sphinx를 설정하여 문서를 빌드한 후, Sphinx conf.py 파일에서 napoleon을 활성화하세요:
conf.py에서 extensions 리스트에 napoleon을 추가하세요.
extensions = ['sphinxcontrib.napoleon']
sphinx-apidoc을 사용하여 API 문서를 빌드하세요:
$ sphinx-apidoc -f -o docs/source projectdir
그러면 Sphinx가 처리할 .rst 파일이 생성됩니다.
$ make html
끝입니다! :)