【程序分析敏感性】流敏感性 | 路径敏感性 | 上下文敏感性 | 域敏感性

1. 流敏感性(Flow Sensitivity)

流不敏感分析:将程序视作无序的语句集合,不考虑语句间的控制流顺序
流敏感分析:考虑语句的执行顺序

示例(流敏感 vs 流不敏感)
在这里插入图片描述

  • 流不敏感分析:会认为x可能是 1 或 10(忽略执行顺序,合并所有赋值);
  • 流敏感分析:会遵循执行顺序 —— 步骤 2 的x=10覆盖了步骤 1 的x=1,因此use(x)中x必然是 10(但不区分if分支是否执行,因为流敏感不关注分支差异)。

2. 路径敏感性(Path Sensitivity)

路径敏感分析:在流敏感的基础上,进一步区分 “不同分支路径” 的差异—— 不仅遵循执行顺序,还会跟踪if-else、循环等分支的选择,为每条关键路径维护独立的变量状态,仅在路径合并时整合结果。

路径敏感的分析一定是流敏感的;但反之不一定成立

示例(路径敏感 vs 路径不敏感)
在这里插入图片描述

  • 路径不敏感分析(但流敏感):遵循执行顺序,但合并所有分支的变量状态 —— 认为x可能是 20 或 30;
  • 路径敏感分析:在流敏感基础上,跟踪两条路径 —— 路径 1(flag=true)时x=20,路径 2(flag=false)时x=30,能精准判断 “use(x)的取值依赖于 flag 的分支选择”。

3. 上下文敏感性(Context Sensitivity)

针对跨函数分析的场景
上下文敏感性,就是是否考虑函数调用的“上下文场景” 。
上下文敏感分析:同一函数被不同调用者、在不同位置调用时,分析状态(如函数参数、内部变量)相互独立,不混淆不同调用场景的结果

示例(上下文敏感 vs 上下文不敏感)
在这里插入图片描述

  • 上下文敏感分析:区分两个调用场景,明确x=6、y=11(独立跟踪每个调用的参数和返回值);
  • 上下文不敏感分析:混淆两个场景,认为addOne的返回值可能是 6 或 11,所以x的值可能是6或11,y的值可能是6或11。

4. 域敏感性(Field Sensitivity)

指分析工具是否区分对象的不同成员字段(属性) ,是否将同一对象的所有字段 “笼统合并” 为一个整体进行分析。

示例(域敏感 vs 域不敏感)
在这里插入图片描述

  • 域不敏感分析将webView对象视为一个整体;仅知道webView对象有 “启用 JS”“敏感桥”“普通名称” 等状态,但无法精准关联 “jsEnabled=true且bridgeName敏感” 的组合条件 —— 可能误判(如仅appName被修改时,仍认为对象有风险)或漏判(如未识别两个字段的组合触发条件)
  • 域敏感分析独立跟踪jsEnabled、bridgeName、appName三个字段的状态;明确jsEnabled=true(满足风险前提)且bridgeName含 “sensitive”(满足敏感条件),精准触发flagAsVulnerable()—— 既不遗漏漏洞,也不因appName等非敏感字段误报

参考:
https://blog.wohin.me/posts/nju-program-analysis-08/
https://bbs.huaweicloud.com/blogs/234041

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值