Skip to content

Instantly share code, notes, and snippets.

@rizaudo
Last active August 26, 2021 05:24
Show Gist options
  • Save rizaudo/6d3302273c39ae335ec2f779bff1f352 to your computer and use it in GitHub Desktop.
Save rizaudo/6d3302273c39ae335ec2f779bff1f352 to your computer and use it in GitHub Desktop.
Precursorをチェックする(WIP)

precursorをチェックする(WIP)

エンドユーザがデバイスの真正性を検証できるという事で有名になったPrecursorのチェックメモ。チェックしている図面はevt2。

https://github.com/betrusted-io/betrusted-wiki/wiki#trng-chroniclesにある資料が元になっているので、その内容を読めばこのメモを読まなくても良い。

precursor

https://www.crowdsupply.com/sutajio-kosagi/precursor

Precursorは設計リソースが全て公開されているので読んでいたのですが、これがまた複雑かつ設計意図が把握出来ない所が非常に多くあります。 まあまあFPGAボード設計やRoot of Trust設計の経験がある自分でも結構疑問符が付くので、一応誰かの参考になるかもしれないと思いこのメモを公開しておきます。徐々に更新するつもりなので、疑問点あったり止まってたらツイッター(@rizaudo)やコメント等で突っ込んで貰えたらと思います。

ちなみに筆者は本デバイスのいかなるバージョンも持ち合わせていないため、実際の検証が出来ないです。無念… 使ってるチップを見る限り、この半導体不足下ではどうあがいても製造が無理そうなので、手に入れようとしてもかなり先になりそうと推測しています。

RISC-Ⅴ開発キットというような表現をしているが、界隈にいる人お馴染みのFPGA上でやる奴で別にハードチップが載ってる訳ではない。

また、注意しておきたいのはユーザの検証性を担保しようとしているが、ハードウェアセキュリティを担保したいとしたら(結果として)そこそこ疑問符が付く構成になってしまっている事を申し添えたい。 iCE40UPはアンカーとして使えなくはないが、暗号関係のハードIPをもってはいないしSpartan-6を検証するのは困難では無いかと推測される。 まあ世の中のRoot of Trustチップというのはど直球な暗号製品で、データシートを貰うだけでも書類を書く必要があり検証性なんて投げ捨てているので仕方ないと思うが… 個人的には不透明でRoTチップを使っててアンカーがあるから大丈夫!とかいうものよりも、このデバイスの方がブートフロー検証が出来るため信用に足ると思う。

ドメイン分析

PrecursorにはT,Uという基板上のドメイン(電源も分けられていて片方だけ落とす事も可能)があり、当然ながらファームウェアも分けられています。 この二つのドメインがどういったインタフェースを持っていて、どういう役割を持つのかを理解するのがPrecursorの理解に直結すると考えています。

ちなみにこのセクションでは書かれていないUSB Type-Cコネクタがありますが、データ線を持っておらず、電源供給の為だけとなっています。 図面では”USB not connected intentionally to reduce attack surface”と書かれており、セキュリティの観点から繋げたくなかったようです。

Uドメイン(iCE40UP5kを使ったカスタムコントローラー)

低消費電力を実現するためのコントローラードメイン。 基本的にスリープと呼ばれる状態ではUドメインだけが電源が入った状態になるらしい。

ぶら下がっているインターフェース

  • I2C (gyroやGas GaugeにCharger)
  • GPIO
  • GPIO(T-domainとの電源状態の共有)
  • SPI(WF200との通信)
  • SPI(T-domainとの通信)
  • GPIO(キーボードLED)

Tドメイン(XC7S50を使ったメインのRISC-Vが動くやつ)

メインCPUやスピーカー, LCDといったデバイスのアプリケーションに関係する物があるドメイン。

ぶら下がってるインターフェース

  • I2S(x2) I2C (CODECとRTCのため)
  • SPI(iCE40UPとの通信用)
  • SPI(LCD通信)
  • GPIO(バイブレーション用モーター)
  • GPIO(キーボード)
  • Analog+GPIO(乱数生成器)
  • SRAM接続

セキュリティ面での評価

TBD

Unpatchable Silicon(Starbleed)

Precursorのドキュメントでも触れられているように、最も懸念すべきはSpartan-6に存在するStarbleed脆弱性になるのは避けられない。 これはSpartan-6等のXilinx FPGA上にあるWBSTARというbitstreamを復号化する時に情報を持つレジスタが、リセット後でも情報を維持したままになっており、上手くリセットと本レジスタの読み出しを繰り返せば復号したbitstream全体を攻撃者が取得できてしまうという問題。 重要なこととして、暗号化する為のキーが漏洩する訳ではないので改竄は不能。当該ドキュメントでもそのことに触れられている。

本脆弱性があるため、BootROMに書き込まれた秘密鍵を始点とする暗号化チェーンは脆弱なものとなっている。 使う場合はユーザPIN等を鍵とした暗号化でストレージを保護する必要があるのではないでしょうか。

TRNG

別チップなので当然ながら基板上で配線が見え、偽装される可能性があります。 ユーザが検証する場合にはそういった攻撃は検出可能でしょうが、使われている最中に毒入れ攻撃等を試行された場合はアプリケーションがTRNGだけを乱数ソースとしている場合に結果がコントロールされる可能性があります。

読んでる最中の感想

  • 電源はページ纏めて欲しい
  • 最初の図間違ってて、SRAMがU-domainの方にある。なんで?
  • TRNGとか言っているが、結局別チップであるので他の乱数元使ってない場合アタック出来てしまうのでは? キージェネレート時だからハードウェアの信頼がおけるとかそういうことか?
  • Starbleedが結構致命的じゃないかなぁ… 鍵の類が暴露されちゃう限り、TPMの類がFPGA外に無いといけないが
  • チップ自体の検証はあまり言及されてないけども、やはり無理かな(個人じゃ毒入りチップ対策は無理な話だと思うが
  • ちなみにズタボロに言ってるように思えるかも知れませんが、デバイスセキュリティとかおもしろ開発ガジェット気になる人間なら買うのオススメという気持ちです。今の所細部まで考え込まれているように見えますし、実際オープンにここまで細かくやってるの凄い
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment