巡检排查
1. 文档背景
IAST,通过将安全测试引擎Agent嵌入到应用程序中,实时监控和分析应用程序的运行过程,从而检测潜在的安全漏洞。在用户使用IAST的时候,会出现对漏洞产出数量产生疑问(检测引擎故障等),或者出现无漏洞产出的情况。因此编写一份IAST巡检手册旨在解决这些问题。该手册旨在提供一套明确的巡检指南,帮助用户了解如何正确地检查IAST,同时也可作为日常巡检的参考。
通过定期进行IAST巡检,可以确保IAST系统的漏洞检测地准确性以及有效性,及时发现和修复潜在的安全漏洞,提高应用程序的安全性。巡检手册将列出一系列的巡检项和操作步骤,以确保IAST系统的正常运行和准确性,同时帮助用户理解IAST的工作原理和输出结果。通过巡检手册,用户可以了解如何验证IAST系统是否正确配置和部署,可以帮助用户更好地了解IAST的工作状态,提高IAST的准确性及可用性。
2. 巡检群体以及问题情况
巡检的目的是为了确保IAST的稳定性以及Agent的高可用性,主要的受益群体为商业版正式或POC用户。巡检情况分为日常巡检以及漏洞产出异常的情况。
3. 日常巡检步骤
3.1 检查IAST服务端基本情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
IAST服务器基本情况 | CPU占用率≤90%内存占用率≤90%存储占用率≤90% | □正常 □异常 | |
检查项说明 | 该项检查目的是为了防止负载过满导致IAST服务端无法处理正常请求。 | ||
巡检流程 | 1、检查CPU占用率:top 按_1_2、检查内存占用率:free -h_或 top 按_Mm3、检查存储占用率:df -Th注:如为分布式部署,存储占用重点检查Mysql所在机器(VM2)。内存、CPU重点检查剩余机器。 | ||
处置方案 | 内存、CPU占用过满,请联系洞态IAST工作人员。存储占用过满,清空调用链数据表。 清空调用链数据表方法:* docker exec -it [mysql* container id**] bash | ||
异常情况说明 |
3.2 检查Agent在线以及项目异常情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
Agent挂载情况 | Agent列表:状态在线项目列表:状态正常 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,Agent是否正常运转。 | ||
巡检流程 | 1、登录洞态IAST Web端,点击项目管理->项目列表观察项目状态是否正常。2、点击项目管理->Agent管理观察,对应项目的Agent的存活状态,是否为运行中且上报状态是否为允许上报。3、在Agent管理页面,点击(下载日志)按钮,观察日志是否存在ERROR日志项,如有报错请查看附件1:Agent错误代码,确定影响范围并联系洞态IAST工作人员协助排查。(如日志无法下载,请登录所在业务服务器的终端,在/tmp/dongtai-[username]/v1.x.x/logs中获取) | ||
处置方案 | 如有离线情况,请观察项目的存活状态或检查项目Agent的挂载情况,命令:ps-ef | grep dongtai(该命令在业务服务器中执行,观察是否存在-javaagent:dongtai-agent.jar) | ||
异常情况说明 |
3.3 检查漏洞检测引擎工作情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
检测引擎工作情况 | 无ERROR日志 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,Agent流量上报正常的情况。 | ||
巡检流程 | 1、登录IAST服务端ssh(分布式登录VM3,检测引擎所在机器)。2、获取检测引擎日志:docker logs -f dongtai_-dongtai-worker-high-freq-1 2>&1 | grep ERR_注:无Error记录,证明检测引擎无异常 | ||
处置方案 | 如有ERROR异常联系洞态IAST工作人员。 | ||
异常情况说明 |
3.4 检查Server工作情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
检测Server工作情况 | 无ERROR日志 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,Agent流量上报正常的情况。 | ||
巡检流程 | 1、登录IAST服务端ssh(分布式登录VM1,Server所在机器)。2、获取检测引擎日志:docker logs -f dongtai_-dongtai-server-1 2>&1 | grep ERR_注:无Error记录,证明Server无异常 | ||
处置方案 | 如有ERROR异常联系洞态IAST工作人员。 | ||
异常情况说明 |
4. 漏洞检出异常巡检步骤
4.1 检查IAST服务端基本情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
IAST服务器基本情况 | CPU占用率≤90%内存占用率≤90%存储占用率≤90% | □正常 □异常 | |
检查项说明 | 该项检查目的是为了防止负载过满导致IAST服务端无法处理正常请求。 | ||
巡检流程 | 1、检查CPU占用率:top 按_1_2、检查内存占用率:free -h_或 top 按_Mm3、检查存储占用率:df -Th注:如为分布式部署,存储占用重点检查Mysql所在机器(VM2)。内存、CPU重点检查剩余机器。 | ||
处置方案 | 内存、CPU占用过满,请联系洞态IAST工作人员。存储占用过满,清空调用链数据表。 清空调用链数据表方法:* docker exec -it [mysql* container id**] bash | ||
异常情况说明 |
4.2 检查Agent在线以及项目异常情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
Agent挂载情况 | Agent列表:状态在线项目列表:状态正常 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,Agent是否正常运转。 | ||
巡检流程 | 1、登录洞态IAST Web端,点击项目管理->项目列表观察项目状态是否正常。2、点击项目管理->Agent管理观察,对应项目的Agent的存活状态,是否为运行中且上报状态是否为允许上报。3、在Agent管理页面,点击(下载日志)按钮,观察日志是否存在ERROR日志项,如有报错请查看附件1:Agent错误代码,确定影响范围并联系洞态IAST工作人员协助排查。(如日志无法下载,请登录所在业务服务器的终端,在/tmp/dongtai-[username]/v1.x.x/logs中获取) | ||
处置方案 | 如有离线情况,请观察项目的存活状态或检查项目Agent的挂载情况,命令:ps-ef | grep dongtai(该命令在业务服务器中执行,观察是否存在-javaagent:dongtai-agent.jar) | ||
异常情况说明 |
4.3 检查Agent上报情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
Agent上报情况 | Agent上报数据正常落库 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目且Agent正常挂载的情况下流量的上报情况 | ||
巡检流程 | 1、登录洞态IAST Web端,点击项目管理->Agent管理,记录需检查Agent上报的Agent ID(第一列)2、登录IAST服务端ssh(分布式登录Mysql所在机器)。3、登录mysql,查看上报情况 | ||
处置方案 | 若查询到的结果为0,请检查Agent的网络通信是否正常,同时下载日志观察报错情况。(如日志无法下载,请登录所在业务服务器的终端,在/tmp/dongtai-[username]/v1.x.x/logs中获取) 若均为正常,请调试Agent日志为trace等级,并且提供JDK版本、框架、中间件等信息,联系洞态IAST工作人员。 | ||
异常情况说明 |
4.4 检查漏洞检测引擎工作情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
检测引擎工作情况 | 无ERROR日志 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,Agent流量上报正常的情况。 | ||
巡检流程 | 1、登录IAST服务端ssh(分布式登录VM3,检测引擎所在机器)。2、获取检测引擎日志:* docker logs -f* dongtai_-dongtai-worker-high-freq-1 2>&1 | grep ERR_ 注:无Error记录,证明检测引擎无异常 | ||
处置方案 | 如有ERROR异常联系洞态IAST工作人员。 | ||
异常情况说明 |
4.5 检查Server工作情况
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
检测Server工作情况 | 无ERROR日志 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,Agent流量上报正常的情况。 | ||
巡检流程 | 1、登录IAST服务端ssh(分布式登录VM1,Server所在机器)。2、获取检测引擎日志:* docker logs -f* dongtai_-dongtai-server-1 2>&1 | grep ERR_ 注:无Error记录,证明Server无异常 | ||
处置方案 | 如有ERROR异常联系洞态IAST工作人员。 | ||
异常情况说明 |
4.6 检查调用链是否正常
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
检测调用链是否正常 | 正常 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,且Agent与服务端正常的情况下。 | ||
巡检流程 | 1、登录IAST Web端,打开数据查询功能。2、触发业务功能接口3、在数据查询功能中搜索触发功能接口的URI4、找到对应的请求返回信息后,点击污点调用链。观察污点流图是否正常,是否存在空白或单图形的情况。(点击URL进入,获取调用链ID) | ||
处置方案 | 如出现异常则需考虑是否为自研或二开(尤其Serverlet方面的改动),需进行适配。如无异常请提供调用链信息:登录mysql,下载调用链信息docker exec -it [mysql container id] bashmysql -uroot -pdongtai-iast dongtai_webapiselect method_pool from iast_agent_method_pool where id=xx;注:id获取关注巡检流程第四步 | ||
异常情况说明 |
4.7 检查规则策略是否正常
检查项 | 操作提示/参考值 | 结论 | 备注 |
---|---|---|---|
检测规则策略情况 | 正常 | □正常 □异常 | |
检查项说明 | 该项主要是针对未检出漏洞或检出异常的项目,检查规则策略是否正常 | ||
巡检流程 | 1、登录IAST Web端,打开策略管理->检测规则是否正常打开2、打开策略管理->策略模板是否正常勾选3、打开策略管理->自定义规则,观察上方的规则总数是否≤500 | ||
处置方案 | 如规则总数>500,则需要刷新调整规则策略刷新规则方法:* docker exec -it dongtai-dongtai-server-1 bash -c 'python [manage.py](http://manage.py "manage.py") load_hook_strategy'* | ||
异常情况说明 |
5. 改进建议
如无上述问题,但流量上报慢,可以对Server以及检测引擎进行扩容:
docker-compose -p dongtai up --scale dongtai-server=3 --scale dongtai-worker-high-freq=3 -d
docker exec -it dongtai-dongtai-server-1 bash -c 'python manage.py load_hook_strategy'
附件1: Agent错误代码列表
错误代码 | 描述 | 是否影响应用 | 实际影响 |
---|---|---|---|
10101 | 日志初始化失败 | 否 | agent 日志输出可能不正常 |
10102 | 日志配置失败 | 否 | agent 日志输出可能不正常 |
10111 | fluent 文件设置执行权限失败 | 否 | fluent 进程无法启动, 无法上报 agent 日志 |
10112 | fluent 文件解压失败 | 否 | fluent 进程无法启动, 无法上报 agent 日志 |
10113 | fluent 进程启动失败 | 否 | fluent 无法上报 agent 日志 |
10121 | agent 配置初始化失败 | 否 | agent 可能无法正常按预期运行 |
10122 | 熔断降级服务端下发配置处理失败 | 否 | 熔断降级非预期运行 |
10131 | agent 的资源文件获取失败 | 否 | agent 无法运行 |
10141 | http client 处理请求体失败 | 否 | agent 可能无法运行/openapi 请求失败/agent 端请求重放失败 |
10142 | http client 请求的响应码有误 | 否 | agent 可能无法运行/openapi 请求失败 |
10143 | http client 请求的响应处理失败 | 否 | agent 可能无法运行/openapi 请求失败 |
10144 | http client 发送请求失败 | 否 | agent 可能无法运行/openapi 请求失败/agent 端请求重放失败 |
10145 | http client 下载文件响应为空 | 否 | jar 包无法正常下载导致 agent 可能无法运行 |
10146 | http client 下载文件响应无效 | 否 | jar 包无法正常下载导致 agent 可能无法运行 |
10147 | http client 下载文件失败 | 否 | jar 包无法正常下载导致 agent 可能无法运行 |
10201 | -javaagent premain 方法执行失败 | 否 | agent 无法运行 |
10202 | jattach 解压失败 | 否 | agent 无法运行 |
10203 | jattach 执行失败 | 否 | agent 无法运行 |
10204 | attach 模式处理参数失败 | 否 | agent 无法运行 |
10205 | attach 模式安装失败 | 否 | agent 无法运行 |
10206 | attach 模式卸载失败 | 否 | agent 无法正常卸载 |
10211 | agent 无法识别中间件 | 否 | agent 无法运行 |
10212 | agent 注册失败 | 否 | agent 无法运行 |
10213 | agent 注册响应状态无效 | 否 | agent 无法运行 |
10214 | agent 注册处理响应有误 | 否 | agent 无法运行 |
10215 | agent 注册响应信息无效 | 否 | agent 无法运行 |
10301 | 解压 agent 所需 jar 包失败 | 否 | agent 使用非云端依赖的 jar 包时无法运行 |
10302 | agent 调用检测引擎安装失败 | 否 | 检测引擎无法安装 |
10303 | agent 调用检测引擎启动失败 | 否 | 检测引擎无法启动 |
10304 | agent 调用检测引擎停止失败 | 否 | 检测引擎无法停止 |
10305 | agent 调用检测引擎卸载失败 | 否 | 检测引擎无法卸载 |
10401 | 获取动态线程失败 | 否 | 卸载时部分需要退出的动态线程无法正常退出 |
10402 | 动态线程退出失败 | 否 | 卸载时部分需要退出的动态线程无法正常退出 |
10403 | 监控线程检查失败 | 否 | 相关的监控功能无法正常运行(配置更新/性能监控/状态监控等) |
10411 | 性能监控指标采集失败 | 否 | 无法正常采集性能指标, 可能会影响熔断降级 |
10412 | 性能监控指标检查失败 | 否 | 无法正常检查性能指标, 可能会影响熔断降级 |
10413 | 获取硬盘使用率失败 | 否 | 仅影响服务端硬盘占用展现数据 |
10501 | 同步云端熔断降级配置失败 | 否 | 可能会影响熔断降级 |
10502 | 熔断降级指标配置有误 | 否 | 可能会影响熔断降级 |
10503 | 熔断降级状态变化, 但当前 agent 包含异常状态 | 否 | 影响熔断降级状态切换 |
10511 | 熔断降级检查器创建失败 | 否 | 可能会影响熔断降级 |
10521 | 熔断降级熔断器指标转换失败 | 否 | 可能会影响熔断降级 |
20101 | 检测引擎安装失败 | 否 | 检测引擎无法安装 |
20102 | 检测引擎卸载失败 | 否 | 检测引擎无法卸载 |
20111 | hook 规则加载失败 | 否 | 无法执行方法 hook, 漏洞无法检出 |
20112 | 个别规则配置无效 | 否 | 影响个别 hook 点, 会影响个别调用链采集, 可能会影响个别漏洞检出 |
20121 | hook 引擎启动失败 | 否 | 方法 hook 可能无效, 可能会影响检测 |
20122 | 卸载时恢复部分类失败 | 未知 | 无法正常卸载, 部分类无法恢复至为 hook 前状态 |
20131 | 引擎配置初始化失败 | 否 | 可能会影响引擎运行 |
20141 | 类的祖先获取失败 | 否 | 可能影响部分接口/抽象类的 hook |
20201 | 类转换失败 | 否 | 部分类转换失败(无法 hook), 不能采集对应数据, 可能会影响相关检测 |
20202 | 类文件 dump 目录创建失败 | 否 | 无法正常 dump 类文件(用于debug) |
20203 | 类文件 dump 失败 | 否 | 无法正常 dump 类文件(用于debug) |
20211 | 转换类抛异常 ClassCircularityError | 可能 | agent 无法正常运行, 可能会导致应用启动失败 |
20212 | 重新转换类失败 | 否 | 部分类重新转换失败, 可能会影响相关检测 |
20221 | ASM 构造类结构失败 | 未知 | 类转换失败, 无法采集相应方法数据 |
20222 | ASM 通过类名构造类结构失败 | 未知 | 类转换失败, 无法采集相应方法数据 |
20301 | hook 点离开 http 失败 | 否 | 可能无法正常上报调用链数据, 可能影响当前请求漏洞检出 |
20302 | hook 点采集 http 数据失败 | 否 | 可能影响 request/respose 采集, 可能影响当前请求漏洞检出, 可能影响 spring boot api 采集 |
20303 | hook 点采集数据失败 | 否 | 影响调用链采集, 可能影响漏洞检出 |
20304 | feign 调用数据采集失败 | 否 | 影响 spring cloud(feign) 的跨服务数据采集, 跨服务数据无法关联 |
20305 | 调用链长度超过限制(配置值) | 否 | 调用链长度太长, 超过长度的忽略采集, 可能会影响当前请求的漏洞检出 |
20311 | spring boot api 采集线程执行失败 | 否 | 无法正常采集 spring boot 的 api |
20321 | 生成/上报调用链数据失败 | 否 | 无法正常上报调用链数据, 影响当前请求漏洞检出 |
20351 | 污点标记获取参数失败 | 否 | 污点数据不准确, 可能会影响检测结果 |
20352 | 污点标记范围失败 | 否 | 污点范围不准确, 可能会影响检测结果 |
20361 | dubbo consumer 调用数据采集失败 | 否 | 影响 dubbo consumer 调用数据的采集, 影响跨服务的关联 |
20362 | dubbo provider 离开 hook 点失败 | 否 | 影响 dubbo provider 数据上报, 影响跨服务的关联 |
20363 | dubbo provider 数据采集失败 | 否 | 影响 dubbo provider 数据采集, 影响跨服务的关联 |
20401 | 报告发送失败 | 否 | agent 发送给服务端的报告失败(调用链/重放数据/API/启动时间等) |
20411 | 重放请求执行失败 | 否 | 请求重放失败 |
20501 | SCA 扫描 JAR 包失败 | 否 | 无法从 JAR 包获取组件信息 |
20502 | SCA 报告发送失败 | 否 | 组件信息上报失败 |
20503 | SCA 计算 JAR 包签名失败 | 否 | 无法获取准确的 JAR 包信息, 影响组件检测 |
20601 | 加载本地配置失败 | 可能 | 主要是本地 hook 黑名单, 用可能会造成过度 hook |
20611 | 污点池新增污点失败 | 否 | 可能影响调用链串联, 进而影响漏洞检测 |
20612 | 自定义模型获取污点失败 | 否 | 可能影响调用链串联, 进而影响漏洞检测 |
99999 | 未知错误 | 否 | 因为 agent 包和 core 包版本不一致导致的错误代码未识别, 一般需要升级 agent |
20701 | Open API类型转换错误 | 否 | API采集的某个字段类型信息丢失,影响较小 |
20801 | dubbo api采集获取到dubbo协议为空 | 否 | DUBBO API采集失败 |
20802 | dubbo api采集获取到dubbo协议时发生异常 | 否 | DUBBO API采集失败 |
20803 | dubbo api采集获取到export map为空 | 否 | DUBBO API采集失败 |
20804 | dubbo api采集获取到export map异常 | 否 | DUBBO API采集失败 |
20805 | dubbo api导出的service转换失败 | 否 | DUBBO API采集部分接口信息丢失 |
20806 | dubbo api导出的service列表为空 | 否 | DUBBO API采集失败 |
20807 | dubbo alibaba api解析导出的service列表时发生异常 | 否 | DUBBO API采集失败 |
20808 | dubbo alibaba api采集时发生异常 | 否 | DUBBO API采集失败 |
20809 | dubbo apache api采集时发生异常 | 否 | DUBBO API采集失败 |
20901 | spring mvc api采集时发生异常 | 否 | Spring API采集失败 |