1、鸿蒙ArkTS代码安全风险检测 盛锦辰(幻猫)3盛锦辰支付宝安全专家-负责蚂蚁集团SDL平台建设-安全研究员/Java开源生态安全贡献者-Qcon2022上海站优秀讲师(幻猫/fantasy cat)41.项目背景鸿蒙原生应用开发与安全新的架构2023.12.7 鸿蒙原生应用开发正式启动。鸿蒙应用可以分为系统能力层(C+)、业务native层(ArkTS)、业务跨端层(小程序/h5/卡片)。其中主要业务逻辑是在ArkTS层。安全要求鸿蒙客户端存在传统端安全风险,也可能引入新的风险面。包括但不限于安全漏洞、隐私合规、数据安全、内容安全、业务风险等风险领域。技术挑战新的分析语言:ArkTS,没有现
2、成工具复杂的分析目标:纵向跨技术栈、横向跨bundle/模块高分析技术要求:调用链、污点分析、变更分析、业务理解典型案例 JSAPI实现不当 任意文件上传小程序bundle1bundle2C+modulecallsite:upload(file,url)function:upload(path,url)72.技术实现2.1 面向ArkTS 语言程序分析工具程序分析框架 抽取+算法+建模代码数据抽取源码COREFDatalog Based Extractor AST CFG DFG Call Graph Class Hierarchy Documentation蚂蚁程序分析团队:https:/
3、Compiler抽象语法树Datalog:带递归的SQL 声明式语言 没有基础 bug(空指针、数组越界、死循环)专注于分析算法的设计和提升COREFCOREF:将程序数据存储到关系表中coref 数据库语言语言编译器编译器AST节点数节点数JavaPSI133C+/Objective-CClang397ArkTSohos-typescript387ArkTS 及常见语言 AST 节点数代码数据抽取 函数内数据流1.学习语言:-建模影响程序执行的语义-控制流e.g.i f/for/switch/try-catch/throw-建模影响值传递的语义-数据流e.g.let/var/assign/o
4、perator2.做方法内数据流摘要-param-return-param-sink-src-return数据流分析:模拟数据在程序运行时如何流转bb1bb2bb4bb3代码数据抽取 函数间数据流 Bottom-UpFunction1Function2Function3Function4Function5算法核心思路:1.从叶子方法结点开始,自底向上分析,分析方向与方法调用方向相反。2.并行分析所有的同级节点。3.记录所有节点的3类缓存,并在分析父节点时inline子节点缓存:param-returnparam-sinksource-return算法特点:1.仅需一次迭代完成全程序分析。2.分
5、析过程无上文信息分析方向代码数据抽取 函数间数据流 Trace Slotfunction1function2function3function4function5算法核心思路:1.第一阶段:并行分析所有方法节点,记录所有节点的6类缓存。并构建图可达性缓存。2.第二阶段:按需做top-down分析。算法特点:1.构建缓存阶段可充分利用多核特性。2.分析过程包含完整上文信息。3.需要记录更多的缓存信息。4.更利于进行变更分析。蚂蚁程序分析团队:https:/dl.acm.org/doi/10.1145/3632743 Octopus:Scaling Value-Flow Analysis via
6、Parallel Collection of Realizable Path Conditions二阶段分析方向LLM for 程序建模源代码以外的影响因素:引入的三方库 应用/系统框架bundle代码中import鸿蒙依赖bundle源代码中使用依赖鸿蒙SDK中API的声明API的声明不包含方法体,怎么分析?Basicblock 1Basicblock 2Basicblock 3LLM for 程序建模鸿蒙SDK程序分析API方法声明、注释支付宝bundleAPI调用上下文鸿蒙API标注结果Qwen-2.5-72b提示词标注结果从9508个API中得到