Top Banner
NEVER TRUST YOUR INPUTS (OR HOW TO FOOL ADC)
78

Never Trust Your Inputs or how to fool an ADC

Apr 14, 2017

Download

Devices & Hardware

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Never Trust Your Inputs or how to fool an ADC

NEVERTRUSTYOURINPUTS(ORHOWTOFOOLADC)

Page 2: Never Trust Your Inputs or how to fool an ADC

;CAT/DEV/USER

2

Alexander@dark_k3yBolshev,Ph.D.SecurityResearcher@IOActiveAssistantProfessor@SPbETU “LETI”

Marina @marmushaKrotofilSecurityResearcher@HoneywellSec

Page 3: Never Trust Your Inputs or how to fool an ADC

3

AGENDA

q Problemstatementq Analog-to-DigitalConverters(ADC)q “Racing”withADCclockq Invalidamplituderangeofsignalq AttackvectorsinICSqMitigations

Page 4: Never Trust Your Inputs or how to fool an ADC

Workstation

Workstation

Firewall

ModemOperatorConsole

Firewall

SQLServer

PLC

RTU

Maintenance

FileServer

Webserver

Corporate LAN

SCADAnetwork

Webservices

Active Directory

SensorVentil

Active Directory

EngineeringWorkstation

Process LAN

4

Physical application

INDUSTRIALCONTROLSYSTEMS

Page 5: Never Trust Your Inputs or how to fool an ADC

5

PROCESSCONTROLINANUTSHELL

Actuators

Controlsystem

Physical process Sensors

Measureprocessstate

Computescontrolcommandsforactuators

Adjustthemselvestoinfluence

processbehavior

Page 6: Never Trust Your Inputs or how to fool an ADC

6

IMPACTOFIMPROPERSIGNALPROCESSING

http://www.co

ntrolglobal.com

/blogs/unfettered/marina-krotofils-presentation-on-

how-to

-hack-a-chem

ical-plant-and-its-implica

tion-to-actual-issues-at-a-nuclear-plant/

q Twoidenticallybuiltnuclearplants.Onehadflowinducedvibrationissue.Andanotherdidnot.

q Thevibrationsindicationshoweditselfashf noise- Fieldengineerhasfilteredthesignaltogetridofannoyingnoise- Lossofviewintovibrationissue

Equipmentdamageatnuclearplant

Page 7: Never Trust Your Inputs or how to fool an ADC

Workstation

Workstation

Firewall

ModemOperatorConsole

Firewall

SQLServer

PLC

RTU

Maintenance

FileServer

Webserver

Corporate LAN

SCADAnetwork

Webservices

Active Directory

SensorVentil

Active Directory

EngineeringWorkstation

Process LAN

7

Catastrophic consequences

REASONTOSECURECONTROLSYSTEMS

Page 8: Never Trust Your Inputs or how to fool an ADC

8

PROCESSMONITORING

CONTROLSYSTEM PROCESSOPERATOR OPERATORCONSOLE(HMI)

Page 9: Never Trust Your Inputs or how to fool an ADC

9

PROCESSMONITORING

CONTROLSYSTEM PROCESSOPERATOR OPERATORCONSOLE(HMI)

Page 10: Never Trust Your Inputs or how to fool an ADC

10

CONSIDERAFIELDARCHITECTURE

Analog control loop

Control PLC

Actuator

Monitoring PLC/ Logger/DAQ/Safety PLC

HMI

0V (actuator is OFF)

MV – Manipulated Variable

qWhatifMV valueonactuatorwillbedifferentfromMV valueonlogger?

1.5V (actuator is ON)

Page 11: Never Trust Your Inputs or how to fool an ADC

11

BUTIT’SANALOGCONTROLLINE!

Areyousure?

q It’simpossibletohavetwodifferentMVs onthesamelineatthesametime!

Page 12: Never Trust Your Inputs or how to fool an ADC

12

NOTETOEEANDDSPGUYS:

Areyousure?(2)

q Yes,weknowthatmostpartourtalkisaboutaliasing,andthisiseasilycouldbefixedbyantialiasingfilters..

q Andit“shouldbe”obvious,thatsuchfiltersareeverywhere…q But:

Page 13: Never Trust Your Inputs or how to fool an ADC

DEMOSETUP

13

“HMI Panel”

“Control PLC”(arduino)

“Actuator”(motor)

“Monitoring PLC”(S7 1200)

Page 14: Never Trust Your Inputs or how to fool an ADC

14

DEMO1

DEMOVIDEO-- Twodevices,twodifferentMVs--

Page 15: Never Trust Your Inputs or how to fool an ADC

15

Page 16: Never Trust Your Inputs or how to fool an ADC

INTROTOANALOG-TO-DIGITALCONVERTERS (ADC)

Page 17: Never Trust Your Inputs or how to fool an ADC

17

WHATISADC?

q Convertsacontinuousanalogsignal(voltageoramperage)toadigitalnumberthatrepresentssignal'samplitude

t

x(t)

Page 18: Never Trust Your Inputs or how to fool an ADC

18

ADCINANUTSHELL

Quantizing&

Encoding

• Frequency• Phase• Amplitude

Sampling & Holding (S/H) circuit

Resolution

MSBADC

Clock

uI(t)

VREF

uI’(t)fs Dn-1

D1D0

Conversion time

Input signal

Page 19: Never Trust Your Inputs or how to fool an ADC

19

TYPESOFADC

TherearemanyADCtypes(>10).Themostcommonare:

q Successive-approximationADC(SAR)q Sigma-deltaADCq Pipeline

http

://el

ectro

nicd

esig

n.co

m/a

nalo

g/re

al-wo

rld-v

ersu

s-you

r-adc

http

://w

ww

.plan

etan

alog.c

om/a

utho

r.asp

?sec

tion_

id=3

193&

doc_

id=5

6162

7

Page 20: Never Trust Your Inputs or how to fool an ADC

20

EXPLOITABLEADCDESIGNCONSTRAINS

q SamplingfrequencyshouldfollowNyquistrule( >2)-Otherwisethesignalwillappearoffalse (alias) frequency

fs f

Page 21: Never Trust Your Inputs or how to fool an ADC

21

EXPLOITABLEADCDESIGNCONSTRAINS

q AmplitudeoftheinputsignalshouldnotexceedADC’sdynamicrange-Itisdeterminedbythereferencevoltage

Time5

10

V

0

Page 22: Never Trust Your Inputs or how to fool an ADC

„RACING“WITHADCCLOCK

-- SARADC--

Page 23: Never Trust Your Inputs or how to fool an ADC

23

BLOCKDIAGRAM

http

s://e

n.w

ikip

edia

.org

/wik

i/Suc

cess

ive_

appr

oxim

atio

n_A

DC

- DAC =Digital-to-Analogconverter- EOC =EndofConversion- SAR =SuccessiveApproximation

Register- S/H =SampleandHoldcircuit- VIN =InputVoltage- VREF =ReferenceVoltage

SAR

DAC

S/H +-

Clock EOC

Comparator

VIN

VREF

DN-1 DN-2 D1 D0

Page 24: Never Trust Your Inputs or how to fool an ADC

24

SAR:WEIGHINGPROBLEM

q SARalgorithmisbasedononeofthesolutionstoweighingproblembyNiccolò FontanaTartaglia,Italianmathematicianandengineerin1556

http

s://e

n.w

ikip

edia

.org

/wik

i/Nic

col%

C3%

B2_

Font

ana_

Tarta

glia

http://www.analog.com/media/en/training-seminars/tutorials/MT-021.pdf

q Theobjectiveistodeterminetheleastnumberofweightswhichwouldservetoweighanintegralnumberofpoundsfrom1lb to40lb usingabalancescale

Page 25: Never Trust Your Inputs or how to fool an ADC

25

ADC:WEIGHINGPROCESS

VIN

VREF

¾VREF

½VREF

¼VREF

VDAC

BIT2=1 BIT0=1BIT1=0BIT3=0

Time

(MSB) (LSB)

Page 26: Never Trust Your Inputs or how to fool an ADC

LETSSETUPEXPERIMENTExperimentalsetup:- Arduino Leonardo

(Atmega32U4withbuild-inADC,125kHzint clock)

- Si5351generator

Algorithm:1. Generatesquaresignalwith

specificfrequencyandphase,2. Read120ADCvaluesinrow

andaveragethem,3. Output toserialport (PC),4. Increasephaseandfrequency,5. GOTO1.

Page 27: Never Trust Your Inputs or how to fool an ADC

27

RESULTWhat is this?!

Page 28: Never Trust Your Inputs or how to fool an ADC

28

RACINGWITHADCCLOCK

Page 29: Never Trust Your Inputs or how to fool an ADC

29

LETSREPEATOUREXPERIMENT

Frequency=around8.9kHz

Page 30: Never Trust Your Inputs or how to fool an ADC

for(;;){ asm("cbi 0x0e, 6"); val = __fastAnalogRead(A0); //inline function asm("sbi 0x0e, 6"); sum += val; step++;

if(step > 120){ if(phase >= 170){ phase = 0; freq += 100; }else phase += 10;

si5351.set_freq(freq, 0ULL, SI5351_CLK0); si5351.set_phase(SI5351_CLK0, phase);

Serial.print(sum * 1.0/step); 30

LETSREPEATOUREXPERIMENTLet’sintroduce“counter”toourcodeforaveraging120ADCconversions:

Fast analog read

Average, frequency changing and out to serial portgoes here

We’re putting here an outgoingZero-peak signal to see whenADC do actual work

Page 31: Never Trust Your Inputs or how to fool an ADC

31

TIMINGDIAGRAMEXPLAINSEVERYTHING

Page 32: Never Trust Your Inputs or how to fool an ADC

32

FROMATMEGA32U4DATASHEET

Chapter24onADC,page302

125kHz/14~8928Hz(112μs)

We’vejustbreachedthroughsamplingrateprecisionoftheADC!

Page 33: Never Trust Your Inputs or how to fool an ADC

33

NOTONLYBUILT-INADCSTestresultsforMCP3201ADC

fCLK =125kHZ

fCLK =8MHZ

14.3kHz

292.5kHz

Page 34: Never Trust Your Inputs or how to fool an ADC

34

“RACING“WITHADCCLOCK

-- Delta-SigmaADC--

Page 35: Never Trust Your Inputs or how to fool an ADC

35

DELTASIGMAADC

q Delta-sigma(ΔΣ;orsigma-delta,ΣΔ)modulationisamethodforencodinganalogsignalsintodigitalsignalsasfoundinanADC.

q Typically,delta-sigmaADCsclocksfromhigh-frequency signal,buttheresultingsamplerateismuchslower thanforothertypesofADC

q Example:AD7706ADC,clockfrequency– 2MHz,outputsamplerate– 25-500samples persecond.

q Thisallowstoproduceresultswithbiggerresolutionandmuchreliability.

https://en.wikipedia.org/wiki/Delta-sigma_modulation

Page 36: Never Trust Your Inputs or how to fool an ADC

36

MODUSOPERANDI http://www.analog.com/library/analogDialogue/archives/33-08/adc/index.htmlhttps://en.wikipedia.org/wiki/Delta-sigma_modulation

https://www.maximintegrated.com/en/app-notes/index.mvp/id/1870

Page 37: Never Trust Your Inputs or how to fool an ADC

37

DEMO3

Stillexploitable?LIVEDEMO-- delta-sigma--

Page 38: Never Trust Your Inputs or how to fool an ADC

38

Page 39: Never Trust Your Inputs or how to fool an ADC

39

ATTACKEFFORTS:SIGMA-DELTAVS.SAR

q SARADCsaremucheasiertoexploit(dueitssimplenature),howeverincreasingSARclockfrequencycouldproducemoreproblemsforattacker

q Delta-sigmaADCsallowsonlyafewwaystocraftreliableattack,howevertheresultcouldoverwhelmyourneeds.

Page 40: Never Trust Your Inputs or how to fool an ADC

40

-- ADCaccesstiming--

SOFTWARE-RELATEDPROBLEMS

Page 41: Never Trust Your Inputs or how to fool an ADC

41

DEMO3

DEMOVIDEO-- Onesignal,twoADCs--

Page 42: Never Trust Your Inputs or how to fool an ADC

42

FROMDEMO:TWODEVICES&TWODIFFOUTPUTSWait,butwhy?Timingdiagramscanexplain;-)

Page 43: Never Trust Your Inputs or how to fool an ADC

43

EVERYTHINGISMUCHEASIERINTHEICSWORLD

q Inmanyreal-world ICS applicationsADCdoesn’tsampleinputsignalwithhighestpossiblefrequency- Typicalsamplingrateis1-100timespersecond

Maliciouspartofsignal

Page 44: Never Trust Your Inputs or how to fool an ADC

44

HURDLESOFTHEATTACKER

q Howtofigureouttherequiredphaseandfrequencytocraftneededmalicioussignal?

q SendsomepeaksignalsandmonitoroutputoftheADC(directly/indirectly)

q E.g.byhackingintoswitchyoucanmonitor/controlbothdataflowtocontrolPLCAND digitaldataoutputfromMonitoringPLC/logger/DAQ/SafetyPLC/etc

Page 45: Never Trust Your Inputs or how to fool an ADC

45

FIGURINGOUTSIGNALPARAMETERS

ControlPLC

Actuator

HMICompromisedindustrialswitch

Monitoring PLC/ Logger/DAQ/Safety PLC

Page 46: Never Trust Your Inputs or how to fool an ADC

46

-- ADCconversiontime--

SOFTWARE-RELATEDPROBLEMS

Page 47: Never Trust Your Inputs or how to fool an ADC

47

ADCINCRITICALAPPLICATIONS

BecarefulwhenusingADCincriticalapplications

q IndustrialPLCsalsohaveanaloginputsandbuilt-inADCs

q Let’stestatoneofthemost popular PLCsS71200

Page 48: Never Trust Your Inputs or how to fool an ADC

48

Let’schecktherealconversiontimeofS71200ADC

Arduino

Waveformgenerator S71200

Analogsignal

S7Protocol

S7inputamplitudeFrequency

I2C

ReadsvaluefromPLCeveryNtime

EXPERIMENTSETUP

Page 49: Never Trust Your Inputs or how to fool an ADC

49Frequencyisfixed

N=8.3ms

N=9ms

N=7ms

N=4.5ms

N=2.5ms

Page 50: Never Trust Your Inputs or how to fool an ADC

50

Page 51: Never Trust Your Inputs or how to fool an ADC

51

Nothing,really.Youjustneedtoreaddatasheetmorethoroughly

Text in small letters

WHAT’SWRONG?

Page 52: Never Trust Your Inputs or how to fool an ADC

52

INVALIDRANGEOFSIGNALS

Page 53: Never Trust Your Inputs or how to fool an ADC

53

q Considera5-10VsignalwhichisconsumedbyADCwithranges0-15V

q Whatwillhappenifyousendsignallowerthan5Vorhigher10V? Time

5

10

V

From the real life code:

uint8_t val = readADC(0); // reading8-bitADCvaluewithranges0V-15Vval = val – 85; // Normalization->85==5Volts(255/3)

Anysignaloflessthem5V(val < 85)willcauseintegeroverflow inval

BREAKINGSOFTWAREDEFINEDRANGES

Page 54: Never Trust Your Inputs or how to fool an ADC

54

BREAKINGHARDWAREDEFINEDRANGES

WhatiftheattackersendssignaloutsideoftheADChardwaredefinedrange(>Vref)?

q ADCwilloutputmaxvalue(allbitsetto1)q ADCmightbedamagedq Valuesonotherinputs couldbedistorted

Page 55: Never Trust Your Inputs or how to fool an ADC

55

DEMOSETUP

USBUART

NegativeVoltagesource

Atmega328p

OpticalIsolator

Page 56: Never Trust Your Inputs or how to fool an ADC

56

DEMO4

DEMOVIDEO-- Negativeinputsignal--(breakinghardwarerange)

Page 57: Never Trust Your Inputs or how to fool an ADC

57

Page 58: Never Trust Your Inputs or how to fool an ADC

58

ANOTHEREXAMPLEBreakingHWRANGESforNXPLPC11U24FinternalADC(3.3VRef)

ADC/Ref Volts A-3 A-2 A-1 A-0 A+1 A+2 A+3NXPLPC11U24F(3.3VRef)

0.48 0.0 0.48 1.58 3.33.39 0.0 3.3 1.59 3.34.1 0.087 3.3 1.729 3.34.65 0.17 3.3 1.974 3.35.1 0.44 3.3 2.212 3.35.9 0.0 2.035 1.561 3.36.1-9.8 ~ ~ ~ ~-0.48 0.0 0.0 1.58 3.3-1.1 0.0 0.0 1.64 3.20-1.5 0.025 0.0 1.71 3.07-1.7 0.0 0.0 2.5 2.9-2 ~ ~ ~ ~

Page 59: Never Trust Your Inputs or how to fool an ADC

59

ATTACKVECTORSINICS

Page 60: Never Trust Your Inputs or how to fool an ADC

60

Linecouplingcircuit(usuallyOpAmp/Transformer)

Totalsetupcost50$(1kHz)-- 400$(50MHz)

DIRECTACCESSATTACKTOOLKIT(RARECASE)

Page 61: Never Trust Your Inputs or how to fool an ADC

61

ATTACKINGFROMICSDEVICE

qCompromisingoneofthefieldcomponents(PLC,sensor,actuator,DAQ,logger,etc.)- MostMCUsinsidetransmitters/actuatorsarecapableofgenerating

arbitrarysignalsupto500-1000Hz- Somedevicesallowtogeneratesignalsof44kHzandabove

Page 62: Never Trust Your Inputs or how to fool an ADC

62

ATTACKFROMTRANSMITTER

HARTtransmitterreferencedesign;-)DAC with s/r up to 100kHz(smooth sine wave at ~ 5kHz)

http

://w

ww

.tm-e

etim

es.c

om/e

n/ac

cura

te-in

dust

rial-t

empe

ratu

re-m

easu

rem

ents

-with

-loop

-pow

ered

-tra

nsm

itter

.htm

l?cm

p_id

=7&

new

s_id

=222

9188

50

Page 63: Never Trust Your Inputs or how to fool an ADC

63

MITIGATIONS

Page 64: Never Trust Your Inputs or how to fool an ADC

64

HARDWAREMITIGATIONS

Page 65: Never Trust Your Inputs or how to fool an ADC

65

LPFFILTERS(ANTIALIASING)INREFERENCEDESIGN

q Low-passfilterattenuatesignalswithafrequencyhigherthanitscutofffrequency

q BufferADCinputwithLPFq GooddesigndictatesADCfs >LPFfc

Page 66: Never Trust Your Inputs or how to fool an ADC

66

LPFFILTERSINREFERENCEDESIGN“WeincludedLPFinourdesign"

ADCwithfs ~470Hz

LPFwithfc near15kHz

Page 67: Never Trust Your Inputs or how to fool an ADC

67

SOLUTION

Page 68: Never Trust Your Inputs or how to fool an ADC

68

FLIPSIDEOFUSINGLPF

qWhenaddingLPFintoanindividualdevice,makesurethatallrelateddeviceshavethesame cut-offfrequencies

”Securing”mayleadtomorevulnerabilities

q E.g.ifPLCinput isbufferedwithLPF𝒇𝒄 = 𝟏𝒌𝑯𝒛 andactuator equippedwithLPFwith𝒇𝒄 = 𝟓𝒌𝑯𝒛,theattacknotonlypossible,buttheprobabilityofsuccessincreases!

Page 69: Never Trust Your Inputs or how to fool an ADC

69

NOTE:DIGITALLPFWON’TWORK!

DonotusedigitalLPFafter theADC!

q ADCwillbealreadycompromisedbyamaliciousintendedsignalandnodigitalfilterwillfixthematters

Page 70: Never Trust Your Inputs or how to fool an ADC

70

USEADCWITHHIGHERBANDWIDTH/LOWERCONVERSIONTIME(OROTHERTYPEOFADC)q UsingADCwithhighersamplingfrequency(mostlyforSARs)

canmitigate“racingwithADC”attackastheattackerwillhavetogeneratesignalofmuchhigherfrequency

q Orjustusedelta-sigmaADCs

q Generating~1MHz signalorinjectingitintoanaloglineismuchharderthangeneratingorinjecting~1kHz signal- H/fsignalssubjectedtogreaterattenuationandmoreaffected

bynoise

Page 71: Never Trust Your Inputs or how to fool an ADC

71

SCALESIGNALAMPLITUDEBEFOREADC

q ToavoidabuseofADCvoltageranges,normalizesignalamplitudebeforefeedingthesignaltoADC- Simplestoption:voltagedivider+OpAmp,- Signalconditioningcircuitsoreven

dynamicrangecompression

SelectwhatissuitableforyourOTprocess

Page 72: Never Trust Your Inputs or how to fool an ADC

72

SOFTWAREMITIGATIONS

Page 73: Never Trust Your Inputs or how to fool an ADC

73

SAMPLINGFREQUENCYRANDOMIZATION

http://www.sixsigma4service.com/evaluation-considerations-fo

r-data-sampling.html

SAMPLINGFREQUENCYRANDOMIZATIONq Certain randomnessinsamplingfrequencywillmakeattacker’s

jobmuchharder-Manyofthediscussedattackswillbemuchmorechallengingtoexecute

q Smallvariationof𝒇) won’tdegradesignalunderstandingprocess.Onthecontrary,itwillproduceasignalsampleofbetterquality.

𝒇) = 𝑓 + rand(△)

Time

V

0

Page 74: Never Trust Your Inputs or how to fool an ADC

74

APLYSECURECODINGTECHNIQUES

q ScrutinizeyourADCs/PLCdatasheetstofigureouteffectiveranges,conversiontime,frequencyandothercriticalparameters

q Evenifitissufficienttocontroltheprocesswithonevaluepersecond,samplethesignalwithhigherfrequencyandaverageconvertedvalues

qWhenreceivingvaluefromADC,treatitasanabsolutevalue(allbitsreceivedfromADCaresignificant)

Page 75: Never Trust Your Inputs or how to fool an ADC

75

DON’TSLEEP!(WHILEONDUTYJ )

Avoidwriting/usingthefollowingcode(ifyoudon’tcompletelyunderstandyourprocess)

Val = readADC();Output(Val);Sleep(Timeout);

Page 76: Never Trust Your Inputs or how to fool an ADC

76

BLACKHATSOUNDBYTESq Aliasingattacksandattacksusingvoltagerangesarestill

possibleagainstmodernADCcomponentsinsideICSdevices.(thanks,Cap!)

qMostoftheseproblemscouldbeeasilysolvedwithantialiasingfilters(LPF),however,thesefiltersshouldhavesamecut-offfrequencies.

q EvengoodLPFandgoodADCwillnotsaveyou,ifyoursoftwareworkswithADCincorrectly.

Page 77: Never Trust Your Inputs or how to fool an ADC

77

OTANDITHAVECOMMONPROBLEMS

NEVERTRUSTYOURINPUTS

Page 78: Never Trust Your Inputs or how to fool an ADC

@dark_k3y@marmusha