ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CodeQL 1.23 版本 Python 分析能力增强:从 3.8 语法支持到敏感数据泄露检测

CodeQL 1.23 版本 Python 分析能力增强:从 3.8 语法支持到敏感数据泄露检测 静态分析SAST应用安全漏洞扫描代码质量【免费下载链接】codeqlCodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security项目地址https://gitcode.com/gh_mirrors/co/codeql点击查看免费下载本文基于 CodeQL 仓库中的 1.23 版本 Python 分析变更说明系统梳理该版本为 Python 语言分析带来的核心改进Python 3.8 语法支持、ValueAPI 全面迁移带来的精度提升、三条新增安全查询敏感信息明文日志、明文存储、全接口绑定套接字以及既有查询与 QL 库的多项增强。读完本文你将掌握这些新查询的检测原理、适用场景与源码级实现细节并了解如何利用 CodeQL 对 Python 代码进行更精确的安全审计。一、版本概览CodeQL 1.23 的 Python 分析改进集中在三个层面语法前端新增对 Python 3.8 语法特性的完整解析支持查询框架将标准查询从旧的ObjectAPI 迁移到ValueAPI显著减少误报安全能力新增 3 条安全查询并对 8 条既有查询进行误报收敛和告警信息优化。以下逐项展开并结合仓库源码说明底层实现。二、Python 3.8 语法支持1.23 版本起CodeQL 的 Python 提取器extractor可以正确解析 Python 3.8 引入的三类语法构造1. 海象运算符Walrus Operator赋值表达式while chunk : file.read(1024): process(chunk)赋值表达式PEP 572允许在表达式位置完成变量绑定CodeQL 现可将其正确解析为赋值节点从而支持对:右侧表达式做完整的数据流与污点追踪。2. 仅限位置参数分隔符/def foo(a, /, b, *, c): .../之前的参数如a只允许按位置传入。CodeQL 现在能正确解析该签名语法使基于调用位置的参数绑定分析如 Django 路由参数识别更加准确。3. f-string 自文档表达式f{var} # 等价于 fvar{var!r}Python 3.8 允许在 f-string 中直接写var形式输出变量名及其 repr 值。该语法现可被正确解析避免因解析失败导致的代码段丢失或分析中断。从源码结构看这些语法支持位于 Python 提取器python/extractor的解析与 Python TRAP 生成 层确保新语法能被完整落入数据库供查询使用。三、ValueAPI 迁移查询精度系统性提升自 1.21 版本起CodeQL 逐步用ValueAPI如ClassValue取代旧的ObjectAPI如ClassObject。1.23 版本将大量标准查询迁移至ValueAPI其收益在于Value家族按数据流语义建模模块值、类值、实例值、函数值等与 Python 运行时对象模型更贴近点对点points-to信息更完整派生查询可减少因对象建模粗糙导致的误报。该 API 的载体可参见 python/ql/lib/semmle/python/objects/ObjectAPI.qll 等库文件。迁移完成后标准查询在保持检出能力的同时告警结果更加精确。四、新增安全查询3 条1.23 版本为 Python 新增 3 条安全查询默认在 LGTM 上展示结果。下表汇总其标识与定位查询标签目的Clear-text logging of sensitive informationpy/clear-text-logging-sensitive-datasecurity, external/cwe/cwe-312发现未经加密或哈希即记录敏感信息的场景Clear-text storage of sensitive informationpy/clear-text-storage-sensitive-datasecurity, external/cwe/cwe-312发现未经加密或哈希即存储敏感信息的场景Binding a socket to all network interfacespy/bind-socket-all-network-interfacessecurity发现将套接字绑定到所有网络接口的场景下面结合仓库中的查询源码逐一剖析其实现原理。1. 敏感信息明文日志py/clear-text-logging-sensitive-data查询实现位于 python/ql/src/Security/CWE-312/CleartextLogging.ql。其元数据声明kind path-problem输出带完整数据流路径的告警problem.severity error与security-severity 7.5高危安全告警precision high高精度定位误报率低关联 CWE-312明文敏感信息泄露、CWE-359隐私侵犯、CWE-532日志中插入敏感信息。查询主体通过CleartextLoggingFlow::flowPath(source, sink)在全程序范围内做污点追踪并取源的分类信息select sink.getNode(), source, sink, This expression logs $ as clear text., source.getNode(), sensitive data ( classification )污点配置定义于 CleartextLoggingQuery.qll其中isSource来自Source即semmle.python.dataflow.new.SensitiveDataSources提供的敏感数据源如密码、令牌、密钥等isSink来自Sink即semmle.python.Concepts中定义的日志记录概念如logging、logger.info等isBarrierSanitizer如对数据先做哈希、加密或脱敏的处理节点防止经过安全处理的路径被误报。这套源-汇-屏障三段式配置可直接在CleartextLoggingCustomizations.qll中扩展自定义源、汇与清洗器便于团队按自身业务补充检测规则。2. 敏感信息明文存储py/clear-text-storage-sensitive-data实现位于 python/ql/src/Security/CWE-312/CleartextStorage.ql元数据与日志查询类似severity error、security-severity 7.5、precision high并额外关联 CWE-315通过数据库明文存储敏感信息。其告警消息为This expression stores $ as clear text.对应的污点配置在 CleartextStorageQuery.qll 中汇点为各类持久化写入数据库写入、文件写入等。两条查询共同覆盖 CWE-312敏感信息泄露的主要传播路径记录与落盘。3. 套接字绑定所有网络接口py/bind-socket-all-network-interfaces实现位于 python/ql/src/Security/CVE-2018-1281/BindToAllInterfaces.ql关联 CWE-200信息暴露security-severity 6.5、sub-severity low。该查询判定逻辑非常精细源——硬编码的可绑定全接口主机名private string vulnerableHostname() { result in [ // IPv4 0.0.0.0, , // IPv6 ::, ::0 ] }覆盖 IPv40.0.0.0、空串与 IPv6::、::0四种写法。汇——通过ModelOutput::sinkNode(sink, bind-socket-all-interfaces)从 ModelsAsData 模型数据中识别socket.bind()等调用点同时要求该参数来源于元组表达式any(DataFlow::LocalSourceNode n | n.asExpr() instanceof Tuple).flowsTo(sink)这一约束排除了 AF_UNIX 域套接字其bind()传入的是普通字符串路径从而避免对 Unix socket 的误报——这是该查询高精度的关键设计。最终告警展示使用的具体绑定地址如0.0.0.0。五、既有查询变更8 项误报收敛与 1 项消息优化1.23 版本对以下查询进行了针对性改进整体方向是更少误报、更准定位查询预期影响变更内容Explicit export is undefinedpy/undefined-export减少误报不再标记导出值可能在缺乏 points-to 信息的模块中定义的场景Module-level cyclic importpy/unsafe-cyclic-import减少误报不再标记导入环中某条链接实际从未执行的场景Non-iterable used in for looppy/non-iterable-in-for-loop减少误报__aiter__现被识别为迭代器方法异步迭代协议Unreachable codepy/unreachable-statement减少误报分析现会考虑contextlib.suppress对异常的抑制Unreachable codepy/unreachable-statement减少误报仅含assert其不可达性的不可达else分支不再被标记Unused importpy/unused-import减少误报模块用于前向引用类型注解、或仅在类型检查期使用的不再被标记__iter__method returns a non-iteratorpy/iter-returns-non-iterator告警消息更优告警现在明确指出哪个类预期应成为迭代器__init__method returns a valuepy/explicit-return-in-init减少误报__init__返回过程调用procedure call结果的不再被标记值得注意的两点设计意图contextlib.suppress感知with contextlib.suppress(...):块内的异常会被显式吞掉因此其后的不可达代码实际可达CodeQL 的控制流分析已纳入该语义__aiter__识别异步迭代协议async for下__aiter__同样是合法的迭代器方法旧逻辑可能误报非可迭代。六、QL 库变更1. Django 1.x 路由位置参数识别Django 库现在能识别来自django.conf.urls.url正则表达式Django 1.x的位置参数使 Django 视图函数的参数绑定、污点传播分析覆盖更全面。2.Value.isAbsent未知但存在的值Value类实例现支持isAbsent谓词用于表示该值缺少 points-to 信息但类型推断表明其存在。典型场景import django # django 未能被正确提取当django提取失败时会生成一个对应未知模块的ModuleValue且该ModuleValue上isAbsent()成立。查询可利用该谓词区分确实不存在与存在但信息缺失这正是py/undefined-export减少误报的底层机制。实现见 python/ql/lib/semmle/python/objects/ObjectAPI.qll。3.Expr.pointsTo表达式到可能取值的一步直达Expr类新增零元方法pointsTo直接返回该表达式所有可能的Value实例。相比此前需要经过中间对象再取值的写法pointsTo让查询编写更简洁也让ValueAPI 下的数据流分析更高效。七、如何验证与使用这些改进运行新增查询在 CodeQL 数据库上执行 CleartextLogging.ql、CleartextStorage.ql 或 BindToAllInterfaces.ql即可复现本版本新增的安全检测能力它们也随 LGTM 默认规则集展示结果自定义扩展如需补充自有敏感数据源或清洗逻辑可基于 CleartextLoggingCustomizations.qll 与 CleartextStorageCustomizations.qll 提供的扩展点进行定制查询库参考Value/Expr相关 API 定义于 python/ql/lib/semmle/python 目录下的库文件中编写自定义查询时可随时查阅。总体而言CodeQL 1.23 的 Python 分析在语法前沿性、API 现代化与安全检测覆盖面三个维度同步推进Python 3.8 语法支持消除了新代码的解析盲区ValueAPI 迁移让既有查询更精确而三条新增安全查询为敏感信息泄露与危险网络绑定提供了开箱即用的高精度检测能力。赞分享静态分析SAST应用安全漏洞扫描代码质量【免费下载链接】codeqlCodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security项目地址https://gitcode.com/gh_mirrors/co/codeql点击查看免费下载相关推荐Buzz 离线语音转文字会议纪要零成本出稿的完整指南Buzz 离线语音转文字会议纪要零成本出稿的完整指南 上个月我整理一份三小时的客户访谈录音传云端怕泄密手动听写又慢到怀疑人生。Buzz 把 Whisper静态分析SAST应用安全漏洞扫描代码质量Windows 一键安装 Office免费自动化安装与激活完整指南Windows 一键安装 Office免费自动化安装与激活完整指南 新装系统、换新电脑后没有 Office下载、安装、激活三步又费时又容易卡住。本文用开源工静态分析SAST应用安全漏洞扫描代码质量上一篇include-what-you-use核心功能解析掌握头文件分析的艺术下一篇探索视觉差异的艺术——Image Compare Viewer开源项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表