
Análise automática de arquivos SWF baseada em algumas heurísticas. Extensível via plugins.
NOTA: As instruções a seguir são para Python3.
Se você precisar instalar o FLASHMINGO no Python2.7, você pode conferir o release 1.0 na aba releases. Os passos de instalação são essencialmente os mesmos.
Instale os pacotes Python3 listados em requirements.txt.
Você pode usar o seguinte comando: pip3 install -r requirements.txt
Se você quiser usar a funcionalidade de descompilação, precisa instalar o Jython. Usuários de Ubuntu/Debian podem executar apt install jython
Clone o projeto ou baixe o arquivo zip.
FLASHMINGO é um framework de análise para arquivos SWF. A ferramenta automaticamente tria arquivos Flash suspeitos e orienta o processo de análise posterior, liberando recursos preciosos em sua equipe. Você pode facilmente incorporar os módulos de análise do FLASHMINGO ao seu fluxo de trabalho.
Até hoje, investigadores forenses e analistas de malware precisam lidar com arquivos SWF suspeitos. Se a história se repetir, a ameaça de segurança pode se tornar ainda maior além do fim de vida do Flash em 2020. Os sistemas continuarão suportando um formato de arquivo legado que não será mais atualizado com patches de segurança. A automação é a melhor maneira de lidar com esse problema e é aqui que o FLASHMINGO pode ajudar. FLASHMINGO é um framework de análise para processar automaticamente arquivos SWF que permite sinalizar amostras Flash suspeitas e analisá-las com esforço mínimo. Ele se integra em vários fluxos de trabalho de análise como uma aplicação autônoma ou uma biblioteca poderosa. Os usuários podem facilmente estender a funcionalidade da ferramenta por meio de plugins Python personalizados.
FLASHMINGO é projetado com simplicidade em mente. Ele lê um arquivo SWF e cria um objeto (SWFObject) representando seu conteúdo e estrutura. Depois, o FLASHMINGO executa uma série de plugins que atuam sobre esse SWFObject e retornam seus valores ao programa principal.
Abaixo, um diagrama de fluxo em ASCII obrigatório:
+----------+
| |
+------------+----------->+ PLUGIN 1 +------------+
| | | | |
| | +----------+ |
| | |
| | +----------+ |
| | | | |
+---------+ | +----------->+ PLUGIN 2 +--------+ |
|SWF FILE +----------->+ FLASHMINGO | | | | |
+---------+ | | +----------+ | |
| | | |
| | | |
| | | |
| | +-----v---v-+
| | | |
| | | |
+-----+------+------------------------->+ SWFOBJECT |
^ | |
| | |
| +-----+-----+
| |
| |
| |
+---------------------------------------+
Ao usar o FLASHMINGO como biblioteca em seus próprios projetos, você só precisa cuidar de dois tipos de objetos:
SWFObject(s), representando a(s) amostra(s)Flashmingo. Isso atua essencialmente como um mecanismo de conexão entre plugins e objetos SWFObject.Os plugins do FLASHMINGO são armazenados em seus próprios diretórios dentro de... você adivinhou: plugins
Quando um objeto Flashmingo é instanciado, ele percorre este diretório e processa todos os manifestos dos plugins. Se isso indicar que o plugin está ativo, ele é registrado para uso posterior. No nível do código, isso significa que um pequeno dicionário plugin_info é adicionado à lista plugins.
Os plugins são invocados via a API run_plugin com dois argumentos:
SWFObjectOpcionalmente, a maioria dos plugins permite que você passe seus próprios dados do usuário. Isso depende do plugin (leia a documentação) e pode ser explicado mais facilmente com um exemplo.
O plugin padrão SuspiciousNames pesquisará todos os pools de constantes por strings contendo substrings suspeitas (por exemplo: 'overflow', 'spray', 'shell', etc.) Existe uma lista de substrings comuns já codificada no plugin para que ele possa ser usado como está. No entanto, você pode passar uma lista de suas próprias substrings definidas, neste caso através do parâmetro names.
Exemplo de código:
fm = Flashmingo()
print fm.run_plugin('DangerousAPIs', swf=swf)
print fm.run_plugin('SuspiciousNames', swf=swf, names=['spooky'])
O FLASHMINGO vem com alguns plugins úteis de fábrica:
Um plugin modelo é fornecido para facilitar o desenvolvimento. Estender o FLASHMINGO é bastante simples. Siga estes passos simples:
runVocê está pronto para começar :)
docs para documentação gerada automaticamente$ pip install sphinxcontrib-napoleon
Após configurar o Sphinx para construir sua documentação, habilite o napoleon no arquivo conf.py do Sphinx:
Em conf.py, adicione napoleon à lista de extensões
extensions = ['sphinxcontrib.napoleon']
Use sphinx-apidoc para construir sua documentação da API:
$ sphinx-apidoc -f -o docs/source projectdir
Isso cria arquivos .rst para o Sphinx processar
$ make html
É isso! :)