没有项目描述

pytm的Python项目详细描述


#pytm

威胁建模的pythonic框架

对于安全实践者,将威胁添加到威胁对象:

``python
threats={
"df1":{
"description":"dataflow not authenticated",
"target":dataflow,
"condition":"target.authenticatedWith为false"
},
"sr1":{
"description":"server not hardend",
"target":server,
"condition":"target.ishardened为false"
}
}
````

**警告**


threat.py文件包含经过eval \(\)-&;gt的字符串;请确保该文件具有正确的权限,否则有可能让攻击者更改字符串并使您代表它们运行代码。逻辑存在于"条件"中,"目标"的成员可以在逻辑上进行评估。返回true意味着规则生成一个查找,否则,它不是一个查找。**

**用法**


要启动威胁模型,最小代码量是:

`` python

\/usr/bin/env python3

以及命令行参数处理。

可以在命令行上选择助手操作:

``文本
用法:tm.py[-h][--debug][--dfd][--report report][--exclude exclude]
[--seq][--list]

--帮助显示此帮助消息并退出
--调试打印调试消息
--DFD输出DFD(默认值)
--使用命名模板文件的报告输出报告
--排除指定要忽略的威胁ID输出序列图
--列出已知威胁
--描述描述描述给定类的内容

````

>当前可用的元素有:element、server、externalentity、datatpre。演员。进程,进程集,数据流,边界。
可以使用--describe后跟元素名称列出元素的可用属性:

`` text

(py tm)pytm git:(master)/tm.py--describe元素
element
os
check
definesconnectiontimeout
description
dfd
handlessources
implementationsauthenticationscheme
implementationsnance
inboundary
inscope
isadmin
isharded
name
onaws

```


元素包括:TM、元素、服务器、外部实体、数据存储、参与者、进程、进程集、数据流、边界。


输出为[dot]的图表(https://graphviz.gitlab.io/)和[plantuml](https://plantuml.com/)。源文件输出到stdout,数据流和plantuml不需要安装,也不能代替用户运行。




`` python

\/usr/bin/env python3

actor

tm=tm("我的测试tm")
tm.description="另一个测试tm"


user_web=boundary("用户/web")
web_db=boundary("web/db")

user.inboundary=user_web

web=server("web服务器")
web.os="cloudos"
web.isharded=true

db=datastore("sql database(*)")
db.os="centos"
db.ishardened=false
db.inboundary=web数据库
db.issql=true
db.inscope=false

my懔lambda=lambda("每6小时清洗一次")
my懔lambda.hasaccesscontrol=true
my懔lambda.inboundary=web_db

my_lambda_to_db=dataflow(my_lambda,db,"(&;lambda;)定期清理db").
my_lambda_to_db.protocol="sql"
my_lambda_to_db.dstport=3306

user_to_web=dataflow(用户,web,"用户输入注释(*)"
user_to_web.protocol="http"
user_to_web.dstport=80
user_to_web.data='HTML或降价注释'
user_to_web.order=1

web_to_user=dataflow(web,user,"已保存的注释(*)"
web_to_user.protocol="http"
web_to_user.data='保存或错误消息的确认,用json表示'
web_to_user.order=2


web_to_db=dataflow(web,db,"插入带有注释的查询")
web_to_db.protocol="mysql"
web_to_db.dsport=3306
web_to_db.data="mysql insert statement,all literals"
web-to-db.order=3


db-to-web=dataflow(db,web,"comments contents")
db-to-web.protocol="mysql"
db-to-web.data="insert op的结果"
db-to-web.order=4


````


stdout,输入graphviz的点:

`` bash

tm.py--dfd dot-tpng-o sample.png

```


[dfd.png](.gitbook/assets/dfd.png)


可以对数据流进行排序并生成序列图:

`` python


"用户输入注释(*)"
user_to_web.protocol="http"
user_to_web.dstport=80
user_to_web.data='HTML或降价注释'
user_to_web.order=1

``````
``bash


````

生成此图:

![seq.png](.gitbook/assets/seq.png)


可以将图表和结果包含在模板中以创建最终报告:

`` bash


```
报表模板中使用的模板格式非常简单:

``text


[Level 0 DFD](dfd.png)

## Dataflows

Name|From|To |Data|Protocol|Port
----|----|---|----|--------|----
{dataflows:repeat:{{item.name}}|{{item.source.name}}|{{item.sink.name}}|{{item.data}}|{{item.protocol}}|{{item.dstPort}}
}

## 结果

{结果:重复:{item.description}在元素"{item.target}
}

`````

**当前支持的威胁**

```text

au02-对审核数据的潜在弱保护
ac01-进程内存被篡改
ac02-重放攻击
cr01-冲突攻击
au03-日志记录的风险
aa02-已验证的数据流被破坏
in01-潜在的sql注入漏洞
in02-xml dtd和xslt处理
in03-javascript对象表示法处理/xss
in04-跨站点脚本
ac03-数据存储可能已损坏
aa03-sso授权的弱点
ac04-使用模拟提升进程
ot01-跨站点请求伪造
do01-潜在的过度资源消耗
do02-潜在的进程崩溃或停止
do03-数据流可能中断
do04-数据存储不可访问
aa04-授权绕过
de01-数据流嗅探
ac06-资源的弱访问控制
ds01-弱凭据存储
de02-弱凭据传输
aa05-弱身份验证方案
lb01-lambda不验证请求源
lb02-lambda没有访问控制
lb03-lambda不处理资源消耗量

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GridBagLayout集合JScrollPane相对于JButton高度   使用JAXWS的java:如何设置用户代理属性   java使用Jackson将巨大的JSON响应反序列化为POJO最有效的方法是什么?   java如何实现对bouncy ball的声明?   java使用Hibernate显示给定parentNode的所有子节点   javascript模式引导与应用程序Spring引导(JAVA)   机器学习在weka java中有没有计算P值的方法?   mymysql中的java数据不一致   几何学在Java中,对于任何具有起始坐标和结束坐标的直线,如何获得矩形的4个角   java我需要读取一个字符串并从中获取一个特定的值   java短长度身份验证令牌   读取Android NFC IsoDep标记时发生java连接错误   java NoSuchMethodError:将Firebase与应用程序引擎应用程序集成时出错   java如何编写超级工厂程序?   java关联与聚合   java问题集作为学习编程未来、承诺和参与者的资源