应用配置

通过在应用中集成RASP(Runtime Application Self-Protection)技术,应用防护能够实时监测并抵御恶意行为和安全威胁,确保应用持续稳定运行。本文介绍首次将应用接入应用防护的具体操作步骤。

RASP探针说明

支持防护的应用

应用防护功能通过在应用中安装RASP探针实现攻击检测和防护。应用防护仅支持防护满足以下条件的Java进程,即只支持在满足以下条件的业务进程中安装RASP探针。

  • JDK:JDK 6及以上版本,JDK 1314暂不支持。

  • 中间件:对中间件类型和版本无特定要求,包括Tomcat、SpringBoot、Jboss、WildFly、Jetty、Resin、Weblogic、Websphere、Liberty、Netty、GlassFish、国产中间件等。

  • 操作系统:Linux(64位)、Windows(64位)。

资源使用量阈值说明

在主机、容器或JVM资源使用量超过一定阈值时,为了保证应用防护功能的正常运行,自动接入方式会暂停接入RASP探针,直到降到阈值以下才会继续安装RASP探针;手动接入方式无此限制。停止安装探针的具体阈值如下:

  • 主机或容器CPU占用超过98%,或剩余内存不足200 MB。

  • JVM堆内存剩余不足150 MB,元数据空间不足5 MB。

前提条件

  • 需接入应用所在服务器的云安全中心客户端为在线状态。

    您可以在资产中心 > 主机资产页面的服务器页签通过服务器客户端列图标的状态判断客户端是否在线,image..png图标表示在线。如果Agent离线,处理方法请参见客户端离线排查

  • 如果是以RAM用户身份使用应用防护功能,请确保RAM用户拥有AliyunYundunWAFFullAccessAliyunYundunSASFullAccess权限策略。授权的具体操作,请参见RAM用户授权

步骤一:查看哪些应用可以接入

应用防护仅支持防护运行状态的Java应用。在购买应用防护授权数前,您可以参考下述步骤查看支持接入的应用数量和详细信息。

  1. 登录Web应用防火墙3.0控制台。在顶部菜单栏,选择WAF实例的资源组和地域(中国内地非中国内地)。

  2. 在左侧导航栏,选择防护配置 > RASP

  3. 防护统计区域,单击立即扫描

    单击立即扫描后,云安全中心客户端将会对您资产中进程信息进行采集。

    说明

    免费版、仅采购增值服务版、防病毒版和高级版每天仅支持执行一次立即扫描操作。

  4. 查看您资产中存在的应用进程数量,您可以单击数字查看应用进程列表。应用进程列表提供了支持接入应用防护的应用进程所在服务器信息、进程名、PID(进程标识符)和启动参数。

    重要

    防护一个应用需消耗一个应用防护授权数。进程数量是动态变化的,此处采集的数据是执行扫描的时刻状态为启动中的进程。您可以根据这里的数量,预估需要购买的应用防护授权数。

    image

步骤二:购买应用防护授权数

您需要购买足够的应用防护授权数,才能将应用接入到应用防护中。在购买云安全中心时,选择需要的版本(任一版本)和应用防护授权数即可。具体操作,请参见购买云安全中心

说明

云安全中心免费试用支持免费获取10个应用防护授权数。如果您未购买过云安全中心,可申请免费试用。具体限制条件和操作,请参见开通7天免费试用

步骤三:接入应用防护

应用防护按应用分组执行防护策略,对应用分组内的Web业务进程提供安全防护。因此,您需要先创建应用分组,接入应用进程后,为分组内的业务进程配置统一的防护策略。

一、创建应用分组

  1. 登录Web应用防火墙3.0控制台。在顶部菜单栏,选择WAF实例的资源组和地域(中国内地非中国内地)。

  2. 在左侧导航栏,选择防护配置 > RASP

  3. 应用配置页签,单击新建应用分组

  4. 新建应用分组向导页面,输入要新建的应用分组名称和备注信息,然后单击下一步

    建议您根据需要防护的Web业务进程设置应用分组名称,应用分组名称不可重复。完成该操作后,云安全中心会创建一个应用分组。

二、自动接入或手动接入

接入方式说明

RASP支持自动接入和手动接入方式,您可以根据下表的说明选择合适的方式接入应用防护。

接入方式

说明

应用场景

自动接入主机和容器(推荐)

以服务器为单位进行接入,服务器接入后,在应用程序运行时,应用防护功能会使用JVM Attach能力自动识别并接入服务器中的存在监听端口的Java进程(包括容器环境),将应用防护功能集成到应用程序中。

该方式可以在应用程序运行时动态地加载和卸载应用防护功能,无需重启应用进程,可以保障业务的连续性。

未自动接入过其他应用分组的服务器可以选择自动接入方式。

说明

如果您服务器中的部分应用进程已自动接入指定应用分组,现需要将该主机中的应用进程重新接入另一个应用分组,您可以先为该服务器关闭应用防护,从当前应用分组移除该服务器,再在新的应用分组开启自动接入。

手动接入主机

以应用为单位进行接入,需手动部署并重启应用。

  • 您的业务使用的框架为WebSphere时,需要使用手动接入方式,不支持自动接入。

  • 如果您主机中的部分应用进程已自动接入指定应用分组,需要将该主机中未接入防护的应用进程接入其他应用分组。

  • 如果需要将同一服务器接入多个应用分组时,您需要使用手动接入方式。

  • 您的Java应用无监听端口。

手动接入容器

自动接入

重要
  • 建议首次自动接入时避开业务高峰期。

  • 一台主机仅支持自动接入到一个应用分组中,不支持同时自动接入多个应用分组。自动接入服务器时,仅支持选择未自动接入过其他应用分组且操作系统为64位的主机。

  • 已通过手动接入方式接入的主机,可以开启自动接入。当您卸载了手动接入的RASP探针后,应用防护会为您重新自动接入。

  • 自动接入只会接入有监听端口的Java应用。如果Java应用没有监听端口,则需要您进行手动接入。

  1. 自动/手动接入应用防护向导页面自动接入页签,单击选择资产接入应用防护

  2. 选择资产对话框选择需要接入的资产,并单击确定

    当您选择接入的主机后,应用防护功能会自动识别并接入防护主机上的Java服务进程(包括容器环境),无需重启进程。最多支持同时选择50台服务器。

  3. 根据需要接入的服务器数量,参考下述说明操作。

    • 仅需接入一台服务器时,打开该服务器应用防护列的开关,待RASP探针安装完成后,单击下一步

      自动接入控制台截图

    • 需要接入多台服务器时,选中需要接入的服务器,单击批量防护,然后单击下一步

      批量防护一次最多支持选择100台服务器。

    为单台服务器打开应用防护开关或者选中多台服务器并单击批量防护后,云安全中心会自动识别并主机上的Java进程接入防护(应用防护开关显示安装中),根据您的网络环境不同此过程可能会持续约10分钟。如果您的主机中有多个启动状态的Java进程,云安全中心会同时接入这些进程。

    接入成功后,应用防护列的开关为打开状态,您可以在应用防护接入状态列查看应用实例的接入状态。以下是应用防护接入状态的说明:

    • 未接入:表示该服务器未开启应用防护开关。

    • 接入失败:表示该服务器所有支持防护的应用都接入失败。

    • 部分接入:表示该服务器支持防护的应用部分接入成功,部分接入失败。

    • 全部接入:表示该服务器支持防护的Java应用均已接入应用防护,或者该服务器上无可接入的进程。

      说明

      应用防护接入状态显示为全部接入时,如果服务器上不存在可接入的进程,或者所属业务进程不在支持范围内,此时接入详情列表为空。如果后续该服务器上出现可接入的进程可自动接入应用防护。

    操作列单击详情,可以查看已接入的Java进程状态。

    接入详情

手动接入主机

自动/手动接入应用防护向导页面手动接入页签,按照主机接入指南子页签的接入步骤,安装RASP探针,再重启应用。单击下一步

重启应用前,您需要根据应用运行环境进行相关部署。下表以部署应用的JVM参数为例介绍重启应用时的运行环境部署。如果遇到需要配置的中间件不在列表的情况,在配置参数时,您需要使用主机接入指南页签展示的应用ID替换{appId}。应用ID的位置如下图所示:应用ID位置

运行环境

参数配置说明

Tomcat(Linux)

在<Tomcat安装目录>/bin/setenv.sh文件中添加以下内容。

export CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar"

如果您的<Tomcat安装目录>/bin/目录下没有setenv.sh配置文件,请在<Tomcat安装目录>/bin/目录下创建该文件。

Tomcat(Windows)

在<Tomcat安装目录>\bin\setenv.bat文件中添加以下内容。

set CATALINA_OPTS=%CATALINA_OPTS% "-javaagent:C:\Program Files (x86)\Alibaba\Aegis\rasp\apps\{appId}\rasp.jar" 

如果您的<Tomcat安装目录>\bin\目录下没有setenv.bat配置文件,请在<Tomcat安装目录>\bin\下创建该文件。

Jetty

在{JETTY_HOME}/start.ini配置文件中添加以下配置。

--exec -javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar

Spring Boot

启动Spring Boot进程时,在启动命令后加上-javaagent参数。

java -javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar

例如,您在启动Spring Boot进程时修改前的命令为:

java -jar app.jar

需要安装RASP探针时启动Spring Boot进程执行的命令为:

java -javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar -jar app.jar
重要

-javaagent参数应始终放在-jar参数之前。

JBossWildFly

  • Standalone模式

    打开<Jboss安装目录>/bin/standalone.sh,在# Display our environment下面添加以下内容:

    JAVA_OPTS="${JAVA_OPTS} -javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar"
  • Domain模式

    打开<Jboss安装目录>/domain/configuration/domain.xml文件,找到<server-groups>标签,在需要安装RASP探针的<server-group>标签中找到<jvm>标签并添加以下内容:

    <jvm-options>
       <option value="-javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar"/>
    </jvm-options>

Liberty

在<Liberty安装目录>/${server.config.dir}路径下(默认路径为:/opt/ibm/wlp/usr/servers/defaultServer/jvm.options),创建或修改jvm.options文件 ,在文件中添加以下内容:

-javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar

Resin

  • Resin3

    在<Resin安装目录>/conf/resin.conf路径下,找到 <server-default> 标签下的 <jvm-arg>标签,在下面添加以下内容:

    <jvm-arg>-javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar</jvm-arg>
  • Resin4

    在<Resin安装目录>/conf/cluster-default.xml路径下,找到<server-default>标签下的<jvm-arg-line>标签,在下面添加以下内容:

    <jvm-arg>-javaagent:/usr/local/aegis/rasp/apps/{appId}/rasp.jar</jvm-arg>

您也可以在推送记录页签,单击推送RASP探针,为应用所在的主机或容器推送并安装RASP探针。

手动接入容器

自动/手动接入应用防护向导页面手动接入页签,按照容器接入指南子页签的接入步骤,安装RASP探针,再重启容器。单击下一步

重启容器前,您需要根据容器的运行环境进行相关部署。下表以部署应用的JVM参数为例介绍重启容器时的运行环境部署。如果遇到需要配置的中间件不在列表中的情况,在配置参数时,您需要使用容器接入指南页签展示的Dmanager.key值替换{manager.key}

运行环境

参数配置说明

SpringBoot

在镜像打包时安装RASP探针,您需要在Dockerfile上修改启动参数。启动应用的命令修改如下:

修改前:

CMD ["java","-jar","/app.jar"]

修改后:

CMD ["java","-javaagent:/rasp/rasp.jar","-Dmanager.key={manager.key}","-jar","/app.jar"]

Tomcat

  • 在镜像打包时安装RASP探针,您需要在Dockerfile中添加以下内容。

    ENV JAVA_OPTS="-javaagent:/rasp/rasp.jar -Dmanager.key={manager.key}"
  • 在容器启动时安装RASP探针,您需要在启动时添加以下参数。

    docker --env JAVA_OPTS="-javaagent:/rasp/rasp.jar -Dmanager.key={manager.key}"

例如,您的容器启动命令为docker -itd --name=test -P 镜像名,您需要在启动容器时安装RASP探针,则执行的命令需要修改为docker -itd --env JAVA_OPTS="-javaagent:/rasp/rasp.jar -Dmanager.key={manager.key}" --name=test -P 镜像名

Weblogic

您也可以在推送记录页签,单击推送RASP探针,为应用所在的主机或容器推送并安装RASP探针。

三、设置防护策略

观察告警无误设置“防护”模式向导页面,设置防护策略,单击确定

重要

默认防护模式为监控模式,建议您先使用监控模式2~5天,如果在此期间未出现误告警您可以将防护模式修改为防护。如果出现误告警,您可以通过配置白名单规则,屏蔽产生误拦截的检测类型。具体操作,请参见将告警加入白名单

分类

配置项

说明

防护策略

应用分组名称

展示应用分组的名称,在此处不支持修改。

防护模式

选择应用分组的防护模式,可选项:

  • 监控:只监控攻击行为,不阻断攻击行为。检测到攻击行为时,会产生处理方式为监控的告警。

  • 防护:监控并阻断攻击行为,同时也会对应用实例的一些高危操作进行监控。阻断攻击行为的同时,会产生处理方式为阻断的告警。

  • 禁用:关闭当前应用分组内应用实例的防护功能,不检测也不阻断任何攻击行为。

防护策略组

默认的防护策略组是日常运行组。您可以在下拉列表中选择其他防护策略组。防护策略组的更多信息,请参见步骤五:管理防护策略组

检测类型

展示已选择的防护策略组支持的检测类型。

检测策略

弱点检测

选择是否为当前应用分组开启弱点检测。更多信息,请参见发现应用弱点

内存马检测

选择是否为当前应用分组开启内存马检测。更多信息,请参见内存马防御

常用配置

检测超时时间

攻击检测的最大时间,输入范围为1~60,000毫秒,默认设置为300毫秒。若攻击检测超过设置的时间,即使未完成检测逻辑也会继续执行原始业务逻辑。如无特殊原因,建议使用默认值。

IP判断方式

  • 选择默认,系统会根据常规的源IP header值按照X-Real-IP、True-Client-IP、X-Forwarded-For的先后次序获取源IP,即当未获取到X-Real-IP的值时,会获取True-Client-IP的值作为源IP;如果X-Real-IP、True-Client-IP均未获取到,则获取X-Forwarded-For的值作为源IP。

  • 选择取自定义header的值,系统会优先根据自定义的header值获取源IP,设置多个header值时,按先后顺序依次尝试获取源IP。如果所有自定义header值未命中,则默认规则生效。

    说明

    最多支持设置5个自定义header值。

运行时熔断配置

开启该功能后,当服务器或进程的资源占用率超过CPU或内存任一熔断值时,RASP的实时防护能力、内存马检测和弱点检测能力将自动停止。当服务器或进程资源占用率低于设置的所有熔断值时,RASP的防护能力会自动恢复。

该功能可以保障业务在高峰情况下稳定运行,默认为关闭状态。如果您的应用为对性能敏感的计算型业务,可以开启该功能。配置说明如下:

  • 主机或容器环境CPU占比超过:可设置范围10%~99%,推荐配置95%。

  • JVM堆内存占比超过:可设置范围5%~99%,推荐配置98%。

  • JVM堆剩余内存小于:可设置范围10~99999 MB,推荐配置100 MB。

重要
  • 0.8.8及以上版本的RASP探针支持熔断功能。0.8.8以下版本的探针可通过重启应用进程自动升级到最新版。

  • 处于防护熔断状态的实例仍占用授权数。

步骤四:验证应用接入情况

如果应用进程的PID展示在应用分组的已授权实例列表中,则说明该应用已正常接入应用防护。参考以下步骤可查看已接入的应用列表。

  1. 应用防护页面的应用配置页签,单击目标应用分组已授权实例列下的数字。

  2. 在实例详情面板,查看已接入的应用列表。

    如果目标服务器的应用进程PID在应用列表中,则表示该应用已成功接入应用防护。

    image.png

步骤五:管理防护策略组

为满足不同业务情况下的安全需求,应用防护功能对攻击检测规则的能力进行分级,提供了防护策略组:业务优先组(默认宽松规则组)、正常运营组(默认标准规则组)和防护优先组(默认严格规则组)。

默认防护策略组中的规则的检测模式均相同,例如默认业务优先组(默认宽松规则组)内所有攻击规则的检测模式均为宽松;您可以根据实际需要使用对应规则组,或自定义规则组。

检测模式说明

为了平衡不同业务场景下误报率和攻击防护强度,应用防护功能定义了多种检测模式:宽松、标准和严格。这三种模式的防护能力从低到高逐级递增,误报率也是从低到高。

  • 宽松:只覆盖已知攻击特征,极少误报。

  • 标准(默认):覆盖常见攻击特征,并具有部分泛化推理能力,适用于日常运维场景。

  • 严格:支持识别更多隐蔽的攻击行为,适用于重保场景,但存在一定的误报风险。

image.png

新建防护策略组

  1. 应用防护页面的应用配置页签,单击防护策略组管理

  2. 单击新建防护策略组

  3. 新建防护策略组面板,输入防护策略组名称、备注,并单击检测类型右侧的选择配置检测类型。

    选择检测类型面板,选中需要的检测类型,并设置检测模式,选择完成后,单击确定

    例如,在已有的告警中,您发现SQL注入误报较多,您可以将SQL注入检测项的检测模式修改为宽松

    image.png

  4. 单击确定

相关操作

授权数管理

  • 查看应用防护剩余授权数

    防护一个应用进程实例会消耗一个授权数。在使用应用防护功能时,请确保您拥有充足的剩余授权数。购买应用防护授权数后,您可以在应用防护页面应用配置页签查看剩余授权数。

    image.png

    • 进行自动接入时,无法选择主机资产进行接入。

      说明

      如果在自动接入的过程中授权数消耗完,应用进程可正常接入,但是超出授权数部分的进程实例状态为未授权。

    • 使用手动接入方式可正常接入应用进程,但实例状态为未授权。未授权状态的实例没有受到防护。

  • 扩充应用防护授权数

    如果需要防护的应用实例数量大于剩余授权数,您需要在应用防护页面应用配置页签,单击剩余授权数右侧的升级,前往相应页面购买应用防护授权数。

修改应用分组的防护策略

您可以参考下述步骤修改应用分组的防护策略。

  1. 应用防护页面的应用配置页签,单击目标应用分组操作列的防护策略

  2. 防护策略面板,在防护策略组下拉列表中选择需生效的防护策略组。

  3. 单击确定

关闭应用防护

关闭单个应用的防护

应用防护页面应用配置页签,单击目标应用分组操作列的接入管理,在接入管理面板,根据您的应用接入方式参考以下说明卸载RASP探针:

  • 自动接入(云安全中心客户端在线):在自动接入页签,选中需要卸载实例的服务器,单击批量关闭防护。或关闭应用防护列的开关,卸载该服务器中的RASP探针。

    重要

    如果不再需要防护指定服务器,您可以在确保该服务器的应用防护开关为关闭状态时,删除该服务器。

    自动接入页签,单击目标服务器操作列的删除,或选中多个服务器后单击批量删除,在该应用分组下删除服务器。

  • 自动接入(云安全中心客户端离线):云安全中心客户端离线时,无法通过控制台自动卸载RASP探针,您需要参考以下步骤手动卸载RASP探针。

    1. 在服务器的终端或命令行界面中执行crontab -e

    2. 在定时任务列表中删除应用防护相关任务。应用防护相关任务如下所示。

      * * * * * bash -c /usr/local/aegis/rasp/apps/664dd403cd24364f9e******/attach/runJavaFinder.sh http://update-vpc.aegis.aliyuncs.com/rasp/plugin/v1/error/report aa97bdc587ac7ab37028506359****** 6901ad53-a454-4681-afdb-c894d2******
    3. 保存cron定时任务文件并退出。

      • 使用编辑器vivim,先按Esc键确保你处于正常模式,然后输入:wq并回车来保存并退出。

      • 使用编辑器nano,按Ctrl+O来保存更改,然后按Ctrl+X退出。

    4. 在业务低峰时期重启进程。

  • 手动接入:如果需要为目标应用卸载RASP探针,您需要手动删除在接入指南中添加的JVM参数,然后重启相关应用,即可取消接入应用防护功能。

禁用应用分组的防护

需要停止某个应用分组下的所有应用防护时,您可以在应用防护页面应用配置页签,单击目标应用分组操作列的防护策略,将防护模式修改为禁用,并单击确定

删除应用分组

重要

删除应用分组后,对该分组下所有实例的防护都会失效。请您在确认无需使用该应用分组下的所有RASP探针时,再执行删除操作。

在删除应用分组前,您需要确认当前应用分组下不存在已授权实例,或自动接入中所有服务器的应用防护开关均为关闭状态。

应用防护页面的应用配置页签,单击目标应用分组操作列的删除,并在提示对话框中单击确定删除

查看探针版本

应用防护页面应用配置页签,单击目标应用分组接入实例列的数字,查看已接入的实例列表。如果应用实例RASP版本列右侧显示image.png图标,代表该应用实例安装的探针存在新版本,建议您重启应用来自动更新探针版本。image.png

查看实例状态

应用防护页面应用配置页签,单击目标应用分组接入实例列的数字,查看已接入的实例列表。

不同状态实例的具体含义如下:

  • 在线已授权:该实例已被正常防护。

  • 在线未授权:由于应用防护授权数不足,该实例虽已成功接入但未受到防护。您可以单击剩余授权数右侧的升级购买充足的应用防护授权数。

  • 离线:该实例未接入应用防护。

  • 在线防护熔断:该实例所在应用分组开启了运行时熔断配置,该实例的资源占用率已满足熔断条件,应用防护已停止对该实例的防护,处于该状态的实例会占用授权数。当该实例的资源占用率降低到所有熔断条件下时,应用防护会重新开启对该实例的防护,该实例状态将变更为在线已授权。

image