什么是应用防护

更新时间:
复制 MD 格式

应用防护功能基于RASP(Runtime Application Self-Protection)技术,通过在应用运行时检测攻击并进行应用保护,为应用提供安全防御。您无需修改代码,只需在主机或容器环境的应用中部署RASP探针,即可为应用提供强大的安全防护能力,并抵御绝大部分未知漏洞所使用的攻击手法。

功能原理

应用防护使用 RASP 技术,在应用程序内部通过钩子(Hook)关键函数,实时监测应用运行时与其他系统的交互过程。当应用出现可疑行为时,根据当前上下文环境识别并阻断攻击。

该技术为主机上的 Web 业务进程提供应用漏洞、0day 漏洞和内存马攻击等防护能力。

image

应用场景和优势

  • 保障应用内部安全:不关注流量来源,只关注应用行为,可防御南北向和东西向的威胁;伴随应用启动而运行,作为应用资产的最后一道防线。

  • 应对复杂编码和加密流量:RASP 能够看到应用的上下文,不管请求如何变形,最终应用执行的动作保持不变,只要身份和行为不匹配即可检测到异常;相对于网络边界设备无法审计加密流量的问题,RASP 可以从应用程序内部获取完整解密后的请求数据。

  • 低误报漏报,可防御 0day 漏洞:RASP 从应用内部对关键函数操作的数据进行分析,可忽略无法真实执行的攻击,减少误报和漏报;针对 0day 漏洞,无论攻击入口如何变化、攻击手段如何隐蔽,都无法绕开关键函数的执行过程,因此可以有效拦截。

  • 攻击溯源与漏洞定位:RASP 为安全人员和开发人员提供详尽的攻击链路,包括攻击原始 Payload、代码调用堆栈等信息,方便进行漏洞定位、复现以及修复。

  • 运维成本低:部署简便,在控制台接入即可,无需维护和更新具体规则。

使用限制

支持防护 Java、PHP 和 Node.js 应用。支持在安装了云安全中心客户端的阿里云服务器、第三方厂商云服务器和线下 IDC 服务器中使用。

支持的操作系统如下:

操作系统类型

支持的操作系统

Windows(64 位)

  • Windows Server 2025

  • Windows Server 2022

  • Windows Server 2019

  • Windows Server 2016

  • Windows Server 2012

  • Windows Server 2008

  • Windows 11

  • Windows 10

Linux(64 位)

  • Alibaba Cloud Linux

  • AlmaLinux

  • Anolis OS

  • CentOS 6、7、8

  • CentOS Stream

  • Debian 8 及以上版本

  • Gentoo

  • OpenSUSE

  • RHEL 6、7、8、9

  • Rocky Linux

  • SUSE Linux Enterprise Server

  • Ubuntu 14.04 及以上版本

  • 中标麒麟 V7、银河麒麟 V10

  • TencentOS

  • Oracle Linux 7、8、9

  • openEuler 20.03、22.03

  • EulerOS

  • Amazon Linux 2、2023

支持的能力

攻击检测(Java 应用)

下面介绍应用防护可检测并拦截的攻击类型及相关防护建议。

攻击类型

说明

防护建议

JNI 注入

JNI 注入是一种通用的 RASP(Runtime Application Self-Protection)绕过手段。当攻击者拿到代码执行权限后,可以通过 Java Native 函数去调用外部的恶意动态链接库,从而绕过 Java 层的安全防护,并隐匿具体的恶意行为。

服务器可能存在代码执行漏洞,请检查漏洞的位置并限制执行代码的功能。

SQL 注入

SQL 注入手段通过把 SQL 命令插入到页面请求或 Web 表单的查询字符串中,以达到欺骗服务器执行指定 SQL 语句的目的。它可以通过在 Web 表单中输入 SQL 语句,得到存在安全漏洞的网站上的数据。

SQL 注入是由拼接 SQL 语句引起的。请尽可能使用预编译来处理传入的参数,或通过白名单和黑名单来限制参数的拼接。

XXE

指 XML 外部实体注入漏洞(XML External Entity Injection)。当 XML 文件在引用外部实体时,通过构造恶意内容,可以导致任意文件读取,命令执行和内网攻击等不良后果。

请检查应用程序在解析 XML 时是否需要加载外部实体。如果不需要,请在 XML 解析配置中禁用外部实体。

恶意 DNS 查询

恶意 DNS 查询存在多种利用方式。攻击者极有可能通过 DNS 协议来突破内网的网络限制,从而将敏感信息带出内网,也可能通过 DNS 协议去探测内网系统是否存在 SSRF、JNDI 注入等漏洞。

恶意 DNS 查询是由服务器向用户控制的参数发送请求所引起的。请检查参数并通过白名单进行限制。

恶意反射调用

RASP 自保护模块,禁止攻击者通过反射的方式去修改运行时 RASP 的相关数据。

服务器可能存在代码执行漏洞。请检查漏洞的位置并限制执行代码的功能。

恶意外连

SSRF(Server-side request forgery)服务器端请求伪造漏洞指的是攻击者通过构造由服务端发起的请求,对网站内部系统进行攻击。

修复 SSRF 漏洞需要限制服务器请求的目标地址范围,通过白名单机制只允许访问安全的内部资源,并禁用不必要的外部网络访问。

恶意文件读写

Java 提供 RandomAccessFile,用于文件读写操作。当使用该 Class 进行文件读写的时候,如果未对文件路径、文件内容进行限制,攻击者可能读取到系统敏感文件,也可能上传木马文件。

请检查文件读取和上传是否正常。如果出现异常,请检查函数代码,并通过黑名单进行限制。

恶意文件上传

对于网站提供的文件上传功能,如果未对上传文件的类型进行限制,攻击者可能通过上传木马文件来获取服务器的更大权限,从而造成严重危害。

请限制上传文件的类型,禁止上传具有执行权限的文件,如 JSP。

命令执行

命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令。

通常远程命令执行是由 Web Shell 或服务器的危险代码引起的。请检查命令执行的位置。如果是 Web Shell,请及时删除。如果是服务器的正常功能,则可以通过白名单限制执行的命令。

目录遍历

网站自身的配置缺陷可能会使得网站目录被任意浏览,导致隐私信息泄露。攻击者可以利用该信息对网站进行攻击。

请检查目录遍历操作是否正常。如果异常,请检查函数的代码,并通过黑名单对相关命令(如"./"和"../")进行限制。

内存马注入

内存马是一种新兴的木马技术,攻击者通过一些特殊的技术手段将木马注入到内存中,可以有效绕过 WAF 和主机防御的检测。

服务器可能存在代码执行漏洞。请检查漏洞的位置并限制执行代码的功能。

任意文件读取

对于网站提供的文件下载和读取功能,如果是直接通过绝对路径或目录穿越符对文件进行读取和下载,没有相关文件路径的限制,那么攻击者就可以利用这种方式获取敏感信息,并对服务器进行攻击。

请检查文件读取操作是否正常。如果异常,请检查函数的代码,并使用黑名单对传入参数(如"./"和"../")进行限制。

线程注入

线程注入是一种通用的 RASP 绕过手段。当攻击者获得代码执行权限后,可以通过新建线程的方式使 RASP 丢失运行环境的上下文,从而影响 RASP 的防御能力。

服务器可能存在代码执行漏洞。请检查漏洞的位置并限制执行代码的功能。

恶意 Attach

Attach API 是 Java 提供的动态修改字节码技术,该功能可以实现动态修改运行时应用的字节码。很多攻击者通过该手法进行 Agent 型内存马的注入,具有较高的欺骗性。

服务器可能存在代码执行漏洞。请检查漏洞的位置并限制执行代码的功能。

JNDI 注入

当应用进行 JNDI 查询的时候,若查询的 URL 可以由攻击者控制,则攻击者可以使用服务器去查询恶意的链接,使得服务器加载一些恶意 Class 类,实现任意代码执行。

  • 若该漏洞源于第三方组件,请及时进行组件版本升级。

  • 若为自写 JNDI 查询代码,请对查询的 URL 进行限制,禁止一些危险协议的查询。

危险协议使用

若服务端进行访问的 URL 用户端可控,而应用本身又未对该 URL 的协议进行限制,那么攻击者可能通过 file、netdoc 等危险协议对服务器上的敏感文件进行读取。

请对 URL 可以访问的协议进行限制。

反序列化攻击

Java 反序列是指把字符序列恢复为 Java 对象的过程,在对象生成过程中,若该对象包含一些危险度较高的代码,则攻击者可能通过控制生成对象的成员变量在对象进行反序列化的时候实现一些恶意攻击。

  • 及时升级存在漏洞的组件版本。

  • 若官方还未提供漏洞修复的组件版本,请暂时关闭该功能。

任意文件删除

对于网站提供的文件删除功能,文件删除的接口如果没有对文件路径进行限制,攻击者就可以通过绝对路径或目录穿越符对任意文件进行删除操作,从而对服务器进行攻击。

请检查文件删除操作是否正常。如果异常,请检查函数的代码,并使用黑名单对传入参数(如"./"和"../")进行限制。

表达式注入

表达式组件提供了十分丰富的功能,支持在运行时查询和处理数据等,但很多表达式组件也提供了函数调用等权限较高的功能,如果未对这些功能做限制,而攻击者又能够控制表达式执行的内容,那么攻击者将很有可能通过表达式执行任意代码。

请对进入表达式的内容进行严格限制,禁止大部分 Java 函数的调用。若是第三方组件漏洞导致,请及时升级组件版本。

引擎注入

Java 提供了较多的第三方引擎组件(如 Rhino、Nashorn 等 JS 引擎,Velocity、FreeMarker 等模板引擎),这些引擎通常提供了函数调用等权限较高的功能,如果对这些功能未作限制,而攻击者又能够控制引擎执行的内容,那么攻击者将很有可能通过引擎执行任意代码。

请对进入引擎文件的内容进行严格限制,禁止大部分 Java 函数的调用。若是第三方组件漏洞导致,请及时升级组件版本。

恶意 Beans 绑定

Java 存在一些框架支持对应用运行时 Beans 的参数绑定,如果未对绑定 Beans 的类型进行限制,攻击者就可以通过对一些敏感 Beans 值的修改,破坏应用的运行,甚至造成执行任意代码。

请对可以绑定的 Beans 的类型进行限制,禁止对类似于 Class、Classloader 类型的 Beans 值进行修改。若是第三方组件漏洞导致,请及时升级组件版本。

恶意类加载

现阶段,很多 0day、WebShell 的利用均依赖于恶意类的加载,一旦恶意类加载成功,攻击者便可以通过恶意类的初始化来取得代码执行权限,从而进行一系列的恶意操作。

  • 若恶意类的加载是通过 WebShell 控制,请及时删除 WebShell。

  • 如果恶意类的加载是框架导致,请及时升级框架版本。

JSTL 任意文件包含

JSP 标准标签库(JSTL)是一个 JSP 标签集合,它封装了 JSP 应用的通用核心功能。当用户可控参数被直接拼接到 JSTL 标签中而未对该参数进行任何限制的情况下,攻击者可以构造特殊的攻击脚本造成任意文件读取、SSRF 攻击。

尽可能不要将用户可控参数直接拼接到 JSTL 标签上,如果必须这样做,请对该参数的内容进行严格的白名单控制。

攻击检测(PHP 应用)

攻击类型

说明

防护建议

恶意文件包含

PHP 中的文件包含漏洞是一种常见的安全漏洞,它允许攻击者通过操纵输入来包含和执行任意文件。这种漏洞通常发生在使用include()require()include_once()require_once()函数时,这些函数用于在脚本中包含其他文件。

建议验证和限制用户输入的文件路径,仅允许包含应用程序目录中的预定义文件,以防止攻击者插入恶意路径。

恶意外连

SSRF(Server-side request forgery)服务器端请求伪造漏洞指的是攻击者通过构造由服务端发起的请求,对网站内部系统进行攻击。

修复 SSRF 漏洞需要限制服务器请求的目标地址范围,通过白名单机制只允许访问安全的内部资源,并禁用不必要的外部网络访问。

反序列化

PHP 中的反序列化漏洞是一种严重的安全问题,它允许攻击者通过操纵序列化数据来执行任意函数,这种漏洞通常发生在使用unserialize()函数时。

避免直接反序列化不可信数据,使用json_decode()或其他安全的替代方法,或者在必要时严格验证和过滤反序列化的数据来源。

回调函数执行

回调函数是指 PHP 中的array_map()array_filter()等函数,当它的参数外部可控,潜在的攻击者就拥有了执行任意函数,乃至控制整个系统的能力。

为防止 PHP 中的回调函数被滥用,确保传递给array_map()array_filter()等函数的回调函数名不受用户输入控制,并且所有允许使用的回调函数都应当通过白名单机制进行验证。

恶意文件读写

当调用文件读写函数的时候,如果未对文件路径、文件内容进行限制,攻击者可能读取到系统敏感文件,也可能上传木马文件。

为防止文件读写相关的安全漏洞,严格验证和限制文件路径,只允许访问预定义的目录,并对文件内容进行安全性检查以防止恶意代码上传。

任意代码执行

任意代码执行漏洞是一种严重的安全漏洞,攻击者可以通过这一漏洞在服务器上执行任意的代码片段,从而获取服务器的控制权限或读取、修改敏感数据。这种漏洞通常源于程序未对用户输入进行充分验证,导致攻击者能够注入恶意代码。如果攻击者成功利用此漏洞,可能导致数据泄露、网站被篡改或植入恶意软件等。

建议使用严格的输入验证和输出编码,避免使用eval()include()等函数直接处理用户输入,并保持所有库和框架的安全更新。

任意文件读取

如果没有对文件读取接口进行过滤和限制,攻击者就可以利用绝对路径或目录穿越符对文件进行读取和下载,从而获取敏感信息,对服务器进行攻击。

对文件读取接口实施严格的输入验证和路径限制,确保仅允许访问经过白名单验证的文件,并使用黑名单对传入参数(如"./"和"../")进行限制。

任意文件删除

文件删除的接口如果没有相关文件路径的限制,攻击者就可以通过绝对路径或目录穿越符对文件进行任意删除,对服务器进行攻击。

对文件删除接口实施严格的输入验证和路径限制,确保仅允许删除经过验证的文件,并使用黑名单对传入参数(如"./"和"../")进行限制。

命令执行

命令执行漏洞可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

对所有用户输入进行严格的验证和过滤,避免直接使用未经处理的输入构建操作系统命令,并尽可能使用安全的 API 替代系统命令执行。

目录遍历

网站自身的配置缺陷可能会使得网站目录被任意浏览,导致隐私信息泄露。攻击者可以利用该信息对网站进行攻击。

通过配置适当的服务器权限设置和使用.htaccess等文件限制目录访问,确保敏感目录不可被未经授权的用户浏览。

恶意文件上传

文件上传功能如果未对上传文件的类型进行限制,攻击者可能通过上传木马文件来获取服务器的更大权限,从而造成严重危害。

对上传文件的类型进行严格限制和验证,只允许安全的文件类型,禁止上传具有执行权限的文件后缀,如 php 等,并在服务器端重新检查文件内容以确保其安全。

攻击检测(Node.js 应用)

下表介绍应用防护对 Node.js 应用可检测并拦截的攻击类型及相关防护建议。

攻击类型

说明

防护建议

命令执行

命令执行漏洞可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

避免使用execspawn等函数执行用户可控输入,如需使用请通过白名单限制可执行的命令。

恶意文件读写

当使用文件读写函数操作时,如果未对文件路径、文件内容进行限制,攻击者可能读取到系统敏感文件,也可能上传木马文件。

严格验证和限制文件路径,只允许访问预定义的目录,并对文件内容进行安全性检查。

任意文件读取

如果没有对文件读取接口进行过滤和限制,攻击者就可以利用绝对路径或目录穿越符对文件进行读取和下载。从而获取敏感信息,对服务器进行攻击。

对文件读取接口实施严格的输入验证和路径限制,确保仅允许访问经过白名单验证的文件,并使用黑名单对传入参数(如"./"和"../")进行限制。

任意文件写入

如果应用程序没有正确验证和限制写入文件的类型、大小、内容等,攻击者可以利用这一漏洞将恶意文件写入目标系统的指定位置,植入恶意脚本、木马病毒等,可能导致服务器被完全控制,对服务器或其他用户造成危害。

对所有文件写入路径做规范化和边界校验,使用 path.resolve / realpath 后确认目标只能落在业务允许目录内;不要把用户输入直接作为完整路径;优先使用服务端生成的文件名和固定目录;禁止写入系统目录、用户启动脚本、SSH、cron、systemd、包管理配置和应用密钥文件;容器和生产环境尽量使用只读根文件系统、最小文件权限和独立临时目录;上传、导出、缓存等功能应按业务类型设置扩展名、大小和目录白名单,并记录审计日志。

任意文件删除

文件删除的接口如果没有相关文件路径的限制,攻击者就可以通过绝对路径或目录穿越符对文件进行任意删除。

对文件删除接口实施严格的输入验证和路径限制,确保仅允许删除经过验证的文件,并使用黑名单对传入参数(如"./"和"../")进行限制。

恶意文件链接

如果应用程序在创建文件链接时未对目标路径和链接对象进行严格校验,攻击者可能利用软链接或硬链接将受保护文件映射到可访问位置,从而绕过访问控制,读取、修改或破坏系统敏感文件。

不允许外部输入直接控制 link target 或 link path;对链接源和链接目标都做规范化、真实路径校验和业务目录白名单校验;对上传目录、临时目录和解压目录使用 lstat 识别符号链接,敏感操作尽量拒绝跟随 symlink;创建、清理、打包文件时先确认真实路径仍在允许目录内;高风险目录使用独立低权限用户运行,避免应用进程对系统配置、凭据目录和宿主挂载目录拥有读写权限。

恶意外连

SSRF(Server-side request forgery)服务器端请求伪造漏洞指的是攻击者通过构造由服务端发起的请求,对网站内部系统进行攻击。

修复 SSRF 漏洞需要限制服务器请求的目标地址范围,通过白名单机制只允许访问安全的内部资源,并禁用不必要的外部网络访问。

恶意进程创建

Node.js中的fork()可用于创建新的Node进程执行JS文件。如果应用程序未对调用场景、执行逻辑或输入参数进行严格限制,攻击者可能利用该能力创建恶意子进程,执行未授权操作,甚至结合脚本加载、命令执行等行为进一步控制服务器。

不要用用户输入直接决定 fork() 的模块路径和启动参数;可被 fork 的脚本应使用固定枚举或服务端白名单;启动前用绝对路径解析并确认脚本位于受信任应用目录内;参数只传业务字段,不传 shell 片段、文件路径、解释器参数或环境变量覆盖;子进程使用最小权限、独立工作目录和受限环境变量;对需要执行用户任务的场景,优先使用受限 worker、队列或沙箱,而不是动态加载任意本地脚本。

恶意进程绑定

Node.js中的process.binding()可用于访问内部底层模块。如果应用程序未对相关调用行为进行限制,攻击者可能借助该能力访问底层接口、绕过上层安全控制,执行非预期操作,从而导致敏感信息泄露、权限滥用或系统被进一步利用。

业务代码、插件、模板、脚本执行环境中不要暴露 process.bindingprocess._linkedBinding;禁止把外部参数传入这些接口;对支持插件、规则、模板、Agent Skill 的应用,应在沙箱中移除或冻结 process 高危能力;生产环境开启 RASP 的 process binding hook 和告警;依赖包中如出现直接调用原生 binding 的行为,需要评估必要性并限制调用来源;对高危运行环境使用容器隔离、最小权限用户和系统调用/网络访问限制。

恶意 MCP 调用

在 AI Agent 场景中,MCP(Model Context Protocol)可用于访问外部资源、服务或能力。如果应用程序未对 MCP 服务的调用范围、请求参数和返回内容进行严格校验,攻击者可能诱导 Agent 发起恶意 MCP 调用,访问敏感数据、执行高风险操作或与非可信服务交互,从而对系统安全造成威胁。

MCP Server 应作为外部不可信组件处理,只允许连接来源可信、版本固定、配置受控的 MCP Server;对 MCP tool name、server name、参数、URL、工作目录和启动命令建立白名单;对会修改文件、执行命令、访问网络、读取凭据的工具启用人工确认或更高风险等级策略;不要把生产密钥直接暴露给 MCP Server;MCP Server 尽量运行在隔离容器或低权限账户中;对 OAuth metadata、远端 URL 和工具返回内容做格式校验、URL 安全校验和审计记录;工具调用产生的底层 child_processfshttpnet 行为仍应由 RASP 拦截。

恶意 Tool 调用

在 AI Agent 场景中,Tool 可用于执行外部操作或调用第三方能力。如果应用程序未对 Tool 的可用范围、调用参数和执行结果进行有效限制,攻击者可能通过提示注入或构造恶意输入,诱导 Agent 调用高风险 Tool,执行未授权操作、访问敏感资源,甚至影响主机或业务系统安全。

Tool 权限按最小权限设计,默认拒绝高危工具,按业务场景显式授权;把工具分成只读、写入、网络、命令执行等风险等级,写入、命令执行、外联类工具应要求确认或策略审批;对每个工具参数做强校验和白名单约束,例如命令模板、可访问目录、允许域名、允许 HTTP 方法;Tool 结果必须视为不可信输入,进入 LLM 上下文前做提示词注入和敏感信息检测;保留 tool name、参数、调用链、runId/toolCallId 和结果摘要审计;检测到读敏感文件后接外联、命令执行后写启动项等危险序列时应阻断或升级告警。

应用漏洞防御

应用防护功能可以有效防御应用漏洞、0day 漏洞和内存马等攻击行为,防御漏洞的原理如下图所示。在应用漏洞应急响应过程中,借助 RASP 的攻击防护能力,可以快速阻断攻击,为修复应用漏洞争取更多时间。应用防护功能还可以协助快速定位风险来源与影响范围。关于应用漏洞的更多信息,请参见查看和处理漏洞

image

如果暂时无法修复应用漏洞,可先将应用进程接入 RASP 进行防护。以下为检测出应用漏洞的应用添加 RASP 防护的操作步骤。

  1. 登录云安全中心控制台

  2. 在左侧导航栏,选择风险治理 > 漏洞管理。在控制台左上角,选择需防护资产所在的区域:中国内地非中国内地

  3. 应用漏洞页签,存在RASP支持实时防护标签的漏洞为应用防护支持防护的漏洞,单击对应漏洞操作列的立即防护

    image.png

  4. 应用防护接入面板,应用分组名称的下拉列表中选择需资产需接入的应用分组,并选择对应资产,然后单击确定

    如果不存在所需的应用分组,可以在下拉列表中单击新建应用分组,输入应用分组名称,并单击确定,实现快速创建应用分组。此处创建的应用分组的防护模式防护防护策略组分组名称

    image.png

    检测出漏洞的应用接入应用防护后,只有在应用漏洞完成了一次漏洞扫描时,在漏洞详情页的待处理漏洞列表中该服务器的操作列才会显示为已防护

应用行为分析

应用行为分析功能通过对接入的应用程序进行实时监测、收集和分析应用程序的行为数据,并生成报告和可视化展示,可以帮助了解应用的攻防详情,进行系统安全加固。更多信息,请参见应用行为分析

内存马防御(仅支持 Java 应用)

应用防护的 RASP 技术通过分析内存数据可以实时检测内存马,并支持对内存马注入和内存马执行过程进行拦截。更多信息,请参见内存马防御

弱点检测(仅支持 Java 应用)

下面介绍应用防护可检测的应用弱点类型及相关修复建议。

弱点类型

风险等级

说明

修复建议

不安全的 Fastjson 配置

高危

应用的 Fastjson 开启了反序列化功能,该功能可能被攻击者利用,造成远程命令执行。如非必要,请关闭该功能。

请将 Fastjson 的 safemode 设置为 true,或将 autotype 设置为 false。

不安全的 log4j 配置

高危

log4j 组件开启了 lookup 功能,攻击者可能通过该功能进行 JNDI 注入,从而造成远程代码执行漏洞。

请升级 log4j 到最新版本,或删除 Jar 包中的 org/apache/logging/log4j/core/lookup/JndiLookup.class 文件。更多信息,请参见Apache Log4j2 远程代码执行漏洞(CVE-2021-44228)

不安全的启动参数

高危

当攻击者可以访问到 JDWP 调试端口的时候,可以通过该功能执行任意代码,造成远程代码执行。

如无特殊场景,请及时关闭 JDWP 端口或者避免将 JDWP 端口暴露在公网,谨防长期运行的应用开启了 JDWP 端口。

Shiro 弱密钥

高危

Shiro 应用使用了较弱的加密密钥,攻击者可能通过破解密钥,进一步进行反序列化攻击,从而造成远程代码执行。

请及时修改应用中的 Shiro 加密密钥。

不安全的 JMX 配置

中危

开启了 JMX 的远程链接,且在认证方面存在风险,攻击者可能会远程连接应用的 JMX 服务并造成命令执行风险。

请关闭 JMX 服务的远程连接,或者请使用较为安全的认证口令。

不安全的 Rhino 配置

中危

Rhino 框架中包含了危险的 properties,攻击者可能通过这些 properties 进行远程代码执行攻击。

先升级 Rhino 到最新版本,然后使用 SafeStandardObjects 定义 Rhino 的上下文,防止 JavaScript 引擎调用 Java 代码。

下面是使用 SafeStandardObjects 定义 Rhino 上下文的示例:

 package com.aliyun.sample;

  import org.mozilla.javascript.Context;
  import org.mozilla.javascript.Scriptable;

  public class RhinoSecurityExample {
      public static void main(String[] args) {
          Context ctx = Context.enter();
          // Scriptable scope = ctx.initStandardObjects(); // 不安全的写法
          Scriptable scope = ctx.initSafeStandardObjects(); // 安全写法
          ctx.setOptimizationLevel(-1);
          String str = "var test={};";
          str += "test.call=function(){return 'Successful!';};";
          str += "test.call()";  // 修改:只返回JavaScript结果,不调用Java
          try {
              //传入并执行javascript代码
              Object result = ctx.evaluateString(scope, str, "", 1, null);
              System.out.println("JavaScript执行结果: " + result);
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              Context.exit();
          }
      }
  }

不安全的 Spring 配置

中危

Spring Actuator 模块开启了部分端点:heapDump、env、restart、refresh、trace、jolokia、h2-console 等,可能造成敏感信息泄露或者远程代码执行漏洞。

如无特殊场景,请关闭对应功能。

脆弱的登录凭证

中危

应用在登录口令安全性较弱,攻击者可能通过爆破弱口令登录系统,从而获取敏感信息甚至服务器权限。

请及时修改该应用的密码为复杂密码。

不安全的 JNDI 配置

低危

应用存在不安全的 useCodebaseOnly/rmi-trustURLCodebase/ldap-trustURLCodebase 参数设置,可能存在 JNDI 注入风险。

请将 JDK 升级到最新版本,如果无法升级,在应用启动时候添加启动参数:

-Djava.rmi.server.useCodebaseOnly=true -Dcom.sun.jndi.rmi.object.trustURLCodebase=false -Dcom.sun.jndi.ldap.object.trustURLCodebase=false

不安全的 XML 实体配置

低危

XML 解析外部实体功能已开启,这可能导致应用遭受 XXE 攻击。

如果无特殊场景,请勿使用外部实体。

数据库弱口令

低危

应用连接数据库时使用弱口令,攻击者可能通过该弱口令连接数据库造成敏感信息泄露或远程命令执行。

请及时更改应用连接数据库的密码为复杂密码。