NASim动作类学习

NASim环境的动作相关类包含ActionSpace类和ActionResult类。每个动作都继承自基类Action,基类定义了一些常见的属性和功能,不能类型的动作被实现为动作类的子类。实现的动作类型有:

Exploit,PrivilegeEscalation,ServiceScan,OSScan,SubnetScan,ProcessScan,NoOp

ActionSpace有两种类型的操作空间,取决于是否使用平面操作:

FlatActionSpace,ParameterisedActionSpace

class nasim.envs.action.Action(name, target,cost,prob=1.0,req_access=AccessLevel.USER,**kwargs)

环境中的基本抽象动作类,有多种类型的动作(例如扫描和利用等),但每个动作都有一些共同的属性。

__init__(name, target,cost,prob=1.0,req_access=AccessLevel.USER,**kwargs)

参数:

  • name ( str ) – 动作名称
  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • prob ( float , optional ) -- 给定操作的成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

is_exploit()检查是否是漏洞利用,如果操作被利用,则为True,否则为False

is_noop()检查动作是否是无所事事的动作,如果action是noop动作,则为True,否则为False

is_os_scan()检查操作是否是操作系统扫描,如果操作是操作系统扫描,则为True,否则为False

is_privilege_escalation()检查操作是否是提权操作,如果操作是提权操作,则为True,否则为False

is_process_scan()检查操作是否是进程扫描,如果操作时进程扫描,则为True,否则为False

is_remote()检查动作是否是远程动作,远程操作时目标主机是远程主机的操作(即该操作不在目标本地执行),如果操作是远程的,则为True,否则为False

is_scan()检查操作是否为扫描,如果动作是扫描则为真,否则为False

is_service_scan()检查操作是否是服务扫描,如果操作是服务扫描,则为True,否则为False

is_subnet_scan()检查操作是否是子网扫描,如果操作是子网扫描,则为True,否则为False

class nasim.envs.action.ActionResult(success, value=0.0, services=None, os=None, processes=None, access=None, discovered=None, connection_error=False, permission_error=False, undefined_error=False, newly_discovered=None)

用于存储动作结果的数据类,然后将这些结果用于更新完整状态和观察结果。

__init__(success, value=0.0, services=None, os=None, processes=None, access=None, discovered=None, connection_error=False, permission_error=False, undefined_error=False, newly_discovered=None)

参数:

  • success ( bool ) – 如果利用/扫描成功则为 True,否则为 False
  • value ( float , optional ) – 从动作中获得的值 (default=0.0)
  • services ( dict , optional ) – 由操作标识的服务 (default=None={})
  • os ( dict , optional ) – 由操作标识的操作系统 (default=None={})
  • processes ( dict , optional ) – 由操作标识的进程 (default=None={})
  • access ( dict , optional ) – 通过操作获得的访问权限 (default=None={})
  • discovered( dict , optional ) – 通过操作发现的主机地址 (default=None={})
  • connection_error ( bool , optional ) – 如果操作因连接错误而失败,则为 True(默认 = False)
  • permission_error ( bool , optional ) – 如果操作因权限错误而失败,则为 True(默认 = False)
  • undefined_error ( bool , optional ) – 如果操作因未定义的错误而失败,则为真(默认值=False)
  • new_discovered ( dict , optional ) – 首次通过操作发现的主机地址(默认=None)

info()以字典形式获取结果,返回行动结果信息,dict

class nasim.envs.action.Exploit(name, target, cost, service, os=None, access=0, prob=1.0, req_access=AccessLevel.USER, **kwargs)

环境中的Exploit操作,从基本动作类继承。

__init__(name, target, cost, service, os=None, access=0, prob=1.0, req_access=AccessLevel.USER, **kwargs)

参数:

  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • service ( str ) – 目标服务
  • os ( str , optional ) – 漏洞利用的目标操作系统,如果没有,则漏洞利用适用于所有操作系统(默认=无)
  • access ( int , optional ) – 如果利用成功,则在目标上获得的访问级别(默认 = 0)
  • prob ( float , optional ) – 成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

class nasim.envs.action.FlatActionSpace(scenario)

NASim环境的平面操作空间。继承并实现了gym.spaces.Discrete。

__init__(scenario)

参数:

  • scenario (Scenario) – 场景描述
  • n(int) – 动作空间中的动作数量
  • actions(list of Actions) – 动作空间中的动作列表

get_action(action_idx)获取action idx对应的Action对象,Action

class nasim.envs.action.NoOp(*args, **kwargs)

在环境中什么都不做,从基本动作类继承。

__init__ (* args , ** kwargs )

参数:

  • name ( str ) – 动作名称
  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • prob ( float , optional ) -- 给定操作的成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

*class nasim.envs.action.OSScan(target, cost, prob=1.0, req_access=AccessLevel.USER, *kwargs)

环境中的OS扫描操作,从基本动作类继承。

__init__(target, cost, prob=1.0, req_access=AccessLevel.USER, **kwargs)

参数:

  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • prob ( float , optional ) -- 给定操作的成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

class nasim.envs.action.ParameterisedActionSpace(scenario)

NASim 环境的参数化动作空间。继承并实现了gym.spaces.MultiDiscrete动作空间,其中每个维度对应一个不同的动作参数。动作参数(按顺序)是:

  1. 动作类型=[0,5],0为利用,1为权限升级,2为服务扫描,3为系统扫描,4为子网扫描,5为进程扫描
  2. 子网=[0,#subnets-1] -1因为我们不包括互联网子网
  3. 主机=[0, max subnets size-1]
  4. 操作系统=[0, #OS]
  5. 服务=[0, #services - 1]
  6. 进程=[0, #processes]

请注意,操作系统、服务和进程仅对漏洞利用和权限提升操作很重要。

__init__(scenario)

参数:

  • ScenarioScenario)—场景描述
  • nvec (Numpy.Array) — 每个参数的向量大小
  • actions (list of Actions) — 动作空间中所有动作的列表

get_action ( action_vector ) (整数列表或整数元组或Numpy.Array)获取动作向量对应的动作对象,返回Action。

笔记:

  1. 如果host#指定的动作向量大于指定子网中的主机数,则host#将会被变为host# %子网大小。
  2. 如果操作是一个漏洞,并且参数与场景描述中的任何漏洞定义不匹配,则返回一个 NoOp 操作,成本为 0。

class nasim.envs.action.PrivilegeEscalation(name, target, cost, access, process=None, os=None, prob=1.0, req_access=AccessLevel.USER, **kwargs)

环境中的权限提升操作,从基本动作类继承。

__init__(name, target, cost, access, process=None, os=None, prob=1.0, req_access=AccessLevel.USER, **kwargs)

参数:

  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • access ( int ) – 权限提升产生的访问级别
  • process ( str , optional ) – 目标进程,如果 None 动作不需要进程工作(默认=None)
  • os ( str , optional ) – 提权操作的目标操作系统,如果没有,则操作适用于所有操作系统(默认=无)
  • prob ( float , optional ) – 成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

class nasim.envs.action.ProcessScan(target, cost, prob=1.0, req_access=AccessLevel.USER, **kwargs)

环境中的进程扫描操作,从基本动作类操作。

__init__(target, cost, prob=1.0, req_access=AccessLevel.USER, **kwargs)

参数:

  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • prob ( float , optional ) -- 给定操作的成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

class nasim.envs.action.ServiceScan(target, cost, prob=1.0, req_access=AccessLevel.USER, **kwargs)

环境中的服务扫描操作,从基本动作类继承。

__init__(target, cost, prob=1.0, req_access=AccessLevel.USER,**kwargs)

参数:

  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • prob ( float , optional ) -- 给定操作的成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

class nasim.envs.action.SubnetScan(target, cost, prob=1.0, req_access=AccessLevel.USER, **kwargs)

环境中的子网扫描操作,从基本动作类继承。

__init__(target, cost, prob=1.0, req_access=AccessLevel.USER, **kwargs)

参数:

  • target ( ( int , int ) ) – 目标地址
  • cost ( float ) – 执行动作的成本
  • prob ( float , optional ) -- 给定操作的成功概率(默认=1.0)
  • req_access ( AccessLevel , optional ) – 执行操作所需的访问级别(默认=AccessLevel.USER)

nasim.envs.action.load_action_list(scenario)

加载给定场景的环境操作列表。返回环境中的所有动作列表,list

posted @ 2022-08-07 22:10  哆啦哆啦呦  阅读(218)  评论(0编辑  收藏  举报