Please upgrade to pyattck 4.1.1 or greater. We have moved external data to S3 to reduce associated costs.
pip install pyattck --upgrade
.______ ____ ____ ___ .___________.___________. ______ __ ___ | _ \ \ \ / / / \ | | | / || |/ / | |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' / | ___/ \_ _/ / /_\ \ | | | | | | | < | | | | / _____ \ | | | | | `----.| . \ | _| |__| /__/ \__\ |__| |__| \______||__|\__\
A Python package to interact with MITRE ATT&CK Frameworks
Current Version is 4.1.1
pyattck is a light-weight framework for MITRE ATT&CK Frameworks. This package extracts details from the MITRE Enterprise, PRE-ATT&CK, and Mobile Frameworks.
pyattck assist organizations and individuals with accessing MITRE ATT&CK Framework(s) in a programmatic way. Meaning, you can access all defined actors, malwares, mitigations, tactics, techniques, and tools defined by the Enterprise, Mobile, and Pre-Attck frameworks via a command-line utility or embedding into your own code base.
There are many reasons why you would want to access this data in an automated (scripted/coded) way but a few examples are:
There are other benefits that
pyattck provide as well which includes the ability to provide additional contextual data. You can find more information about this data here but the basics are that
pyattck utilizes multiple open-source repositorties to gather additional contextual data like commands used to execute a technique, country and other details about a malicious actor, other variants of malware similar to a defined tool/malware, etc.
This additional context is what makes
pyattck truly powerful and enables people to build more robust testing and validation of their detection rules, validates testing assumptions, etc. Truly there are countless ways that
pyattck could be utilized to help blue, red, and purple teams defend organizations (and themselves).
The pyattck package retrieves all Tactics, Techniques, Actors, Malware, Tools, and Mitigations from the MITRE ATT&CK Frameworks as well as any defined relationships within the MITRE ATT&CK dataset.
In addition, Techniques, Actors, and Tools (if applicable) now have collected data from third-party resources that are accessible via properties on a technique. For more detailed information about these features, see External Datasets.
The pyattck package allows you to:
You can install pyattack on OS X, Linux, or Windows. You can also install it directly from the source. To install, see the commands under the relevant operating system heading, below.
The following libraries are required and installed by pyattck:
requests pendulum>=1.2.3,<1.3 pyfiglet==0.8.post1 PyYaml>=5.4.1 Pillow==8.2.0 fire==0.3.1
pip install pyattck
git clone https://github.com/swimlane/pyattck.git cd pyattck python setup.py install
To use pyattck you must instantiate an Attck object. Although you can interact directly with each class, the intended use is through a Attck object:
from pyattck import Attck attack = Attck()
subtechniques are accessible under each technique object. You can turn this behavior off by passing
nested_subtechniques=False when creating your
As an example, the default behavior looks like the following example:
from pyattck import Attck attack = Attck() for technique in attack.enterprise.techniques: print(technique.id) print(technique.name) for subtechnique in technique.subtechniques: print(subtechnique.id) print(subtechnique.name)
You can access the following
main properties on your Attck object:
Once you specify the MITRE ATT&CK Framework, you can access additional properties.
Here are the accessible objects under the Enterprise property:
For more information on object types under the
enterprise property, see Enterprise.
Here are the accessible objects under the PreAttck property:
For more information on object types under the
preattck property, see PreAttck.
Here are the accessible objects under the Mobile property:
For more information on object types under the
mobile property, see Mobile.
pyattck allows you to configure if you store external data and where it is stored.
from pyattck import Attck attck = Attck( nested_subtechniques=True, use_config=False, save_config=False, config_file_path='~/pyattck/config.yml', data_path='~/pyattck/data', enterprise_attck_json="https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json", pre_attck_json="https://raw.githubusercontent.com/mitre/cti/master/pre-attack/pre-attack.json", mobile_attck_json="https://raw.githubusercontent.com/mitre/cti/master/mobile-attack/mobile-attack.json", nist_controls_json="https://raw.githubusercontent.com/center-for-threat-informed-defense/attack-control-framework-mappings/master/frameworks/ATT%26CK-v9.0/nist800-53-r5/stix/nist800-53-r5-controls.json", generated_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/generated_attck_data.json", generated_nist_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/attck_to_nist_controls.json", **kwargs )
pyattck will (now) pull the latest external data from their respective locations using HTTP GET requests.
pyattck currently pulls from the following locations:
You have several options when instantiating the
Attck object. As of
4.0.0 you can now specify any of the following options:
Truepyattck will attempt to retrieve the configuration specified in the
config_file_pathlocation. If this file is corrupted or cannot be found, we will default to retrieving data from the specified
Truepyattck will save the configuration file to the specified location set by
config_file_path. Additionally, we will save all downloaded files to the
data_pathlocation specified. If you have specified a local path location instead of a download URL for any of the
*_attck_jsonparameters we will save this location in our configuration and reference this location going forward.
Additionally, you can specify the location for each individual
*_attck_json files by passing in either a URI or a local file path. If you have passed in a local file path, we will simply read from this file.
If you have used the default values or specified an alternative URI location to retrieve these JSON files from, you can additionally pass in
**kwargs that will be passed along to the
Requests python package when performing any HTTP requests.
We understand that there are many different open-source projects being released, even on a daily basis, but we wanted to provide a straightforward Python package that allowed the user to identify known relationships between all verticals of the MITRE ATT&CK Framework.
If you are unfamiliar with the MITRE ATT&CK Framework, there are a few key components to ensure you have a firm grasp around. The first is Tactics & Techniques. When looking at the MITRE ATT&CK Framework, the Tactics are the columns and represent the different phases of an attack.
The MITRE ATT&CK Framework is NOT an all encompassing/defacto security coverage map - it is rather a FRAMEWORK and additional avenues should also be considered when assessing your security posture.
Techniques are the rows of the framework and are categorized underneath specific Tactics (columns). They are data points within the framework that provides guidance when assessing your security gaps. Additionally, (most) Techniques contain mitigation guidance in addition to information about their relationship to tools, malware, and even actors/groups that have used this technique during recorded attacks.
This means, if your organization is focused on TTPs (Tactics Techniques and Procedures) used by certain actors/groups then MITRE ATT&CK Framework is perfect for you. If you are not at this security maturing within your organization, no worries! The ATT&CK Framework still provides really good guidance in a simple and straightforward layout, but programmatically it is not straightforward--especially if you wanted to measure (or map) your security controls using the framework.
You can add features or bugs or run the code in a development environment.
To get a development and testing environment up and running, use this Dockerfile.
To use the
Dockerfile run, cd to this repository directory and run:
docker build --force-rm -t pyattck .
Next, run the docker container:
docker run pyattck
Running this calls the test python file in bin/test.py.
Modify the test python file for additional testing and development.
Tests within this project should cover all available properties and methods. As this project grows the tests will become more robust but for now we are testing that they exist and return outputs.
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
We use SemVer for versioning.
For details on features for a specific version of
pyattck, see the CHANGELOG.md.
See also the list of contributors.
This project is licensed under the MIT License.
First of all, I would like to thank everyone who contributes to open-source projects, especially the maintainers and creators of these projects. Without them, this capability would not be possible.
This data set is generated from many different sources. As we continue to add more sources, we will continue to add them here. Again thank you to all of these projects. In no particular order,
pyattck utilizes data from the following projects:
.. toctree:: :titlesonly: configuration pyattck/attck Dataset <https://github.com/swimlane/pyattck-data> enterprise/enterprise preattck/preattck mobile/mobileattck