Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers...

76
Techniques and Tools for De-bloating Containers Somesh Jha 1 , Tom Reps 1,2 , Sibin Mohan 3 , Rakesh Bobba 4 , David Lie 5 , Eric Schulte 2 1 University of Wisconsin-Madison, 2 Grammatech, 3 University of Illinois at Urbana-Champaign, 4 Oregon State University, 5 University of Toronto June 22, 2018 Debloating Containers 1

Transcript of Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers...

Page 1: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Techniques and Tools for De-bloating Containers

Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2

1 University of Wisconsin-Madison, 2 Grammatech, 3 University of Illinois at Urbana-Champaign, 4 Oregon State University, 5 University of Toronto

June 22, 2018 Debloating Containers

1

Page 2: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Containers in a nutshell

• Pack resources and configuration with application

• Lightweight virtualization solution

• Shared OS kernel

• Portable, easy to use

Increasingly popular

June 22, 2018 Debloating Containers 2

Page 3: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

OS Bloat

• Today’s operating systems → abundance of services/code

3June 22, 2018 Debloating Containers

Page 4: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

OS Bloat• Today’s operating systems → abundance of services/code

• Increases potential attack surfaces

• Reduces performance

• Tens of millions of lines of code

• Poor isolation of kernel & applications from privileged code

• Once attacker has control of OS → can abuse any application

• All modules & services

• not necessary for the specialized/debloated containers

• Our goal: Reduce the size/complexity of operating systems

4June 22, 2018 Debloating Containers

Page 5: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Main Thrusts

• Fundamental Techniques• Partial Evaluation

• Dynamic+Static Analyses

• Symbolic Analysis

• ….

• Applications• Application specialization

• De-bloating containers

• Kernel specialization

June 22, 2018 Debloating Containers

5

Page 6: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

End-to-End System

June 22, 2018 Debloating Containers

6

Container

Cimplifier

“Cimplified” Containers

Code Specialization/

Exec Slicing tools

Reduced Containers (CAF)

Commodity OS

Cap

ture

Nec

essa

ry

Syst

em C

alls

Further SystemCall Info

Necessary Kernel Services required by Reduced Containers

Necessary Kernel Services required by Container

Other KernelServices

Other KernelServices

Reduced Applications

+ Kernels

Interface to other KernelServices

Page 7: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Partial Evaluation for Binaries

June 22, 2018 Debloating Containers

7

Page 8: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

End-to-End System

June 22, 2018 Debloating Containers

8

1. Partial Evaluation2. Compiler-assisted Specialization

Page 9: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Partial Evaluation

• Framework for specializing and optimizingprograms

• Performs common optimizations implicitly Partial Evaluator

int power(int x, int y, int n) {int a = 1;while (n--) {

a *= (x + y);}return a;

}

int powery = 1, n = 2(int x) {int a = 1;a *= (x + 1);a *= (x + 1);return a;

}

[y ↦ 1, n ↦ 2]

Residual Program

June 22, 2018

Initial PartialState

Page 10: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Machine-Code Partial Evaluation:Potential Applications

June 22, 2018 Debloating Containers

10

• Debloating & attack-surface reduction− Partial evaluator emits specialized versions of procedures

− Excludes paths that are non-executable for a given input − Provides a way to remove program features

Page 11: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Machine-Code-Partial-Evaluation Goal: Disable and Remove Static Apache Modules

June 22, 2018 Debloating Containers

11

HTTPD

cgi env

log_config Config Files

mime

mime

log_config

HTTPD

Configuration values incorporated into program logic

Page 12: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Machine-Code Partial Evaluation:Potential Applications

June 22, 2018 Debloating Containers

12

• Debloating & attack-surface reduction− Partial evaluator emits specialized versions of procedures

− Excludes paths that are non-executable for a given input − Provides a way to remove program features

• Layer collapsing & attack-surface modification− In-lining intermingles the caller and callee− Consolidates layers of the system− Changes which attacks succeed

Page 13: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Machine-Code-Partial-Evaluation Goal: Layer Collapsing

June 22, 2018

13

Application

Library 1

Library 2

Func A

Func B

Func C

Func D

Func E

Application

Func A

Func B

Func C

Page 14: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Basic Blocks Specialized on States

June 22, 2018 Debloating Containers

14

B

Partial Evaluation

<B,𝜎1>

<B,𝜎2>

Challenge: Tracking state/block pairs.

<B,𝜎3> <B,𝜎4>

Page 15: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

State Tracking via Incremental Rabin Fingerprints

June 22, 2018 Debloating Containers

15

P1 P2 P3 P4

Pages

Old Hash: H

New Hash: H’ = incorporate(H, 𝛿1, 𝛿4)

Compute H’ using only H, 𝛿1,and 𝛿4

P1’ P2 P3 P4’

Memory Writes𝛿1 𝛿4

With:4 GiB address space~1M basic blocks 128-bit fingerprint:

Probability of a collision < 2−56

Page 16: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Status and Future Work

June 22, 2018 Debloating Containers

16

• Current status of x86 partial evaluator− Pre-𝛼 stage: works on micro-benchmarks

• Future work− Scaling up x86 partial evaluator

• Success on larger hand-crafted benchmarks• Coreutils• Apache modules

− New partial-evaluation algorithm tailored for feature removal

Page 17: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Compiler-assisted Specialization

June 22, 2018 Debloating Containers

17

Page 18: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Compiler-assisted Specialization

• A program is always run with some fixed inputs

• Develop a light-weight technique that “partially evaluates” the program with respect to those fixed inputs

• Expose information about the fixed inputs to the compiler• For example, by making some variables constant

• Let the compiler perform optimizations, including removing dead code

June 22, 2018 Debloating Containers

18

Page 19: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example

• ImageMagick provides handling of several image formats and multiple transformations on images

June 22, 2018 Debloating Containers

19

Page 20: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

June 22, 2018 Debloating Containers

20

Page 21: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example

• ImageMagick provides handling of several image formats and multiple transformations on images

• In a specific deployment, we need only a some formats and some transformations

• We can specialize ImageMagick and remove all the unnecessary code for this deployment

• Reduces the attack surface due to ImageMagick

June 22, 2018 Debloating Containers

21

Page 22: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Approach

• Run the program until a specific point

• Whatever variables can be made constant based on fixed inputs, make them so

• Compile again with optimizations turned on

June 22, 2018 Debloating Containers

22

Page 23: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example: Exponentiation

Exponentiation ➞ Square

argv[1] is fixed to be 2

June 22, 2018 Debloating Containers

23

Page 24: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example: Exponentiation

Made variables constant

June 22, 2018 Debloating Containers

24

Page 25: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example: Exponentiation

After compiler optimizations

June 22, 2018 Debloating Containers

25

Page 26: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Determining ConstantificationCandidates • Several ways to run the program

• Taint analysis• Mark non-fixed inputs tainted

• May need to handle issues with control dependences on tainted variables

• Differential fuzzing• Fuzz non-fixed inputs

• Track constant portions of program memory across runs

• Symbolic execution• Make non-fixed inputs symbolic, fixed inputs concrete

• Track concrete portions of program memory

June 22, 2018 Debloating Containers

26

Page 27: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Status and Future Work

• We use KLEE for symbolic execution

• The results from KLEE are used to modify the LLVM IR of the program

• The IR is then optimized by standard LLVM passes

• Working on small programs such as exponentiation

• Next step: get system working on GNU coreutils

June 22, 2018 Debloating Containers

27

Page 28: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Debloating Containers

June 22, 2018 Debloating Containers

28

Page 29: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

End-to-End System

June 22, 2018 Debloating Containers

29

1. Cimplifier: runtime analysis2. Symbolic execution

Page 30: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Container Images

• Built layer-upon-layer

• E.g., the MySQL image builds over debian:jessie

• Keeps all files from debian:jessie even if they are not necessary

• Some containers even pack more than one application – not how containers should work

June 22, 2018 Debloating Containers 30

Page 31: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Cimplifier

• A tool to de-bloat and partition containers

• Finds and remove unneeded resources

• Partition containers based on user-defined policy• Might even need to create separate customized kernels

• Automatically creates complying partitions that function together like the original container

June 22, 2018 Debloating Containers

31

Page 32: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Container Size (MB) Analysis Time (s)

Result Size (MB)

Size Reduction

nginx 133 5.5 6 95%

redis 151 5.5 12 92%

mongo 317 14.0 46 85%

python 119 5.3 30 75%

registry 33 2.9 28 15%

haproxy 137 4.3 10 93%

mediawiki 576 16.8 244 58%

wordpress 602 16.2 207 66%

ELK stack 985 26.1 251 75%

Evaluation: Processing Containers

June 22, 2018 Debloating Containers

32

Page 33: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Further Directions: Symbolic Execution

• Cimplifier uses strace to identify required system resources • Dynamic analysis leads to incomplete code coverage• Integrate symbolic execution with Cimplifier

• increase code coverage

• Tried a variety of tools:• Klee, Driller

• Other tools had limits (limited to C, limits to testcase generation, etc.)

• We finally settled on: Angr

33June 22, 2018 Debloating Containers

Page 34: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Angr*

• Analyzes binaries → both static and dynamic symbolic ("concolic") analysis• Works on multi-architecture binaries

• We use it to analyze container binaries to get the list of syscalls

• avoids testcase generation

• Con: path explosion

* Shoshitaishvili et al. “SOK: (State of) The Art of War: Offensive Techniques in Binary Analysis”, IEEE S&P 2016.

34June 22, 2018 Debloating Containers

Page 35: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

How we use Angr

• To identify system resources required by a docker container• trace syscalls starting from docker-containerd process → strace

• Possibility of variation in inputs • only with the “core applications” executed by the container

• core applications → either from developer/Cimplifier• analyze only these “core application” binaries using angr

• Get list of additional syscalls used by the container using Angr

• Combine the syscalls lists from strace and angr

• This list is useful for:1. Container debloating by Cimplifier

2. Kernel debloating

35June 22, 2018 Debloating Containers

Page 36: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Binary Analysis using Angr – Prelim Results

• Code coverage =

𝑁𝑜.𝑜𝑓 𝐵𝑎𝑠𝑖𝑐 𝑏𝑙𝑜𝑐𝑘𝑠𝑣𝑖𝑠𝑖𝑡𝑒𝑑 𝑑𝑢𝑟𝑖𝑛𝑔

𝑠𝑦𝑚𝑏𝑜𝑙𝑖𝑐 𝑒𝑥𝑒𝑐𝑢𝑡𝑖𝑜𝑛𝑇𝑜𝑡𝑎𝑙 𝑁𝑜.𝑜𝑓 𝑏𝑎𝑠𝑖𝑐 𝑏𝑙𝑜𝑐𝑘𝑠

𝑖𝑛 𝐶𝐹𝐺 𝑜𝑓 𝑏𝑖𝑛𝑎𝑟𝑦

* 100

• Achieve 100% code coverage by exploring all states in symbolic execution

• Issue -> Path explosion

Containers Binaries analyzed by Angr

100% Code Coverage by

Angr

nginx nginx YES

eugeneware/docker-

wordpress-nginx

nginx YES

php5-fpm NO

mysqld NO

redis redis-server

NO

mongo mongod NO

python python NO

registry registry NO

36June 22, 2018

Page 37: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Future Work in Cimplifier+SymbolicExecution

• Strategies for binaries where 100% code coverage not possible due to path explosion:

1. Setting timeouts • get code coverage as close as possible to 100%

2. Tweaking exploration strategies used by angr• to reduce path explosion

• Integration with Cimplifier• more aggressive Container reduction/slicing

37June 22, 2018 Debloating Containers

Page 38: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Debloating OS Kernels

June 22, 2018 Debloating Containers

38

Page 39: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

End-to-End System

June 22, 2018 Debloating Containers

39

1. Splitting into trusted/untrusted kernels2. Kernel Reduction Approach

Page 40: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Specialize OS for Containers

1. Proxos-based Kernel Debloating

2. Other Kernel Reduction Approaches• Call graph analysis

• Instrumentation/dynamic techniques

• Code rewriting

• Unikernels

• etc.

June 22, 2018 Debloating Containers

40

Page 41: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Proxos-based Debloating [OSDI 2006]

Commodity OS VM

Hypervisor

Private VM

Private OS

Commodity OS Kernel

Other

Applications

Proxos

Security-

Sensitive

Application

Host Process

Private

ApplicationSensitive Data

• Proxos → isolation of private/privileged application

• System calls to sensitive resources → private VM

• Application doesn’t know it is being isolated

June 22, 2018 Debloating Containers

41

Page 42: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Proxos Example | SSH Server• Apps have access to commodity OS

• But sensitive resources can be isolated

• E.g.: SSH Server • user passwords, host key, etc. → private OS

• All network packets decrypted in private app before cmd shell

June 22, 2018 Debloating Containers

42

Commodity OS VMPrivate VM

SSH

ServerPrivate OS

Linux Kernel

Host Process

Proxos

Passwords

Host Keys

Command ShellNetwork

Encrypt

Pipe

Page 43: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Unikernels• Specialized, single-address-space machine images

• constructed by using library operating systems

• Pros:• shrink the attack surface • resource footprint naturally

• Cons:• impoverished library ecosystem• limited debugging• porting existing applications takes too much effort

June 22, 2018 Debloating Containers

43

Page 44: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Exploration of Linux Kernel Reduction

44June 22, 2018 Debloating Containers

Page 45: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Linux Kernel Configuration

• Kernel configurations are generic• built to run more than one application and devices

• hence not tuned for a specific (set of) application

• Kernel configuration system• ~3000 configuration options

• Extremely complex, many hidden dependencies

• Compiling minimal kernel currently involves• Gaining lots of domain-specific knowledge about Linux kernel

• Deep understanding of OS requirements of application

• Ad-hoc trial and error, add/remove build config options until application seems to work

June 22, 2018 Debloating Containers

45

Page 46: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Tinyconfig: a better starting point?

Unselect all optional configs, only enable configs that reduce size

• It is hard to customize everything for an application• optional feature configs e.g. ASLR, debugging functionality• no knowledge of the underlying hardware e.g. network card vendor

• Goal is to find a minimal set of configs for a given application• System call list of target application gives hints• Add required features to ”tinyconfiged” kernel

June 22, 2018 Debloating Containers

46

Page 47: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Tinyconfig+Developer Options: NGINXOptions Selected: tinyconfig + o Network Stacko Initramfs supporto Virtualizationo Executable file formats support for ELF binarieso #! scripts

Binary Size (compressed)

Binary Size # Source files in binary

# Source files used in trace

Configuration Options

defconfig 7.5MB 30MB 3162 N/A 1256

customconfig

837KB 1.9MB 1030 637 326

June 22, 2018 Debloating Containers

47

Page 48: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Syscall-based Reduction1.Identify the system call list used by application and kernel

• Dynamic tracing: strace• Symbolic execution [klee/angr]

2.Remove unused system calls• Every syscall is an entry point in the control flow graph of kernel• Removing syscall code can, potentially, mark more unused callees• e.g. do_mprotest_pkey becomes unused if SyS_mprotect &

SyS_pkey_mprotect are removed

June 22, 2018 Debloating Containers

48

Page 49: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Results: Syscall-Based Reduction

June 22, 2018 Debloating Containers

49

Application Return1 Hello WorldImageMagic-

identify

x86_64_def 54.1 MB

tinyconfig 1.4072 MB

debloat 1.1058 MB 1.1143 MB 1.1359 MB

Page 50: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Application Integration

• Fine-grained information of application ➔ customization• complete system call list• system call arguments

• Above information extracted with • our static analysis• Specialization for specific kernel modules• etc.

June 22, 2018 Debloating Containers

50

Page 51: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Kernel Debloat Future Work1. Automate application-centric kernel customization

o Configuration-based

o Static & Dynamic analyses [e.g. Syscall and Kernel-CFG-based]

o Binary Rewritingo E.g. slicing/program specialization

2. Supporting multiple “reduced” containerso Multiple specialized kernels

o Proxos-style private+community kernel shared across containers

3. Runtime management for reduced kernels+containerso Scheduling multiple custom kernels

o Routing (hypercall-facilitated) communication between kernels

June 22, 2018 Debloating Containers

51

Page 52: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Thanks!

June 22, 2018 Debloating Containers

52

Page 53: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

BACK-UP

June 22, 2018 Debloating Containers

53

Page 54: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

OS/Kernel De-bloat• Use a combination of techniques developed from

• Cimplifier• Proxos• Other kernel reduction techniques

• Create specialized kernels for reduced container apps

• Proxos-C

• Cimplifer debloats containers into multiple, smaller ones• Main application → isolated into one, “critical” container• Other applications → other, potentially multiple, containers

June 22, 2018 Debloating Containers

54

Page 55: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Proxos-C | Debloated Container-Aware Proxos

• Developer annotates critical application with ‘private’ OS calls

• Use Cimplifier-style analyses • to identify necessary kernel resources

• Package ‘private’ kernel resources separately (as kernel modules)• OS will route calls from critical de-bloated container to this module• All calls from other containers routed to another module

• rest of OS services

• Initial step: manual process

• We intend to automate the following:• Identifying the critical (container-relevant) system calls• Identifying kernel resources that must be ‘private’ and carving them out

June 22, 2018 Debloating Containers

55

Page 56: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Proxos-C [contd.]

• In this model,• Our (potentially debloated) application container → private

application in Proxos

• Hence, all system calls from critical container → ‘private’

• Our solution: Use combinations of static and dynamic analyses• To identify required kernel resources for this critical container

• compile-time analysis, symbolic execution, runtime monitoring, etc.

• Challenge: identifying arguments of system calls

• Package the identified system calls separately• Calls to other resources, if needed, will re-routed by OS/hypervisor

June 22, 2018 Debloating Containers

56

Page 57: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Future | Kernel Reduction/Specialization• Beyond Proxos-C

• Look for kernel reduction techniques that gets rid of unnecessary services

• Specialize the OS for the containers

• Currently studying other methods that can reduce kernel bloat• Call graph analysis• kprobes/ftrace• Code rewriting• Unikernels• Micro hypervisors

June 22, 2018 Debloating Containers

57

Page 58: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Bloated Container Images

• Size: Containerized versions of even simple applications come close to or above a GB

Storage and network transfer costs

• More files in container => more vulnerabilitiesMany vulnerabilities, like Shellshock and ImageTragick, avoided simply by removing files.

58June 22, 2018 Debloating Containers

Page 59: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example: ImageMagick

ImageMagick

June 22, 2018 Debloating Containers 59

Page 60: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example: ImageMagick

ImageMagick• Contains many

extraneous programs and filesbash

curl

wget

June 22, 2018 Debloating Containers 60

Page 61: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

De-bloating

ImageMagick

• Remove extraneous programs and files

• Reduces impact of vulnerabilities

• Remote code execution vulnerabilities of ImageTragick rendered harmless

bash

curl

wget

June 22, 2018 Debloating Containers 61

Page 62: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Issues with monolithic containers

• Multiple apps in a single image -> compromising one app leads to compromising others

• Separating each app in its own image significantly reduce the attack surface

• When apps are partitioned, lateral attacks become significantly more difficult!

June 22, 2018 Debloating Containers 62

Page 63: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Example: Mediawiki

• All components together can affect each other

HTTPDMediaWiki

ImageMagick

MySQL Server

Initial ConfigurationScript

June 22, 2018 Debloating Containers 63

Page 64: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Partition

• Isolate components

• E.g., ImageMagick now minimally affects other components

HTTPDMediaWiki

ImageMagick

MySQL Server

Initial ConfigurationScript

June 22, 2018 Debloating Containers 64

Page 65: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Architecture

Resource Identification

Container Partitioning

Glue Insertion

HTTPDMediaWiki

ImageMagick

MySQL Server

Initial ConfigurationScript

HTTPDMediaWiki

ImageMagick

MySQL Server

Initial ConfigurationScript

Input Container Output Containers

SyscallLogs

User Constraints

June 22, 2018 Debloating Containers

65

Page 66: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Resource Identification

• Based on dynamic analysis

• Collect system call logs from test runs

• Identify resources and operations performed on them for each thread of execution

• Ensures necessary resources are not removed

June 22, 2018 Debloating Containers

66

Page 67: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Container Partitioning

• Associate threads with executables

• Form a ”call graph” at an executable level

• Associate resources with executables

• Place executables in different partitions according to policy

• Policy specifies both negative and positive constraints, identifying which executables must not be or should be together

June 22, 2018 Debloating Containers

67

Page 68: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Evaluation: Processing Containers

• Examined six one-application containers and 3 multi-application ones

• Produces functional, de-bloated partitions

• Size reduction in containers ranged from 15% to 95% (reduction > 50% for all but one case)

• Given system call logs, containers can be processed with good performance, in under 30 second in our tests

June 22, 2018 Debloating Containers

68

Page 69: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Glue Insertion:Remote Process Execution• Partitions must interact

to perform the original function

• We automatically transfer execution of a process from one container to another

• Low overhead

• Uses the fact that containers run on shared kernel

June 22, 2018 Debloating Containers 69

Page 70: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Glue Insertion:Remote Process Execution - II

• Suppose MediaWiki needs to execute ImageMagick

• …but ImageMagick has been moved to a different container

• Our approach generates a stub for ImageMagickwhich connects to the RPE server in the ImageMagickcontainer

• RPE works transparently to the applications – no application modifications required

June 22, 2018 Debloating Containers 70

Page 71: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Evaluation: Runtime Overhead

• Containers run original code, so no overhead

• Only overhead is due to glue insertion

• Running time overhead per-execution is 1-4 ms, easily amortized over application runs

• Memory overhead is about 1 MB per partition

June 22, 2018 Debloating Containers

71

Page 72: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Symbolic Execution – Tools explored

1. Klee• symbolic execution tool • works on source code written in C• [Cadar et al 2008]

Limitations - 1. Limited to C2. Source code required for analysis3. Code coverage vs path explosion – choosing

symbolic inputs so as to increase code coverage and decrease path explosion

72

Page 73: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Symbolic Execution – Tools explored 2. Driller

• uses combination of fuzzing (AFL) and symbolic execution (angr)• to generate test cases

• To get list of syscalls, • first generate possible testcases for container applications

• then run strace on container with generated testcases

• [Stephens et al 2016]

1. Works on multi-architecture binaries

2. Reduces path explosion by using fuzzing

1. Container apps take inputs from various sources (e.g. network and config files)• This makes testcase generation tedious

2. Container apps may run multiple binaries

• so strace must be run on all combinations of testcases for the various binaries

Pros Cons

73

Page 74: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Proxos | Routing System Calls

• System calls routed to commodity OS using RPC’s:• Shared memory region between the commodity OS and Proxos

• Created at Startup

Xen VMM

Commodity OS VMPrivate VM

Private

Application

Proxos

Interrupt

Handler

Host

Process

Linux

Kernel

Shared Buffer

ArgsReturn

Value

June 22, 2018 Debloating Containers

74

Page 75: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Linux Kernel Configuration[contd.]

• Requirements to build a custom/reduced kernel• Knowledge of the configuration system

• Knowledge of the application

• Awareness of application independent configurations ex: Security improvements

• Current state of affairs• Ad-hoc process, trial and error

• Try a set of configurations derived by the developer

• If the app runs, remove a bunch of configs and repeat

• If the app fails, try a bigger set of configs and repeat

June 22, 2018 Debloating Containers

75

Page 76: Techniques and Tools for De-bloating Containers...Techniques and Tools for De-bloating Containers Somesh Jha1, Tom Reps1,2, Sibin Mohan3, Rakesh Bobba4, David Lie5, Eric Schulte2 1

Linux Compilation

1.Configurea.make config by parsing Kconfigs to combine into a single .config fileb.`make defconfig` to configure the kernel base on the current

architecture.c. most configs are drivers which are unnecessary to execute a programd.default configuration make a bloated kernel

i. 54.1MB (x86_defconfig) vs 1.4MB (tinyconfig) on the file size of vmlinux in bytes

2.Compilea.Check the .config file to include the wanted features

June 22, 2018 Debloating Containers

76