Computer Security

  • Goals
    • Dependability
    • Data safety
  • Adversaries
    • Crackers
    • Cyber attackers

Causes of exploited vulnerabilities(造成已被利用的漏洞的原因)

  • Injection errors

  • Information leaks

这两点其实就是本节课要解决的问题

Information Flow Security

我们要防止不必要的信息流动 保护信息安全

Access Control vs. Information Flow Security

  • 访问控制(保护敏感数据的标准方法)
    • 检查程序是否具有访问某些信息的权限
    • 关注信息的访问方式
  • 信息流安全(端到端)
    • 跟踪信息如何流经程序,以确保程序安全地处理信息
    • 关注信息的传播方式

Information Flow

信息流:如果变量 x 中的信息被转移到变量 y,那么存在信息流 y → x

示例

Information Flow Security

将信息流与安全联系起来

  • 将程序变量分类为不同的安全级别
  • 指定这些级别之间允许的流,即信息流策略

Security Levels (Classes)

  • 最基本的模型是两级策略,即一个变量被分为两个安全级别之一:

    1. H,意为高安全性、秘密信息
    2. L,表示低安全性,公共可观察信息
    • h = getPassword(); // h is high security
    • broadcast(l); // l is low security
  • 安全级别可以建模为 lattice*

    • L ≤ H

Information Flow Policy

  • 限制信息在不同安全级别之间的流动方式
  • 互不干扰政策*
    • 要求 high 变量的信息对 low 变量的信息没有影响(即不应干扰)
    • 直观地说,您不应该能够通过观察低变量来得出任何关于高信息的信息结论

Noninterference

  • 要求 high 变量的信息对 low 变量的信息没有影响(即不应干扰)
不干涉

确保信息仅在格中向上流动

Confidentiality and Integrity

  • Confidentiality(保密性)
    • 防止机密信息泄露
  • Integrity(正确性)
    • 防止不受信任的信息损坏(受信任的)关键信息
    • x = readInput(); // untrusted cmd = “…” + x; execute(cmd); // critical (trusted)
  • Injection errors ( #1 cause of vulnerabilities in 2013-20192)
    • Command injection
    • SQL injection
    • XSS attacks
不干涉

Integrity, Broad Definition

  • 确保数据的正确性、完整性和一致性
  • 正确性
    • 例如,为了实现信息流的完整性,(受信任的)关键数据不应被不受信任的数据破坏
  • 完整性
    • 例如,数据库系统应该完整地存储所有数据
  • 一致性
    • 例如,文件传输系统应确保两端(发送方和接收方)的文件内容相同

Explicit Flows and Covert Channels

显式信息流

我们已经看到了信息是如何通过直接复制流动的。这称为显式流。

隐式信息流

这种信息流称为隐式流,当控制流受到秘密信息的影响时,可能会出现这种流。

机密控制下,副作用的任何差异都会对有关控制的信息进行编码,这些信息可能是可公开观察的,并泄露机密信息。

更多隐式信息流

通过计算系统向信息发送信号的机制称为通道。

利用主要目的不是信息传输的机制的通道称为隐蔽通道*。

  • Implicit flows(隐式流)

    信号信息通过程序的控制结构泄露

  • Termination channels(终端通道)

    信号信息通过计算的(非)终止泄露

  • Timing channels(计时通道)

    信号信息通过计算时间泄露

  • Exceptions(异常)

    信号信息通过异常泄露

显式流通常比隐蔽通道携带更多的信息,因此我们专注于显式流

Taint Analysis

  • 污点分析是最常见的信息流分析。它将程序数据分为两种:
    • 受关注的数据,某些类型的标签与数据相关联,称为受污染数据
    • 其他数据,称为未受污染的数据
  • 受污染数据的来源称为来源。在实践中,污染数据通常来自某些方法的返回值(被视为源)。
  • 污点分析跟踪受污染的数据如何流经程序,并观察它们是否可以流向受关注的位置(称为 sinks )。在实践中,sinks 通常是一些敏感的方法。

Taint Analysis: Two Applications

  • 保密性

    • 来源:密钥数据来源

    • Sink:泄漏

    • 信息泄露

      x = getPassword(); // source y = x; log(y); // sink

  • 正确性

    • 来源:不可信数据的来源

    • Sink:关键计算

    • 注入错误

      x = readInput(); // source cmd = “…” + x; execute(cmd); // sink

污点分析能够同时检测出这两种不受欢迎的信息流,因为他们是对称的。

Taint and Pointer Analysis, Together*

污点分析/指针分析的本质是跟踪污点数据/抽象对象如何流经程序

  • 将受污染的数据视为对象
  • 将源视为(受污染数据的)分配站点
  • 利用指针分析传播受污染的数据

Domains and Notations(域和符号)

Variables: x, y ∈ V
Fields: f, g ∈ F
Objects: oi, oj ∈ O
Tainted data: ti, tj ∈ T ⊂ O
Instance fields: oi.f, oj.g ∈ O × F
Pointers: Pointer = V ⋃ (O × F)
Points-to relations: pt : Pointer → P(O)
  • P(O) denotes the powerset of O(P(O)表示 O 的幂集)
  • pt(p) denotes the points-to set of (pt(p) 表示 p 的指向的集合)
  • ti denotes the tainted data from call site i

Taint Analysis: Inputs & Outputs

  • Inputs

    • Sources:一组源方法(对这些方法的调用返回受污染的数据)
    • Sinks:一组具有敏感参数的 sink 方法(污染流向这些方法的参数的数据流违反了安全策略)
  • Outputs

    • TaintFlows:一组 source 和 sink 调用的元组

      E.g.,<i,j,k> ∈ TaintFlows 表示来自调用的受污染数据站点 i(调用 Source 方法)可能会流向调用站点 j(调用 Sink 方法)的第 k 个参数。

Rules: Call

处理 sources(生成受污染的数据)

Kind Statement Rule
Call l: r = x.k(a1,...,an)
Call l: r = x.k(a1,...,an)

其余的和指针分析一样

Taint Analysis: An Example