Top Banner
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. John Rotach Software Development Engineer – AWS IoT October 27, 2016 Best Practices for IoT Security in the Cloud
69

Best Practices for IoT Security in the Cloud

Apr 16, 2017

Download

Technology

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: Best Practices for IoT Security in the Cloud

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

John RotachSoftware Development Engineer – AWS IoT

October 27, 2016

Best Practices for IoT Security in the Cloud

Page 2: Best Practices for IoT Security in the Cloud

All things around us are getting connected

Page 3: Best Practices for IoT Security in the Cloud

All things around us are getting connected

Page 4: Best Practices for IoT Security in the Cloud

Things will proliferate

2013 2015 2020

Vertical IndustryGeneric IndustryConsumerAutomotiveMany

Some

Lots

Page 5: Best Practices for IoT Security in the Cloud

Connected ≠ Smart

Internet 1985 IoT 2016

Gopher HTTP

FTP MQTT

NNTP CoAP

Telnet XMPP

Archie AQMP

Page 6: Best Practices for 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 7: Best Practices for IoT Security in the Cloud

But my data isn’t sensitive!

Page 8: Best Practices for IoT Security in the Cloud

Why do IoT at all?

Changes happen inthe realworld!

Page 9: Best Practices for IoT Security in the Cloud

The Risk

Changes happen inthe realworld!

Bad

Page 10: Best Practices for IoT Security in the Cloud

A Simple Goal

Page 11: Best Practices for IoT Security in the Cloud

Requirements

Secure Communications with ThingsStrong Thing IdentityFine-grained Authorization for:

ThingsPeople

Page 12: Best Practices for IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 13: Best Practices for IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 14: Best Practices for IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 15: Best Practices for IoT Security in the Cloud

The System

DynamoDB LambdaKinesis

Page 16: Best Practices for IoT Security in the Cloud

Requirements

Secure Communications with ThingsStrong Thing IdentityFine-grained Authorization for:

ThingsPeople

Page 17: Best Practices for 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 18: Best Practices for 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 19: Best Practices for IoT Security in the Cloud

Mutual Auth TLS

Page 20: Best Practices for IoT Security in the Cloud

Mutual Auth TLS

Page 21: Best Practices for IoT Security in the Cloud

Mutual Auth TLS

Page 22: Best Practices for IoT Security in the Cloud

Requirements

Secure Communications with ThingsStrong Thing IdentityFine-grained Authorization for:

ThingsPeople

Page 23: Best Practices for IoT Security in the Cloud

What are Certs and Keys?

Certificate – Public identityPrivate Key – Private proofRoot CA – Validate

rootCA

Page 24: Best Practices for IoT Security in the Cloud

Elliptical Curve Cryptography (ECC)

ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-RSA-AES128-GCM-SHA256

Elliptical curve logarithm vs RSA integer factorizationSmaller key sizes for same securityECDHE – key exchange algorithm (forward secrecy with ephemeral keys)ECDSA – signature algorithm with EC private keys (authentication)

Page 25: Best Practices for IoT Security in the Cloud

AWS-Generated Keypair

CreateKeysAndCertificate()

Page 26: Best Practices for 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 27: Best Practices for IoT Security in the Cloud

CreateKeysAndCertificate()

AWS-Generated Keypair

Page 28: Best Practices for IoT Security in the Cloud

Client Generated Keypair

CSR

Page 29: Best Practices for 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 30: Best Practices for IoT Security in the Cloud

Client Generated Keypair

CSR

CreateCertificateFromCSR(CSR)

Page 31: Best Practices for IoT Security in the Cloud

Actual Commands

$ openssl genrsa –out ThingKeypair.pem 2048Generating 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]:USState or Province Name (full name) []:NYLocality Name (eg, city) [Default City]:New YorkOrganization Name (eg, company) [Default Company Ltd]:ACMEOrganizational Unit Name (eg, section) []:MakersCommon Name (eg, your name or your server's hostname) []:John SmithEmail Address []:[email protected]

Page 32: Best Practices for 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 33: Best Practices for IoT Security in the Cloud

Register your own Certificate Authority

GetVerificationCode()

Page 34: Best Practices for IoT Security in the Cloud

Register your own Certificate Authority

CSR

RegisterCACertificate(CSR)

Page 35: Best Practices for IoT Security in the Cloud

Provisioning your own certificates

RegisterCe

rtificate(

Cert)

CSR

Page 36: Best Practices for IoT Security in the Cloud

Provisioning your own certificates

Page 37: Best Practices for IoT Security in the Cloud

Just-in-time registration

RegisterCe

rtificate(

Cert)

Page 38: Best Practices for IoT Security in the Cloud

Just-in-time registration

CONNECT

AWSLambda

NewDevice(Certificate)

AttachPolicy()ActivateCertificate()CreateThing()UpdateShadow()

DISCONNECT

Page 39: Best Practices for IoT Security in the Cloud

Enhanced Security from Device to Cloud

Page 40: Best Practices for IoT Security in the Cloud

Private Key Protection – Test & Dev

$ openssl genrsa -out ThingKeypair.pem 2048Generating 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 41: Best Practices for IoT Security in the Cloud

Private Key Protection

SoftwarechrootSELinux

HardwareTPMsSmartcardsOTP FusesFIPS-style hardware

Page 42: Best Practices for 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 43: Best Practices for 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 44: Best Practices for IoT Security in the Cloud

Takeaways

• Many provisioning methods

• Each device gets its own certificate

• Use a certificate authority for offline provisioning

Page 45: Best Practices for IoT Security in the Cloud

Requirements

Secure Communications with ThingsStrong Thing IdentityFine-grained Authorization for:

ThingsPeople

Page 46: Best Practices for IoT Security in the Cloud

Policy actions

• Connect• Publish• Subscribe• Unsubscribe• Receive

Page 47: Best Practices for IoT Security in the Cloud

Connect policy

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Connect" ], "Resource":"arn:aws:iot:us-east-1:123456972007: client/MY-THING-NAME" } ]}

Page 48: Best Practices for IoT Security in the Cloud

Connect policy

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Connect" ], "Resource":"arn:aws:iot:us-east-1:123456972007: client/MY-THING-NAME_*" } ]} MY-THING-NAME_Application1

MY-THING-NAME_Application2

MY-THING-NAME_Application3

Page 49: Best Practices for IoT Security in the Cloud

Publish policy

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Publish" ], "Resource":"arn:aws:iot:us-east-1:123456972007: topic/$aws/things/MyThing/shadow/update" } ]}

Page 50: Best Practices for IoT Security in the Cloud

Even finer control

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Publish" ], "Resource":"arn:aws:iot:us-east-1:123456972007: topic/$aws/things/MyThing/shadow/update" } ]}

Allows updating the entire shadow

Page 51: Best Practices for IoT Security in the Cloud

Even finer control

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:Publish" ], "Resource":"arn:aws:iot:us-east-1:123456972007: topic/actions/MyThing/open" } ]}

Use a different topic

Page 52: Best Practices for IoT Security in the Cloud

Even finer control

AWS IoT

Direct publishing to shadow

Page 53: Best Practices for IoT Security in the Cloud

Even finer control

AWS IoT

Use a rule to update specific shadow fields

Page 54: Best Practices for IoT Security in the Cloud

Takeaways

• Structure topics for permissions

• Make policies as restrictive as possible

• Wildcards can simplify policy management

• Rules can help with fine-grained permissions

Page 55: Best Practices for IoT Security in the Cloud

Requirements

Secure Communications with ThingsStrong Thing IdentityFine-grained Authorization for:

ThingsPeople

Page 56: Best Practices for IoT Security in the Cloud

Applications

DynamoDB LambdaKinesis

Page 57: Best Practices for IoT Security in the Cloud

IAM Role policy{ "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 58: Best Practices for IoT Security in the Cloud

Mobile

DynamoDB LambdaKinesis

AMAZONCOGNITO

Page 59: Best Practices for IoT Security in the Cloud

Policy for Cognito with IoTCognito authenticated user identity pool role policy:{ "Effect": "Allow", "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:GetThingShadow", "iot:UpdateThingShadow" ], "Resource": "*"}

Specific policy for Joe IoT Cognito user:{ "Effect": "Allow", "Action": "iot:UpdateThingShadow", "Resource": "arn:aws:iot:…:thing/joe-sprinkler123"}

Page 60: Best Practices for IoT Security in the Cloud

Policy for Cognito with IoTCognito authenticated user identity pool role policy:{ "Effect": "Allow", "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:GetThingShadow", "iot:UpdateThingShadow" ], "Resource": "*"}

Specific policy for Joe IoT Cognito user:{ "Effect": "Allow", "Action": "iot:UpdateThingShadow", "Resource": "arn:aws:iot:…:thing/joe-sprinkler123"}

AmazonCognito

Page 61: Best Practices for IoT Security in the Cloud

Policy for Cognito with IoTCognito authenticated user identity pool role policy:{ "Effect": "Allow", "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:GetThingShadow", "iot:UpdateThingShadow" ], "Resource": "*"}

Specific policy for Joe IoT Cognito user:{ "Effect": "Allow", "Action": "iot:UpdateThingShadow", "Resource": "arn:aws:iot:…:thing/joe-sprinkler123"}

AWS IoT

Page 62: Best Practices for IoT Security in the Cloud

Overall Cognito “pairing” workflow

1. Create a Cognito identity pool2. Customer signs in using mobile app3. Associate their user with their devices4. Create a scope-down policy in IoT for their user5. Attach that policy to their Cognito user in IoT

Page 63: Best Practices for IoT Security in the Cloud

Overall Cognito “pairing” workflow

1. Create a Cognito identity pool2. Customer signs in using mobile app3. Associate their user with their devices4. Create a scope-down policy in IoT for their user5. Attach that policy to their Cognito user in IoT

Important: These steps apply to authenticated Cognito users only. (NOT to unauthenticated!)

Page 64: Best Practices for IoT Security in the Cloud

Managing fine-grained permissions

• One user may need permissions to many things• "arn:aws:iot:…:thing/sprinkler123abc"• "arn:aws:iot:…:thing/sprinkler456def"• …

• Listing each is tedious

Page 65: Best Practices for IoT Security in the Cloud

Best practice: Thing name prefixing

• Prefix thing name with logical owner• sensor123abc -> joe-sensor123abc

• Aspen policy supports wildcards• "arn:aws:iot:…:thing/sensor123abc"• "arn:aws:iot:…:thing/sensor123abc"• "arn:aws:iot:…:thing/sensor456def"• …• "arn:aws:iot:…:thing/joe-*"

Page 66: Best Practices for IoT Security in the Cloud

Takeaways

• Application access is done through IAM roles/policies

• Cognito enables secure human control over IoT devices

• IoT scope-down policy supports fine-grained control

• Naming conventions simplify policy management

Page 67: Best Practices for IoT Security in the Cloud

Demo

Creating Certificates - 1-click - CSR

Just In Time Registration

Page 68: Best Practices for IoT Security in the Cloud

Requirements

Secure Communications with ThingsStrong Thing IdentityFine-grained Authorization for:

ThingsPeople