用户最佳实践 · 2023年7月5日 0

请求管理 | 洞态 IAST 在好大夫 SDL 中的最佳实践

好大夫在线

好大夫在线创立于2006年,是中国领先的互联网医疗平台。好大夫在线通过智慧医疗技术,合理分配医疗资源,帮助患者找到好大夫,是中国最可信赖的院外医疗服务平台。基于对患者的需求分析,好大夫在线创建了国内首个实时更新的互联网医生数据库 、首个专业的网上分诊系统、互联网院后疾病管理和线上复诊服务等。截至2021年4月,好大夫在线平台拥有23万实名注册的医生 ,其中73%来自三甲医院,已服务全国患者7000余万人,每日医患沟通次数超过20万次。

背景

Background某天,我司的洞态 Server 变得比较卡,CPU 一直处于高负荷的运行中。经过仔细排查,我们发现洞态的消息队列堆积了大量的未处理消息。

经推敲,此问题主要由两大原因导致:

1. 性能测试

测试的同学在测试环境中进行性能测试时,导致单个 Agent 发出上百万的数据包。

2. 服务健康检查

业务服务中存在心跳检测机制,单个系统对应多个 Agent,且心跳包发送频率为几秒钟一次。倘若公司内部有15个系统,每个系统平均部署2个 Agent。那么 Server 每天便需要额外处理心跳包200多万次。

分析可得:性能测试时产生的请求包和业务的心跳检测包都是不需要进行漏洞检测的,只有正常的 QA 功能测试才需要进行安全检测。

解决方案:请求管理

Solution基于上述分析,我们决定对洞态 Java Agent 进行更新,增加请求管理的 Feature:针对性能测试和健康检查的 API 请求,业务方配置特定的 URL 或Header 头,Java Agent 对这些请求进行 Bypass,避免这类请求带来的性能损耗和洞态 Server 端计算的资源消耗。

相关PR:

  • https://github.com/HXSecurity/DongTai-agent-java/pull/158
  • https://github.com/HXSecurity/DongTai-agent-java/pull/177

如何配置

Configuration

1. 业务侧

分析心跳的 URL,配置 URL 黑名单进行 Bypass;针对性能测试,由业务方配置特殊的 HTTP 请求头,用于在 Java Agent 中进行 Bypass。

2. Java Agent

在 iast-core 模块的 resources 目录中增加 blackurl.txt 文件,在其中配置上对应的规则,规则格式:<Keyword> <type>,如图:

▷ type 值为1:代表 URL 规则,keyword 填写完整的 URI(PATH)▷ type 值为2:代表HTTP 请求头规则,keyword 填写 header 头

效果展示

Effect

在业务心跳数据包正常发送的情况下,没有增加 blackurl 时 Agent 端的消息队列,如图:

在业务心跳数据包正常发送的情况下,增加 blackurl 时 Agent 端的消息队列,如图:

通过对比可以发现,解决了业务心跳带来的大量数据堆积问题。

功能解读

请求管理是一个足以让人眼前一亮的 Feature,既解决了Agent 对业务需求的影响,也避免了业务需求对 Agent 检测能力的影响。请求管理功能极大地便利了 IAST 在企业中的落地使用,感谢伍雄师傅。

彩蛋

据说伍雄师傅目前正在开发一个 “使 DevSecOps 中的工具联动” 的 Feature,很期待这个 Feature 为 DevSecOps 带来的提升,相信大家都跟我们团队一样对这个 Feature 充满了好奇。等伍雄师傅开发出来改良改良后,再让他分享一下心得。