
# 应用防护概述
#### 什么是应用防护？
应用防护功能基于RASP（Runtime Application Self-Protection）技术，为运行时的应用提供安全检测和防护。用户无需修改应用文件，只需将探针注入到主机或容器环境的应用，即可为其提供强大的安全防护能力。
#### 应用防护技术原理
通过动态代码注入技术在运行时将监控\&保护代码（即探针）注入到应用程序的关键监控\&保护点（即关键函数），探针根据预定义规则，结合通过保护点的数据、以及上下文环境（应用逻辑、配置、数据和事件流等），识别出攻击行为。
图1应用防护原理   
![](https://support.huaweicloud.com/usermanual-hss2.0/zh-cn_image_0000002502282741.png "点击放大")
#### 应用防护检测攻击类型
[表1]中介绍应用防护功能支持检测的攻击类型。
 表1应用防护功能检测攻击类型 
| 攻击类型                  | 说明                                                                                                                                                                                  | 检测规则标识                   | 检测规则描述                                                                                          |
|:---|:---|:---|:---|
| SQL注入                 | SQL注入（SQL Injection）是一种攻击技术，攻击者利用Web应用程序中构建动态SQL查询的漏洞缺陷，在用户输入字段中插入恶意代码，欺骗数据库执行SQL命令，从而窃取、篡改或破坏各类敏感数据，甚至是在数据库主机上执行危险的系统级命令。由于绝大多数网站和Web应用都需要使用SQL数据库，这使得SQL注入攻击成为了最古老、分布最广的网络攻击类型之一。 | SQLI                     | 检测防御SQL注入攻击，检测Web应用是否存在对应漏洞。                                                                    |
| OS命令注入                | OS命令注入（OS Command Injection）是一个Web程序漏洞，这种漏洞通常出现在需要用户输入命令的应用程序中，如果用户输入没有有效的过滤和验证机制，就可能导致该漏洞。它允许攻击者在运行应用程序的服务器上执行任意的操作系统命令。                                                           | CMDI                     | 检测防御远程OS命令注入攻击，同时检测Web应用是否存在对应漏洞。                                                               |
| XSS                   | XSS（Cross-Site Scripting，跨站脚本攻击）是一种典型的Web程序漏洞利用攻击。攻击者利用Web程序对用户输入检查不足的漏洞将可执行恶意脚本注入网站或Web应用，当用户访问网页时触发恶意脚本的执行，从而达到窃取用户个人数据、弹出广告，甚至篡改网页内容等攻击目的。                                       | XSS                      | 检测防御存储型跨站脚本注入攻击。                                                                                |
| Log4j RCE漏洞           | Log4j RCE是指Apache Log4j 2.x中的一个严重安全漏洞，该漏洞使得攻击者可以通过JNDI（Java Naming and Directory Interface）注入执行远程代码。                                                                                | Log4jRCE                 | 检测防御远程代码执行的控制攻击，并支持对攻击行为进行阻断和拦截。                                                                |
| 上传Webshell            | 上传WebShell是一种网络攻击手段，攻击者通过漏洞或其他方式将Webshell这种恶意代码上传到服务器，从而获得对服务器的控制权限。                                                                                                                | WebShellUpload           | 检测防御上传危险文件的攻击（主要针对jsp形式的Webshell文件）或将已有文件改名为危险文件扩展名的攻击（主要针对jsp形式的Webshell文件），同时检测Web应用是否存在对应漏洞。 |
| 内存马注入                 | 内存马注入是一种高级的网络攻击技术，攻击者利用特殊的技术手段将恶意代码直接注入到内存中，可以有效绕过传统的安全防御机制，实现对目标系统的控制。                                                                                                             | FilelessWebshell         | 实现对各类型Java无文件Webshell的检测。                                                                       |
| XXE                   | XXE指XML外部实体注入（XML External Entity Injection）漏洞。如果应用程序在解析XML文件时，没有禁用外部实体引用，攻击者可通过构造恶意的XML内容，读取任意文件、执行系统命令等。                                                                          | XXE                      | 检测防御XXE注入攻击，检测Web应用是否存在对应漏洞。                                                                    |
| 反序列化输入                | 反序列化指的是将序列化的数据（字符串、字节流等）恢复为原始对象的过程。在生成反序列化对象过程中，攻击者可以通过构造特定的序列化数据输入，控制生成的对象，从而实现一些恶意攻击。                                                                                             | UntrustedDeserialization | 检测使用了危险类的反序列化攻击。                                                                                |
| 文件目录遍历                | 文件目录遍历指的是攻击者通过修改URL或使用特殊字符绕过应用程序的安全检查，访问或读取服务器上的任意文件或文件夹。                                                                                                                           | FileDirAccess            | 获取访问文件的路径或目录，匹配是否在敏感目录或敏感文件下。                                                                   |
| Struts2 OGNL          | Struts2 OGNL指的是Java Web框中Struts2中的对象图导航语言（Object-Graph Navigation Language），当OGNL表达式外部可控时，攻击者可以通过构造恶意的OGNL表达式让程序执行恶意操作。                                                             | Struts2OGNL              | 检测Struts OGNL代码执行。                                                                              |
| JSP执行操作系统命令           | JSP（Java Server Pages）是一种开发动态网页的技术。攻击者可能利用JSP的安全漏洞执行非法的操作系统命令，导致数据泄露、服务中断等问题。                                                                                                       | SuspiciousBehavior       | 检测可疑行为---通过JSP请求执行操作系统命令。                                                                       |
| JSP删除文件               | 攻击者可能利用JSP的安全漏洞删除服务器上的文件。                                                                                                                                                           | SuspiciousBehavior       | 检测可疑行为---通过JSP请求删除文件失败。                                                                         |
| 数据库连接异常               | 数据库连接异常包括但不限于网络异常、配置错误、权限异常等，这些异常可能意味着应用程序正在遭受攻击。                                                                                                                                   | SuspiciousException      | 检测可疑异常---数据库连接抛出的认证和通讯异常。                                                                       |
| 0 day漏洞               | 0 day漏洞（零日漏洞），又称零时差攻击，通常指还没有补丁的安全漏洞。如果这类漏洞被发现，黑客利用这些漏洞进行网络攻击，即零日攻击。                                                                                                                 | ZeroDay                  | 检测执行命令的堆栈是否匹配0 day漏洞的部分特征堆栈。                                                                    |
| SecurityManager权限检测异常 | SecurityManager是Java的一个安全管理器类，负责管理和控制应用程序的安全性。当SecurityManager检测到代码执行不允许的操作时，会抛出异常。                                                                                                 | SuspiciousException      | 检测可疑异常，即SecurityManager抛出的异常。                                                                   |
| JNDI注入                | 当应用使用JNDI的lookup方法时，如果查询的URL可以由外部控制，攻击者可以构造恶意的URL，使得服务器加载恶意载荷，从而实现远程代码执行。                                                                                                           | JNDI                     | 检测防御JNDI注入攻击，检测Web应用是否存在对应漏洞。                                                                   |
| 表达式(Expression)注入     | 即EL表达式注入（EL Injection），当EL表达式外部可控时，攻击者可以通过构造恶意的EL表达式让程序执行恶意操作。                                                                                                                      | ExpressionInject         | 检测防御表达式注入攻击，检测Web应用是否存在对应漏洞。                                                                    |
   
#### 应用防护特点
- **上下文感知** **检测更准确**
  基于应用程序的上下文环境，对用户行为进行深度分析与建模，在请求形式被恶意变形、混淆或动态变化的情况下，提供更准确的异常检测结果。
  
- **与WAF互补**
  在应用程序运行时检测内存中写的数据和检测未经授权的数据库访问，与WAF互补，有效覆盖WAF难以触及的深层应用层风险。
  
 
#### 应用防护应用场景
- **0 day漏洞防御**
  在应用程序运行时进行动态检测和防护，实时检测攻击行为，可有效拦截0 day漏洞攻击。
  
- **保护应用程序内部安全**
  防御探针深入应用程序内部运行环境，与应用程序融为一体，实时分析和检测Web攻击，保障应用程序安全。
  
 
#### 约束与限制
- 应用防护基于RASP技术实现，开启应用防护前，请先确认目标程序没有运行其他同类防护工具（RASP探针），否则可能引发以下问题：
  - **程序崩溃**：不同防护工具同时修改同一段代码，可能导致应用进程崩溃。
  
  - **防护失效**：不同防护工具的防护策略冲突，可能造成防护行为不可预测。
  
  - **性能降低**：同一请求被多次检测，CPU和内存消耗激增，性能明显下降。
  
  - **诊断困难**：不同防护工具的日志混淆在一起，无法快速定位故障根因。
   
- 应用防护功能仅企业主机安全旗舰版、网页防篡改版、容器版支持。购买和升级企业主机安全的操作，请参见[购买主机安全防护配额](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0229.html)和[升级防护配额](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0406.html)。
- 满足如下条件的容器可以使用应用防护功能：
  - Kubernetes 1.19版本及以上
  
  - Docker 18版本及以上
   
- 应用防护功能仅支持防护满足以下条件的Java应用：
  - JDK：JDK 8、JDK 11、JDK 17
  
  - Java应用：
    - Windows（64位）：Tomcat
    
    - Linux（64位）：Tomcat、Weblogic、Netty、Jetty
    
    
    具体版本要求如下：
    - Tomcat 7.0.55版本及以上
    
    - Weblogic 12C版本及以上
    
    - Netty 4.1.0.Final版本及以上
    
    - Jetty 9.3.19版本及以上
     
   
- 一台主机最多可为20个应用开启防护。
 
#### 应用防护使用流程
图2使用流程   
![](https://support.huaweicloud.com/usermanual-hss2.0/zh-cn_image_0000002485547606.png "点击放大")
表2使用流程说明 
| 操作项                                                                                                               | 说明                                                                                                                                                                                                                                                        |
|:---|:---|
| [开启应用防护](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0390.html)                                      | 为应用资产开启应用防护，配置防护策略，实时检测应用安全。                                                                                                                                                                                                                              |
| [编辑防护策略](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0459.html#hss_01_0459__section114081721693)（可选） | 应用防护支持告警和阻断两种防护动作，新建防护策略时仅支持配置"告警"模式，建议您先试用告警模式至少7天，7天后您可按需修改防护动作为"阻断"。 说明： "告警并隔离"功能当前处于公测阶段，如需使用请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)申请开通。 |
| [查看应用防护](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0389.html)                                      | 通过分析应用防护过程中发生的防护事件，加固应用防护措施，提升应用安全。                                                                                                                                                                                                                       |
   
