電圧グリッチによるマイコンへのサイドチャネル攻撃
こんにちは,AndGoのハードウェア担当です。毎週水曜日はAndGoのエンジニアが交代で技術に関するマニアックな記事を皆様にお送りしています。
以前、「ハードウェアウォレット脆弱性を突く」というタイトルでマイコンのセキュリティについて述べました。今回はより踏み込んだ話として「Shaping the Glitch: Optimizing Voltage Fault Injection Attacks」という論文を紹介したいと思います。この論文はシスコとイタリアのベネツィア大学の共同研究の成果をまとめたもので、電圧グリッチとマイコンの電圧を変動させて誤作動をさせるという攻撃についての内容となっています。
電圧グリッチとは?
電子機器に搭載されているICは一定の電圧を供給しないと正常に動作をしません。電圧を供給する電源回路は非常に奥が深く、それだけで一つの大きな分野を築いています。先日、惜しくも打ち上げに失敗したH3ロケットも電源系統のトラブルでした。おそらく経験豊富で優秀な技術者が設計をしていたのだと思いますが、電源回路設計の難しさが分かります。
マイコンも例外ではなく安定した電圧電源が必要です。VDDと書かれているのがマイコンの駆動に必要な電源電圧の規定で1.8〜3.6 Vになっています。これを下回ると、動作の保証はされません。この電圧範囲に入っていたとしても、急激な電圧の変動も不安定になる原因となります。
TrezorなどのUSB給電タイプのハードウェアウォレットの場合には、USBから5.0 Vが供給されます。この5.0 Vを(他のICも動作する)3.3 Vに落として使うので、USBの電圧変動が少しぐらいあっても問題なく動作します。
それよりも基板上に乗っている他の部品の影響が大きく、もし他の部品が急に大きな電力を使う場合には電圧が一時的に低下することがあります。例えば、液晶のバックライトやSDカードの動作などです。身近な例としては、家の中で、ドライヤーを使うと、電球が一瞬暗くなる、という経験をされた方も多いと思いますが、これと同じ現象です。
通常は他の部品が動き出すこと前提で回路の設計がされていますのでユーザーが気にすることはありませんが、わざと電圧低下を起こして誤作動を狙う攻撃方法があります。

電圧グリッチによる攻撃方法
電圧グリッチが起こると、ファームウェアの通りに動いていたマイコンが誤作動します。例えば、命令を読み飛ばしてしまったり、条件分岐に影響を与えたりします。またメモリ領域を破損するようなことも起きます。
電圧グリッチは闇雲に電圧を変化させるだけでは、狙った誤作動をさせることが難しく、一般的には図の(a)のような回路を使います。右側のTarget uCが攻撃のターゲットとなるマイコンでVcc/GNDが電源のプラス極とマイナス極で、左側のVinが電源だと思っていただければ結構です。N-Mosfetと書かれているのがトランジスタで、電子的に動作するスイッチです。このスイッチがONになると、Vinから供給されている電流を消費するので、ターゲットの電圧が低下します。
(b)が(a)の回路で電圧グリッチを与えた時の電圧波形です。おおよそ200 ns (=0.000002秒)の間電圧の変動が起きていることが分かります。この時間が長すぎると電源を切って入れ直すのと同じなので、誤動作ではなく通常のリセットです。この程度の微妙な時間電圧が落ちることで、中途半端な状態を作り出すことができるわけです。人の手で給電しているUSBケーブルを引き抜いて指しても1秒程度の電圧グリッチになってしまうので、この方法の難しさがおわかりいただけると思います。
さらにタイミングも重要で、高速で動作するマイコンに対して副作用を起こしたいタイミングで電圧グリッチを与える必要もあります。例えば、ユーザーが入力したPINが正しいか判定するタイミングや、書き込もうとしたファームウェアが適正なものかをチェックするタイミングを狙うことになります。マイコンは数百MHzで動作するので数十ns単位の精度が必要になってきます。

電圧グリッチのパラメータ探索
この論文では図の(c)のような回路によりさらに高度な電圧グリッチを作り出しています。まず、任意の電圧グリッチの波形を作り出すことができます。従来は単純にスイッチをオン・オフするだけだったので、電圧の変動は電子的なスイッチであるトランジスタの特性や、回路の構成で決まっていましたが、彼らの方法では、電圧の波形をカスタマイズすることができます。高速な波形生成器とアンプで実現しています。
また、電圧グリッチの与え方も様々な方法が考えられます。電圧グリッチを与えるタイミング、長さ、電圧、波形などです。これらをどのように設定すればマイコンを狙ったように誤動作させられるかはやってみないとわかりません。特に波形については多様な形が考えられますので、単純な試行錯誤を繰り返すだけでは非常に時間がかかることが予想されます。
そこで、この研究では遺伝的アルゴリズムをつかって自動探索させることにしました。遺伝的アルゴリズムの詳細は割愛しますが、生物の進化のプロセスに似たアルゴリズムで、効率的にパラメータ探索をすることができます。
攻撃ターゲット
この論文ではSTMicroelectronicsのSTM32F103とSTM32F373、Texas InstrumentsのMSP430F5172とMSP430FR5725、そしてRenesusの78K0/Kx2と78K0R/Kx3-Lについて不正な動作をさせようと試みています。いずれも世界中でよく使われています。
ここで主要なハードウェアウォレットと、使用されているマイコンについてまとめてみました。やはりSTMicroelectronics社製のものが多く使われています。Arm Cortex Mをベースとしていて開発もしやすいということが理由としてあるのだと思います。
- Trezor One: STM32F205RET6 (STMicroelectronics)
- Trezor Model T: STM32F427VIT6 (STMicroelectronics)
- Ledger Nano S: STMicroelectronics STM32F042 (STMicroelectronics)
- Ledger Nano X: STMicroelectronics STM32WB55 (STMicroelectronics)
- Coldcard Mk3: STM32L496RGT6 (STMicroelectronics)
- Coldcard Mk4: STM32L4S5VIT6 (STMicroelectronics)
- Digital BitBox02: ATSAMD51J20A (Microchip)
- KeepKey: STM32F205
ここではSTM32Fに絞って結果をご紹介します。STM32Fではファームウェアにプロテクトをかけることができ、Level-0/1/2の3種類の段階があります。Level-0はファームウェアの読み書きが可能、Level-1はデバッグはできるがフラッシュメモリへのアクセスができない、Level-2はデバッグもできない、となっています。通常は一旦Level-2に設定してしまうとLevel-1に戻すことはできません。
Table 2を見ると、STM32F103に対して20分でパラメータ探索が完了し、非常に高い再現性でLevelを落としてプロテクションを外すことに成功しています。


まとめ
今回ご紹介した攻撃はサイドチャネル攻撃で、設計者の盲点になりがちな攻撃となります。他にもマイコン内で異なる演算を行った場合の電力消費量の差異を利用することなどが行われています。暗号技術と同様にこのようなハードウェアからの攻撃方法についても日々研究されていて、マイコンメーカーも対策を強化しています。
しかし一般の人が同じ攻撃方法ができるかといえば、おそらく非常に難しく、このような攻撃の対策としてよりセキュリティの高いマイコンを搭載したハードウェアウォレットを選択したほうが良いかというと、不必要であると個人的には思います。それよりも、物理的にハードウェアウォレットが盗まれない場所に保管したり、推測されにくいパスフレーズを設定したりするなどといった別のレイヤでの対策が有効といえるでしょう。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション