23
V1.1 | 2018-03-05 Detecting and Addressing Cybersecurity Issues Putting the dynamic into software security testing

Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

V1.1 | 2018-03-05

Detecting and Addressing Cybersecurity Issues

Putting the dynamic into software security testing

Page 2: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

2

Code ahead!Automotive Software Security Testing

Page 3: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

3

Automated vulnerability detection and triageAutomotive Software Security Testing

+ =

Page 4: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

4

Vector was engaged with a large, US Tier 1 and we were addressing “software quality”u They acknowledged they had software quality issuesu Concern was related to how these quality issues could affect securityu Project goals morphed into low-hanging “security fruit” (for both the customer and the attacker)!

Our goal was more along the lines of “robustness”!

How did we get here?Automotive Software Security Testing

Page 5: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

5

VectorCAST test automation platformAutomotive Software Security Testing

Page 6: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

6

Vector testing solutionAutomotive Software Security Testing

System Validation

System Integration

Test

SoftwareIntegration

Test

Software Unit Test

SoftwareImplementation

So

ftw

are

Sys

tem

White-box testing on host / on target

Vect

orCAST

Ana

lytic

s

Benefitsu Full support in the development process, from

software unit test to system validationu Uniform test management, test automation (CI),

result analysis and traceability

Link

to

Requ

irem

ents

VectorCAST/C++

CANoe, vTESTstudio vVIRTUALtarget

VectorCAST/C++ and /QA

CANoe, vTESTstudioVT System

VectorCAST/QA

SW integration testing + code coverage

on PC

System validation+ code coverage

on ECUChange-Based Testing

Page 7: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

7

The approach

u Automatically interrogate the code and identify possible weaknesses (a la static analysis)

u Once a potential CWE is found, generate a test exploiting the identified issue and execute it (dynamic execution)

u After execution, analyses the execution trace and decide if the potential CWE is a genuine threat

The idea

u To be able to identify and automatically test for undiagnosed security vulnerabilities

u Utilizes MITRE’s classification of CWEs (common weakness enumeration)

u Once an instance of a generic CWE is found in the software, that issue is then classed as a CVE (common vulnerability and exposure)

Vulnerability detection via dynamic analysisAutomotive Software Security Testing

Code CWEs Tests Execution Analysis CVEs

Page 8: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

8

Weaknesses identified

u Via the analysis of open-source projects, a number of API-usage related issues have been identified

u A large US automotive Tier 1 has used it to find security-specific reuse issues on their software platform

u Able to automatically find issues such as NULL pointer dereference (CWE-476), classic buffer overflow (CWE-120) and improper resource shutdown/release (CWE-404)

The benefits

u Unlike static analysis, this method will only flag an issue if we can generate an exploit, eliminating the false-positive issue plaguing static analysis

u The generation of test artefacts allows for their future re-execution to demonstrate the mitigation of a potential issue after software re-design

u Can be used for both on-host and on-target execution (think security validation for embedded systems)

Vulnerability detection via dynamic analysisAutomotive Software Security Testing

Automated Validation

Page 9: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

9

Mutational (test-suite) fuzz testing u Take an existing test-suiteu Modify the values to be “randomly” erroneousu Run it with coverageu Does it crash?u If yes: potential weakness!

Directed (“intelligent”) security testingu Identify an expression of interest

> E.g., pointer dereference, divide by zerou Generate a test reaching that line with erroneous valuesu Run it with coverageu Does it crash?u If yes: potential weakness!

Two technical approachesAutomotive Software Security Testing

Page 10: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

10

u Not detected: CppCheck, Facebook’s Infer, Uno

u Possible error: Lint, CodeHawk

u Programmatic error detected (SIGSEGV): VectorCAST

Example from lighttpdAutomotive Software Security Testing

int buffer_copy_string_buffer(buffer *b, const buffer *src)

{

if (!src) return -1;

if (src->used == 0)

{

b->used = 0;

return 0;

}

return buffer_copy_string_len(b, src->ptr, src->used - 1);

}

Page 11: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

11

The approach is focused on automatically generating tests for a number of classifications of vulnerabilities according to MITRE

At the highest level, we look to address the general banner CWE-398 (“indication of poor code quality”)Some examples of issues we aim to detect

u “Hard” errorsu Use of a NULL pointer (CWE-476)u Buffer {under,over}flow (stack corruption) (CWE-124)u Divide by zero (CWE-369)

u Mismatched calls – malloc/free, fopen/fclose, pthread_mutex_lock/pthread_mutex_unlock (CWE-401/404/413/415/590)

u Bad arguments – memcpy (CWE-120/130)u Unchecked return – malloc (CWE-252/690)

Security weaknesses of interestAutomotive Software Security Testing

Page 12: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

12

Technical Approach

Page 13: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

13

Existing test-case:

>TEST.VALUE:buffer.buffer_copy_string_buffer.src:<<malloc 1>>>TEST.VALUE:buffer.buffer_copy_string_buffer.src[0].used:0>TEST.VALUE:buffer.buffer_copy_string_buffer.b:<<malloc 1>>

Manipulate the values:

>TEST.VALUE:buffer.buffer_copy_string_buffer.src:<<malloc 1>>>TEST.VALUE:buffer.buffer_copy_string_buffer.src[0].used:0>TEST.VALUE:buffer.buffer_copy_string_buffer.b:<<null>>

Execute!

Automated (mutational) fuzz testing for unit testingAutomotive Software Security Testing

Page 14: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

14

u Replace “x” with “code” and “0” with “null pointer dereference”

From software to mathematicsAutomotive Software Security Testing

Page 15: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

15

We combine in-depth static analysis with “constraint solving” to identify more complex weaknesses:

> param_2->x += 3;> param_3->y += 2;> return param_1->z / (param_2->x - param_3->y);

Fuzz testing has to “get lucky” here, but using test-case generation we can directly generate a test such that:

> (param_2->x − 3) − (param_3->y − 2) ≡ 0This gets fed to a “black box” oracle that can provide the answer!

Directed test-case generation for weaknessesAutomotive Software Security Testing

Page 16: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

16

Real World Examples

Page 17: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

17

There exists a number of paths through the code where Thou_MPH is unassigned (so undefined behaviour) or is assigned to zero

What is surprising is that Thou_MPH is checked against 0 and then used in a divide at the same scope-level

u No corrective action taken, even though the corrective condition is already detected!

Real examples found (divide by zero) – automotiveAutomotive Software Security Testing

extern VEHICLE_T Vehicle;

void check_speed(uint8_t speed_ThouMPH)

{

uint32_t temp,Thou_MPH,Thou_RPM;

if(Vehicle.WHEELSPEED<150) {}

else

{

if(speed_ThouMPH>1000) {}

else

{

Thou_MPH=0;

}

}

if(Thou_MPH==0)

{

// no change to Thou_MPH!

}

else {}

temp=(100*Thou_RPM)/Thou_MPH;

}

Page 18: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

18

A lot of the code for provided in this project was extremely judicious in checking all parameters

u Their style of coding made this crash stand-out, as ptrTaskData is never checked for null!

Real examples found (NULL pointer) – medicalAutomotive Software Security Testing

STATUS process_lamp_event(LAMP_PATTERN_t patternId,

LAMP_TASK_DATA_t *ptrTaskData)

{

DRV_RET_CODE_t drvRetCode = DRV_RC_ERROR;

STATUS retCode = OK;

LAMP_PATTERN_t tmpPatternId = patternId;

if (((LAMP_FAST_BLINKING == ptrTaskData->previousPatternId)

|| (LAMP_SLOW_BLINKING == ptrTaskData->previousPatternId))

&& (LAMP_PATTERN_NONE == tmpPatternId))

{

tmpPatternId = ptrTaskData->previousPatternId;

}

ptrTaskData->counter += ptrTaskData->timeout_ms;

}

Page 19: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

19

“Actionable Intelligence”

Page 20: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

20

An approach to ascertaining quickly Chess’ “Morningstar for Software Security”

u ☆☆ – “absence of obvious reliability issues”u This similar to CWE-398 for poor code quality

The easy ones

u Defect densityu Defects/SLoC

u Lines free from obvious issues (via code coverage)u Confidence of “defect freedom” (but not guaranteed!)

u Ratio of security tests free of defectsu Higher ratio => more secure

Software metricsActionable Intelligence

Page 21: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

21

Open Source analysisActionable Intelligence

ProjectMetric LIGHTTPD ZLIB LIBXML2Version 1.4.20 1.2.8 2.9.4# files 89 16 84SLoC⁶ 36,605 6,726 184,179Unique # issues 709 113 2,926Defect density (defects/line) 1/52 1/60 1/63Avg. # of tests per defect 11 7 12Tests hitting defects 69% 28% 40%Functions with defects 44% 44% 29%Functions with vg ≥ 20 and defects⁷ 51% 55% 66%

⁶measured with cloc

⁷Jones’08: “[complexity] levels greater than 20 are considered hazardous”

Page 22: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

22

Process

u Identify portfoliou Assess vulnerabilities

u Manage risk

Some of the issues we find you might consider are “non-issues” or are mitigated against as part of your software architecture

u That’s great…

u …be wary about software re-use across projects!

Mainly: no “one size fits all” solution – use multiple tools!

u Dynamic execution can find certain vulnerabilities more definitively

u Need to always consider DP-E ratio (damage potential vs. effort)

Take homeAutomotive Software Security Testing

Page 23: Putting the dynamic into software security testing · 2018-10-30 · 6 Vector testing solution Automotive Software Security Testing System Validation System Integration Test Software

23 © 2018. Vector Informatik GmbH. All rights reserved. Any distribution or copying is subject to prior written approval by Vector. V1.1 | 2018-03-05

For more information about Vectorand our products please visit

www.vector.com