MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Memory Safety for Embedded Devices with nesCheck
Daniele MIDI, Mathias PAYER, Elisa BERTINO
Purdue due Univer ersity sity
AsiaCCS 2017
Devices with nesCheck Daniele MIDI, Mathias PAYER, Elisa BERTINO - - PowerPoint PPT Presentation
Memory Safety for Embedded Devices with nesCheck Daniele MIDI, Mathias PAYER, Elisa BERTINO AsiaCCS 2017 Purdue due Univer ersity sity MATHIAS PAYER PURDUE UNIVERSITY ASIACCS 2017 Ubiquitous Computing and Security Sensors and WSNs are
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Purdue due Univer ersity sity
AsiaCCS 2017
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Small + cheap smart thermostats, production pipelines, “precision” agriculture
Smart embedded systems + Internet-based services
Stringent requirements on:
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Trans nsient/per ent/perma manen nent failur ures es
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
NesC suffers same problems as C
Very constrained platform, no virtual memory, high overhead, …
Allows language-based techniques
Some can be verified statically
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Automatically catch memory bugs, provide sound memory safety guarantees while minimizing performance overhead.
APPLICATIONS: Automatic hardening of embedded software, consumer and corporate devices, …
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Find all statically-provable bugs report errors
Find all violations report warnings
Statically determine “safe” violations
Instrument remaining violations, catch all memory errors at runtime.
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
TARGET PLATFORM COMPILATION
gcc
INSTRUMENTATION
nesCheck
METADATA CALCULATION + CHECKS REDUCTION
nesCheck
TYPE INFERENCE
nesCheck
SSA CONVERSION + TRANSFORMATION TO IR
clang
COMPOSITION + PREPROCESSING
ncc
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
foreach declaration of pointer variable p do classify(p, SAFE); foreach instruction I using pointer p do r result of(I); if I performs pointer arithmetic then classify(p, SEQ); classify(r, SAFE); if I casts p to incompatible type then classify(p, DYN); classify(r, DYN);
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
One instance per variable at any time
Logical variables across basic blocks
In-memory runtime information
sl sh b e
0x00 0xff
void f(int a) { int* p; if (a > 0) } p = malloc(4 * sizeof(int)); else p[3] = 13; p = malloc(20 * sizeof(int));
1 2 3 4
metadata pmeta; pmeta.size = 4 * sizeof(int); pmeta.size = 20 * sizeof(int); check(p[3], pmeta) && p[3] = 13;
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
For any violating pointer dereference
Before GetElementPointer LLVM instruction:
(e.g., p[i] for p with fixed length >= 3 and i inferred as 2)
(e.g., p[i] for p with fixed length < 3 and i inferred as 2)
Checks reduction
Based on type tracking and pointer usage When propagated metadata results in constant check
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Functions taking pointer parameters:
void f(int* p) void f(int* p, metadata pmeta)
Functions returning pointers:
int* f() {int*, metadata} f() return p; return {p, pmeta};
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
AVERAGES
Pointer Percentage
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Overhead
bytes
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
AVERAGES
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Removes checks of SAFE pointers only
Instruments all pointers
Requires extensive annotations or exclusion of entire components Relies on Deputy source-to-source compiler
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Average improvement:
Overhead
NAÏVE: E:
no check reduction optimizations
NESCHEC ECK: K:
with full check reduction optimizations
MATHIAS PAYER – PURDUE UNIVERSITY ASIACCS 2017
Type system for pointer types: safe, seq, dyn Statically prove pointer operations safe Protect potentially unsafe operations at runtime
APPLICATIONS: Automatic hardening of embedded software, consumer and corporate devices, … https://github.com/HexHive/nesCheck