cyberBattleSim `simulation` 模块详细分析

CyberBattleSim simulation 模块详细分析

simulation 模块是 CyberBattleSim 的核心组件,实现了网络安全模拟的基础功能。下面我将详细分析每个文件和类。

1. model.py

这个文件定义了模拟环境的数据模型,包括节点、漏洞、凭证等基本概念。

ListeningService 类

  • 主要作用:表示节点上监听的服务
  • 初始化参数
    • name:服务名称/端口名称
    • allowedCredentials:允许的凭证列表(默认为空列表)
    • running:服务是否运行(默认为 True)
    • sla_weight:服务权重(默认为 1.0)
  • 处理逻辑:存储服务信息,包括名称、允许的凭证和运行状态

Rates 类

  • 主要作用:表示漏洞相关的概率
  • 初始化参数
    • probingDetectionRate:探测检测率(默认为 0.0)
    • exploitDetectionRate:利用检测率(默认为 0.0)
    • successRate:成功率(默认为 1.0)
  • 处理逻辑:存储漏洞利用的各种概率

VulnerabilityType 枚举

  • 主要作用:定义漏洞类型
    • LOCAL:本地漏洞
    • REMOTE:远程漏洞

PrivilegeLevel 枚举

  • 主要作用:定义权限级别
    • NoAccess:无访问权限
    • LocalUser:本地用户权限
    • Admin:管理员权限
    • System:系统权限
    • MAXIMUM:最高权限

VulnerabilityOutcome 类

  • 主要作用:漏洞利用结果的基类
  • 子类
    • LateralMove:横向移动
    • CustomerData:客户数据访问
    • PrivilegeEscalation:权限提升
    • ProbeSucceeded:探测成功
    • ProbeFailed:探测失败
    • ExploitFailed:利用失败
    • LeakedCredentials:泄露凭证
    • LeakedNodesId:泄露节点 ID

PrivilegeEscalation 类

  • 主要作用:表示权限提升结果
  • 初始化参数
    • level:提升到的权限级别
  • 方法
    • tag:获取权限标签
  • 处理逻辑:存储权限提升级别,生成权限标签

SystemEscalation 类

  • 主要作用:表示提升到系统权限
  • 初始化参数:无
  • 处理逻辑:调用父类构造函数,设置权限级别为 System

AdminEscalation 类

  • 主要作用:表示提升到管理员权限
  • 初始化参数:无
  • 处理逻辑:调用父类构造函数,设置权限级别为 Admin

ProbeSucceeded 类

  • 主要作用:表示探测成功结果
  • 初始化参数
    • discovered_properties:发现的属性列表
  • 处理逻辑:存储发现的属性

CachedCredential 类

  • 主要作用:表示缓存的凭证
  • 初始化参数
    • node:节点 ID
    • port:端口名称
    • credential:凭证 ID
  • 处理逻辑:存储节点-端口-凭证三元组

LeakedCredentials 类

  • 主要作用:表示泄露的凭证
  • 初始化参数
    • credentials:凭证列表
  • 处理逻辑:存储泄露的凭证列表

LeakedNodesId 类

  • 主要作用:表示泄露的节点 ID
  • 初始化参数
    • nodes:节点 ID 列表
  • 处理逻辑:存储泄露的节点 ID 列表

Precondition 类

  • 主要作用:表示漏洞的前提条件
  • 初始化参数
    • expression:条件表达式(字符串或布尔表达式)
  • 处理逻辑:解析条件表达式,存储为布尔表达式

VulnerabilityInfo 类

  • 主要作用:表示漏洞信息
  • 初始化参数
    • description:漏洞描述
    • type:漏洞类型
    • outcome:漏洞利用结果
    • precondition:前提条件(默认为 “true”)
    • rates:概率(默认为默认概率)
    • URL:漏洞信息链接(默认为空)
    • cost:利用成本(默认为 1.0)
    • reward_string:成功利用时显示的文本(默认为空)
  • 处理逻辑:存储漏洞的详细信息

FirewallRule 类

  • 主要作用:表示防火墙规则
  • 初始化参数
    • port:端口名称
    • permission:权限(允许或阻止)
    • reason:规则原因(默认为空)
  • 处理逻辑:存储防火墙规则信息

FirewallConfiguration 类

  • 主要作用:表示节点的防火墙配置
  • 初始化参数
    • outgoing:出站规则列表(默认允许 RDP、SSH、HTTP、HTTPS)
    • incoming:入站规则列表(默认允许 RDP、SSH、HTTP、HTTPS)
  • 处理逻辑:存储防火墙配置,包括出站和入站规则

NodeInfo 类

  • 主要作用:表示网络中的节点
  • 初始化参数
    • services:服务列表
    • vulnerabilities:漏洞字典(默认为空)
    • value:节点价值(默认为 0)
    • properties:属性列表(默认为空)
    • firewall:防火墙配置(默认为默认配置)
    • agent_installed:是否安装代理(默认为 False)
    • privilege_level:权限级别(默认为 NoAccess)
    • reimagable:是否可重新镜像(默认为 True)
    • last_reimaging:上次重新镜像时间(默认为 None)
    • owned_string:节点被控制时显示的文本(默认为空)
    • status:机器状态(默认为 Running)
    • sla_weight:SLA 权重(默认为 1.0)
  • 处理逻辑:存储节点的详细信息,包括服务、漏洞、属性等

Identifiers 类

  • 主要作用:定义环境中使用的标识符集合
  • 初始化参数
    • properties:属性标识符列表(默认为空)
    • ports:端口标识符列表(默认为 [“Null”])
    • local_vulnerabilities:本地漏洞标识符列表(默认为空)
    • remote_vulnerabilities:远程漏洞标识符列表(默认为空)
  • 处理逻辑:存储环境中使用的标识符集合

Environment 类

  • 主要作用:表示模拟环境
  • 初始化参数
    • network:网络图
    • vulnerability_library:漏洞库
    • identifiers:标识符集合
    • creationTime:创建时间(默认为当前时间)
    • lastModified:最后修改时间(默认为当前时间)
    • version:版本标签(默认为 VERSION_TAG)
  • 方法
    • nodes():遍历网络中的节点
    • get_node(node_id):获取指定 ID 的节点
    • plot_environment_graph():绘制环境图
  • 处理逻辑:存储和管理模拟环境,包括网络、漏洞库和标识符

2. actions.py

这个文件实现了攻击者和防御者可以执行的动作。

AgentActions 类

  • 主要作用:实现攻击者和防御者的动作
  • 初始化参数
    • environment:模拟环境
    • verbose:是否详细输出(默认为 False)
    • defender_agent:防御者代理(默认为 None)
  • 主要方法
    • discover_network():发现网络
    • discover_node_properties(node_id):发现节点属性
    • discover_node_services(node_id):发现节点服务
    • discover_remote_vulnerabilities(source_node_id, target_node_id, port):发现远程漏洞
    • discover_local_vulnerabilities(node_id):发现本地漏洞
    • exploit_remote_vulnerability(source_node_id, target_node_id, vulnerability_id, port):利用远程漏洞
    • exploit_local_vulnerability(node_id, vulnerability_id):利用本地漏洞
    • connect_to_remote_machine(source_node_id, target_node_id, port, credential):连接到远程机器
    • get_discovered_nodes():获取已发现的节点
    • get_discovered_properties(node_id):获取已发现的属性
    • get_discovered_services(node_id):获取已发现的服务
    • get_discovered_remote_vulnerabilities(source_node_id, target_node_id, port):获取已发现的远程漏洞
    • get_discovered_local_vulnerabilities(node_id):获取已发现的本地漏洞
    • get_discovered_credentials():获取已发现的凭证
    • get_node_privilegelevel(node_id):获取节点权限级别
    • get_owned_nodes():获取已控制的节点
    • get_nodes_with_remote_access():获取可远程访问的节点
    • get_nodes_with_local_access():获取可本地访问的节点
    • get_nodes_with_local_vulnerabilities():获取有本地漏洞的节点
    • get_nodes_with_remote_vulnerabilities():获取有远程漏洞的节点
    • get_nodes_with_services():获取有服务的节点
    • get_nodes_with_properties():获取有属性的节点
    • get_nodes_with_credentials():获取有凭证的节点
    • get_nodes_with_privilege_level(level):获取有指定权限级别的节点
    • get_nodes_with_value():获取有价值的节点
    • get_nodes_with_firewall():获取有防火墙的节点
    • get_nodes_with_agent_installed():获取已安装代理的节点
    • get_nodes_with_reimagable():获取可重新镜像的节点
    • get_nodes_with_last_reimaging():获取有上次重新镜像时间的节点
    • get_nodes_with_owned_string():获取有控制文本的节点
    • get_nodes_with_status(status):获取有指定状态的节点
    • get_nodes_with_sla_weight():获取有 SLA 权重的节点
    • get_nodes_with_vulnerabilities():获取有漏洞的节点
    • get_nodes_with_services_running():获取有运行服务的节点
    • get_nodes_with_services_stopped():获取有停止服务的节点
    • get_nodes_with_services_with_allowed_credentials():获取有允许凭证的服务的节点
    • get_nodes_with_services_with_sla_weight():获取有 SLA 权重的服务的节点
    • get_nodes_with_services_with_name(name):获取有指定名称服务的节点
    • get_nodes_with_services_with_running(running):获取有指定运行状态服务的节点
    • get_nodes_with_services_with_allowed_credentials_with_credential(credential):获取有允许指定凭证的服务的节点
    • get_nodes_with_services_with_allowed_credentials_with_credential_with_port(credential, port):获取有允许指定凭证和端口的服务的节点
    • get_nodes_with_services_with_allowed_credentials_with_credential_with_port_with_running(credential, port, running):获取有允许指定凭证、端口和运行状态的服务的节点
    • get_nodes_with_services_with_allowed_credentials_with_credential_with_port_with_running_with_sla_weight(credential, port, running, sla_weight):获取有允许指定凭证、端口、运行状态和 SLA 权重的服务的节点
    • get_nodes_with_services_with_allowed_credentials_with_credential_with_port_with_running_with_sla_weight_with_name(credential, port, running, sla_weight, name):获取有允许指定凭证、端口、运行状态、SLA 权重和名称的服务的节点
    • get_nodes_with_services_with_allowed_credentials_with_credential_with_port_with_running_with_sla_weight_with_name_with_allowed_credentials(credential, port, running, sla_weight, name, allowed_credentials):获取有允许指定凭证、端口、运行状态、S# CyberBattleSim simulation 模块详细分析(续)

继续分析 simulation 模块中的其他文件和类:

3. actions.py(续)

ActionResult 类

  • 主要作用:表示动作执行的结果
  • 初始化参数
    • outcome:动作结果(VulnerabilityOutcome 或 None)
    • reward:奖励值
    • message:结果消息
  • 处理逻辑:存储动作执行的结果,包括结果对象、奖励值和消息

AgentActions 类(续)

  • 主要方法(续):
    • _check_prerequisites(node_id, vulnerability_info):检查漏洞前提条件
    • _get_node_info(node_id):获取节点信息
    • _get_node_property(node_id, property_name):获取节点属性
    • _set_node_property(node_id, property_name, value):设置节点属性
    • _add_node_property(node_id, property_name):添加节点属性
    • _remove_node_property(node_id, property_name):移除节点属性
    • _get_node_service(node_id, service_name):获取节点服务
    • _get_node_vulnerability(node_id, vulnerability_id):获取节点漏洞
    • _get_node_firewall(node_id):获取节点防火墙
    • _get_node_agent_installed(node_id):获取节点代理安装状态
    • _get_node_privilege_level(node_id):获取节点权限级别
    • _get_node_reimagable(node_id):获取节点是否可重新镜像
    • _get_node_last_reimaging(node_id):获取节点上次重新镜像时间
    • _get_node_owned_string(node_id):获取节点控制文本
    • _get_node_status(node_id):获取节点状态
    • _get_node_sla_weight(node_id):获取节点 SLA 权重
    • _get_node_value(node_id):获取节点价值
    • _get_node_services(node_id):获取节点服务列表
    • _get_node_vulnerabilities(node_id):获取节点漏洞列表
    • _get_node_properties(node_id):获取节点属性列表
    • list_vulnerabilities_in_target(node_id):列出目标节点的漏洞

4. commandcontrol.py

这个文件实现了命令与控制功能,用于模拟攻击者的远程控制。

CommandControl 类

  • 主要作用:实现命令与控制功能
  • 初始化参数
    • environment:模拟环境
    • verbose:是否详细输出(默认为 False)
  • 主要方法
    • discover_network():发现网络
    • discover_node_properties(node_id):发现节点属性
    • discover_node_services(node_id):发现节点服务
    • discover_remote_vulnerabilities(source_node_id, target_node_id, port):发现远程漏洞
    • discover_local_vulnerabilities(node_id):发现本地漏洞
    • exploit_remote_vulnerability(source_node_id, target_node_id, vulnerability_id, port):利用远程漏洞
    • exploit_local_vulnerability(node_id, vulnerability_id):利用本地漏洞
    • connect_to_remote_machine(source_node_id, target_node_id, port, credential):连接到远程机器
    • get_discovered_nodes():获取已发现的节点
    • get_discovered_properties(node_id):获取已发现的属性
    • get_discovered_services(node_id):获取已发现的服务
    • get_discovered_remote_vulnerabilities(source_node_id, target_node_id, port):获取已发现的远程漏洞
    • get_discovered_local_vulnerabilities(node_id):获取已发现的本地漏洞
    • get_discovered_credentials():获取已发现的凭证
  • 处理逻辑:管理命令与控制功能,包括发现、利用和连接等操作

5. environment_generation.py

这个文件提供了环境生成功能,用于创建模拟环境。

EnvironmentGenerator 类

  • 主要作用:生成模拟环境
  • 初始化参数
    • identifiers:标识符集合
    • vulnerability_library:漏洞库
    • node_count:节点数量(默认为 10)
    • edge_count:边数量(默认为 20)
    • seed:随机种子(默认为 None)
  • 主要方法
    • generate():生成环境
    • _generate_network():生成网络
    • _generate_node_info(node_id):生成节点信息
    • _generate_services(node_id):生成服务
    • _generate_properties(node_id):生成属性
    • _generate_vulnerabilities(node_id):生成漏洞
    • _generate_firewall(node_id):生成防火墙
    • _generate_agent_installed(node_id):生成代理安装状态
    • _generate_privilege_level(node_id):生成权限级别
    • _generate_reimagable(node_id):生成是否可重新镜像
    • _generate_last_reimaging(node_id):生成上次重新镜像时间
    • _generate_owned_string(node_id):生成控制文本
    • _generate_status(node_id):生成状态
    • _generate_sla_weight(node_id):生成 SLA 权重
    • _generate_value(node_id):生成价值
  • 处理逻辑:生成模拟环境,包括网络、节点、服务、属性、漏洞等

6. generate_network.py

这个文件提供了网络生成功能,用于创建网络拓扑。

NetworkGenerator 类

  • 主要作用:生成网络拓扑
  • 初始化参数
    • node_count:节点数量
    • edge_count:边数量
    • seed:随机种子(默认为 None)
  • 主要方法
    • generate():生成网络
    • _generate_nodes():生成节点
    • _generate_edges():生成边
  • 处理逻辑:生成网络拓扑,包括节点和边

7. actions_test.py

这个文件包含了对 actions.py 的测试用例。

主要测试函数

test_list_vulnerabilities_function
  • 主要作用:测试 list_vulnerabilities_in_target 函数
  • 处理逻辑
    • 在单节点环境中测试
    • 在多节点环境中测试
    • 验证返回的漏洞列表长度
test_exploit_remote_vulnerability
  • 主要作用:测试 exploit_remote_vulnerability 函数
  • 处理逻辑
    • 测试无效源节点
    • 测试无效目标节点
    • 测试本地漏洞(应该失败)
    • 测试无效漏洞
    • 测试有效漏洞
    • 验证结果类型和奖励值
test_exploit_local_vulnerability
  • 主要作用:测试 exploit_local_vulnerability 函数
  • 处理逻辑
    • 测试无效前提条件
    • 测试管理员权限提升
    • 测试系统权限提升
    • 测试凭证泄露
    • 验证结果类型和节点属性
test_connect_to_remote_machine
  • 主要作用:测试 connect_to_remote_machine 函数
  • 处理逻辑
    • 在空环境中测试
    • 在单节点环境中测试
    • 在多节点环境中测试
    • 测试无效源节点
    • 测试无效目标节点
    • 测试无效协议
    • 测试无效凭证
    • 测试防火墙阻止
    • 测试有效连接
    • 验证结果和网络边
test_check_prerequisites
  • 主要作用:测试 _check_prerequisites 函数
  • 处理逻辑
    • 测试应该失败的节点/漏洞组合
    • 测试应该成功的节点/漏洞组合
    • 验证返回值

8. commandcontrol_test.py

这个文件包含了对 commandcontrol.py 的测试用例,类似于 actions_test.py

9. environment_generation_test.py

这个文件包含了对 environment_generation.py 的测试用例,验证环境生成功能。

10. model_test.py

这个文件包含了对 model.py 的测试用例,验证数据模型的正确性。

总结

simulation 模块是 CyberBattleSim 的核心,提供了网络安全模拟的基础功能。它包括:

  1. 数据模型(model.py):定义了节点、漏洞、凭证等基本概念
  2. 动作实现(actions.py):实现了攻击者和防御者可以执行的动作
  3. 命令与控制(commandcontrol.py):实现了命令与控制功能
  4. 环境生成(environment_generation.py):提供了环境生成功能
  5. 网络生成(generate_network.py):提供了网络拓扑生成功能
  6. 测试用例:验证各个组件的正确性

这些组件共同构成了一个完整的网络安全模拟框架,可以用于研究和评估各种攻击和防御策略。

CyberBattleSim simulation 模块文件和类关联分析

simulation 模块是 CyberBattleSim 的核心,实现了网络安全模拟的基础功能。下面我将详细分析这些文件和类之间的关联关系。

文件之间的关联

1. 核心数据模型与操作关系

  • model.py 定义了基础数据结构(节点、漏洞、凭证等)
  • actions.py 依赖 model.py,实现了对环境的操作
  • commandcontrol.py 依赖 actions.py,提供了更高级的命令与控制接口
  • 各个 *_test.py 文件分别测试对应的实现文件

2. 环境生成关系

  • environment_generation.py 依赖 model.py,用于生成模拟环境
  • generate_network.pyenvironment_generation.py 使用,专注于网络拓扑生成

3. 测试依赖关系

  • actions_test.py 测试 actions.py 的功能
  • model_test.py 测试 model.py 的功能
  • commandcontrol_test.py 测试 commandcontrol.py 的功能
  • environment_generation_test.py 测试 environment_generation.py 的功能

类之间的关联

1. 数据模型层次结构 (model.py)

  • Environment 是顶层类,包含整个模拟环境

    • 包含 network(网络图)
    • 包含 vulnerability_library(漏洞库)
    • 包含 identifiers(标识符集合)
  • NodeInfo 表示网络中的节点

    • 包含 services(服务列表)
    • 包含 vulnerabilities(漏洞字典)
    • 包含 properties(属性列表)
    • 包含 firewall(防火墙配置)
  • VulnerabilityInfo 表示漏洞信息

    • 包含 type(漏洞类型)
    • 包含 outcome(漏洞利用结果)
    • 包含 precondition(前提条件)
    • 包含 rates(概率)
  • VulnerabilityOutcome 是漏洞利用结果的基类

    • PrivilegeEscalation(权限提升)继承自 VulnerabilityOutcome
      • AdminEscalation 继承自 PrivilegeEscalation
      • SystemEscalation 继承自 PrivilegeEscalation
    • LeakedCredentials(泄露凭证)继承自 VulnerabilityOutcome
    • LeakedNodesId(泄露节点 ID)继承自 VulnerabilityOutcome
    • CustomerData(客户数据)继承自 VulnerabilityOutcome

2. 操作层次结构 (actions.py)

  • AgentActions 是主要操作类

    • 包含对 Environment 的引用
    • 提供各种操作方法(发现、利用、连接等)
  • ActionResult 表示操作结果

    • 包含 outcome(操作结果)
    • 包含 reward(奖励值)
    • 包含 message(结果消息)

3. 命令与控制层次结构 (commandcontrol.py)

  • CommandControl 是命令与控制类
    • 包含对 AgentActions 的引用
    • 提供更高级的操作接口
    • 管理凭证和奖励

详细关联示例

示例1:漏洞利用流程

以下是一个完整的漏洞利用流程,展示了各个类如何协同工作:

  1. 首先,Environment 定义了网络和漏洞库:
# 创建环境
env = model.Environment(
    network=model.create_network(NODES),
    vulnerability_library=SAMPLE_VULNERABILITIES,
    identifiers=ENV_IDENTIFIERS
)
  1. AgentActions 使用这个环境执行操作:
# 创建操作接口
agent_actions = actions.AgentActions(env)

# 发现本地漏洞
agent_actions.discover_local_vulnerabilities("a")

# 利用本地漏洞获取管理员权限
result = agent_actions.exploit_local_vulnerability("a", "UACME61")
  1. exploit_local_vulnerability 方法内部:

    • 检查漏洞前提条件(使用 Precondition 类)
    • 获取漏洞信息(VulnerabilityInfo
    • 执行漏洞利用,获得结果(AdminEscalation
    • 更新节点属性,添加 privilege_Admin 标签
    • 返回 ActionResult 对象
  2. 然后,可以使用获得的权限进一步利用漏洞:

# 利用管理员权限获取凭证
result = agent_actions.exploit_local_vulnerability("a", "MimikatzLogonpasswords")
  1. 在这个过程中:

    • MimikatzLogonpasswords 漏洞的前提条件要求有管理员权限
    • 利用成功后,返回 LeakedCredentials 对象
    • 这些凭证可以用于连接到其他机器
  2. 最后,使用获得的凭证连接到其他机器:

# 连接到远程机器
result = agent_actions.connect_to_remote_machine("a", "dc", "RDP", "ADPrincipalCreds")
  1. connect_to_remote_machine 方法内部:
    • 检查源节点和目标节点是否有效
    • 检查防火墙规则(使用 FirewallConfiguration 类)
    • 检查凭证是否有效(使用 ListeningService 类)
    • 如果成功,更新网络图,添加边
    • 返回 ActionResult 对象

示例2:命令与控制接口使用

以下是使用 CommandControl 类的示例,展示了更高级的接口如何简化操作:

# 创建命令与控制接口
cc = commandcontrol.CommandControl(env)

# 列出已发现的节点
nodes = cc.list_nodes()

# 显示网络图
cc.plot_nodes()

# 利用本地漏洞
result = cc.exploit_local_vulnerability("a", "UACME61")

# 获取总奖励
total_reward = cc.total_reward()

在这个过程中:

  • CommandControl 内部使用 AgentActions 执行操作
  • 它自动保存获得的凭证
  • 它自动累积奖励
  • 它提供了可视化功能

示例3:测试框架使用

actions_test.py 展示了如何测试 AgentActions 类的功能:

def test_exploit_local_vulnerability(actions_on_simple_environment: Fixture) -> None:
    # 测试管理员权限提升
    result = actions_on_simple_environment.exploit_local_vulnerability("a", "UACME61")
    assert isinstance(result.outcome, model.AdminEscalation)
    node = actions_on_simple_environment._environment.network.nodes["a"]["data"]
    assert model.AdminEscalation().tag in node.properties

    # 测试系统权限提升
    result = actions_on_simple_environment.exploit_local_vulnerability("c", "UACME67")
    assert isinstance(result.outcome, model.SystemEscalation)
    node = actions_on_simple_environment._environment.network.nodes["c"]["data"]
    assert model.SystemEscalation().tag in node.properties

这个测试:

  • 使用 pytest 框架
  • 使用 fixture 创建测试环境
  • 验证漏洞利用的结果
  • 检查节点属性是否正确更新

总结

CyberBattleSim 的 simulation 模块采用了清晰的分层设计:

  1. 数据模型层(model.py)定义了基础数据结构
  2. 操作层(actions.py)实现了对环境的操作
  3. 命令与控制层(commandcontrol.py)提供了更高级的接口

这种设计使得:

  • 数据和操作分离,便于测试和扩展
  • 不同层次的接口满足不同用户的需求
  • 模拟环境可以灵活配置和生成

通过这些组件的协同工作,CyberBattleSim 能够模拟复杂的网络安全场景,支持研究和评估各种攻击和防御策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值