Software Side-Channel Analysis: Attack Synthesis Lucas Bang - - PowerPoint PPT Presentation

software side channel analysis attack synthesis
SMART_READER_LITE
LIVE PREVIEW

Software Side-Channel Analysis: Attack Synthesis Lucas Bang - - PowerPoint PPT Presentation

Software Side-Channel Analysis: Attack Synthesis Lucas Bang Dissertation Defense Committee: Tevfik Bultan (chair) Omer E gecio glu Ben Hardekopf 1 Publications during PhD Aydin, Bang , Bultan. [CAV 2015] Automata-Based Model


slide-1
SLIDE 1

1

Software Side-Channel Analysis: Attack Synthesis

Lucas Bang

Dissertation Defense Committee: Tevfik Bultan (chair) ¨ Omer E˘ gecio˘ glu Ben Hardekopf

slide-2
SLIDE 2

2 - 1

Publications during PhD

Bang, Aydin, Phan, Pasareanu, Bultan. [FSE 2016] “String Analysis for Side Channels with Segmented Oracles.” Bang, Rosner, Bultan. [Euro S&P 2018] “Online Synthesis of Adaptive Side-Channel Attacks Based On Noisy Observations.” Bang, Aydin, Bultan. [FSE 2015] “Automatically Computing Path Complexity of Programs.” Aydin, Eiers, Bang, Brennan, Gavrilov, Yu, Bultan. [FSE 2018 (accepted)] “Parameterized Model Counting for String and Numeric Constraints.”

Submitted papers

Saha, Kadron, Eiers, Bang, Bultan. “Attack Synthesis for Strings via Incremental Model Counting and Meta-Heuristics.” Tsiskaridze, Bang, McMahan, Bultan, Sherwood. “Information Leakage in Arbiter Protocols.” Phan, Bang, Pasareanu, Malacaria, Bultan. [CSF 17] “Synthesis of Adaptive Side-Channel Attacks.” Aydin, Bang, Bultan. [CAV 2015] “Automata-Based Model Counting for String Constraints.”

slide-3
SLIDE 3

2 - 2

Publications during PhD

Bang, Aydin, Phan, Pasareanu, Bultan. [FSE 2016] “String Analysis for Side Channels with Segmented Oracles.” Bang, Rosner, Bultan. [Euro S&P 2018] “Online Synthesis of Adaptive Side-Channel Attacks Based On Noisy Observations.” Bang, Aydin, Bultan. [FSE 2015] “Automatically Computing Path Complexity of Programs.” Aydin, Eiers, Bang, Brennan, Gavrilov, Yu, Bultan. [FSE 2018 (accepted)] “Parameterized Model Counting for String and Numeric Constraints.”

Submitted papers

Saha, Kadron, Eiers, Bang, Bultan. “Attack Synthesis for Strings via Incremental Model Counting and Meta-Heuristics.” Tsiskaridze, Bang, McMahan, Bultan, Sherwood. “Information Leakage in Arbiter Protocols.” Phan, Bang, Pasareanu, Malacaria, Bultan. [CSF 17] “Synthesis of Adaptive Side-Channel Attacks.” Aydin, Bang, Bultan. [CAV 2015] “Automata-Based Model Counting for String Constraints.”

slide-4
SLIDE 4

2 - 3

Publications during PhD

Bang, Aydin, Phan, Pasareanu, Bultan. [FSE 2016] “String Analysis for Side Channels with Segmented Oracles.” Bang, Rosner, Bultan. [Euro S&P 2018] “Online Synthesis of Adaptive Side-Channel Attacks Based On Noisy Observations.” Bang, Aydin, Bultan. [FSE 2015] “Automatically Computing Path Complexity of Programs.” Aydin, Eiers, Bang, Brennan, Gavrilov, Yu, Bultan. [FSE 2018 (accepted)] “Parameterized Model Counting for String and Numeric Constraints.”

Submitted papers

Saha, Kadron, Eiers, Bang, Bultan. “Attack Synthesis for Strings via Incremental Model Counting and Meta-Heuristics.” Tsiskaridze, Bang, McMahan, Bultan, Sherwood. “Information Leakage in Arbiter Protocols.” Phan, Bang, Pasareanu, Malacaria, Bultan. [CSF 17] “Synthesis of Adaptive Side-Channel Attacks.” Aydin, Bang, Bultan. [CAV 2015] “Automata-Based Model Counting for String Constraints.”

slide-5
SLIDE 5

3

Side-Channel Attacks

slide-6
SLIDE 6

4 - 1

slide-7
SLIDE 7

4 - 2

slide-8
SLIDE 8

4 - 3

slide-9
SLIDE 9

4 - 4 Side channel: learn secrets through indirect observation. Time P i z z a s Panama Granada Kuwait

slide-10
SLIDE 10

5 - 1

slide-11
SLIDE 11

5 - 2

Secret Data

Program

slide-12
SLIDE 12

5 - 3

1 private s = getBufferSize();

Program

slide-13
SLIDE 13

5 - 4

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i

slide-14
SLIDE 14

5 - 5

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1

slide-15
SLIDE 15

5 - 6

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

slide-16
SLIDE 16

5 - 7

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

s? 1 ≤ s ≤ 8

slide-17
SLIDE 17

5 - 8

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

s?

  • utput, 0

1 ≤ s ≤ 8

slide-18
SLIDE 18

5 - 9

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

s?

  • utput, 0

1 ≤ s ≤ 8

slide-19
SLIDE 19

5 - 10

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

s? 1 ≤ s ≤ 8

slide-20
SLIDE 20

5 - 11

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

s? 1 ≤ s ≤ 8

slide-21
SLIDE 21

5 - 12

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i s ≤ i ⇒ o = 1 s > i ⇒ o = 2

s? 1 ≤ s ≤ 8

slide-22
SLIDE 22

5 - 13

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

input, i

s?

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i

1 ≤ s ≤ 8

slide-23
SLIDE 23

5 - 14

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

s?

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i

input, 4

1 ≤ s ≤ 8

slide-24
SLIDE 24

5 - 15

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

s?

input, 4

  • = 1 ⇒ s ≤ 4
  • = 2 ⇒ s > 4

1 ≤ s ≤ 8

slide-25
SLIDE 25

5 - 16

1 private s = getBufferSize(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 log.write("too large"); // 1 s 7 else 8 some computation; // 2 s 9 return 0; 10 } 1 private s = getBufferSize();

s?

input, 4

  • = 1 ⇒ s ≤ 4
  • = 2 ⇒ s > 4

1 ≤ s ≤ 8

Attacker can binary search on s using i and o.

slide-26
SLIDE 26

6

slide-27
SLIDE 27

7 - 1

Boolean compare(pw, input){ for(int i = 0; i < pw.length(), i++) if(pw[i] != input[i]) return false; return true; }

Is my code vulnerable to side-channel attacks?

slide-28
SLIDE 28

7 - 2

Boolean compare(pw, input){ for(int i = 0; i < pw.length(), i++) if(pw[i] != input[i]) return false; return true; }

Automated Analysis Synthesized Attack

Is my code vulnerable to side-channel attacks?

slide-29
SLIDE 29

7 - 3

Boolean compare(pw, input){ for(int i = 0; i < pw.length(), i++) if(pw[i] != input[i]) return false; return true; }

Automated Analysis Synthesized Attack

Is my code vulnerable to side-channel attacks?

  • 1. Static Offline Analysis
slide-30
SLIDE 30

7 - 4

Boolean compare(pw, input){ for(int i = 0; i < pw.length(), i++) if(pw[i] != input[i]) return false; return true; }

Automated Analysis Synthesized Attack

Is my code vulnerable to side-channel attacks?

  • 1. Static Offline Analysis
  • 2. Static Offline + Dynamic + Online Analysis
slide-31
SLIDE 31

7 - 5

Boolean compare(pw, input){ for(int i = 0; i < pw.length(), i++) if(pw[i] != input[i]) return false; return true; }

Automated Analysis Synthesized Attack

Is my code vulnerable to side-channel attacks?

  • 1. Static Offline Analysis
  • 2. Static Offline + Dynamic + Online Analysis
slide-32
SLIDE 32

8 - 1

Side Channels and Searching: Entropy

slide-33
SLIDE 33

8 - 2 secret s ∈ S i ∈ I

Side Channels and Searching: Entropy

S

slide-34
SLIDE 34

8 - 3 secret s ∈ S i ∈ I

Side Channels and Searching: Entropy

S

slide-35
SLIDE 35

8 - 4 secret s ∈ S i ∈ I

  • 1
  • 2

Side Channels and Searching: Entropy

S

slide-36
SLIDE 36

8 - 5 secret s ∈ S i ∈ I

  • 1
  • 2

Side Channels and Searching: Entropy

S

slide-37
SLIDE 37

8 - 6 secret s ∈ S i ∈ I

  • 1
  • 2

Side Channels and Searching: Entropy

S

slide-38
SLIDE 38

8 - 7 secret s ∈ S i ∈ I

s

Good outcome, very unlikely.

  • 1
  • 2

Side Channels and Searching: Entropy

S

slide-39
SLIDE 39

8 - 8 secret s ∈ S i ∈ I

s

Bad outcome, very likely.

  • 1
  • 2

Side Channels and Searching: Entropy

S

slide-40
SLIDE 40

8 - 9 secret s ∈ S i ∈ I

Side Channels and Searching: Entropy

S

slide-41
SLIDE 41

8 - 10 secret s ∈ S i ∈ I s

Side Channels and Searching: Entropy

S

slide-42
SLIDE 42

8 - 11 secret s ∈ S i ∈ I s

Side Channels and Searching: Entropy

S

slide-43
SLIDE 43

8 - 12 secret s ∈ S i ∈ I s p(s ∈ )

Side Channels and Searching: Entropy

S

slide-44
SLIDE 44

8 - 13 secret s ∈ S i ∈ I s p(s ∈ ) =

Side Channels and Searching: Entropy

S

slide-45
SLIDE 45

8 - 14 secret s ∈ S i ∈ I

p1 p2 p3 p4 Side Channels and Searching: Entropy

S

slide-46
SLIDE 46

8 - 15 secret s ∈ S i ∈ I

p1 p2 p3 p4

Quantify expected information gain measured in bits.

Side Channels and Searching: Entropy

S

slide-47
SLIDE 47

8 - 16 secret s ∈ S i ∈ I

p1 p2 p3 p4

Quantify expected information gain measured in bits.

1 pj Side Channels and Searching: Entropy

S

slide-48
SLIDE 48

8 - 17 secret s ∈ S i ∈ I

p1 p2 p3 p4

Quantify expected information gain measured in bits.

1 pj

log2

Side Channels and Searching: Entropy

S

slide-49
SLIDE 49

8 - 18 secret s ∈ S i ∈ I

p1 p2 p3 p4

Quantify expected information gain measured in bits.

1 pj

log2 pj n

j=1 Side Channels and Searching: Entropy

S

slide-50
SLIDE 50

8 - 19 secret s ∈ S i ∈ I

p1 p2 p3 p4

Quantify expected information gain measured in bits.

1 pj

log2 pj n

j=1

H =

Side Channels and Searching: Entropy

S

slide-51
SLIDE 51

8 - 20 secret s ∈ S i ∈ I Quantify expected information gain measured in bits.

1 pj

log2 pj n

j=1

i

H(i) =

Side Channels and Searching: Entropy

S

slide-52
SLIDE 52

9 - 1

max H(i) ⇒Binary Search

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i
slide-53
SLIDE 53

9 - 2

max H(i) ⇒Binary Search

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i
slide-54
SLIDE 54

9 - 3

max H(i) ⇒Binary Search

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i

Password Checker Constraints

slide-55
SLIDE 55

9 - 4

max H(i) ⇒Binary Search

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i
slide-56
SLIDE 56

9 - 5

max H(i) ⇒Binary Search

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i

max H(i) ⇒Optimal Search

any program constraints

slide-57
SLIDE 57

9 - 6

max H(i) ⇒Binary Search

  • = 1 ⇒ s ≤ i
  • = 2 ⇒ s > i

max H(i) ⇒Optimal Search

any program constraints

H(i) ???

slide-58
SLIDE 58

10 - 1

Symbolic Execution

Execute program on symbolic rather than concrete inputs. Maintain path constraints, PCs, φj over symbolic inputs. if(c) then s1; else s2;

c φ φ ← φ ∧ c T F φ ← φ ∧ ¬c

For branch instructions: φj(s, i) characterizes the relation between s, i, and oj

slide-59
SLIDE 59

10 - 2

Symbolic Execution

Execute program on symbolic rather than concrete inputs. Maintain path constraints, PCs, φj over symbolic inputs. if(c) then s1; else s2;

c φ φ ← φ ∧ c T F φ ← φ ∧ ¬c

Maintain path constraints, PCs, φj over symbolic inputs. For branch instructions: φ1 φ2 φ3 φ4 φj(s, i) characterizes the relation between s, i, and oj

slide-60
SLIDE 60

11 - 1

)= p(s ∈

slide-61
SLIDE 61

11 - 2 φ

)= p(s ∈

φ = #φ (i)

slide-62
SLIDE 62

11 - 3 {φj (s, i )}

Model Counter

{#φj (i)} φ

)= p(s ∈

φ = #φ (i)

slide-63
SLIDE 63

11 - 4 {φj (s, i )}

Model Counter

{#φj (i)} φ #φ (i) is the number of satisfying solutions (models) for φ (s, i) for a given i.

)= p(s ∈

φ = #φ (i)

slide-64
SLIDE 64

11 - 5 {φj (s, i )}

Model Counter

{#φj (i)} φ #φ (i) is the number of satisfying solutions (models) for φ (s, i) for a given i.

p (i) = #φ(i)

|S|

)= p(s ∈

φ = #φ (i)

slide-65
SLIDE 65

11 - 6 {φj (s, i )}

Model Counter

{#φj (i)} φ #φ (i) is the number of satisfying solutions (models) for φ (s, i) for a given i.

p (i) = #φ(i)

|S|

H(i) = n

j=1 pj(i) log2 1 pj(i) )= p(s ∈

φ = #φ (i)

slide-66
SLIDE 66

12 - 1 Symbolic Execution Model Counting Information Theory

H(i)

H(i) is a symbolic expression that measures the expected information an attacker gains when making input i.

slide-67
SLIDE 67

12 - 2 Maximize

H(i)

i∗ Symbolic Execution Model Counting Information Theory

H(i)

H(i) is a symbolic expression that measures the expected information an attacker gains when making input i. Maximizing H(i) gives an optimal side-channel attack. [IEEE Computer Security Foundations 2017]

slide-68
SLIDE 68

13 - 1

  • 1. Fully Static Offline Approach

Assumes an ideal observation model (i.e. instruction counts). Does not account for actual runtime behavior.

slide-69
SLIDE 69

13 - 2

  • 1. Fully Static Offline Approach

Assumes an ideal observation model (i.e. instruction counts). Does not account for actual runtime behavior.

  • 2. Static / Dynamic + Offline / Online Approach

Automatically, dynamically estimates runtime observations. Uses Bayesian inference and weighted model counting to account for noise.

slide-70
SLIDE 70

14 - 1

Side-Channel Attack Synthesis Under Noisy Conditions

[IEEE European Security & Privacy 2018]

slide-71
SLIDE 71

14 - 2

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

slide-72
SLIDE 72

14 - 3

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

Hardware + OS

slide-73
SLIDE 73

14 - 4

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

Hardware + OS Network

slide-74
SLIDE 74

14 - 5

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

s? Hardware + OS Network

slide-75
SLIDE 75

14 - 6

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network

slide-76
SLIDE 76

14 - 7

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network

slide-77
SLIDE 77

14 - 8

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network

slide-78
SLIDE 78

14 - 9

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network s ≤ i ⇒ o = 1

slide-79
SLIDE 79

14 - 10

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network s ≤ i ⇒ o = 1

slide-80
SLIDE 80

14 - 11

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network s ≤ i ⇒ o = 1

s ≤ i

slide-81
SLIDE 81

14 - 12

1 private s = getMaxBytes(); 2 3 4 public int compare(int i){ 5 if(s <= i) 6 some computation; // 1 s 7 else 8 log.write("too many bytes");// 2s 9 return 0; 10 }

input, i

s? Hardware + OS Network

s ≤ i s > i

slide-82
SLIDE 82

15 - 1

slide-83
SLIDE 83

15 - 2 s? Attacker Belief

slide-84
SLIDE 84

15 - 3 s?

1 8

1 2 3 4 5 6 7 8

Attacker Belief

slide-85
SLIDE 85

15 - 4 s?

1 8

1 2 3 4 5 6 7 8

Attacker Belief Input Choice i∗

slide-86
SLIDE 86

15 - 5 s? s ≤ i s > i

1 8

1 2 3 4 5 6 7 8

Attacker Belief Input Choice i∗ Observation Noise

slide-87
SLIDE 87

15 - 6 s?

1 8

1 2 3 4 5 6 7 8

Attacker Belief Input Choice i∗ Observation Noise = 5 s ≤ 5 s > 5

slide-88
SLIDE 88

15 - 7 s?

1 8

1 2 3 4 5 6 7 8

Attacker Belief Input Choice i∗ Observation Noise = 5 s ≤ 5 s > 5

t = 4.12

slide-89
SLIDE 89

15 - 8 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

1 3

s ≤ 5 s > 5

t = 4.12

slide-90
SLIDE 90

15 - 9 s?

1 8

1 2 3 4 5 6 7 8

Attacker Belief Input Choice i∗ Observation Noise = 5 s ≤ 5 s > 5

slide-91
SLIDE 91

15 - 10 s?

1 8

1 2 3 4 5 6 7 8

Attacker Belief Input Choice i∗ Observation Noise = 5

more likely

s ≤ 5 s > 5 t = 2.3

less likely

slide-92
SLIDE 92

15 - 11 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

s ≤ 5 s > 5

slide-93
SLIDE 93

15 - 12 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(s|o, i∗) s ≤ 5 s > 5

slide-94
SLIDE 94

15 - 13 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) s ≤ 5 s > 5

slide-95
SLIDE 95

15 - 14 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(o|s, i) s ≤ 5 s > 5

slide-96
SLIDE 96

15 - 15 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(o|s, i∗) s ≤ 5 s > 5

slide-97
SLIDE 97

15 - 16 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(o|s, i∗) s ≤ 5 s > 5

slide-98
SLIDE 98

15 - 17 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(s|o, i∗) s ≤ 5 s > 5

slide-99
SLIDE 99

15 - 18 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(s|o, i∗) Bayes’ Rule s ≤ 5 s > 5

slide-100
SLIDE 100

15 - 19 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(s|o, i∗) Bayes’ Rule s ≤ 5 s > 5

slide-101
SLIDE 101

15 - 20 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(s|o, i∗) Bayes’ Rule

Model Counting

s ≤ 5 s > 5

slide-102
SLIDE 102

15 - 21 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(s|o, i∗) Bayes’ Rule

Weighted Model Counting

s ≤ 5 s > 5

slide-103
SLIDE 103

15 - 22 s? Attacker Belief Input Choice i∗ Observation Noise = 5

1 8

1 2 3 4 5 6 7 8

p(o|s, i) p(s|o, i∗) p(s|o, i∗) Bayes’ Rule

Weighted Model Counting

max H(i) s ≤ 5 s > 5

slide-104
SLIDE 104

16 - 1

slide-105
SLIDE 105

16 - 2

  • 1. Offline Static Analysis
slide-106
SLIDE 106

16 - 3

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
slide-107
SLIDE 107

16 - 4

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-108
SLIDE 108

16 - 5

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-109
SLIDE 109

16 - 6

Source Code

Symbolic Execution {φj (s, i )} P (s, i )

path constraints

slide-110
SLIDE 110

16 - 7

Source Code

Symbolic Execution {φj (s, i )} P (s, i )

path constraints

{wj = (sj, ij )}

PC models(witnesses)

slide-111
SLIDE 111

16 - 8

Source Code

Symbolic Execution {φj (s, i )} P (s, i )

path constraints

{wj = (sj, ij )}

PC models(witnesses)

Each PC characterizes an observable program behavior (s, i ) | = φj (s′, i′ ) | = φj

slide-112
SLIDE 112

16 - 9

Source Code

Symbolic Execution {φj (s, i )} P (s, i )

path constraints

{wj = (sj, ij )}

PC models(witnesses)

Each PC characterizes an observable program behavior (s, i ) | = φj (s′, i′ ) | = φj P (s, i ) P (s′, i′ )

? ?

constraints

slide-113
SLIDE 113

16 - 10

Source Code

Symbolic Execution {φj (s, i )} P (s, i )

path constraints

{wj = (sj, ij )}

PC models(witnesses)

Each PC characterizes an observable program behavior (s, i ) | = φj (s′, i′ ) | = φj P (s, i ) P (s′, i′ )

? ?

characterizes observationally indistinguishable behaviors φj (s, i ) P (s, i ) is a representative of all behaviors in that class

constraints

slide-114
SLIDE 114

16 - 11

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-115
SLIDE 115

16 - 12

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-116
SLIDE 116

16 - 13 Characterize effect of noise on each class of program behaviors using the witness for that behavior.

slide-117
SLIDE 117

16 - 14 {wj = (si, ij )}

P (s, i ) HW / OS

Network Characterize effect of noise on each class of program behaviors using the witness for that behavior.

slide-118
SLIDE 118

16 - 15 {wj = (si, ij )}

P (s, i ) HW / OS

Network Characterize effect of noise on each class of program behaviors using the witness for that behavior.

slide-119
SLIDE 119

16 - 16 {wj = (si, ij )}

P (s, i ) HW / OS

Network Characterize effect of noise on each class of program behaviors using the witness for that behavior.

slide-120
SLIDE 120

16 - 17 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000 Characterize effect of noise on each class of program behaviors using the witness for that behavior.

slide-121
SLIDE 121

16 - 18 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000

{ } , ,...

p(o|sj, ij) Characterize effect of noise on each class of program behaviors using the witness for that behavior.

slide-122
SLIDE 122

16 - 19 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000

{ } , ,...

p(o|sj, ij) Characterize effect of noise on each class of program behaviors using the witness for that behavior.

Smooth Kernel Density Estimation

slide-123
SLIDE 123

16 - 20 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000

{ } , ,...

p(o|sj, ij) Characterize effect of noise on each class of program behaviors using the witness for that behavior.

Smooth Kernel Density Estimation ˆ p(o|φ) = ˆ p(o|w) = 1 nh

n

  • r=1

K

  • − or

h

slide-124
SLIDE 124

16 - 21 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000

{ } , ,...

p(o|sj, ij) Characterize effect of noise on each class of program behaviors using the witness for that behavior.

Merging via Hellinger Distance

slide-125
SLIDE 125

16 - 22 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000

{ } , ,...

p(o|sj, ij) Characterize effect of noise on each class of program behaviors using the witness for that behavior.

dH(p, q) =

  • 1

2 ∞

−∞

  • p(x) −
  • q(x)

2 dx Merging via Hellinger Distance

slide-126
SLIDE 126

16 - 23 {wj = (si, ij )}

P (s, i ) HW / OS

Network ×1000

{ } , ,...

p(o|sj, ij) Characterize effect of noise on each class of program behaviors using the witness for that behavior. Observation constraint φ′: Disjunction over path constraints which characterizes inputs that are observationally indistinguishable via side-channel observation.

dH(ˆ p(o|φ1), ˆ p(o|φ2)) < τ ⇒ let φ′ = φ1 ∨ φ2

slide-127
SLIDE 127

16 - 24

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-128
SLIDE 128

16 - 25

{ } , ,...

ˆ p(o|φ) Belief p(s)

slide-129
SLIDE 129

16 - 26

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief p(s)

slide-130
SLIDE 130

16 - 27

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief p(s)

P (s, i ) HW / OS

Network

slide-131
SLIDE 131

16 - 28

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o
slide-132
SLIDE 132

16 - 29

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o
slide-133
SLIDE 133

16 - 30

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o

I(s; φ(s, i)|i) = −

n

  • i=1

p(φ(s, i)|i) log2 p(φ(s, i)|i) Expected info gain given attacker input Observation constraint probabilities

slide-134
SLIDE 134

16 - 31

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o

I(s; φ(s, i)|i) = −

n

  • i=1

p(φ(s, i)|i) log2 p(φ(s, i)|i) Expected info gain given attacker input Observation constraint probabilities p(φ(s, i)|i) =

  • s∈S

p(s)φ(s, i)

slide-135
SLIDE 135

16 - 32

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o

I(s; φ(s, i)|i) = −

n

  • i=1

p(φ(s, i)|i) log2 p(φ(s, i)|i) Expected info gain given attacker input Observation constraint probabilities p(φ(s, i)|i) =

  • s∈S

p(s)φ(s, i) Model Counting

slide-136
SLIDE 136

16 - 33

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o

I(s; φ(s, i)|i) = −

n

  • i=1

p(φ(s, i)|i) log2 p(φ(s, i)|i) Expected info gain given attacker input Observation constraint probabilities p(φ(s, i)|i) =

  • s∈S

p(s)φ(s, i) Model Counting Weighted

slide-137
SLIDE 137

16 - 34

max I

i∗

{ } , ,...

ˆ p(o|φ) Belief

P (s, i ) HW / OS

Network p(s|o, i∗)

Bayesian Update

  • bserve o

I(s; φ(s, i)|i) = −

n

  • i=1

p(φ(s, i)|i) log2 p(φ(s, i)|i) Expected info gain given attacker input Observation constraint probabilities p(φ(s, i)|i) =

  • s∈S

p(s)φ(s, i) Barvinok

slide-138
SLIDE 138

16 - 35

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-139
SLIDE 139

17 NASA Symbolic PathFinder (SPF) Z3 Constraint Solver Python Profiler Client NUC Server Barvinok Mathematica Weighted Symbolic Model Counting Numeric Maximization Symbolic Entropy Computation Intel P (s, i )

Implementation

  • 1. Offline Static Analysis
  • 2. Offline Dynamic Analysis
  • 3. Online Attack Synthesis
slide-140
SLIDE 140

18

Case Study: LawDB

DB: key = employee ID Some employee IDs have restricted access.

Server Client

Writes to log file depending on whether IDres ∈ [minID, maxID] From DARPA Space-Time Analysis for Cybersecurity (STAC)

SEARCH midID maxID List of employees.

slide-141
SLIDE 141

19 - 1 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-142
SLIDE 142

19 - 2 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-143
SLIDE 143

19 - 3 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-144
SLIDE 144

19 - 4 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-145
SLIDE 145

19 - 5 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-146
SLIDE 146

19 - 6 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-147
SLIDE 147

19 - 7 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-148
SLIDE 148

19 - 8 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-149
SLIDE 149

19 - 9 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-150
SLIDE 150

19 - 10 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-151
SLIDE 151

19 - 11 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-152
SLIDE 152

19 - 12 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-153
SLIDE 153

19 - 13 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-154
SLIDE 154

19 - 14 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-155
SLIDE 155

19 - 15 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-156
SLIDE 156

19 - 16 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-157
SLIDE 157

19 - 17 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-158
SLIDE 158

19 - 18 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-159
SLIDE 159

19 - 19 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-160
SLIDE 160

19 - 20 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-161
SLIDE 161

19 - 21 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-162
SLIDE 162

19 - 22 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-163
SLIDE 163

19 - 23 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-164
SLIDE 164

19 - 24 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-165
SLIDE 165

19 - 25 IDres = 92 1 ≤ ID ≤ 100 ID1 = 64 ID2 = 85

slide-166
SLIDE 166

20 ID Range # Employees Offline Analysis Attack time (m) # steps 1-100 1-10000 1-10000 1-10000 3 4 5 10 57s 2m21s 6m30s 42m09s 2m38s 2m43s 3m08s 4m31s 25 45 48 77

slide-167
SLIDE 167

21 - 1 Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

Segment Oracle Side Channel Attacks

slide-168
SLIDE 168

21 - 2

harveymudd california

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: Segment Oracle Side Channel Attacks

slide-169
SLIDE 169

21 - 3

harveymudd california

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: Segment Oracle Side Channel Attacks

slide-170
SLIDE 170

21 - 4

harveymudd

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: harmonicas Segment Oracle Side Channel Attacks

slide-171
SLIDE 171

21 - 5

harveymudd

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: harmonicas Segment Oracle Side Channel Attacks

slide-172
SLIDE 172

21 - 6

harveymudd

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: harmonicas Segment Oracle Side Channel Attacks

slide-173
SLIDE 173

21 - 7

harveymudd

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: harmonicas Segment Oracle Side Channel Attacks

slide-174
SLIDE 174

21 - 8

harveymudd

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: harmonicas Segment Oracle Side Channel Attacks

slide-175
SLIDE 175

21 - 9

harveymudd

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; }

pw: input: harmonicas

Attacker can brute-force individual characters!

Segment Oracle Side Channel Attacks

String Analysis for Side Channels with Segmented Oracles [IEEE Foundations of Software Engineering 2016]

slide-176
SLIDE 176

22 - 1 Attack Synthesis vs. PW Checker

slide-177
SLIDE 177

22 - 2

ε fzgk daaz zgap uaak bnza ecjq zmna tzar zmna maau vzsc qyas asvr cmxq csja cnte cwcs ctdo cved cvfo ceyu ciil ciub ciij cimq citz ciqz ciaz ciok cida cijw . . . cigz cisu cisp cine ciqk ciqi ciqz ciqz ciqu ciqz ciqc ciqz ciqe ciqr . . . ciqk ciqd ciqd ciqr ciqz

Phase 0 Phase 1 Phase 2 Phase 3

ciqa ciqa ciqg ciqa

Phase 4 Attack Synthesis vs. PW Checker

slide-178
SLIDE 178

22 - 3

ε fzgk daaz zgap uaak bnza ecjq zmna tzar zmna maau vzsc qyas asvr cmxq csja cnte cwcs ctdo cved cvfo ceyu ciil ciub ciij cimq citz ciqz ciaz ciok cida cijw . . . cigz cisu cisp cine ciqk ciqi ciqz ciqz ciqu ciqz ciqc ciqz ciqe ciqr . . . ciqk ciqd ciqd ciqr ciqz

Phase 0 Phase 1 Phase 2 Phase 3

ciqa ciqa ciqg ciqa

Phase 4 Attack Synthesis vs. PW Checker

slide-179
SLIDE 179

22 - 4

ε fzgk daaz zgap uaak bnza ecjq zmna tzar zmna maau vzsc qyas asvr cmxq csja cnte cwcs ctdo cved cvfo ceyu ciil ciub ciij cimq citz ciqz ciaz ciok cida cijw . . . cigz cisu cisp cine ciqk ciqi ciqz ciqz ciqu ciqz ciqc ciqz ciqe ciqr . . . ciqk ciqd ciqd ciqr ciqz

Phase 0 Phase 1 Phase 2 Phase 3

ciqa ciqa ciqg ciqa

Phase 4 Attack Synthesis vs. PW Checker

slide-180
SLIDE 180

22 - 5

ε fzgk daaz zgap uaak bnza ecjq zmna tzar zmna maau vzsc qyas asvr cmxq csja cnte cwcs ctdo cved cvfo ceyu ciil ciub ciij cimq citz ciqz ciaz ciok cida cijw . . . cigz cisu cisp cine ciqk ciqi ciqz ciqz ciqu ciqz ciqc ciqz ciqe ciqr . . . ciqk ciqd ciqd ciqr ciqz

Phase 0 Phase 1 Phase 2 Phase 3

ciqa ciqa ciqg ciqa

Phase 4 Attack Synthesis vs. PW Checker

slide-181
SLIDE 181

22 - 6

ε fzgk daaz zgap uaak bnza ecjq zmna tzar zmna maau vzsc qyas asvr cmxq csja cnte cwcs ctdo cved cvfo ceyu ciil ciub ciij cimq citz ciqz ciaz ciok cida cijw . . . cigz cisu cisp cine ciqk ciqi ciqz ciqz ciqu ciqz ciqc ciqz ciqe ciqr . . . ciqk ciqd ciqd ciqr ciqz

Phase 0 Phase 1 Phase 2 Phase 3

ciqa ciqa ciqg ciqa

Phase 4 Attack Synthesis vs. PW Checker

slide-182
SLIDE 182

22 - 7

ε fzgk daaz zgap uaak bnza ecjq zmna tzar zmna maau vzsc qyas asvr cmxq csja cnte cwcs ctdo cved cvfo ceyu ciil ciub ciij cimq citz ciqz ciaz ciok cida cijw . . . cigz cisu cisp cine ciqk ciqi ciqz ciqz ciqu ciqz ciqc ciqz ciqe ciqr . . . ciqk ciqd ciqd ciqr ciqz

Phase 0 Phase 1 Phase 2 Phase 3

ciqa ciqa ciqg ciqa

Phase 4 Attack Synthesis vs. PW Checker

slide-183
SLIDE 183

22 - 8 Attack Synthesis vs. PW Checker Offline time: 9m54s Attack time: 19m03s Attack steps: 79

slide-184
SLIDE 184

23 - 1

int memcmp(s1, s2, n) CONST VOID *s1; CONST VOID *s2; size t n; { unsigned char u1, u2; for ( ; n−− ; s1++, s2++) { u1 = * (unsigned char *) s1; u2 = * (unsigned char *) s2; if ( u1 != u2) { return (u1-u2); } } return 0; }

slide-185
SLIDE 185

23 - 2

int memcmp(s1, s2, n) CONST VOID *s1; CONST VOID *s2; size t n; { unsigned char u1, u2; for ( ; n−− ; s1++, s2++) { u1 = * (unsigned char *) s1; u2 = * (unsigned char *) s2; if ( u1 != u2) { return (u1-u2); } } return 0; }

Xbox OS, HMAC signatures compared with memcmp! Allowed insecure kernel downgrade.

slide-186
SLIDE 186

24 - 1

Space/Time Analysis for Cybersecurity Benchmark

slide-187
SLIDE 187

24 - 2

Space/Time Analysis for Cybersecurity Benchmark

slide-188
SLIDE 188

24 - 3

Space/Time Analysis for Cybersecurity Benchmark

slide-189
SLIDE 189

24 - 4

Space/Time Analysis for Cybersecurity Benchmark

slide-190
SLIDE 190

24 - 5

Space/Time Analysis for Cybersecurity Benchmark

slide-191
SLIDE 191

24 - 6

Space/Time Analysis for Cybersecurity Benchmark

slide-192
SLIDE 192

24 - 7

Space/Time Analysis for Cybersecurity Benchmark

slide-193
SLIDE 193

24 - 8

Space/Time Analysis for Cybersecurity Benchmark

slide-194
SLIDE 194

25

Space/Time Analysis for Cybersecurity Benchmark

STAC–1 STAC–3 STAC–11A STAC–11B STAC–4 STAC–12

Number of Attack Steps Attack Synthesis Time |S|, Secret Domain Size |S|, Secret Domain Size

slide-195
SLIDE 195

26

Closing Remark

Boolean compare(String pw, String input){ for(int i = 0; i < pw.length, i++) if(pw[i] != input[i]) return false; return true; } “Premature optimization is the root of all evil.” - Donald Knuth

slide-196
SLIDE 196

27 Maximize

H(i)

i ∗ Symbolic Execution Model Counting Entropy

H(i)

Summary Contributions

Quantifying side-channel leaks with model counting. Static offline attack synthesis. Dynamic online attack synthesis with noise. QIF and attack synthesis for segment oracles.

slide-197
SLIDE 197

28

slide-198
SLIDE 198

29

Publications during PhD

Bang, Aydin, Phan, Pasareanu, Bultan. [FSE 2016] “String Analysis for Side Channels with Segmented Oracles.” Bang, Rosner, Bultan. [Euro S&P 2018] “Online Synthesis of Adaptive Side-Channel Attacks Based On Noisy Observations.” Bang, Aydin, Bultan. [FSE 2015] “Automatically Computing Path Complexity of Programs.” Aydin, Eiers, Bang, Brennan, Gavrilov, Yu, Bultan. [FSE 2018 (accepted)] “Parameterized Model Counting for String and Numeric Constraints.”

Submitted papers

Saha, Kadron, Eiers, Bang, Bultan. “Attack Synthesis for Strings via Incremental Model Counting and Meta-Heuristics.” Tsiskaridze, Bang, McMahan, Bultan, Sherwood. “Information Leakage in Arbiter Protocols.” Phan, Bang, Pasareanu, Malacaria, Bultan. [CSF 17] “Synthesis of Adaptive Side-Channel Attacks.” Aydin, Bang, Bultan. [CAV 2015] “Automata-Based Model Counting for String Constraints.”