Best Practices of IoT Security in the Cloud

92
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. October 24, 2016 Best Practices for IoT Security in the Cloud

Transcript of Best Practices of IoT Security in the Cloud

Page 1: Best Practices of IoT Security in the Cloud

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

October 24, 2016

Best Practices for IoT

Security in the Cloud

Page 2: Best Practices of IoT Security in the Cloud
Page 3: Best Practices of IoT Security in the Cloud

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS IoT Security

Page 4: Best Practices of IoT Security in the Cloud

All things around us are getting connected

Page 5: Best Practices of IoT Security in the Cloud

All things around us are getting connected

Page 6: Best Practices of IoT Security in the Cloud

Things will proliferate

2013 2015 2020

Vertical Industry

Generic Industry

Consumer

AutomotiveMany

Some

Lots

Page 7: Best Practices of IoT Security in the Cloud

Connected ≠ Smart

Internet 1985 IoT 2015

Gopher HTTP

FTP MQTT

NNTP CoAP

Telnet XMPP

Archie AQMP

Page 8: Best Practices of IoT Security in the Cloud

In reality, it is even more complex

Layer Standards

Application HTTP, MQTT, AMQP, CoAP, XMPP

Network IPv4, IPv6, 6LoWPAN, ZigBee, Z-Wave, Insteon

Physical Ethernet, CAN, USB, 802.11, Bluetooth, 802.15.4, SPI

Page 9: Best Practices of IoT Security in the Cloud

A Simple Goal

Page 10: Best Practices of IoT Security in the Cloud

But my data

isn’t sensitive!

Page 11: Best Practices of IoT Security in the Cloud

Why do IoT at all?

Changes

happen in

the real

world!

Page 12: Best Practices of IoT Security in the Cloud

The Risk

Changes

happen in

the real

world!

Bad

Page 13: Best Practices of IoT Security in the Cloud

The Risk

Changes

happen in

the real

world!

Bad

Page 14: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 15: Best Practices of IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 16: Best Practices of IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 17: Best Practices of IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 18: Best Practices of IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 19: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 20: Best Practices of IoT Security in the Cloud

Network Traffic Is Complex

04:07:18.045065 IP 85.119.83.194.1883 > 10.0.0.67.51210: Flags

[P.], seq 1586864891:1586864913, ack 820274045, win 227, options

[nop,nop,TS val 2390025928 ecr 577393885], length 22

0x0000: 4500 004a 3694 4000 2d06 639e 5577 53c2

0x0010: 0a00 0043 075b c80a 5e95 a2fb 30e4 637d

0x0020: 8018 00e3 66cd 0000 0101 080a 8e74 e6c8

0x0030: 226a 54dd 3214 0007 666f 6f2f 6261 7200

0x0040: 0454 656d 703a 2038 3346

Page 21: Best Practices of IoT Security in the Cloud

Network Tools Are Up To It

MQ Telemetry Transport Protocol

Publish Message

0011 0010 = Header Flags: 0x32 (Publish Message)

0011 .... = Message Type: Publish Message (3)

.... 0... = DUP Flag: Not set

.... .01. = QOS Level: Acknowledged deliver (1)

.... ...0 = Retain: Not set

Msg Len: 20

Topic: foo/bar

Message Identifier: 1

Message: Temp: 83F

Page 22: Best Practices of IoT Security in the Cloud

Mutual Auth TLS

Page 23: Best Practices of IoT Security in the Cloud

Mutual Auth TLS

Page 24: Best Practices of IoT Security in the Cloud

Mutual Auth TLS

Page 25: Best Practices of IoT Security in the Cloud

Talking to Non-Things

DynamoDB LambdaKinesis

Page 26: Best Practices of IoT Security in the Cloud

AWS Auth + TLS

Page 27: Best Practices of IoT Security in the Cloud

One Service, Two Protocols

MQTT + Mutual Auth TLS AWS Auth + HTTPS

Server Auth TLS + Cert TLS + Cert

Client Auth TLS + Cert AWS API Keys

Confidentiality TLS TLS

Protocol MQTT HTTP

Page 28: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 29: Best Practices of IoT Security in the Cloud

Back To Certs and Keys

Page 30: Best Practices of IoT Security in the Cloud

AWS-Generated Keypair

Page 31: Best Practices of IoT Security in the Cloud

AWS-Generated Keypair

Page 32: Best Practices of IoT Security in the Cloud

AWS-Generated Keypair

Page 33: Best Practices of IoT Security in the Cloud

Actual Commands

$ aws iot create-keys-and-certificate --set-as-active

{

"certificateArn":

"arn:aws:iot:us-east-1:123456972007:cert/d7677b0…SNIP…026d9",

"certificatePem":

"-----BEGIN CERTIFICATE-----…SNIP…-----END CERTIFICATE-----",

"keyPair": {

"PublicKey":

"-----BEGIN PUBLIC KEY-----…SNIP…-----END PUBLIC KEY-----",

"PrivateKey":

"-----BEGIN RSA PRIVATE KEY-----…SNIP…-----END RSA PRIVATE KEY-----"

},

"certificateId":

"d7677b0…SNIP…026d9"

}

Page 34: Best Practices of IoT Security in the Cloud

AWS-Generated Keypair

Page 35: Best Practices of IoT Security in the Cloud

Client Generated Keypair

CSR

Page 36: Best Practices of IoT Security in the Cloud

Certificate Signing Request

Dear Certificate Authority,

I’d really like a certificate for %NAME%, as identified by

the keypair with public key %PUB_KEY%. If you could sign

a certificate for me with those parameters, it’d be super

spiffy.

Signed (Cryptographically),

- The holder of the private key

Page 37: Best Practices of IoT Security in the Cloud

Client Generated Keypair

CSR

Page 38: Best Practices of IoT Security in the Cloud

Client Generated Keypair

CSR

Page 39: Best Practices of IoT Security in the Cloud

Client Generated Keypair

CSR

Page 40: Best Practices of IoT Security in the Cloud

Client Generated Keypair

Page 41: Best Practices of IoT Security in the Cloud

Client Generated Keypair

Page 42: Best Practices of IoT Security in the Cloud

Client Generated Keypair

Page 43: Best Practices of IoT Security in the Cloud

Actual Commands

$ openssl genrsa –out ThingKeypair.pem 2048

Generating RSA private key, 2048 bit long modulus

....+++

...+++

e is 65537 (0x10001)

$ openssl req -new –key ThingKeypair.pem –out Thing.csr

-----

Country Name (2 letter code) [XX]:US

State or Province Name (full name) []:NY

Locality Name (eg, city) [Default City]:New York

Organization Name (eg, company) [Default Company Ltd]:ACME

Organizational Unit Name (eg, section) []:Makers

Common Name (eg, your name or your server's hostname) []:John Smith

Email Address []:[email protected]

Page 44: Best Practices of IoT Security in the Cloud

Actual Commands

$ aws iot create-certificate-from-csr \

--certificate-signing-request file://Thing.csr \

--set-as-active

{

"certificateArn":

"arn:aws:iot:us-east-1:123456972007:cert/b5a396e…SNIP…400877b",

"certificatePem":

"-----BEGIN CERTIFICATE-----…SNIP…-----END CERTIFICATE-----",

"certificateId":

"b5a396e…SNIP…400877b"

}

Page 45: Best Practices of IoT Security in the Cloud

Private Key Protection – Test & Dev

$ openssl genrsa -out ThingKeypair.pem 2048

Generating RSA private key, 2048 bit long modulus

......................+++

.................................+++

e is 65537 (0x10001)

$ ls -l ThingKeypair.pem

-rw-rw-r-- 1 ec2-user ec2-user 1679 Sep 25 14:10 ThingKeypair.pem

$ chmod 400 ThingKeypair.pem ; ls -l ThingKeypair.pem

-r-------- 1 ec2-user ec2-user 1679 Sep 25 14:10 ThingKeypair.pem

Page 46: Best Practices of IoT Security in the Cloud

Private Key Protection – Software Threats

chroot

SELinux

OTP Fuses

Page 47: Best Practices of IoT Security in the Cloud

Private Key Protection – Hardware Threats

TPMs

Smartcards

Locks and Boxes

FIPS-style hardware

Page 48: Best Practices of IoT Security in the Cloud

Identity Revocation

$ aws iot list-certificates

{

"certificateDescriptions": [

{

"certificateArn":

"arn:aws:iot:us-east-1:123456972007:cert/d7677b0…SNIP…026d9",

"status": "ACTIVE",

"certificateId":

"d7677b0…SNIP…026d9"

"lastModifiedDate": 1443070900.491,

"certificatePem":

"-----BEGIN CERTIFICATE-----…SNIP…-----END CERTIFICATE-----",

"ownedBy": "123456972007",

"creationDate": 1443070900.491

}

]

}

Page 49: Best Practices of IoT Security in the Cloud

Identity Revocation

$ aws iot update-certificate --certificate-id "d7677b0…SNIP…026d9" --new-status REVOKED

$ aws iot list-certificates

{

"certificateDescriptions": [

{

"certificateArn":

"arn:aws:iot:us-east-1:123456972007:cert/d7677b0…SNIP…026d9",

"status": "REVOKED",

"certificateId":

"d7677b0…SNIP…026d9"

"lastModifiedDate": 1443192020.792,

"certificatePem":

"-----BEGIN CERTIFICATE-----…SNIP…-----END CERTIFICATE-----",

"ownedBy": "123456972007",

"creationDate": 1443070900.491

}

]

}

Page 50: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 51: Best Practices of IoT Security in the Cloud

Managing Things

DynamoDB LambdaKinesis

Page 52: Best Practices of IoT Security in the Cloud

Managing Things

DynamoDB LambdaKinesis

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": ”ManageCerts",

"Action": [

"iot:CreateCertificateAndKeys",

"iot:CreateCertificateFromCsr",

"iot:DescribeCertificate",

"iot:UpdateCertificate",

"iot:DeleteCertificate",

"iot:ListCertificates”

],

"Effect": "Allow",

"Resource": "*"

}

]

}

Page 53: Best Practices of IoT Security in the Cloud

Managing Things

DynamoDB LambdaKinesis

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "RevokeOneThing",

"Action": [

"iot:UpdateCertificate"

],

"Effect": "Allow",

"Resource":

"arn:aws:iot:us-east-1:123456972007:cert/d7677b0…SNIP…026d9",

"Condition": {

"IpAddress": {

"aws:SourceIp": "192.168.42.54"

}

}

}

]

}

Page 54: Best Practices of IoT Security in the Cloud

Identity Federation

DynamoDB LambdaKinesis

Page 55: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 56: Best Practices of IoT Security in the Cloud

Data Access Control – AWS APIs

DynamoDB LambdaKinesis

Page 57: Best Practices of IoT Security in the Cloud

Data Access Control – AWS APIs

DynamoDB LambdaKinesis

{

"Version":"2012-10-17",

"Statement":[ {

"Effect":"Allow",

"Action":[ "iot:Connect" ],

"Resource":"*"

}, {

"Effect":"Allow",

"Action":[ "iot:GetThingShadow" ],

"Resource":[

"arn:aws:iot:us-east-1:123456972007:thing/MyThing"]

}, {

"Effect":"Allow",

"Action":[ "iot:Publish" ],

"Resource":[ "arn:aws:iot:us-east-1:123456972007:

topic/$aws/things/MyThing/shadow/update"]

}

]

}

Page 58: Best Practices of IoT Security in the Cloud

Mobile Users as Things

DynamoDB LambdaKinesis

Page 59: Best Practices of IoT Security in the Cloud

Mobile Users as Things

DynamoDB LambdaKinesis

{

"Version":"2012-10-17",

"Statement":[ {

"Effect":"Allow",

"Action":[ "iot:Connect" ],

"Resource":"*"

}, {

"Effect":"Allow",

"Action":[ "iot:GetThingShadow" ],

"Resource":[

"arn:aws:iot:us-east-1:123456972007:

thing/${cognito-identity.amazonaws.com:aud}"]

}, {

"Effect":"Allow",

"Action":[ "iot:Publish" ],

"Resource":[ "arn:aws:iot:us-east-1:123456972007:topic/$aws/things/

${cognito-identity.amazonaws.com:aud}/shadow/update"]

}

]

}

Page 60: Best Practices of IoT Security in the Cloud

Data Access Control - MQTT

DynamoDB LambdaKinesis

Page 61: Best Practices of IoT Security in the Cloud

Data Access Control - MQTT

DynamoDB LambdaKinesis

{

"Version":"2012-10-17",

"Statement":[ {

"Effect":"Allow",

"Action":[ "iot:Connect" ],

"Resource":"*"

}, {

"Effect":"Allow",

"Action":[ "iot:Publish" ],

"Resource":[

"arn:aws:iot:us-east-1:123456972007:

topic/$aws/things/MyThing/shadow/update"]

}, {

"Effect":"Allow",

"Action":[ "iot:Subscribe", "iot:Receive" ],

"Resource":[

"arn:aws:iot:us-east-1:123456972007:

topicfilter/$aws/things/MyThing/shadow/*"

]

}

]

}

Page 62: Best Practices of IoT Security in the Cloud

Actual Commands$ cat MyThingPolicy.json

{

"Version":"2012-10-17",

"Statement":[ {

"Effect":"Allow",

"Action":[ "iot:Connect" ],

"Resource":"*"

}, {

"Effect":"Allow",

"Action":[ "iot:Publish" ],

"Resource":["arn:aws:iot:us-east-1:123456972007:

topic/$aws/things/MyThing/shadow/update"]

}, {

"Effect":"Allow",

"Action":[ "iot:Subscribe", "iot:Receive" ],

"Resource":["arn:aws:iot:us-east-1:123456972007:

topicfilter/$aws/things/MyThing/shadow/*"

]

}

]

}

Page 63: Best Practices of IoT Security in the Cloud

Actual Commands

$ aws iot create-policy\

--policy-name MyThingPolicy\

--policy-document file://MyThingPolicy.json

{

"policyName": "MyThingPolicy",

"policyArn": "arn:aws:iot:us-east-1:123456972007:policy/MyThingPolicy",

"policyDocument": "...SNIP...",

"policyVersionId": "1"

}

$ aws iot attach-principal-policy\

--principal "arn:aws:iot:us-east-1:123456972007:cert/b5a396e…SNIP…400877b”\

--policy-name "MyThingPolicy"

Page 64: Best Practices of IoT Security in the Cloud

Protocol Convergence

MQTT + Mutual Auth TLS AWS Auth + HTTPS

Server Auth TLS + Cert TLS + Cert

Client Auth TLS + Cert AWS API Keys

Confidentiality TLS TLS

Protocol MQTT HTTP

Identification AWS ARNs AWS ARNs

Authorization AWS Policy AWS Policy

Page 65: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 66: Best Practices of IoT Security in the Cloud

Rules and Services

DynamoDB LambdaKinesis

Page 67: Best Practices of IoT Security in the Cloud

Actual Commands$ cat ThingRoleTrustPolicy.json

{

"Version":"2012-10-17",

"Statement":[

{

"Sid":"",

"Effect":"Allow",

"Principal":{

"Service":"iot.amazonaws.com"

},

"Action":"sts:AssumeRole"

}

]

}

Page 68: Best Practices of IoT Security in the Cloud

Actual Commands$ aws iam create-role\

--role-name thing-actions-role\

--assume-role-policy-document file://ThingRoleTrustPolicy.json

{

"Role": {

"AssumeRolePolicyDocument": …SNIP…

"RoleId": "AROAIQ4HBGG7V7F27E32K",

"CreateDate": "2015-09-27T16:29:56.438Z",

"RoleName": "thing-actions-role",

"Path": "/",

"Arn": "arn:aws:iam::123456972007:role/thing-actions-role"

}

}

Page 69: Best Practices of IoT Security in the Cloud

Actual Commands$ cat ThingRolePolicy.json

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "DDBAccess",

"Action": [

"dynamodb:PutItem",

"dynamodb:UpdateItem"

],

"Effect": "Allow",

"Resource": "arn:aws:dynamodb:us-east-1:123456972007:table/MyThingTable"

},

]

}

Page 70: Best Practices of IoT Security in the Cloud

Actual Commands$ aws iam create-policy\

--policy-name thing-role-policy\

--policy-document file://ThingRolePolicy.json

{

"Policy": {

"PolicyName": "thing-role-policy",

"CreateDate": "2015-09-27T16:32:17.998Z",

"AttachmentCount": 0,

"IsAttachable": true,

"PolicyId": "ANPAINCEAOD5EEXOLZWAI",

"DefaultVersionId": "v1",

"Path": "/",

"Arn": "arn:aws:iam::123456972007:policy/thing-role-policy",

"UpdateDate": "2015-09-27T16:32:17.998Z"

}

}

$ aws iam attach-role-policy\

--role-name "thing-actions-role"\

--policy-arn "arn:aws:iam::123456972007:policy/thing-role-policy"

Page 71: Best Practices of IoT Security in the Cloud

Building AWS Things

Page 72: Best Practices of IoT Security in the Cloud

Industrial Example

Manufacturer End UserVendor

Key Pair

Certificate

App

Page 73: Best Practices of IoT Security in the Cloud

Key Pair

Certificate

App

Industrial Example

Manufacturer End UserVendor

Page 74: Best Practices of IoT Security in the Cloud

Industrial Example

Key Pair

Certificate

App

Manufacturer End UserVendor

Page 75: Best Practices of IoT Security in the Cloud

Industrial Example

Key Pair

Certificate

App

Manufacturer End UserVendor

Page 76: Best Practices of IoT Security in the Cloud

Consumer Example

Page 77: Best Practices of IoT Security in the Cloud

Consumer Example

Key Pair

Certificate

App

Manufacturer Vendor

Page 78: Best Practices of IoT Security in the Cloud

Consumer Example

Key Pair

Certificate

App

Manufacturer Vendor

Page 79: Best Practices of IoT Security in the Cloud

Consumer Example

Key Pair

Certificate

App

Manufacturer End UserVendor

Page 80: Best Practices of IoT Security in the Cloud

Claiming a Thing

service.awsthermostat.com

Page 81: Best Practices of IoT Security in the Cloud

Claiming a Thing

service.awsthermostat.com

Page 82: Best Practices of IoT Security in the Cloud

Claiming a Thing

service.awsthermostat.com

Page 83: Best Practices of IoT Security in the Cloud

Claiming a Thing

service.awsthermostat.com

Page 84: Best Practices of IoT Security in the Cloud

Claiming a Thing

service.awsthermostat.com

{

"Version":"2012-10-17",

"Statement":[ {

"Effect":"Allow",

"Action":[ "iot:Connect" ],

"Resource":"*"

}, {

"Effect":"Allow",

"Action":[ "iot:Publish" ],

"Resource":[

"arn:aws:iot:us-east-1:123456972007:topic/$aws/things

/%COGNITO_ID%/shadow/update"

]

},

"Effect:"Allow",

"Action":[ "iot:Subscribe", "iot:Receive" ],

"Resource":[

"arn:aws:iot:us-east-1:123456972007:topicfilter/$aws

/things/%COGNITO_ID%/shadow/*"

]

}

]

}

Page 85: Best Practices of IoT Security in the Cloud

Using a Thing

{

"Version": "2012-10-17",

"Statement": [{

"Effect":"Allow",

"Action":[ "iot:Connect" ],

"Resource":"*"

}, {

"Effect": "Allow",

"Action": [ "iot:Publish" ],

"Resource": [

"arn:aws:iot:us-east-1:123456972007:

topic/$aws/things/${cognito-identity.amazonaws.com:aud}/shadow/update"

]

}, {

"Effect": "Allow",

"Action": [ "iot:Subscribe", "iot:Receive" ],

"Resource": [

"arn:aws:iot:us-east-1:123456972007:

topicfilter/$aws/things/${cognito-identity.amazonaws.com:aud}/shadow/*"

]

}]

}

Page 86: Best Practices of IoT Security in the Cloud

Consumer Example

Key Pair

Certificate

App

Manufacturer End UserVendor

Page 87: Best Practices of IoT Security in the Cloud

Requirements

Secure Communications with Things

Strong Thing Identity

Fine-grained Authorization for:

Thing Management

Pub/Sub Data Access

AWS Service Access

Page 88: Best Practices of IoT Security in the Cloud

Two Secure Protocols

Page 89: Best Practices of IoT Security in the Cloud

Bootstrapping Identity

CSR

Page 90: Best Practices of IoT Security in the Cloud

Flexible, Consistent Access Control

DynamoDB LambdaKinesis

Page 91: Best Practices of IoT Security in the Cloud

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

All attendees will receive a special giveaway gift!

Please join us for the

AWS DevDay Networking Reception

5:00 - 6:30 PM

JW Grand Foyer

Page 92: Best Practices of IoT Security in the Cloud

Thank you!