pytm 使用教程
pytm A Pythonic framework for threat modeling 项目地址: https://gitcode.com/gh_mirrors/py/pytm
1. 项目介绍
pytm
是一个基于 Python 的威胁模型框架,旨在将威胁模型的过程自动化并左移,使其更贴近开发流程。通过输入和定义架构设计,pytm
可以自动生成数据流程图(DFD)、序列图以及与系统相关的威胁列表。
2. 项目快速启动
在开始之前,请确保您的系统满足以下要求:
- 操作系统:Linux/MacOS
- Python 版本:Python 3.x
- 安装 Graphviz 包
- 安装 Java(OpenJDK 10 或 11)
- 安装 plantuml.jar
以下是快速启动 pytm
的步骤:
首先,创建一个名为 tm
的目录,并运行 tm.py
脚本生成报告和图示文件:
mkdir -p tm
./tm.py --report docs/basic_template.md | pandoc -f markdown -t html > tm/report.html
./tm.py --dfd | dot -Tpng -o tm/dfd.png
./tm.py --seq | java -Djava.awt.headless=true -jar $PLANTUML_PATH -tpng -pipe > tm/seq.png
如果您有 GNU make
安装,可以使用 Makefile
简化上述步骤。只需运行以下命令:
make MODEL=the_name_of_your_model_minus_.py
确保 plantuml.jar
与您的模型在同一个目录下,或者设置了 PLANTUML_PATH
。
为了避免安装所有依赖,如 pandoc
或 Java
,可以在容器内运行脚本:
# 仅需执行一次
export USE_DOCKER=true
make image
# 模型更改后调用
make
3. 应用案例和最佳实践
以下是一个简单的应用案例:
创建一个名为 tm.py
的文件,描述一个简单的应用程序,用户登录并发布评论,应用服务器将评论存储到数据库中。有一个 AWS Lambda 定期清理数据库。
from pytm.pytm import TM, Server, Datastore, Dataflow, Boundary, Actor, Lambda, Data, Classification
tm = TM("my test tm")
tm.description = "another test tm"
tm.isOrdered = True
User_Web = Boundary("User/Web")
Web_DB = Boundary("Web/DB")
user = Actor("User")
user.inBoundary = User_Web
web = Server("Web Server")
web.OS = "CloudOS"
web.isHardened = True
web.sourceCode = "server/web.cc"
db = Datastore("SQL Database (*)")
db.OS = "CentOS"
db.isHardened = False
db.inBoundary = Web_DB
db.isSql = True
db.inScope = False
db.sourceCode = "model/schema.sql"
comments = Data(
name="Comments",
description="Comments in HTML or Markdown",
classification=Classification.PUBLIC,
isPII=False,
isCredentials=False,
isStored=True,
isSourceEncryptedAtRest=False,
isDestEncryptedAtRest=True
)
results = Data(
name="results",
description="Results of insert op",
classification=Classification.SENSITIVE,
isPII=False,
isCredentials=False,
isStored=True,
isSourceEncryptedAtRest=False,
isDestEncryptedAtRest=True
)
my_lambda = Lambda("cleanDBevery6hours")
my_lambda.hasAccess = ...
在上述代码中,您需要根据实际情况填写 my_lambda.hasAccess
的具体内容。
4. 典型生态项目
目前 pytm
的生态项目还比较有限,但您可以参考以下项目:
pytm
: 官方 Python 威胁模型框架pytm-templates
: 提供了多种威胁模型报告模板
随着 pytm
的发展,会有更多的生态项目出现,以丰富其功能和用途。
pytm A Pythonic framework for threat modeling 项目地址: https://gitcode.com/gh_mirrors/py/pytm