
Un paquete de Python para interactuar con el marco Mitre ATT&CK
.______ ____ ____ ___ .___________.___________. ______ __ ___
| _ \ \ \ / / / \ | | | / || |/ /
| |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' /
| ___/ \_ _/ / /_\ \ | | | | | | | <
| | | | / _____ \ | | | | | `----.| . \
| _| |__| /__/ \__\ |__| |__| \______||__|\__\
Un paquete de Python para interactuar con los marcos MITRE ATT&CK
La versión actual es 7.1.1
pyattck es un framework ligero para los marcos MITRE ATT&CK. Este paquete extrae detalles de los marcos Enterprise, PRE-ATT&CK, Mobile e ICS de MITRE.
pyattck ayuda a organizaciones e individuos a acceder a los marcos MITRE ATT&CK de forma programática. Es decir, puedes acceder a todos los actores, malware, mitigaciones, tácticas, técnicas y herramientas definidos por los marcos Enterprise, Mobile, Pre-Attck e ICS mediante una utilidad de línea de comandos o integrándolo en tu propio código.
Hay muchas razones por las que querrías acceder a estos datos de forma automatizada (scripteada/codificada), pero algunos ejemplos son:
pyattck también ofrece otros beneficios, como la capacidad de proporcionar datos contextuales adicionales. Puedes encontrar más información sobre estos datos aquí, pero lo básico es que pyattck utiliza múltiples repositorios de código abierto para recopilar datos contextuales adicionales, como comandos utilizados para ejecutar una técnica, país y otros detalles sobre un actor malicioso, otras variantes de malware similares a una herramienta/malware definido, etc.
Este contexto adicional es lo que hace que pyattck sea realmente potente y permite a las personas construir pruebas y validaciones más robustas de sus reglas de detección, validar suposiciones de prueba, etc. Realmente hay innumerables formas en que pyattck podría ser utilizado para ayudar a los equipos azul, rojo y púrpura a defender organizaciones (y a sí mismos).
El paquete pyattck recupera todas las Tácticas, Técnicas, Actores, Malware, Herramientas y Mitigaciones de los marcos MITRE ATT&CK, así como cualquier relación definida dentro del conjunto de datos de MITRE ATT&CK (incluyendo sub-técnicas).
Además, las Técnicas, Actores y Herramientas (si corresponde) ahora tienen datos recopilados de recursos de terceros que son accesibles a través de diferentes propiedades. Para obtener información más detallada sobre estas características, consulta External Datasets.
El paquete pyattck te permite:
Puedes instalar pyattck en OS X, Linux o Windows. También puedes instalarlo directamente desde el código fuente. Para instalarlo, consulta los comandos bajo el sistema operativo correspondiente a continuación.
pip install pyattck
git clone https://github.com/swimlane/pyattck.git
cd pyattck
python setup.py install
Para usar pyattck debes crear una instancia de un objeto Attck. Aunque puedes interactuar directamente con cada clase, el uso previsto es a través de un objeto Attck:
from pyattck import Attck
attack = Attck()
Por defecto, las sub-técnicas son accesibles a través de cada objeto de técnica. Puedes desactivar este comportamiento pasando nested_techniques=False al crear tu objeto Attck.
Por ejemplo, el comportamiento predeterminado es el siguiente:
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)
Puedes acceder a las siguientes propiedades principales en tu objeto Attck:
Una vez que especifiques el marco MITRE ATT&CK, puedes acceder a propiedades adicionales.
Estos son los objetos accesibles bajo la propiedad Enterprise:
Para más información sobre los tipos de objetos bajo la propiedad enterprise, consulta Enterprise.
Estos son los objetos accesibles bajo la propiedad PreAttck:
Para más información sobre los tipos de objetos bajo la propiedad preattck, consulta PreAttck.
Estos son los objetos accesibles bajo la propiedad Mobile:
Para más información sobre los tipos de objetos bajo la propiedad mobile, consulta Mobile.
Estos son los objetos accesibles bajo la propiedad ICS:
Para más información sobre los tipos de objetos bajo la propiedad ics, consulta ICS.
Para utilizar el nuevo sistema de menú interactivo dentro de pyattck, debes establecer interactive en True. Al hacerlo, se iniciará el sistema de menú interactivo en consola.
Mediante un script puedes iniciarlo ejecutando:
from pyattck import Attck
Attck(interactive=True)
O también puedes ejecutar el modo interactivo en la línea de comandos:
pyattck --interactive
Mira un ejemplo en GIF a continuación:

pyattck te permite configurar si almacenas datos externos y dónde se almacenan.
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 defecto, pyattck (ahora) obtiene los últimos datos externos de sus respectivas ubicaciones mediante solicitudes HTTP GET. pyattck actualmente obtiene datos de las siguientes ubicaciones:
Tienes varias opciones al crear una instancia del objeto Attck. A partir de 4.0.0 puedes especificar cualquiera de las siguientes opciones:
True, pyattck intentará recuperar la configuración especificada en la ubicación config_file_path. Si este archivo está corrupto o no se encuentra, se usará la configuración predeterminada para recuperar datos de las ubicaciones especificadas en *_attck_json.True, pyattck guardará el archivo de configuración en la ubicación especificada por config_file_path. Además, guardará todos los archivos descargados en la ubicación data_path especificada. Si has especificado una ruta de archivo local en lugar de una URL de descarga para alguno de los parámetros *_attck_json, guardaremos esta ubicación en nuestra configuración y la referenciaremos en adelante.~/pyattck/config.yml~/pyattck/dataAdemás, puedes especificar la ubicación de cada archivo *_attck_json individual pasando una URI o una ruta de archivo local. Si has pasado una ruta de archivo local, simplemente leeremos de ese archivo.
Si has utilizado los valores predeterminados o has especificado una ubicación URI alternativa para recuperar estos archivos JSON, puedes además pasar **kwargs que se transmitirán al paquete Requests de Python al realizar cualquier solicitud HTTP.
Entendemos que se publican muchos proyectos de código abierto diferentes, incluso a diario, pero queríamos proporcionar un paquete de Python directo que permita al usuario identificar relaciones conocidas entre todos los verticales del marco MITRE ATT&CK.
Si no estás familiarizado con el marco MITRE ATT&CK, hay algunos componentes clave que debes comprender bien. El primero son las Tácticas y Técnicas. Al observar el marco MITRE ATT&CK, las Tácticas son las columnas y representan las diferentes fases de un ataque.
El marco MITRE ATT&CK NO es un mapa de cobertura de seguridad integral/de facto; es más bien un MARCO y también se deben considerar vías adicionales al evaluar tu postura de seguridad.
Las Técnicas son las filas del marco y se categorizan bajo Tácticas específicas (columnas). Son puntos de datos dentro del marco que proporcionan orientación al evaluar tus brechas de seguridad. Además, (la mayoría de) las Técnicas contienen orientación de mitigación, además de información sobre su relación con herramientas, malware e incluso actores/grupos que han utilizado esta técnica durante ataques registrados.
Esto significa que si tu organización se centra en TTP (Tácticas, Técnicas y Procedimientos) utilizados por ciertos actores/grupos, entonces el marco MITRE ATT&CK es perfecto para ti. Si no has alcanzado este nivel de madurez de seguridad en tu organización, ¡no te preocupes! El marco ATT&CK aún proporciona una orientación realmente buena en un diseño simple y directo, pero programáticamente no es directo, especialmente si deseas medir (o mapear) tus controles de seguridad usando el marco.
Puedes añadir funciones o errores, o ejecutar el código en un entorno de desarrollo.
Para configurar un entorno de desarrollo y pruebas, utiliza este Dockerfile.
Para usar el Dockerfile, ejecuta cd a este directorio del repositorio y ejecuta:
docker build --force-rm -t pyattck .
docker run pyattck
Ejecutar esto llama al archivo de prueba de Python en bin/test.py.
Las pruebas dentro de este proyecto deben cubrir todas las propiedades y métodos disponibles. A medida que este proyecto crezca, las pruebas se volverán más robustas, pero por ahora estamos probando que existan y devuelvan resultados.
Por favor, lee CONTRIBUTING.md para obtener detalles sobre nuestro código de conducta y el proceso para enviar solicitudes de extracción (pull requests).
Usamos SemVer para el versionado.
Para obtener detalles sobre las características de una versión específica de pyattck, consulta CHANGELOG.md.
Consulta también la lista de contribuidores.
Este proyecto está licenciado bajo la Licencia MIT.
En primer lugar, me gustaría agradecer a todos los que contribuyen a proyectos de código abierto, especialmente a los mantenedores y creadores de estos proyectos. Sin ellos, esta capacidad no sería posible.
Este conjunto de datos se genera a partir de muchas fuentes diferentes. A medida que continuemos agregando más fuentes, las agregaremos aquí. Nuevamente, gracias a todos estos proyectos. Sin un orden particular, pyattck utiliza datos de los siguientes proyectos:
.. 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