应用安全功能基于RASP(Runtime Application Self-Protection)技术,为运行时的应用提供安全防御。您无需修改应用代码,只需在实例中安装应用安全探针,即可为应用提供强大的安全防护能力,并抵御绝大部分未知漏洞所使用的攻击手法。

功能原理

云安全中心的应用安全是基于阿里云安全的RASP技术所开发的功能。RASP安全技术可在应用运行时检测攻击并进行自我保护。它运行在应用程序内部,通过钩子(Hook)关键函数,实时监测应用在运行时与其他系统的交互过程。当应用出现可疑行为时,RASP会根据当前上下文环境识别并阻断攻击。应用安全目前仅支持Java应用接入。

原理

适用版本

应用安全功能当前处于公测阶段,仅高级版、企业版、旗舰版支持该功能,其他版本用户需要升级到高级版、企业版或旗舰版才可使用该功能。购买和升级云安全中心服务的具体操作,请参见购买云安全中心升级与降配

前提条件

  • 在配置应用安全之前,请确保服务器上的云安全中心Agent为在线状态。确认服务器Agent在线状态的具体操作,请参见修改服务器的保护状态。Agent离线时排查问题的具体操作,请参见客户端问题排查
  • 如果是以RAM用户身份使用应用安全功能,请确保该用户拥有AliyunYundunWAFFullAccessAliyunYundunSASFullAccess这两个权限策略。相关授权操作,请参见为RAM用户授权

配置和接入应用安全

步骤一:新建应用

  1. 登录云安全中心控制台在左侧导航栏选择风险管理 > 应用安全
  2. 首次使用应用安全功能时,单击立即开通
    如果云安全中心版本为免费版防病毒版,单击立即开通后,您需要升级到云安全中心高级版企业版旗舰版。完成升级后,返回应用安全页面,再次单击立即开通即可进入应用安全页面。
  3. 应用安全页面,单击配置页签。
  4. 单击新建应用,在对话框中填写要新建的应用的名称和备注信息,然后单击确定

    新建应用后,应用的防护策略为默认策略,默认的防护模式为监控。您可单击应用操作列的防护策略查看默认策略。如果您不想使用默认策略,您可以对防护策略进行修改。

    1. 配置页签下的应用列表中,单击目标应用操作列的防护策略
    2. 防护策略面板,编辑应用的防护策略,然后单击确定
      配置项 说明
      防护模式 选择应用的防护模式,可选项:
      • 监控:只监控攻击行为,不影响应用运行。检测到攻击行为时,会产生处理方式监控的告警。
      • 防护:监控并阻断攻击行为,同时也会对应用的一些高危操作进行监控。阻断攻击行为的同时,会产生处理方式阻断的告警。
      • 禁用:关闭当前应用的应用安全功能,不检测也不阻断任何攻击行为。
      检测超时时间 攻击检测的最大时间,输入范围为1~60,000毫秒,默认设置为300毫秒。若攻击检测超过设置的时间,即使未完成检测逻辑也会继续执行原始业务逻辑。如无特殊原因,建议使用默认值。
      源IP判断方式

      选择默认,系统会根据常规的源IP header值获取源IP。常规的源IP包括:X-Real-IP、True-Client-IP、X-Forwarded-For。

      选择取自定义header的值,系统会优先根据自定义的header值获取源IP。如果自定义header值未命中,则默认规则生效。
      检测类型 检测攻击的分类,建议使用默认配置(即全选)。具体检测类型说明,请参见检测攻击类型说明

步骤二:接入管理

  1. 配置页签下的应用列表中,单击目标应用操作列的接入管理
  2. 按照接入指南容器接入指南页签下的接入步骤,完成RASP Agent的安装及应用或容器的重启。
    您也可以在推送记录页签,单击推送Agent,为应用所在的服务器推送并安装RASP Agent。
    说明 RASP Agent兼容性说明:
    • JDK:JDK 6及以上版本。
    • 中间件服务器:对中间件类型和版本无特定需求,包括Tomcat、SpringBoot、Jboos、Wildfly、Jetty、Resin、Weblogic、Websphere、Liberty、Netty、GlassFish、国产中间件等。
    • 操作系统:Linux、Windows、macOS。
    重启应用或容器时,您需要根据您的应用或容器的运行环境进行相关部署。
    说明 下表以手动安装部署应用的JVM参数为例介绍重启应用或容器时的运行环境部署。如果遇到需要配置的中间件不在列表的情况,您可以通过智能在线联系技术支持人员
    运行环境 参数配置说明
    Tomcat(Linux)

    在{TOMCAT_HOME}/bin/setenv.sh文件中添加以下配置。

    JAVA_OPTS="$JAVA_OPTS -javaagent:/{user.workspace}/rasp/rasp.jar"

    如果您的Tomcat版本没有setenv.sh配置文件,请打开{TOMCAT_HOME}/bin/catalina.sh文件,并在JAVA_OPTS后添加上述配置。

    Tomcat(Windows)
    在{TOMCAT_HOME}/bin/catalina.bat文件中添加以下配置。
    set "JAVA_OPTS=%JAVA_OPTS% -javaagent:/{user.workspace}/rasp/rasp.jar" 
    如果以上配置未生效,可以尝试在{TOMCAT_HOME}/bin/catalina.bat文件中添加以下配置。
    set "CATALINA_OPTS=-javaagent:/{user.workspace}/rasp/rasp.jar"
    Jetty
    在{JETTY_HOME}/start.ini配置文件中添加以下配置。
    --exec -javaagent:/{user.workspace}/rasp/rasp.jar
    Spring Boot 启动Spring Boot进程时,在启动命令后加上-javaagent参数。
    java -javaagent:/{user.workspace}/rasp/rasp.jar

    如果您的应用或者容器不需要云安全中心的应用安全防护,您可以单击卸载指南页签,按照页面提供的操作步骤卸载RASP Agent。

查看告警事件

  1. 登录云安全中心控制台在左侧导航栏选择风险管理 > 应用安全
  2. 应用安全页面的告警页签下,查看告警事件的相关信息。

    告警页签下以环图的形式展示接入应用安全后应用产生的行为以及应用受到攻击的统计情况。页面下方列表则展示了每一攻击行为的详细数据,包括攻击行为的类型、URL、行为数据以及该行为的处理方式等。

    • 查看应用行为统计

      应用行为统计区域展示经过应用安全检测的应用行为以及其对应的分类,包括正常行为和攻击行为。

    • 查看攻击统计

      攻击统计区域展示应用安全检测到的具有实际威胁的攻击行为以及其对应的攻击类型。

    • 查看攻击详情

      攻击详细列表展示每一个攻击行为的具体情况。您可以在列表中查看攻击行为产生的时间、具体类型、URL、具体数据和该行为的处理方式。您也可以单击目标告警操作列的查看,在详情面板查看目标攻击行为的详情,包括漏洞的详情、请求详情和服务器的详情。

检测攻击类型说明

下表介绍应用安全可检测的攻击类型及相关防护建议。

攻击类型 说明 防护建议
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应用接入。

应用安全对应用运行是否存在影响?

应用安全自身对性能、兼容性和稳定性有良好的控制,对应用运行的影响几乎可以忽略不计。实际测试中,CPU的额外开销小于1%,内存开销小于30 MB,应用延迟(RT)小于1ms。此外,应用安全还提供监控、防护和禁用三种防护模式,还提供软熔断逃生机制等功能,最大限度降低对应用运行的干扰。

接入应用安全后应如何进行应用防护?

理论上来说,应用安全检测到的攻击是能够实际产生安全威胁的行为,相比基于流量特征的传统检测技术而言,误报率较低,所以对应用安全功能所检测到的攻击,必须引起重视。在接入应用安全后,应用安全对攻击的默认防护模式为监控。在应用稳定运行后,您可切换为防护模式。

为什么攻击统计中没有攻击数据?

没有攻击数据可能存在以下两种原因:
  • 目标应用没有完成接入。单击目标应用操作列的接入管理,按照指南安装和配置完后,没有重启目标应用对应的实例(或只重启了部分实例)。
  • 没有产生真实有效的攻击行为。与传统防火墙不同,应用安全仅记录真实有效的攻击。传统防火墙会在检测到报文中存在恶意攻击特征时进行上报。但存在恶意特征不代表攻击有效,例如利用PHP漏洞的攻击请求在Java环境中则没有意义。若产生真实有效的攻击,一般表明攻击者已成功突破外层防御,可以打入应用内部环境并执行危险动作。您的应用可能不会存在大量真实有效的攻击,但发生时请务必引起重视,及时拦截或者修复相关安全漏洞。