NASim场景定义

Nasim中的场景定义了创建一个网络环境所需要的所有必要属性
每个场景定义可以被分解成两部分:网络配置,渗透测试者

网络配置由以下属性定义:

  1. 子网:包括子网的数量和大小
  2. 拓扑:网络中子网的连接方式
  3. 主机配置:网络中所有主机的IP,OS,Services,processes,firewall
  4. 防火墙:用来阻止子网间的通信

渗透测试者:

  1. 漏洞利用:渗透测试者可以利用的漏洞集合
  2. 特权利用:渗透测试者可以利用的权限升级动作集合
  3. 扫描成本:指定每种类型扫描的成本
  4. 敏感主机:网络中的目标主机和它们的价值

eg:示例场景,其中渗透测试者的目标是获得敏感子网中的服务器和用户子网中的主机之一的root权限
img.png

从图中,我们可以看到网络具有如下属性:
(1) 子网:网络中存在3个子网——DMZ区域、Sensitive区域、User区域
(2) 拓扑:只有DMZ区域可以连接到Internet,网络中的所有子网都是互联的
(3)主机配置:每个主机的运行地址、操作系统、服务和进程都显示在主机旁,主机的防火墙设置显示在右上角
(4)防火墙:防火墙上方和下面的箭头表示子网之间以及DMZ子网和互联网之间可以在每个方向上通过哪些服务进行通信

定义渗透测试者:
(1)漏洞利用:场景定义了三个漏洞,渗透测试人员可以进行利用
①ssh_exploit: 利用在windows上的ssh服务,(2,0.6,user)
②ftp_exploit: 利用在linux上的ftp服务,(1,0.9,root)
③http_exploit: 利用http服务,(3,1.0,user)
(2)特权利用
①pe_tomcat:利用运行在linux机器上的tomcat进程,(1,1.0,root)
②pe_daclsvc:利用运行在windows机器上的daclsvc进程来,(1,1.0,root)
(3)扫描成本
①service_scan:1
②os_scan:2
③process_scan:1
④subnet_scan:1
(4)敏感主机:这里我们由两个目标主机
①(2,0):1000
②(3,2):1000
在这个场景中,我们定义了攻击模拟所需要的一切

创建自定义场景:
使用Nasim,我们可以通过YAML文件来自定义场景

这里是我们定义的网络场景

定义子网的数量和大小,这里表示定义了3个大小均为1的子网,地址中第一个子网的地址为1.
第二个子网的地址为2,地址0为“互联网”子网所保留。
subnets:[1,1,1]
拓扑通过邻接矩阵来定义,其中网络中的每个子网都有一行和一列,以及指定“互联网”子网的
附加行和列,即是与网络外部的连接。第一行第一列为“互联网”子网所保留,子网之间的连接
用1表示,非连接用0表示,我们假设连接是对称的,并且网络与其自身相连接。
topology: [[ 1, 1, 0, 0],
[ 1, 1, 1, 1],
[ 0, 1, 1, 1],
[ 0, 1, 1, 1]]
主机配置:OS, services, processes
os:

  • linux
    services:
  • ssh
    processes:
  • tomcat
    主机配置部分是从主机地址到其配置的映射,其中地址是一个(subnet number, host number)元组,
    配置必须包括操作系统、服务、进程和可选的主机防火墙设置
    在定义主机时需要注意以下几点:
  1. 为每个子网定义的主机数量需要与子网的大小匹配
  2. 子网中的主机地址必须从0开始
  3. 任何操作系统、服务和进程的名称必须与YAML文件的系统、服务和进程中提供的值匹配
  4. 每个主机都必须由一个操作系统和至少一个服务,没有进程是可以的
    主机防火墙允许的流量仍然可能被子网防火墙所过滤
    主机值是代理在破坏主机时将收到的可选值,可以是正或负值,这使得设置额外的主机特定奖励与惩罚成为可能。
    主机值是可选的,默认为0,对于任何敏感主机来说,不指定该值,或者它必须与文件中指定的值匹配。与敏感
    主机一样,代理只有在破坏主机时才会收到作为奖励的价值。

如下,有一个简单的主机配置:
host_configurations:
(1, 0):
os: linux
services: [ssh]
processes: [tomcat]
# which services to deny between individual hosts
firewall:
(3, 0): [ssh]
value: 0
(2, 0):
os: linux
services: [ssh]
processes: [tomcat]
firewall:
(1, 0): [ssh]
(3, 0):
os: linux
services: [ssh]
processes: [tomcat]

定义网络的最后一部分是防火墙,它被定义为从(子网号,子网号)元组到允许服务列表的映射。
防火墙规则只能在拓扑邻接矩阵中连接的子网之间定义。每个规则定义了哪些服务在一个方向上被允许,如果
列表为空,则代表源子网到目标子网的所有流量都将被阻止。
firewall:
(0, 1): [ssh]
(1, 0): []
(1, 2): []
(2, 1): [ssh]
(1, 3): [ssh]
(3, 1): [ssh]
(2, 3): [ssh]
(3, 2): [ssh]

下面定义渗透测试者:

sensitive_hosts:包含敏感/目标主机地址及其值的字典
exploits:漏洞字典
privilege_escalation:权限提升操作字典
os_scan_cost:使用操作系统扫描的成本
service_scan_cost:使用服务扫描的成本
process_scan_cost:使用进程扫描的成本
subnet_scan_cost:使用子网扫描的成本
step_limit:渗透测试人员在单集中可以执行的最大操作数

敏感主机:
sensitive_hosts:
(2, 0): 100
(3, 0): 100
漏洞利用:
service:漏洞利用目标的服务名称。 请注意,该值必须与网络定义的服务部分中定义的服务名称相匹配。
os:漏洞利用目标的操作系统的名称,如果漏洞利用在所有操作系统上都有效,则没有。 如果该值不是 none,则它必须与网络定义的 os 部分中定义的操作系统的名称匹配
prob:在满足所有先决条件的情况下,利用成功的概率(即目标主机被发现且可达,并且主机正在运行目标服务和操作系统)
cost:执行动作的成本。这应该是一个非负整数或浮点数,并且可以在任何期望的意义上表示操作的成本(财务、时间、产生的流量等)
access:如果漏洞利用成功,渗透测试人员将获得目标主机的访问权限。这可以是用户或 root。
漏洞的名称可以是任何你想要的,只要它们是不可变的和可散列的(即字符串、整数、元组)并且是唯一的。
exploits:
e_ssh:
service: ssh
os: linux
prob: 0.8
cost: 1
access: user
权限提升:
process:操作目标的流程名称。 该值必须与网络定义的进程部分中定义的进程的名称相匹配。
os:操作目标的操作系统名称,如果漏洞在所有操作系统上都有效,则没有。 如果该值不是 none,则它必须与网络定义的 os 部分中定义的操作系统的名称匹配。
prob:在满足所有先决条件的情况下操作成功的概率(即渗透测试人员可以访问目标主机,并且主机正在运行目标进程和操作系统)
cost:执行动作的成本。这应该是一个非负整数或浮点数,并且可以在任何期望的意义上表示操作的成本(财务、时间、产生的流量等)
access:如果操作成功,渗透测试人员将获得目标主机的访问权限。这可以是用户或 root。
与漏洞利用类似,每个特权漏洞利用操作的名称可以是您想要的任何名称,只要它们是不可变的和可散列的(即字符串、整数、元组)并且是唯一的。
privilege_escalation:
pe_tomcat:
process: tomcat
os: linux
prob: 1.0
cost: 1
access: root
扫描成本:
service_scan_cost: 1
os_scan_cost: 1
subnet_scan_cost: 1
process_scan_cost: 1
步数限制:
步数限制定义了渗透测试者在单集中达到目标的最大步数(即动作)。在模拟过程中,一旦达到步数限制,则认为该情节已完成,代理未能达到目标。
step_limit: 1000

posted @ 2022-08-07 22:11  哆啦哆啦呦  阅读(315)  评论(3编辑  收藏  举报