背景

也可以用attackcti库,但是因为本次目的是给人看,不是单纯做数据库,所以需要输出为表格(看个人喜好,我选MarkDown格式)。
知道pandas有“read_html”,但是我要获取Detections后重构表格,把Detections插入到它的Technique或 Sub Technique下,并且还希望保留其中的超链接,所以最后考虑还是正则提取内容,用MarkDown重构表格后保存~

重新爬取

Mitre公司时常会更新ATT&CK矩阵(和其他产品),不建议用人工方式爬取和对比,直接用最新的覆盖。
2022年4月25日更新V11,平均一年更新2-3次:
Python-Web - ATT%26CK的Techniques和Detections - 图1
image.png

还有一些问题

因为用的是PyCharm开发,有一些用代理的问题:

  • 写了谷歌API翻译中文的脚本,需要代理
  • 爬ATT&CK,不能挂代理

所以目前不能在一个Python里面完成。
后续翻译需要另外完成:文件使用谷歌浏览器打开后,再基于浏览器的谷歌插件翻译。

收集分类-Techniques(技术和子技术)

T开头是技术,0.开头是这个技术下的子技术。
目前共14个技术分类:侦察、资源开发、初始访问、执行、坚持、权限提升、防御规避、凭证访问、发现、横向运动、募捐、指挥和控制、漏出、影响
工具:导出ATT&CK攻击分类.js
导入为浏览器插件:如何导入
使用方式:在如“侦察”等攻击分类页面可以导出页面“Techniques”下的表格,建议联合使用浏览器的机翻(推荐谷歌)后再导出:
Python-Web - ATT%26CK的Techniques和Detections - 图3
也可以用Python开发,但是前期已经先写了JS,暂时没有全自动化的必要,就没再额外花时间用Python重写。

Python爬取-Detection(检测点)

在浏览器页面导出“Techniques”容易,操作不会很多,但是检测点就是每个单个的技术都要取一次,手工做太累了。
目前采用的爬取方式是,把上方js导出的MarkDown表格放到一个目录内,遍历这个目录中的“.md”文件。脚本会提取每行的链接,访问,从返回的文本中,提取其中的“Detection”。
提取后会将“Detection”插入到“Techniques”,重新制表(MarkDown格式)后再输出到同目录下“提取Detection后”,文件名:原文件名+“-Python爬取Detection”:
image.png
1个技术分类大约需要1分钟,全部爬完大约10分钟。

🐍Python脚本🐍

  1. 离职再放😂😂😂

难点

代码逻辑不难,主要是异常情况还是蛮多的,数据并不统一:
image.png

Detections一共有三种数据格式

95%+:四列表格;
2%:两列
2%:1列
1%:纯文本

处理方式

获取到Detections后进行判断,判断后处理为4列统一的MarkDown表格文本,以便后续插入到其技术下。

输出

image.png

Bug总结

要准确!

能用“startswith”就不要用“in”,能准确就不要宽松!
in”也太宽松了!浪费了我两天😑😑😑

性能优化

反复调试代码,需要反复访问网页吗?
可以不用,第一次把网页的.text返回后写到本地保存,如有需要可以只保存部分内容。
文件名可以用URL.split(“\”)[-1]+”.html”