0%

CodeQL是一种分析引擎,其首先将code转换为database,再通过类QL的方式挖掘漏洞。LGTM基于CodeQL提供在线服务。

漏洞类型

数据流分析和模式匹配类型漏洞

覆盖语言

• C/C++
• C#
• Go
• Java
• Python
• JavaScript(Includes JSX and Flow code, YAML, JSON, HTML, and XML files)
• TypeScript[New]
详情见:https://help.semmle.com/codeql/supported-languages-and-frameworks.html#

阅读全文 »

工具介绍

FlowDroid[1,2] 是 Arzt 等人设计的一款上下文敏感(对象敏感),流敏感,域敏感的静态污点分析工具,除此之外,与其他污点分析工具(如TAJ)不同的是其针对安卓应用,对安卓应用的特性做了很多改进和优化。

该工具基于Soot[3]和Heros[4],soot作为经典的Java语言分析框架,能提供SSA和callgraph,Heros是一个通用的IFDS/IDS分析框架,速度没有WALA快,但是比WALA更通用。

阅读全文 »

数据流分析的问题

先前有很多数据流分析问题都是关于变量中的值分析,例如:符号分析、常量传播、污点分析等。考虑对以下CFG做数值分析:

image-20201002210707678

  • 在空间复杂度方面,对每个节点都需要保存一份关于x, y, z的值,而一个节点通常只影响了少数变量(如节点2与y,z 无关)
  • 在时间复杂度方面,对当节点一更新y时,更新至于节点3有关,但是数据流必须通过2才能传到3
阅读全文 »

Soundiness

Soundiness是五年前的概念,学者们发现程序分析用于实际的现代语言中仍存在各种问题,这些问题是难以分析的语言特性导致的,因此提出Soundiness,说明如何处理这些难解的问题。

Hard features

Hard-to-analyze features: an aggressively conservative treatment to these features will likely make the analysis too imprecise to scale,rendering the analysis useless.

阅读全文 »

Feasible and Realizable Paths

(In)Feasible Paths

Infeasible Paths: Paths in CFG that do not correspond to actual executions.

程序在CFG中会存在不被执行到路径,这些路径会污染分析结果,给静态分析带来不利影响。

阅读全文 »

先前的分析算法虽然展示了分析细节,但是过于复杂难以实现,本课将介绍一种一种声明式语言(Datalog)以数据驱动推导的方式做指针分析和污点分析

Motivation

Imperative vs Declarative

Imperative(命令式)语言主要有Java、C/C++等,展示了详细的实现细节;

阅读全文 »

在软件安全中,最常见的漏洞有注入类漏洞(Injection)和信息泄露(Information Leak),而本节课将介绍的Information Flow 分析方法可以有效处理以上漏洞,具体来说,就是我们常用的污点分析技术。

Information Flow Security

阅读全文 »

Introduction

Problem of Context-Insensitive (C.I.)

  • 每次函数调用时,调用的上下文不一样;
  • 在不同的调用上下文里,函数内的变量会指向不同;
  • 在上下文不敏感的指针分析中,函数内的对象指向的内容是不同上下文混合起来的(如上例中 $n$ 指向 $o_1$ 和 $o_2$),而这些内容会后向传播,造成更多不准确的结果。
阅读全文 »

Motivation

CHA 只看定义类型,会得到很多实际不被调用的子类方法,如下图所示,CHA的常量分析时只能得到NAC

而指针分析会得到更精确的对象类型:

image-20200818213708639

Introduction to Pointer Analysis

A fundamental static analysis, computes which memory locations a pointer can point to.

For object-oriented programs, computes which objects a pointer (variable or field) can point to.

阅读全文 »