82
Class Overview Yajin Zhou (http://yajin.org ) Zhejiang University Credits: Most of the ppts are from cse443 of PSU

Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Class Overview

Yajin Zhou (http://yajin.org)

Zhejiang University

Credits: Most of the ppts are from cse443 of PSU

Page 2: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Learning Objectives

• Understand common vulnerabilities and attacks

• Buffer overflow, ShellShock, Encryption, Android rooting,

Meltdown attack, Smart contract …

• Understand program analysis methods/tools

• Angr, IDAPro

• Learn how to analyze programs and write exploits

• Know how to write safe code

Page 3: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Prerequisites

• Operating systems

• C and assembly language

• Computer systems

Page 4: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Instructor

• Yajin Zhou ([email protected])

• Office: 曹楼412

• Office hours: by appointments

• Class website: https://yajin.org/seclab2019summer/

• TA: Jiaqi Li (教9 211)

Page 5: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Course Material

• Lecture notes (posted at the class website)

• 学在浙里: http://c.zju.edu.cn

Page 6: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Grading

• NO Final exam!

• Homework - 85%

• Class Quiz - 15%

• Late submissions are accepted after the deadline

• a 10% penalty will be applied for each day of late submission

• Disputes of grade MUST be resolved within one week of receiving it

Page 7: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Ethics Statement

• This class may contain technologies whose abuse may infringe on

rights of others! Do not undertake any action which could be

perceived as technology misuse under any circumstances

unless you have received explicit permissions.

Page 8: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Introduction to Software/Program Security

Yajin Zhou (http://yajin.org)

Zhejiang University

Credits: Most of the ppts are from cse443 of PSU

Page 9: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Security vs safety

Page 10: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Security Overview

Page 11: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

What is security?

Page 12: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Adversary

Page 13: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Threats

SQL Slammer[a] is a 2003 computer worm that caused

a denial of service on some Internet hosts and dramatically

slowed down general Internet traffic. It spread rapidly,

infecting most of its 75,000 victims within ten minutes.

Page 14: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Vulnerabilities

Page 15: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Attacks

Page 16: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Trust

Page 17: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Security Model

Page 18: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Vulnerability Reporting

Page 19: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Program Security I

Page 20: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

A Simple Program

Page 21: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Address Space Layout

Page 22: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 23: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Buffer Overflow

Page 24: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 25: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Return-to-libc

Page 26: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Return-to-libc

Page 27: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Return-to-libc

Page 28: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Buffer Overflow Defenses

Page 29: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

A Simple Program

Page 30: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Buffer Overflow of Local Variables

Page 31: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

A Simple Program

Page 32: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Heap Overflow

Page 33: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Memory Safety

Page 34: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Prevent Memory Safety Errors

Page 35: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Another Program

Page 36: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Integer Overflow

Page 37: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Integer Overflow

Page 38: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

A Simple Program Again

Page 39: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Parsing Errors

Page 40: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Secure Programing

Page 41: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Take Away

Page 42: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

ROP

Page 43: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Buffer Overflow

Page 44: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 45: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 46: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 47: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 48: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 49: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 50: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 51: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 52: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 53: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 54: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 55: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

ret: pop eip

Page 56: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 57: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 58: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 59: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 60: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 61: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 62: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 63: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 64: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 65: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 66: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 67: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 68: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 69: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 70: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 71: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 72: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露
Page 73: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

程序代码分析

✦ 常用技术• 控制流图

• 数据流图

• 污点分析

• 符号执行

• 模糊测试

Page 74: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

控制流图(Control Flow Graph)

✦ 描述程序执行顺序

Page 75: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

数据流图(Data Flow Graph)

✦ 数据流图用来表示数据之间的关系。通常根据目的可以分为liveness

分析图,def-use图等。

def-use分析例子:通过这个分析,我们能知道数据的存活周期。比如如果在x 被use后,程序又通过def对x重新赋值,那么x的存活周期就在两次def之间。

Page 76: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

污点分析(Taint Analysis)

✦ motivation: 分析数据在程序内部的传播

✦ 污点分析需要定义 taint source,taint sink和taint propagation rule

✦ 具体例子:使用污点分析检测应用隐私泄露• taint source:读取手机IMEI函数的返回值

• taint sink:网络发送函数。如果网络发送函数中的操作数据是被taint的,那么我们就检测到了泄露IMEI

的行为。

• taint propagation rule:根据每一条指令定义传播的规则

‣ 比如: Y = X + 1 如果 X是tainted,那么Y也变得tainted

‣ 比如 把 X写入内存地址123. 那么内存地址123的地方就是tainted。那么下一次从 内存123 拿出来的数据也是tainted。

Page 77: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

符号执行(Symbolic Execution)

✦ 符号执行的目的是为了能在软件测试分析中尽可能多覆盖更多路径• 缺点:scalability是个问题 - 面临路径爆炸问题。另外约束求解效率也是问题

求解约束得到具体值

约束

Page 78: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

模糊测试(Fuzzing)

✦ 自动生成不同的input,发送给程序,希望能触发程序的bug/漏洞

✦ 一个例子• Standard HTTP GET request

‣ GET /index.html HTTP/1.1

• Anomalous requests

‣ AAAAAA...AAAA /index.html HTTP/1.1

‣ GET ///////index.html HTTP/1.1

‣ GET %n%n%n%n%n%n.html HTTP/1.1

‣ GET /AAAAAAAAAAAAA.html HTTP/1.1

‣ GET /index.html HTTTTTTTTTTTTTP/1.1

‣ GET /index.html HTTP/1.1.1.1.1.1.1.1

✦ 关键点:如何生成更有效率的input,能触发更多的程序路径• dump fuzzing

• smart fuzzing:使用代码覆盖率作为指导生成更好的input

Page 79: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

攻击及防护的演化

Attacks

Defenses

Code injection

1988

Morris worm

Code reuse

1997

Ret-to-libc

Data only

2005

Concept

2017

Attack kernel

No-execute bit

2001

XN ARM

2003

NX AMD

Control flow

2014

CFG MS

2016

CFI Samsung

PA ARM

Data flow

???

Page 80: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Why Security is Hard

Page 81: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

If Security Gets in the Way

Page 82: Class Overview - Yajin · 污分析 (Taint Analysis) motivation: 分析数据在程序内部的传播 污分析需要定义 taint source,taint sink和taint propagation rule 具体例子:使用污分析检测应用隐私泄露

Some Lessons