应用防护功能基于RASP(Runtime Application Self-Protection)技术,通过在应用运行时检测攻击并进行应用保护,为应用提供安全防御。您无需修改代码,只需在主机或容器环境的应用中安装RASP探针,即可为应用提供强大的安全防护能力,并抵御绝大部分未知漏洞所使用的攻击手法。本文介绍如何使用应用防护功能。
功能原理
应用防护使用RASP技术,在应用程序内部通过钩子(Hook)关键函数,实时监测应用在运行时与其他系统的交互过程。当应用出现可疑行为时,应用防护会根据当前上下文环境识别并阻断攻击,有效地为您主机上的Web业务进程提供应用漏洞、0day漏洞和内存马攻击等防护能力。应用防护目前仅支持接入Java应用。
RASP探针兼容性说明
应用防护仅支持防护满足以下条件的Web业务进程,即只支持在满足以下条件的业务进程中安装RASP探针。
JDK:JDK 6及以上版本。
中间件:对中间件类型和版本无特定要求,包括Tomcat、SpringBoot、Jboss、WildFly、Jetty、Resin、Weblogic、Websphere、Liberty、Netty、GlassFish、国产中间件等。
操作系统:Linux、Windows、macOS。
接入方式说明
RASP支持自动接入和手动接入方式,您可以根据下表的说明选择合适的方式接入应用防护。
接入方式 | 特点 | 应用场景 |
自动接入主机和容器 | 无需手动部署和重启应用。 | 未自动接入过其他应用分组且操作系统为64位的服务器可以选择自动接入方式。 说明 如果您主机中的部分应用进程已自动接入指定应用分组,现需要将该主机中的应用重新接入另一个应用分组,您可以在移除已接入的应用后,再为该主机开启自动接入。 |
手动接入主机 | 需手动部署并重启应用。 |
|
手动接入容器 |
检测攻击类型
弱点检测类型
前提条件
步骤一:接入应用防护
在使用应用防护功能前,您需要先新建应用分组,再将需要防护的业务进程接入应用防护中。
登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国或全球(不含中国)。
在左侧导航栏,选择 。
在应用配置页签,单击新建应用分组。
在新建应用分组向导页面,输入要新建的应用分组名称和备注信息,然后单击下一步。
建议您根据需要防护的Web业务进程设置应用分组名称,应用分组名称不可重复。完成该操作后,云安全中心会创建一个应用分组。
在自动/手动接入应用防护向导页面,选择自动接入或手动接入方式接入应用防护。
(推荐)自动接入主机和容器
自动接入是指在应用程序运行时,使用JVM Attach能力将应用防护功能集成到应用程序中。该方式可以在应用程序运行时动态地加载和卸载应用防护功能,无需重启应用进程,可以保障业务的连续性。
在主机、容器或JVM资源使用量超过一定阈值时,为了保证应用防护功能的正常运行,自动安装方式会不予安装RASP探针,直到降到阈值以下才会继续安装RASP探针。停止安装的具体阈值如下:
主机或容器CPU占用超过98%,或剩余内存不足200 MB时,不予安装RASP探针。
JVM堆内存剩余不足150 MB,元数据空间不足5 MB,不予安装RASP探针。
重要建议首次自动接入时避开业务高峰期。
自动接入服务器时,仅支持选择未自动接入过其他应用分组且操作系统为64位的主机。
一台主机仅支持自动接入到一个应用分组中,不支持同时自动接入多个应用分组。
已通过手动接入方式接入的主机,可以开启自动接入。当您卸载了手动接入的RASP探针后,应用防护会为您重新自动接入。
单击选择资产接入应用防护,在选择资产对话框选择需要接入的资产,并单击确定。
当您选择接入的主机后,应用防护功能会自动识别并接入防护主机上的Java服务进程(包括容器环境),无需重启进程。最多支持同时选择100台服务器。
说明选中服务器后,确定按钮变为同步中,表示云安全中心正在将选中的服务器加载到选中列表。
根据需要接入的服务器数量,参考下述说明操作。
仅需接入一台服务器时,打开该服务器应用防护列的开关,待RASP探针安装完成后,单击下一步。
需要接入多台服务器时,选中需要接入的服务器,单击批量防护,然后单击下一步。
批量防护一次最多支持选择100台服务器。
为单台服务器打开应用防护开关或者选中多台服务器并单击批量防护后,云安全中心会自动识别并接入防护主机上的Java进程(应用防护开关显示安装中),根据您的网络环境不同此过程可能会持续约10分钟。如果您的主机中有多个启动状态的Java进程,云安全中心会同时接入这些进程。接入成功后,应用防护列的开关为打开状态,您可以在应用防护接入状态列查看应用实例的接入状态。以下是应用防护接入状态的说明:
未接入:表示该服务器未开启应用防护开关。
接入失败:表示该服务器所有应用都接入失败。
部分接入:表示该服务器应用部分接入成功,部分接入失败。
全部接入:表示该服务器所有应用已接入应用防护。
说明如果服务器上不存在可接入的进程,或者所属业务进程不在支持范围内,此时接入详情列表为空,控制台也会展示全部接入状态。如果后续该服务器上出现可接入的进程可自动接入应用防护。
在操作列单击详情,可以查看已接入的Java进程状态。
手动接入主机
单击手动接入页签,按照主机接入指南子页签的接入步骤,安装RASP探针,再重启应用。单击下一步。
重启应用时,您需要根据应用运行环境进行相关部署。下表以部署应用的JVM参数为例介绍重启应用时的运行环境部署。如果遇到需要配置的中间件不在列表的情况,在配置参数时,您需要使用主机接入指南页签展示的应用ID替换
{appId}
。应用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
JBoss或WildFly
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探针。
手动接入容器
单击手动接入页签,按照容器接入指南子页签的接入步骤,安装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值获取源IP。常规的源IP包括:X-Real-IP、True-Client-IP、X-Forwarded-For。
选择取自定义header的值,系统会优先根据自定义的header值获取源IP。如果自定义header值未命中,则默认规则生效。
检测类型
检测攻击的分类,建议使用默认配置(即全选)。更多信息,请参见检测攻击类型。
步骤二:查看应用分析数据
应用进程接入应用防护功能后,您可以在应用分析页签查看应用行为、应用接入、最新攻击告警等统计数据,来了解应用的攻防详情。
登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国或全球(不含中国)。
在左侧导航栏,选择 。
在应用分析页签,查看应用行为、应用接入、攻击告警等的统计数据。
模块
说明
应用行为分析(图示①)
展示最近7天内应用自身行为(非工具行为)相关统计数据:
总请求次数:应用进程接入应用防护功能后,云安全中心应用防护功能监控到的应用请求总次数。
总阻断次数:云安全中心应用防护功能阻断的攻击次数。
总监控次数:云安全中心应用防护功能监控的攻击次数。
应用接入统计(图示②)
展示应用接入相关统计数据:
应用分组:当前阿里云账号下创建的应用分组总数量。
接入实例:已接入应用防护功能的应用进程数量。
已授权实例:已占用应用防护授权数并且应用防护功能正常的应用进程数量。
剩余授权数:未使用的应用防护授权数。
弱点检测数据(图示③)
展示弱点检测功能检测到的弱点总数、不同风险等级的弱点数量、弱点检测趋势和弱点类型分布。您可以在单击弱点检测页签,查看检测出的弱点类型详情。
最新攻击告警(图示④)
展示最近7天产生的攻击告警列表。如需查看更多攻击告警信息,您可以单击查看详情前往攻击告警页签,查看所有的攻击告警列表。
Top 10 被攻击服务器名称、Top 10 攻击源IP(图示⑤)
展示最近7天被攻击次数最多的10个服务器,或攻击次数最多的10个攻击源IP。
攻击类型分布(图示⑥)
展示最近7天攻击次数最多的5个攻击类型及其分布情况。单击查看详情可以查看各类型攻击的具体数量和占总攻击的百分比。
攻击防护趋势(图示⑦)
展示最近7天内监控或阻断请求的具体数量以及危险级别分布(高危、中危、低危)。
步骤三:查看告警事件
应用进程接入应用防护功能后,您可以参考以下步骤查看检测到的所有告警事件。
登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国或全球(不含中国)。
在左侧导航栏,选择 。
在攻击告警页签,查看告警事件的相关信息。
攻击告警页签以图表的形式展示接入应用防护后应用产生的行为以及应用受到攻击的统计情况。页面下方列表则展示了每一攻击行为的详细数据,包括攻击行为的类型、URL、行为数据以及该行为的处理方式等。
查看应用行为统计
应用行为统计区域展示经过应用防护检测的应用行为以及其对应的分类,包括正常行为和攻击行为。
查看攻击统计
攻击统计区域展示应用防护检测到的具有实际威胁的攻击次数以及其对应的攻击类型。
查看攻击详情
攻击详细列表展示每一个攻击行为的具体情况。您可以在列表中查看攻击行为产生的时间、攻击类型、行为数据、进程目录、URL和该行为的处理方式。您也可以单击目标告警操作列的查看,在详情面板查看目标攻击行为的详情,包括攻击详情、请求详情和服务器详情。
步骤四:了解应用弱点
弱点检测功能支持检查应用运行时内部的不安全配置,包括Java主流框架的不当配置、应用和数据库弱口令等,帮助您发现应用内可被攻击者利用的薄弱点。仅支持检测,不支持一键修复,建议您根据弱点详情中的修复建议手动修改相关配置。支持的检测项详情,请参见弱点检测类型。
应用进程接入应用防护功能后,且RASP版本不低于0.5.0时,支持弱点检测。您可以在应用配置页签,目标应用分组的实例详情面板,查看应用进程的RASP版本。如果RASP版本低于0.5.0,通过重启应用可以完成版本的自动升级。
您可以参考以下步骤查看应用弱点。
登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国或全球(不含中国)。
在左侧导航栏,选择 。
在弱点检测页签,查看弱点数据总览、弱点检测趋势、弱点类型分布和弱点检测事件数量分布情况。
在弱点检测页签下方,查看存在弱点的应用列表。
应用启动ID:在应用的一次启动周期中,该ID是唯一的,可以用来区分应用多次启动过程中产生的弱点。
状态:表示该应用本次启动过程中发现的弱点的处理状态,存在未确认弱点时,状态为待确认;所有弱点均处理完时,状态为已确认。
单击目标应用启动ID左侧的
图标,查看检测出的弱点列表。单击目标弱点列表操作列的详情,可查看弱点详情。
您可以根据弱点描述、修复建议和弱点位置等信息,确认弱点产生的原因,判断是否需要修复弱点。
确认完是否修复弱点后,返回弱点列表。单击目标弱点操作列的修改风险状态,在修改风险状态对话框,设置弱点的风险状态和备注信息,单击确定。
支持修改的风险状态:
待确认:无法确认如何处置弱点时,选择该状态。
已确认:已确认弱点如何处理时,选择该状态。
误报:检测到的弱点不存在或详细信息有误时,选择该状态。
忽略:无需关注此弱点时,选择该状态。
更多功能
配置白名单
您可以通过配置白名单放行来自指定源IP的请求。针对满足规则的请求,云安全中心不会产生告警,也不会阻断对应的操作。
登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国或全球(不含中国)。
在左侧导航栏,选择 。
在防护白名单页签,单击配置白名单。
在配置白名单面板,参考以下表格配置白名单规则。
配置项
描述
规则名称
输入白名单规则名称。
攻击源IP列表
设置需加白的攻击源IP列表。
支持配置IP和IP网段,最多可以设置100个IP或IP网段。
重要0.0.0.0/0表示放行所有IP地址的访问,请谨慎配置。
请求路径
配置需加白的IP可以访问应用实例的路径。支持使用以下方式配置:
前缀匹配:放行来自指定IP地址且访问地址前缀满足此处设置条件的请求。配置示例:
http://39.104.XX.XX:8080/
。后缀匹配:放行来自指定IP地址且访问地址后缀满足此处设置条件的请求。配置示例:
/Vulns/file/io/read
。
说明系统匹配时会忽略请求路径的查询字符串(QueryString)参数部分。例如,如果请求路径为
http://127.0.XX.XX:8088/Vulns/file/io/read?path=/etc/passwd
,系统进行匹配时会自动忽略问号(?)及其后面的部分,即忽略?path=/etc/passwd
。检测类型
选择需要放行的检测类型。
单击下一步并选择生效的应用分组,然后单击确认。
配置完成后,该白名单规则会对生效的应用分组下所有在线状态的应用实例生效。
管理剩余授权数
查看应用防护剩余授权数
每防护一个应用实例会消耗一个授权数。在使用应用防护功能时,请确保您拥有充足的剩余授权数。购买应用防护授权数后,您可以在应用防护页面应用配置页签查看剩余授权数。
扩充应用防护授权数
如果需要防护的应用实例数量大于剩余授权数,您需要在应用防护页面应用配置页签,单击剩余授权数右侧的升级,前往相应页面购买应用防护授权数。
管理接入实例
创建应用分组后,您可以参考以下操作管理应用分组的实例。
查看已授权实例列表
在应用防护页面应用配置页签,单击目标应用分组已授权实例列的数字,查看已授权实例列表。
查看接入实例列表
在应用防护页面应用配置页签,单击目标应用分组接入实例列的数字,查看已接入的实例列表。如果应用实例RASP版本列右侧显示
图标,代表该应用实例安装的探针存在新版本,建议您重启应用来自动更新探针版本。
不同状态实例的具体含义如下:
在线已授权:该实例被正常防护中。
在线未授权:由于应用防护授权数不足,该实例虽已成功接入但未受到防护。您可以单击剩余授权数右侧的升级购买充足的应用防护授权数。
离线:该实例未接入应用防护。
接入实例
在应用防护页面应用配置页签,单击目标应用分组操作列的接入管理,在接入管理面板,通过自动接入或手动接入方式将应用接入应用防护。自动接入页签中,仅展示该应用分组下选择过的服务器列表。
移除实例
在应用防护页面应用配置页签,单击目标应用分组操作列的接入管理,在接入管理面板,根据您的应用接入方式参考以下说明卸载RASP探针:
自动接入:在自动接入页签,选中需要卸载实例的服务器,单击批量关闭防护。或关闭应用防护列的开关,卸载该服务器中的RASP探针。
重要如果无需再防护指定服务器,您可以在确保该服务器的应用防护开关为关闭状态时,删除该服务器。
在自动接入页签,单击目标服务器操作列的删除,或选中多个服务器后单击批量删除,在该应用分组下删除服务器。
手动接入:如果需要为目标应用卸载RASP探针,您需要手动删除在接入指南中添加的JVM参数,然后重启相关应用,即可取消接入应用防护功能。
编辑防护策略
在应用防护页面应用配置页签,单击目标应用分组操作列的防护策略,在防护策略面板,修改防护模式、检测超时时间等配置。
删除应用分组
删除应用分组后,对该分组下所有实例的防护都会失效。请您在确认无需使用该应用分组下的所有RASP探针时,再执行删除操作。
在删除应用分组前,您需要确认当前应用分组下不存在已授权实例,或自动接入中所有服务器的应用防护开关均为关闭状态。
在应用防护页面的应用配置页签,单击目标应用分组操作列的删除,并在提示对话框中单击确定删除。
常见问题
应用防护支持接入哪些类型的应用?
应用防护功能目前仅支持接入Java应用。
应用防护对应用运行是否存在影响?
应用防护自身对性能、兼容性和稳定性有良好的控制,对应用运行的影响几乎可以忽略不计。实际测试中,CPU的额外开销小于1%,内存开销小于30 MB,应用延迟(RT)小于1毫秒。此外,应用防护还提供监控、防护和禁用三种防护模式,还提供软熔断逃生机制等功能,最大限度降低对应用运行的干扰。
接入应用防护后应如何进行应用防护?
理论上来说,应用防护检测到的攻击是能够实际产生安全威胁的行为,相比基于流量特征的传统检测技术而言,误报率较低,所以对应用防护功能所检测到的攻击,必须引起重视。在接入应用防护后,应用防护对攻击的默认防护模式为监控。在应用稳定运行后,您可切换为防护模式。
为什么攻击统计中没有攻击数据?
没有攻击数据可能存在以下两种原因:
目标应用没有完成接入。您可以重新将应用进程接入RASP。具体操作,请参见步骤一:接入应用防护。
没有产生真实有效的攻击行为。与传统防火墙不同,应用防护仅记录真实有效的攻击。传统防火墙会在检测到报文中存在恶意攻击特征时进行上报。但存在恶意特征不代表攻击有效,例如利用PHP漏洞的攻击请求在Java环境中则没有意义。若产生真实有效的攻击,一般表明攻击者已成功突破外层防御,可以打入应用内部环境并执行危险动作。您的应用可能不会存在大量真实有效的攻击,但发生时请务必引起重视,及时拦截或者修复相关安全漏洞。