Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20180914 security iotlt#1_ほんとうにあった怖い話_aws_iot編

340 views

Published on

"A True Scary Story for AWS IoT"
IoTデバイスとAWS IoTを連携したシステムにおいて、デバイスからクライアント証

Published in: Technology
  • Be the first to comment

20180914 security iotlt#1_ほんとうにあった怖い話_aws_iot編

  1. 1. ほんとにあった怖い話 -デバイスセキュリティ診断 AWS IoT編- 2018.09.14 SecurityIoTLT#1 @ DEJIMA Tatsuya Katsuhara
  2. 2. 本日のトピック • みなさんも出会うかもしれない「IoTにありがちな」とても シンプルだけれど怖い脆弱性の話をします。 • エッジデバイスも含めて一番弱いところが、システム全体の 攻撃起点になります。 • AWS IoTを例に、デバイスが侵害される前提でのポリシー 設定ベスプラ(だと思う)を紹介します。
  3. 3. 自己紹介 勝原 達也 @kthrtty 某SIer→某セキュリティ企業 デジタル・アイデンティティ(2007~2016) 認証、OIDC、OAuth、SSO、IAM Web/プラットフォーム脆弱性診断(2016~2017) IoT /ハードウェア/重要インフラセキュリティ(2017~) 事業推進、営業、マネジメント、合間にペンテスター
  4. 4. とある「よくできた」IoTシステム IoT Gateway ホームセキュリティ エアコン ライト スマートフォン Zigbee MQTT over TLS AWS IoT 課金
  5. 5. デバイス侵害を起点とするアプローチ プロセッサ 記憶装置/ROM (EEPROM/FLASH) デバッグ端子/ シリアル端子 ・・・ 単体の機器・モジュールに対してペネトレする 結合環境でペネトレする システム ファーム抽出・解析 セキュリティ設定の不備 秘匿情報の漏えい データ改竄 デバッグロック解除 ログからの情報漏えい 通信モジュール 上位システムへの干渉 通信先の 差し替え 接続時の仕様ギャップによる問題 単体の問題を組み合わせ生じる攻撃 情報をあつめる 攻撃シナリオを考える
  6. 6. よくある仮説 「記憶媒体に証明書と秘密鍵が保存されていそう」
  7. 7. 大容量記憶媒体の代表格「eMMC」 https://www.blackhat.com/docs/us-17/wednesday/us-17-Etemadieh-Hacking-Hardware-With-A-$10-SD-Card-Reader.pdf NANDコントローラ のおかげで、(低速 で良いなら)少ない 信号線で容易に読み 書き可能
  8. 8. 楽勝じゃん?
  9. 9. 実際には解析はそんなに簡単ではない 普通のファイルシステム 抽出結果のバリエーション eMMCは基本的にBGAパッケージであるため、ピンに直接アクセスできない。 抽出したデータに平文で鍵が入っているとは限らない。 https://www.blackhat.com/docs/us-17/wednesday/us-17-Etemadieh-Hacking-Hardware-With-A-$10-SD-Card-Reader.pdf 様々な アプローチ 組合せ マイコンプログラム 保護されたキーストア 暗号化パーティション 暗号化ボリューム etc…
  10. 10. 非破壊検査へのあこがれ https://www.flickr.com/photos/micahdowty/3732858713
  11. 11. なんやかんや苦労して
  12. 12. クライアント証明書と秘密鍵を抽出できた 注:鍵はイメージです
  13. 13. AWS IoTへ接続 • 対応プロトコル • MQTT、MQTT(over WebSocket)、HTTP • 特徴 • デバイスシャドウ • カスタムオーソライザ(Congnitoで認証&トークン発行/バックエンド検証) • AWS IoTポリシー(トピックレベルでデバイス毎にアクセス可否を制御) • MQTTのセマンティクスへバインドされているRESTful API
  14. 14. 30秒MQTT講座 • 元々IBMで開発され、OASIS Standardで標準化。 • 軽量プロトコルとしてIoT時代に注目されるようになった。 • Pub-Subメッセージ配信モデル。 Broker Subscriber Publisher Publish (事前に)Subscribe Topic Subscriber (事前に)Subscribe 登場人物 概要 Broker メッセージの受信・配信を行うハブ的サービ ス Topic メッセージの話題、受信/配信用のハコ Publisher あるトピックに対してメッセージをPublishす るエンティティ Subscriber あるトピックに対してPublishされたメッセー ジを購読するエンティティ
  15. 15. 情報窃取 Device “ZZZ”を所有する悪意あるユーザが、”ZZZ”から抽出した証明書を 使って、正当なユーザが所有するDevice “AAA”に関するトピックを Subscribeし、情報を窃取する。 ライト MQTT AWS IoT 悪意のあるユーザ ②Subscribe中のトピックへ通知 Topic: device/AAA/light ③IoT Gatewayが ライトをONにする制御実施 証明書 ZZZ ⓪Subscribe Topic: #(すべて) スマート フォン ①API経由でAAAの ライトをON ②Subscribe中のトピックへ通知 Topic: device/AAA/light Device “AAA” Device “ZZZ”
  16. 16. ライト AWS IoT 悪意のあるユーザ ②Subscribe中のトピックへ通知 Topic: device/AAA/light ③IoT Gatewayが ライトをONにする制御実施 スマート フォン MQTT Device “AAA” Device “ZZZ” 不正操作 Device “ZZZ”を所有する悪意あるユーザが、”ZZZ”から抽出した証明書を 使って、正当なユーザが所有するDevice “AAA”に関するトピックに Publishし、不正な操作を行う。 証明書 ZZZ ①Publish Topic: device/AAA/light
  17. 17. こんなことで気合いれて作ったサービスが 台無しになろうものなら超怖い
  18. 18. デバイス毎にクライアント証明書を分けたうえで、 証明書ごとに、アクセスできるトピック階層を制限 できれば、あるデバイスの証明書・秘密鍵が漏洩し てしまったとしても他のユーザには影響が及ばない
  19. 19. AWS IoT Policy • ${iot:ClientId}のように変数を用いてポリシーを定義できる。 • ポリシーは、クライアント証明書や、デバイスのグループ単位 で割り当てることができる。
  20. 20. AWS IoT Policy • ${iot:ClientId}のように変数を用いてポリシーを定義できる。 • ポリシーは、クライアント証明書や、デバイスのグループ単位 で割り当てることができる。 テストだから、、、デバッグのために、、、 中途半端な設定のまま本番リリースしていませんか?
  21. 21. でも、実際やろうとすると AWSのドキュメントが正直分かりづらい
  22. 22. 最も重要(だと思う)変数 iot:Connection.Thing.IsAttached ポリシーが評価されているモノに、証明書または Amazon Cognito IDがアタッチされている場合 は、trueに解決されます。 https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/thing-policy-variables.html
  23. 23. iot:Connection.Thing.IsAttached Device “AAA” MQTT over TLS AWS IoT MQTT接続パラメータ(AWS IoTへの伝達) クライアントID=”AAA” クライアント証明書=“111” デバイス内部の設定値 モノ識別子=”AAA” クライアント証明書=“111” AWS IoTの「モノ」の設定状態 モノ識別子=”AAA” クライアント証明書=“111”=ならば true ※Cognitoのときの話は省略
  24. 24. iot:Connection.Thing.IsAttached Device “AAA” MQTT over TLS AWS IoT MQTT接続パラメータ(AWS IoTへの伝達) クライアントID=”AAA” クライアント証明書=“111” デバイス内部の設定値 モノ識別子=”AAA” クライアント証明書=“111” AWS IoTの「モノ」の設定状態 モノ識別子=”AAA” クライアント証明書=“111” 証明書とモノ識別子を厳密に結びつける =ならば true ※Cognitoのときの話は省略
  25. 25. 開発者が情報を正しく得られる状態? コミュニティで ちょろっと言及 SlideShareで 唐突に紹介 条件を取り除くと、同じ 証明書で複数デバイスが Pub-Subできたよ。 (やばいセキュリティ ホールだけどね。) レジストリ変数を用いて 細粒度アクセスするとき のIoTポリシーはこちら。 https://www.slideshare.net/AmazonWebServices/3-easy-steps- to-building-largescale-iot-architectures https://forums.aws.amazon.com/thread.jspa?threadID=247362 Google検索 “iot:Connection.Thing.IsAttached”
  26. 26. モノ識別子をトピック階層に含めアクセス制限 ${iot:ClientId}※ ${iot:Connection.Thing.ThingName}※ ※MQTT接続時は同じ値に解決
  27. 27. ${iot:ClientId}※ ${iot:Connection.Thing.ThingName}※ モノ識別子をトピック階層に含めアクセス制限 単一ポリシーで複数のモノに対応できる ※MQTT接続時は同じ値に解決
  28. 28. 情報窃取が防止できる ライト MQTT AWS IoT Core 悪意のあるユーザ ⓪Subscribe Topic: #(すべて) スマート フォン Subscribeするトピック文字列”#”がポリシーに違反しており強制切断。 Subscribeできるのは ポリシーで許可された Topic: device/ZZZ/light など、悪意のあるユーザの Device “ZZZ”に限定される Device “AAA” Device “ZZZ” 証明書 ZZZ
  29. 29. 不正操作が防止できる ライト AWS IoT Core 悪意のあるユーザ スマート フォン MQTT Publishするトピック文字列”AAA”がポリシーに違反したので強制切断。 Device “AAA” Device “ZZZ” 証明書 ZZZ ①Publish Topic: device/AAA/light Publishできるのは ポリシーで許可された Topic: device/ZZZ/light など、悪意のあるユーザの Device “ZZZ”に限定される
  30. 30. 補足 • トピック階層にモノ識別子を含まない設計の場合は要注意。 • Policyでやれることは少ない(”#”とか”+”とかワイルドカードを除外する ぐらい) • アプリレベル制御をすることになる • 証明書CNにトピック文字列の一部(モノ識別子)を含める手法もアリ。 • CSR作るときにCNにモノ識別子を予め指定しておく。 • AWS IoT Policyにリテラルとしてモノ識別子を含める手法は微妙。 • 理解しやすいが、ポリシーを「モノ」の数だけ作成することになる。
  31. 31. まとめ • 全てのデバイスがセキュアであるとは限りません。 • サーバ側はデバイスがセキュアであることに依存しすぎず、 デバイス侵害時も影響を最小化する設計を意識しましょう。 • Pub-Subモデルはユーザやデバイスを「跨いだ」アクセスが 起こりがち。ちゃんと設定してサービスを守りましょう。
  32. 32. お終い

×
Save this presentationTap To Close