
Um pacote Python para interagir com o Mitre ATT&CK Framework
.______ ____ ____ ___ .___________.___________. ______ __ ___
| _ \ \ \ / / / \ | | | / || |/ /
| |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' /
| ___/ \_ _/ / /_\ \ | | | | | | | <
| | | | / _____ \ | | | | | `----.| . \
| _| |__| /__/ \__\ |__| |__| \______||__|\__\
Um pacote Python para interagir com os Frameworks MITRE ATT&CK
Versão atual é 7.1.1
pyattck é um framework leve para os Frameworks MITRE ATT&CK. Este pacote extrai detalhes dos Frameworks Enterprise, PRE-ATT&CK, Mobile e ICS da MITRE.
pyattck ajuda organizações e indivíduos a acessar os Frameworks MITRE ATT&CK de forma programática. Ou seja, você pode acessar todos os atores, malwares, mitigações, táticas, técnicas e ferramentas definidos nos frameworks Enterprise, Mobile, Pre-Attck e ICS por meio de um utilitário de linha de comando ou incorporando em sua própria base de código.
Existem muitas razões para querer acessar esses dados de forma automatizada (script/código), mas alguns exemplos são:
Existem outros benefícios que o pyattck oferece, incluindo a capacidade de fornecer dados contextuais adicionais. Você pode encontrar mais informações sobre esses dados aqui, mas o básico é que o pyattck utiliza múltiplos repositórios de código aberto para coletar dados contextuais adicionais, como comandos usados para executar uma técnica, país e outros detalhes sobre um ator malicioso, outras variantes de malware semelhantes a uma ferramenta/malware definido, etc.
Esse contexto adicional é o que torna o pyattck verdadeiramente poderoso e permite que as pessoas construam testes e validações mais robustos de suas regras de detecção, validem suposições de teste, etc. Existem inúmeras maneiras pelas quais o pyattck pode ser utilizado para ajudar equipes azuis, vermelhas e roxas a defender organizações (e a si mesmas).
O pacote pyattck recupera todas as Táticas, Técnicas, Atores, Malwares, Ferramentas e Mitigações dos Frameworks MITRE ATT&CK, bem como qualquer relacionamento definido dentro do conjunto de dados MITRE ATT&CK (incluindo sub-técnicas).
Além disso, as Técnicas, Atores e Ferramentas (quando aplicável) agora possuem dados coletados de fontes terceiras que são acessíveis por meio de diferentes propriedades. Para informações mais detalhadas sobre essas funcionalidades, veja Conjuntos de Dados Externos.
O pacote pyattck permite que você:
Você pode instalar o pyattck no OS X, Linux ou Windows. Também pode instalá-lo diretamente do código fonte. Para instalar, veja os comandos abaixo de acordo com o sistema operacional.
pip install pyattck
git clone https://github.com/swimlane/pyattck.git
cd pyattck
python setup.py install
Para usar o pyattck você deve instanciar um objeto Attck. Embora você possa interagir diretamente com cada classe, o uso previsto é através de um objeto Attck:
from pyattck import Attck
attack = Attck()
Por padrão, as sub-técnicas são acessíveis dentro de cada objeto de técnica. Você pode desativar esse comportamento passando nested_techniques=False ao criar seu objeto Attck.
Como exemplo, o comportamento padrão é o seguinte:
from pyattck import Attck
attack = Attck()
for technique in attack.enterprise.techniques:
print(technique.id)
print(technique.name)
for subtechnique in technique.techniques:
print(subtechnique.id)
print(subtechnique.name)
Você pode acessar as seguintes propriedades principais no seu objeto Attck:
Assim que você especificar o Framework MITRE ATT&CK, poderá acessar propriedades adicionais.
Aqui estão os objetos acessíveis sob a propriedade Enterprise:
Para mais informações sobre os tipos de objetos sob a propriedade enterprise, veja Enterprise.
Aqui estão os objetos acessíveis sob a propriedade PreAttck:
Para mais informações sobre os tipos de objetos sob a propriedade preattck, veja PreAttck.
Aqui estão os objetos acessíveis sob a propriedade Mobile:
Para mais informações sobre os tipos de objetos sob a propriedade mobile, veja Mobile.
Aqui estão os objetos acessíveis sob a propriedade ICS:
Para mais informações sobre os tipos de objetos sob a propriedade ics, veja ICS.
Para utilizar o novo sistema de menu interativo dentro do pyattck, você deve definir interactive como True. Ao fazer isso, ele iniciará o sistema de menu interativo no console.
Usando um script, você pode iniciá-lo executando:
from pyattck import Attck
Attck(interactive=True)
Ou você também pode executar o modo interativo na linha de comando:
pyattck --interactive
Veja um exemplo em gif abaixo:

pyattck permite que você configure se armazena dados externos e onde eles são armazenados.
from pyattck import Attck
attck = Attck(
nested_techniques=True,
use_config=False,
save_config=False,
config_file_path='~/pyattck/config.yml',
data_path='~/pyattck/data',
enterprise_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_enterprise_attck_v1.json",
pre_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_pre_attck_v1.json",
mobile_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_mobile_attck_v1.json,
ics_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_ics_attck_v1.json",
nist_controls_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_nist_controls_v1.json",
generated_nist_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/attck_to_nist_controls.json",
**kwargs
)
Por padrão, o pyattck agora obtém os dados externos mais recentes de seus respectivos locais usando requisições HTTP GET. Atualmente, o pyattck obtém dados dos seguintes locais:
Você tem várias opções ao instanciar o objeto Attck. A partir da versão 4.0.0, você pode especificar qualquer uma das seguintes opções:
True, pyattck tentará recuperar a configuração especificada no local config_file_path. Se este arquivo estiver corrompido ou não for encontrado, usaremos o padrão de obter dados dos locais *_attck_json especificados.True, pyattck salvará o arquivo de configuração no local especificado por config_file_path. Além disso, salvaremos todos os arquivos baixados no local data_path especificado. Se você especificou um caminho local em vez de uma URL de download para qualquer um dos parâmetros *_attck_json, salvaremos esse local na configuração e faremos referência a ele daqui em diante.~/pyattck/config.yml~/pyattck/dataAlém disso, você pode especificar o local para cada arquivo *_attck_json individual passando uma URI ou um caminho de arquivo local. Se você passou um caminho de arquivo local, simplesmente leremos desse arquivo.
Se você usou os valores padrão ou especificou um local de URI alternativo para recuperar esses arquivos JSON, pode adicionalmente passar **kwargs que serão repassados ao pacote Requests do Python ao realizar requisições HTTP.
Entendemos que muitos projetos de código aberto estão sendo lançados, até mesmo diariamente, mas queríamos fornecer um pacote Python direto que permitisse ao usuário identificar relacionamentos conhecidos entre todas as verticais do Framework MITRE ATT&CK.
Se você não está familiarizado com o Framework MITRE ATT&CK, existem alguns componentes-chave para garantir que você tenha uma compreensão sólida. O primeiro são Táticas e Técnicas. Ao olhar para o Framework MITRE ATT&CK, as Táticas são as colunas e representam as diferentes fases de um ataque.
O Framework MITRE ATT&CK NÃO é um mapa de cobertura de segurança abrangente/de facto - é antes um FRAMEWORK e caminhos adicionais também devem ser considerados ao avaliar sua postura de segurança.
As Técnicas são as linhas do framework e são categorizadas sob Táticas (colunas) específicas. São pontos de dados dentro do framework que fornecem orientação ao avaliar suas lacunas de segurança. Além disso, a maioria das Técnicas contém orientações de mitigação, além de informações sobre sua relação com ferramentas, malwares e até atores/grupos que usaram essa técnica durante ataques registrados.
Isso significa que, se sua organização está focada em TTPs (Táticas, Técnicas e Procedimentos) usados por certos atores/grupos, então o Framework MITRE ATT&CK é perfeito para você. Se você não está nesse nível de maturidade de segurança dentro de sua organização, sem problemas! O Framework ATT&CK ainda oferece uma orientação muito boa em um layout simples e direto, mas programaticamente não é tão simples—especialmente se você deseja medir (ou mapear) seus controles de segurança usando o framework.
Você pode adicionar funcionalidades ou corrigir bugs, ou executar o código em um ambiente de desenvolvimento.
Para configurar um ambiente de desenvolvimento e teste, use este Dockerfile.
Para usar o Dockerfile, execute, cd para o diretório deste repositório e execute:
docker build --force-rm -t pyattck .
docker run pyattck
Executar isso chama o arquivo python de teste em bin/test.py.
Os testes dentro deste projeto devem cobrir todas as propriedades e métodos disponíveis. Conforme este projeto cresce, os testes se tornarão mais robustos, mas por enquanto estamos testando se eles existem e retornam saídas.
Por favor, leia CONTRIBUTING.md para detalhes sobre nosso código de conduta e o processo para enviar pull requests para nós.
Usamos SemVer para versionamento.
Para detalhes sobre funcionalidades de uma versão específica do pyattck, veja o CHANGELOG.md.
Veja também a lista de contribuidores.
Este projeto está licenciado sob a Licença MIT.
Primeiramente, gostaria de agradecer a todos que contribuem para projetos de código aberto, especialmente os mantenedores e criadores desses projetos. Sem eles, essa capacidade não seria possível.
Este conjunto de dados é gerado a partir de muitas fontes diferentes. À medida que continuamos a adicionar mais fontes, continuaremos a adicioná-las aqui. Novamente, obrigado a todos esses projetos. Em nenhuma ordem particular, pyattck utiliza dados dos seguintes projetos:
.. toctree::
:titlesonly:
configuration
pyattck/attck
Dataset <https://github.com/swimlane/pyattck-data>
Data Models <https://github.com/swimlane/pyattck-data>
enterprise/enterprise
preattck/preattck
mobile/mobileattck
ics/icsattck