assembly code verification using model checking

21
Assembly Code Verification Using Model Checking Hao XIAO Singapore University of Technology and Design

Upload: rossa

Post on 23-Feb-2016

53 views

Category:

Documents


1 download

DESCRIPTION

Assembly Code Verification Using Model Checking. Hao XIAO Singapore University of Technology and Design. Outline. Motivation Approach o verview ILA module @ PAT On-going & future work. Motivation. Benefits. Achieve more reliability. More software components can be verified . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Assembly Code Verification Using Model Checking

Assembly Code Verification Using Model Checking

Hao XIAOSingapore University of Technology

and Design

Page 2: Assembly Code Verification Using Model Checking

Outline

• Motivation• Approach overview• ILA module @ PAT• On-going & future work

Page 3: Assembly Code Verification Using Model Checking

Motivation

Design

• Design verification• SPIN, PRISM, UPPAAL, PAT, …

Source code

• Model checking source code • Java Pathfinder, CBMC, SLAM, …

Binary

• Model checking binary• MCSQUARE, Estes

Page 4: Assembly Code Verification Using Model Checking

Benefits

• Achieve more reliability.• More software components can be verified.

• Circumvent problems caused by compiler. • The verification target is most close to what is running

on a CPU than the source code.

• Easy to verify.• Binaries have more elegant syntax and well defined

semantics than source code.

Page 5: Assembly Code Verification Using Model Checking

Challenges

• Instruction complexity.• Lack of high level semantic information.• Dynamic jump and call, no clear boundaries for

“function”.

• How to specify properties for assembly code.• Scalability.• Assembly code is much longer than source code.

Page 6: Assembly Code Verification Using Model Checking

Design Goals

• Accuracy: Faithfully handle the complex instructions in some ISA.

• Extensibility: Easy extensible to handle different Instruction Set of various architecture.

• Ease of Use: Those who are not familiar with temporal logic or assembly language should also find it is useful.

• High Efficiency: Scalable to large programs.

Page 7: Assembly Code Verification Using Model Checking

Approach Overview (1)

ELF Vine ILVineEmulator

Static Analyzer

Model Checker

User & Built in properties

Properties Parser

Parser

Counter Example

Page 8: Assembly Code Verification Using Model Checking

Approach Overview (2)

• Accuracy and Extensibility: Vine IL.• Ease of Use: Built in properties, if source is

available, link counter examples back to source.

• High Efficiency: property guided abstractions techniques for state space reduction; Function abstraction.

Page 9: Assembly Code Verification Using Model Checking

ILA @ PAT• Vine IL• Emulator• Static Analyses• Built in properties• Example-buffer overflow checking

Page 10: Assembly Code Verification Using Model Checking

Vine IL

Binary file Assembly VEX IR Vine ILLibbfd VineLibVex

Page 11: Assembly Code Verification Using Model Checking

Vine IL Example

Page 12: Assembly Code Verification Using Model Checking

Emulator(State builder)• Emulator is used to generate the successor

states based on the current state.• A state consists of CPU registers, PC,

memory.• Separate global states from local states.• Byte precision memory model.

Page 13: Assembly Code Verification Using Model Checking

Static Analyses for Space Reduction• Stack Analysis• Dead Variable Analysis.• Value Set Analysis• Interrupt Flag Analysis.• Path Reduction

Page 14: Assembly Code Verification Using Model Checking

Built-in Properties• Stack overflow checking• Integer overflow checking• Null pointer deference.• Division by zero checking• Uninitialized variable checking• Data race checking

Page 15: Assembly Code Verification Using Model Checking

Example-Buffer Overflow Checking

• Buffer overflow in assembly level: • write to a memory location beyond the boundaries

of current stack frame.• Identify instrumentation point: • find write operations which have a variable d as its

destination address.• Assertion instrumentation: • Add assertion d > %ebp && d < %esp before the

write instruction.• Model checking assertions.

Page 16: Assembly Code Verification Using Model Checking

Example- C++ source code

Page 17: Assembly Code Verification Using Model Checking

Example-Assembly Code

s1s1

s2

s3

s4

s5

s6

Page 18: Assembly Code Verification Using Model Checking

S1

S2

S3

S4 S5

S6

J1

J2

J3

Control Flow Graph

Page 19: Assembly Code Verification Using Model Checking

S1

S3

S4.1

S5

S6

J1

J3

CFG for Instrumented Code

S4.2

A1Error

esp1 = esp0 - 0x4M[esp1] = ebp0ebp1 = esp1esp2 = esp1 - max{0, 15}esp3 = esp2 – 0x20

M[ebp1 +0x8]>1

eax0= M[ebp1 + 0xc]eax1= M[eax0 + 0x4]M[esp3 + 0x18] = eax1M[esp3 + 0x1c] = 0

ebx0 =φ(S3,S4.2,M[ esp3 + 0x1c])eax2 = M[esp3 + 0x18]eax3 = strlen (eax2)

eax3 < ebx0

eax4 = M[esp3 + 0x1c]eax5 = eax4 + M[esp3 + 0x18]edx0 = M[eax5]eax6 = esp3 + 0x10eax7 = M[esp3 + 0x1c] + eax6

eax7 > ebp1 && eax7 < esp3

M[eax7] = edx0M[esp3+0x1c] = M[esp3 + 0x1c] + 1

Page 20: Assembly Code Verification Using Model Checking

On-going & future Work

• Implementation.• More abstraction techniques(e.g., irrelevant

code elimination).• Symbolic model checking

Page 21: Assembly Code Verification Using Model Checking

The End

Thanks !