エクスプロイト&脆弱性
LoRaWANのプロトコルスタックに潜むセキュリティリスクとは?
LoRaWANセキュリティ解析シリーズとして、これまであまり注目を集めることのなかった攻撃経路であるLoRaWANスタックを取り上げます。このスタックは、LoRaWANの実装とセキュリティの根幹をなすものです。
LoRaWANセキュリティ解析シリーズとして、これまであまり注目を集めることのなかった攻撃経路であるLoRaWANスタックを取り上げます。このスタックは、LoRaWANの実装とセキュリティの根幹をなすものです。
これまでのLoRaWANセキュリティシリーズでは、攻撃者によって利用されることが認識されているさまざまなセキュリティ欠陥、脆弱性の問題、侵入経路の概略を述べてきました。そしてシリーズ第4回となる今回は、これまであまり注目を集めることのなかった攻撃経路であるLoRaWANスタックを取り上げます。LoRaWANスタックは通常はターゲットになることがありませんが、非常に重要です。このスタックはLoRaWANの実装とセキュリティの根幹をなしています。
本記事では、LoRaWANスタックのセキュリティとバグの一例、そして推奨事項についてご紹介します。なお、解説レポート「LoRaWAN のプロトコルスタック:見過ごされているターゲットのリスク」およびテクニカルブリーフ(英語)では、LoRaWANスタック内のセキュリティ欠陥やバグを見つける具体的な手法を紹介しています。スタック開発者やセキュリティコンサルタントの皆さまがスタックをセキュア化し、重大なバグに対するLoRaWAN通信の防御力を強化するうえで、これが参考になれば幸いです。
LoRaWANスタックのセキュリティの概要
テクニカルブリーフ(英語)では、LoRaWANスタックの実装と、さまざまな手法を使用してさまざまなスタックのバグを発見する方法について説明しています。AFL++によるファジングを取り上げるとともに、私たちが使用しているファジングプラットフォームを紹介しています。また、Qiling(Unicornエンジンベース)を使用して特殊なアーキテクチャのファジングとデバッグを行う方法についても解説しています。さらに、対象となるアーキテクチャがUnicornやQilingでサポートされていない場合にGhidraのPCodeエミュレーションを使用する方法も説明しています。
なお、LoRaWANに関しては、少なくとも次の2種類のスタックが存在します。
- エンドノードスタック:ゲートウェイにアップリンク(UL)パケットを送信するために使用されます。場合によってはエンドノードデバイスに情報を送信することもあります。
- ゲートウェイスタック:ネットワークに接続するための機能すべてを備え、ネットワークからのパケットを転送します。
ネットワークサーバとアプリケーションサーバ用にも別のスタックがありますが、今回は取り上げません。ここでの関心は無線インタフェースから引き起こされ得る脆弱性にあるためです。実際、無線インタフェースは他の部分よりも露出度が高いため、それだけ攻撃者からアクセスされる可能性が高くなります。また、無線インタフェースの方から侵入する攻撃者は、一種の悪意のあるセンサーやゲートウェイのように機能することも注意に値します。
ファジングを通したバグの発見
トレンドマイクロは、LoRaWANスタックのセキュリティについて研究と実験を行う中で、攻撃者が利用する可能性のある注目すべきバグを検出するために、ファジングアーキテクチャを設計しました。このアーキテクチャは、LoRaWANのプロトコルスタックや他のプロトコルについて、より効果的なセキュリティを実現するためにも利用できます。
ファジングは、悪用可能な欠陥の発見に向けてプログラムに与える入力を生成および変異させることから成り立っています。ファジングの際は、パーサによる処理が想定されていない不適切なデータをプログラムに入力するので、これは偶然によるバグの発見から派生した手法と言えます。
このアーキテクチャの概要は以下の通りです。
私たちはまず、ファザーが容易に取り扱えるような形でコードをコンパイルしました。今回の目的に対しては、できるだけ多くのコードパスをカバーできる生成手法と正規のダムファジングを組み合わせて使用します。このダムファジングでは、AFL++フレームワーク(AFLの進化版)を使用しています。それにより、ビット、バイト、ワードを疑似ランダムに変異させるインストルメンテーションが得られます。
また、私たちはパーサが解析できるあらゆる種類のメッセージの収集を試みました。そして、永続モードを使用し、ファジングプロセスの速度を2~20倍に上げました。さらに、ファジング後にリポジトリで見つかる「固有のクラッシュファイル」の量に対応するために分類手法を開発し、ユーザが最も興味深いバグに最初に取り組めるようにしました。
ファジング対象のコードは、特有のオプションを含む特定のクロスコンパイラを使用して、x86-64とは異なるアーキテクチャに向けてコンパイルされます。したがって、脆弱性を突くことで脆弱性を証明しようとすると、そのエクスプロイトを適切なアーキテクチャに適応させるために、より多くの時間が費やされることになります。また、ファームウェアのソースは非公開の場合があるため、自動的なバグ検出を継続するには、別の方法が必要になります。
その方法は多くありますが、例として以下の2種類が挙げられます。
この記事では、Qilingフレームワークの使用方法を紹介します。このフレームワークは、複数の種類のアーキテクチャに対応する概念実証エミュレータを迅速に開発するために使用できる優れたツールです。トレンドマイクロは、このツールをシンボルを利用しながらわかりやすくデモするために、LoRaMAC-nodeプロジェクトを選びました。このプロジェクトはオープンソースですが、ARMでコンパイルされます。QilingはUnicornAFL機能を採用しているため、ユーザはフレームワークを使用してエミュレートを行うだけでなく、別のプラットフォームのエミュレートされたバイナリをファジングすることもできます。
ゲートウェイのエミュレーションとファジングは多くの場合、アーキテクチャがMIPS MSBとなります。しかしMIPS MSBは、まだUnicornとQilingでサポートされていません。しかし別の方法として、Ghidraと正規のプロセッサを併用することもできます。たとえば、Espressifチップ上でXtensaなどの拡張プロセッサを使用してエミュレーションを実行できます。詳細はテクニカルブリーフ(英語)で解説しています。
LoRaWANスタックに関するセキュリティ上の推奨事項
LoRaWANデバイスを扱うスタック開発者やセキュリティチームは、脆弱性とメモリ破損について注意深く監視する必要があります。そのためにはまず、コミュニティによって承認され、かつセキュリティ研究者によってテストされたプロトコルスタックを選択することが最初のステップとなります。その後、ファジング環境に対して投資し、使用されているライブラリが、テクニカルブリーフで概説するようなテストケースシナリオに対応できるかを確認することが重要です。
以下の画像は、LoRaWANデバイスのリリース前テストで、ファジングテストをどのように使用できるかを示しています。
LoRaWANデバイスは、スマートシティのセキュリティ、環境モニタリング、産業の安全性といった、クリティカルな機能によく使用されます。したがって、そのようなデバイスを侵害する攻撃は、それらに依存するシステムに大きな影響を与える可能性があります。
上述のような手法を使用してLoRaWANデバイスの安全性を向上させる方法について解説しましたが、それと同じ手法は、さらなる(隠れた)攻撃経路を見つけるために攻撃者が利用する可能性もあります。ただし、これらのスタックのセキュリティ問題は極めて複雑であるため、エクスプロイトも複雑となります。攻撃者はターゲットやそのコンパイル方法に関する正確な知識、あるいはファームウェアのダンプが必要になります。結局のところ、この方法でLoRaWANデバイスを侵害するには、攻撃者が豊富な情報を持っていてかつ労力をいとわないことが条件となります。
しかし攻撃がいくら複雑であっても、企業とユーザはこの種のバグからデバイスを保護しなければなりません。LoRaWANテクノロジーはコネクテッド工場やスマートシティのクリティカルな機能に組み込まれているため、万全の手を打ってセキュリティを確保する必要があります。
解説レポート「LoRaWAN のプロトコルスタック:見過ごされているターゲットのリスク」では、本調査について具体的な手法や対応策を詳しく解説しています。
参考記事
「LoRaWAN's Protocol Stacks: The Forgotten Targets at Risk」
By: David Fiser, Alfredo Oliveira