IoT_device_development_with_safe_language

 IoT_device_development_with_safe_language

6bb0559d2066b868dab09e435f488c6c?s=128

tomoyuki-nakabayashi

March 16, 2019
Tweet

Transcript

  1. 5.

    発表の概要 • C/C++問題点 • C/C++代替候補言語の紹介 • Rustの紹介 – 言語概要 –

    安全性のヒミツ – 組込みRustの状況 安全性の高いプログラミング言語を検討しよう! マイコン搭載のIoTデバイスでも 5
  2. 7.

    自己紹介 • 中林智之 (connectFree株式会社 組込みプログラマ) • Twitter: @LDScell • GitHub:

    tomoyuki-nakabayashi • ブログ: 低レイヤ強くなりたい組込み屋さんのブログ 7
  3. 10.

    メモリ安全性 • メモリ安全である、とは次のような現象が発生し ないこと – バッファオーバーフロー / バッファオーバーラン – Nullポインタ参照外し

    – メモリ解放後の領域へのアクセス – 初期化していないメモリの利用 – 不正な解放(2重解放 / 未確保領域の解放) C/C++はメモリ安全な言語ではない 残念ながら… 10
  4. 12.

    プログラミング言語での対策 • 問題あるプログラム実装に対して • バグったままプログラム動作が継続 – 情報漏洩が発生する最悪の状況 • プログラムがクラッシュする –

    脅威レベルはDoS攻撃対象まで下がる • コンパイルエラーになる – リリース前に問題に対処 可能な限り ここで 対処したい C/C++ 12
  5. 19.

    どこで使われているの? • Firefox CSSエンジンStylo • Google Chrome OS VMM crosvm

    • AWS VMM firecracker • Facebook Mononoke / MIRAI • Microsoft IoT Security Proxy Edgelet 安全性と性能が求められる領域 19
  6. 23.

    Rustの安全性 • コンパイラを鬼コーチにする言語仕様 – 所有権 – 借用 – ライフタイム •

    ランタイムチェック – 配列の境界検証 23 参考:RustはHeartbleedを防げたのか?
  7. 29.

    借用 • 所有権は貸すことができる。これを借用と呼ぶ。 • 借用は下記のどちらか一方だけの状態を持つ – 唯一の可変参照を持つ – 複数の不変参照を持つ •

    誰かが書き換える可能性がある変数は、他の誰 も読むことすらできない • 誰も書き換えない変数は、複数の場所から読む ことができる 29
  8. 32.

    組込みRust • アーキテクチャサポート – x86 / ARM (aarch64, v6 ,v7)

    / RISC-Vなど • 主要なSoC/マイコン/ボードにライブラリ提供 – Cortex-A/M/R, MSP430, RISC-V, Linux 32
  9. 34.

    和訳プロジェクト進行中! • The Embedded Rust Book (和訳済み) – https://tomoyuki- nakabayashi.github.io/book/

    • Discovery (和訳進行中) – https://tomoyuki- nakabayashi.github.io/discovery/ 34
  10. 36.

    デモ:IPv6 TCPエコーサーバ • ソフトウェア – C言語のRTOS (Zephyr)上で動くアプリケーション をRustで実装 – C言語の資産を活かしつつ、新規実装分をRustで

    • ハードウェア – nRF52840 USB Dongle (1100円) • 64MHz Cortex-M4F / ROM 1MB / RAM 256KB – SPI Ethernet MACコントローラ (300円) 36
  11. 37.

    組込みRustの課題 • C言語とのギャップが大きく、学習コストが高い – シンタックス – セマンティクス • エコシステム –

    商用レベルのRTOSがない – C/C++ほど資産がない • C/C++の資産を使いながら、新規開発部分や 最重要部分をRustで実装する 37
  12. 38.

    まとめ • C/C++は危険! • 組込み開発でも言語が選べる時代に • 現状、Rustが有力候補 • Rustは安全性が高い –

    コンパイラが鬼強い – 型システム、所有権、借用ライフタイム • 導入可能なところから使っていこう! 38