.______ ____ ____ ___ .___________.___________. ______ __ ___
| _ \ \ \ / / / \ | | | / || |/ /
| |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' /
| ___/ \_ _/ / /_\ \ | | | | | | | <
| | | | / _____ \ | | | | | `----.| . \
| _| |__| /__/ \__\ |__| |__| \______||__|\__\
一个用于与 MITRE ATT&CK 框架交互的 Python 包
当前版本为 7.1.1
pyattck 是一个轻量级的 MITRE ATT&CK 框架。该包从 MITRE 企业、PRE-ATT&CK、移动和 ICS 框架中提取详细信息。
pyattck 帮助组织和个人以编程方式访问 MITRE ATT&CK 框架。也就是说,你可以通过命令行工具或嵌入到自己的代码库中,访问企业、移动、Pre-Attck 和 ICS 框架中定义的所有威胁行为者、恶意软件、缓解措施、战术、技术和工具。
有很多理由需要在自动化(脚本/代码)方式下访问这些数据,例如:
pyattck 还提供其他好处,包括提供额外上下文数据的能力。你可以在此处找到关于这些数据的更多信息,但基本要点是:pyattck 利用多个开源仓库来收集额外的上下文数据,例如用于执行技术的命令、威胁行为者的国家及其他详细信息、与已定义工具/恶意软件相似的恶意软件变体等。
这种额外的上下文才是 pyattck 真正强大的地方,它使人们能够构建更健壮的检测规则测试和验证、验证测试假设等。确实,有无穷无尽的方式可以利用 pyattck 帮助蓝队、红队和紫队保护组织(以及他们自身)。
pyattck 包从 MITRE ATT&CK 框架中检索所有战术、技术、威胁行为者、恶意软件、工具和缓解措施,以及 MITRE ATT&CK 数据集中定义的任何关系(包括子技术)。
此外,技术、威胁行为者和工具(如适用)现在拥有从第三方资源收集的数据,这些数据可通过不同属性访问。有关这些特性的更详细信息,请参见外部数据集。
pyattck 包允许你:
你可以在 OS X、Linux 或 Windows 上安装 pyattck。你也可以从源代码直接安装。请根据你的操作系统查看下面的安装命令。
pip install pyattck
git clone https://github.com/swimlane/pyattck.git
cd pyattck
python setup.py install
要使用 pyattck,你必须实例化一个 Attck 对象。虽然你可以直接与每个类交互,但预期的方式是通过 Attck 对象:
from pyattck import Attck
attack = Attck()
默认情况下,子技术 在每个技术对象下可访问。你可以通过在创建 Attck 对象时传递 nested_techniques=False 来关闭此行为。
例如,默认行为如下所示:
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)
你可以在 Attck 对象上访问以下 主要 属性:
一旦你指定了 MITRE ATT&CK 框架,就可以访问其他属性。
以下是 企业 属性下可访问的对象:
有关 enterprise 属性下对象类型的更多信息,请参见企业。
以下是 PreAttck 属性下可访问的对象:
有关 preattck 属性下对象类型的更多信息,请参见PreAttck。
以下是 移动 属性下可访问的对象:
有关 mobile 属性下对象类型的更多信息,请参见移动。
以下是 ICS 属性下可访问的对象:
有关 ics 属性下对象类型的更多信息,请参见ICS。
要使用 pyattck 中的新交互式菜单系统,你必须将 interactive 设置为 True。这样做将启动交互式控制台菜单系统。
使用脚本,你可以通过运行以下命令来启动它:
from pyattck import Attck
Attck(interactive=True)
或者你也可以在命令行上运行交互模式:
pyattck --interactive
下面的 GIF 示例:

pyattck 允许你配置是否存储外部数据以及存储位置。
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
)
默认情况下,pyattck(现在)会从其各自的位置通过 HTTP GET 请求拉取最新的外部数据。pyattck 当前从以下位置拉取数据:
实例化 Attck 对象时,你有几个选项。从 4.0.0 开始,你可以指定以下任何选项:
True 时,pyattck 将尝试检索 config_file_path 位置指定的配置。如果此文件损坏或无法找到,我们将默认从指定的 *_attck_json 位置检索数据。True 时,pyattck 会将配置文件保存到 config_file_path 设置的指定位置。此外,我们会将所有下载的文件保存到指定的 data_path 位置。如果你为任何 *_attck_json 参数指定了本地路径位置而不是下载 URL,我们将把此位置保存在配置中,并在以后引用此位置。~/pyattck/config.yml~/pyattck/data此外,你可以通过传入 URI 或本地文件路径来指定每个单独的 *_attck_json 文件的位置。如果你传入了本地文件路径,我们将直接读取该文件。