質問:
小さな組み込みシステムのブラックボックスファジングについて詳しくはどこで知ることができますか?
Cybergibbons
2013-04-05 13:55:48 UTC
view on stackexchange narkive permalink

ファジングは、ソフトウェアテストに使用される非常に一般的な場所の手法になり、セキュリティの問題を見つけるために頻繁に使用されています。大規模で複雑なソフトウェアシステムをファジングするために調整された多くのフレームワーク( sully Peach Fuzzerなど)があります。小さくて単純な組み込みシステム(通常、OSを実行できないほど小さくて単純なもの)のファジングに関する情報はあまり見つかりませんでした。

これらの小さなシステムはどこにでもあります-RFIDカードリーダー、盗難警報システム、キーレスエントリーシステム、エンジンコントロールユニット、HVACコントロールなど。多くの場合、入力と出力は非常に限られています(ボタン、キーパッド、小さな文字ディスプレイ、LED、ブザー、RF通信)。複雑なネットワーク(イーサネット、TCP / IP)、シリアルポートなどはまれです。

セキュリティの問題を見つけてシステムがどのように動作するかを確認するために、ファジングのような手法を採用することに成功しました。現在、これは主に、本物のパケットの観察に基づいて、システムに送信されるパケットのフォーマットをファジングすることで構成されています。いくつかの例:

  • ファジングを使用してパケットの構造を決定する-おおよそのパケット形式を知っている場合もありますが、IDビットやチェックサムなどがあります。本物のデバイスやサンプリングされた送信の数が少ないかどうかは、必ずしも確実ではありません。
  • パケットが予想よりも長い場合のパケットデコードの問題の発見-可変パケット長を予想よりも長く設定するなどの簡単なこと。
  • 許容可能な送信の制限の発見-再送信などは1つで一般的です-方法RFシステム。正しい送信として登録されるパケットの最小数はいくつですか?ボーレートをどのくらい変更できますか(つまり、レシーバーのクロックリカバリは良好ですか)。
  • 妨害検出の限界を見つける。妨害が検出される前に、システムをどこまで押すことができますか?文書化されていない機能の検索-たとえば、00がアーム、01がアーム解除、10がパートアームの場合、11は何をしますか?

私が見つけた最大の課題の1つは、システムの状態を検出する方法です。これは一般的に、LED、LCDバスなどから取得された出力の寄せ集めになりました。私は入力と出力にArduinoとArduinoのようなボードを使用しています(通常は Teensy2.0)。また、クラッシュが発生した場合にシステムの電源を入れ直す方法を含める必要があることもよくあります。

私が驚いたのは、この分野で仕事や研究を行っている他の人があまりいないことです。

つまり、質問は次のとおりです。

  • これらの方針に沿ってリソースはありますか?
  • このアプリケーションに複雑なファジングフレームワークを使用できますか?

(余談ですが、これはグーグルの失敗ではないと思います。同様の概念「グリッチ」と「フォールトインジェクション」が含まれますが、これは明確であると思います)

このトレーニングが利用可能であることを確認しました: https://www.blackhat.com/us-13/training /peach-fuzzer-embedded-edition.html

二 答え:
Michael Eddington
2013-04-06 01:04:01 UTC
view on stackexchange narkive permalink

Peachは、小規模な組み込みシステムのファジングに優れています。構成と検出は、組み込みシステムの大きな違いです。これはデバイスごとに変わる傾向がありますが、私の最も使用されているツールの1つは、Cana Kitリレーコントローラー( http://www.canakit.com/4-port-usb-relay-controller.html)です。 )。 Peachには、リレーをトリガーできるモニターモジュールがあります。これを使用して、デバイスのオン/オフを切り替えたり、USBケーブルのプラグイン/プラグアウトをシミュレートしたりします。

そこから検出を処理する必要があります。これはデバイス間で大きく異なります。 JTAGを使用できる場合もあれば、Teensyなどの小さなボードを使用してLEDを読み取るためにフォトセンサーを接続した場合もあります。ネットワークデバイスの場合、通常はpingが出発点として適しています。

Peachの利点の1つは、基本的なコーディング経験があれば、障害を検出したりデバイスのリセットを実行したりするモジュールを簡単に追加できることです。

正しくセットアップすると、長期間のデバイスファジングを実行できるはずです。これは、障害が特定されたとき、またはデバイスが応答しなくなったときに、ファザーがデバイスを再起動できることを意味し、さらに調査するのに興味深い可能性のある障害状態を検出できます。

たとえば、Teensyを使用して、Peachからの出力を制御する方法について詳しく教えてください。
Teensyは、[USBシリアル](http://www.pjrc.com/teensy/usb_serial.html)を介して簡単にインターフェースできます。 Peach 3には、ファジングされたデータを送信し、応答を受信するためのシリアルポートパブリッシャー(I / Oインターフェイス)があります。これは、インターフェースをとる簡単な方法です。
ixje
2013-04-06 13:28:15 UTC
view on stackexchange narkive permalink

あなたは正しい方向に進んでいるようです。 @Michael Eddingtonが指摘したように、Peachは組み込みシステムのファジングに優れています(私の経験では、より小さな単純なシステムだけではありません)。ネットワーク化されている場合の単純なICMPメッセージ、JTAG応答、安全なブートグリッチなどを実行する際のシリアル出力の変更など、さまざまな方法でデバイスを使用して同様の経験があります。より高度な方法は、たとえば、攻撃の成功を検出するための電力プロファイルの変更を検討することです。

フォールトインジェクションに関しては、 FDTC aなどの会議の論文を読むことで、セットアップに関するいくつかのアイデアを引き出すことができます。 >、 Cosadeなど。



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...