NodeMCUボードにロードされたプログラムを抽出できますか?


13

WiFi機能を備えたNodeMCUボードを使用して、シンプルなアセットトラッカーを構築しています。Azure IoT Hubへの接続とメッセージの投稿を可能にするArduinoスケッチをいくつか見つけました。

ボードに「ロード」する必要があるキーの1つは、Azureデバイス接続文字列と、もちろんWiFi SSIDとパスワードです。

私の恐れは、誰かが単にボードを取り、ファイルを「ダウンロード」してセキュリティ認証情報にアクセスするかもしれないということです。

私の恐怖は正当ではありませんか、または資格情報の紛失は私が軽減する必要がある本当の脅威ですか?


3
@Mike OunsworthとBence Kaulicsの回答を一緒に考えると、適切な選択肢が得られると思います。残念ながら、両方を受け入れられた回答としてマークすることはできません。
ラムズ

回答:


12

[免責事項:私はセキュリティ/暗号の専門家であり、毎日このようなセキュリティアーキテクチャの問題に対処しています。]

無人プロセスがそれらにアクセスできるが、攻撃者はアクセスできないような方法で、資格情報を保存する問題につまずきました。これはよく知られた解決が非常に難しい問題です。

IoTデバイスに、一部のTPMなどのマザーボードにハードウェアキーストアが組み込まれている場合、またはAndroidハードウェアキーストアまたはApple Secure Enclaveに相当するものがある場合は、それを使用できます。

従来のサーバーではHSMまたはスマートカードを使用できますが、私が知っている唯一の完全なソフトウェアソリューションは、すべてのハードウェアデバイスのシリアル番号を組み合わせて構築された何らかの「ハードウェアフィンガープリント」からAESキーを導出することです。次に、そのAESキーを使用して資格情報を暗号化します。同じサーバー上で実行されているプロセスは、AESキーを再構築し、資格情報を復号化できますが、サーバーからファイルを抽出すると、本質的に復号化できなくなります。

IoTは、次の2つの理由でレンチを投入します。

  1. ハードウェアのシリアル番号が一意であるという仮定はおそらく成り立たず、

  2. サーバーとは異なり、攻撃者はデバイスに物理的にアクセスできるため、デバイス上でシェルを取得して復号化プログラムを実行できます。

基本的に、ローカルプロセスがデータを復号化できる場合、そのローカルプロセスを実行できる攻撃者もデータを復号化できるため、ハードウェア暗号化(TPM)と「ハードウェアフィンガープリント」暗号化はいずれも難読化です。


したがって、標準のトリックはここでは機能しないように見えます。自問する必要がある最初の質問は次のとおりです。

  • 私の脅威モデルは何ですか/このプロジェクトはどこにSecure <--> Convenientスケールしますか?

最終的に、私はあなたがそれを決定しsecurity > convenience、各起動後に人間に資格情報を入力させる必要があると思います(@BenceKaulicsの答えのようなものを使用して)、またはあなたはそれを決定security < convenienceしてデバイスに資格情報を置くだけです、おそらくあなたがそれが違いを感じます。


これは、IoTデバイスの性質によって難しくなる難しい問題です。

完全を期すため、この問題に対する本格的な産業ソリューションは次のとおりです。

  • 製造時に各IoTデバイスに一意のRSA公開キーを与えます。デバイスのシリアル番号に対して、この公開鍵をdbに記録します。
  • 適切なサーバーに機密資格情報を保存し、「ゲートウェイ」と呼びましょう。
  • IoTデバイスが(RSAキーを使用して)ゲートウェイに対して認証されると、ゲートウェイは保存された資格情報を使用してそのセッションを開き、セッショントークンをデバイスに返します。
  • 最高のセキュリティを実現するために、ゲートウェイは物理(またはVPN)ゲートウェイであるため、IoTデバイスからのすべてのトラフィックはゲートウェイを通過し、ファイアウォールルールなどをより細かく制御できます。理想的には、デバイスが直接(VPN以外のトンネル)インターネットへのアクセス。

このようにして、デバイスを侵害した攻撃者はセッションを開くことができますが、資格情報に直接アクセスすることはできません。


2
はい。問題の大部分は、ここで保護しようとしているのは、wifiパスワードである共有秘密であるということです。共有シークレットは、デバイスを物理的に分析できる場合には悪い考えです。より良い設計では、デバイス(または他のコンピューター)の各インスタンスを独自のセキュリティ環境に分離し、個々のガジェットと通信する必要のあるシステムとの間に一意のセキュリティチャネルを設定します。さらに言えば、wifiは、何らかのポイントツーポイント2.4 GHzスキームや「Esp Now」プロトコルと比較しても、とにかくアプリケーションにはあまり適していません。
クリスストラットン

1
いい視点ね。SSIDパスワードではなくWPA2エンタープライズクライアント証明書を使用することで、共有秘密の問題を修正できます(IoTデバイスがTLSスタックを持つのに十分な大きさである場合、多くはそうではありません)。Azure IoT Hubについては何も知りませんが、これらのAzure Device Connection文字列は既にデバイスごとに一意であると想定しています。残念ながら、これは「DIY no security」と「Industrial-scale security」の中間にあるものの、かなりきれいな白黒のようです。
マイクOunsworth

2
セッションを自由に開くことができる場合、なぜ資格情報が必要なのでしょうか?
アンドリューサヴィニク

1
@AndrewSavinykh資格情報に依存します。たぶん彼らがするのはセッションを開くことだけです。ただし、それらはWindowsドメインAD資格情報であるか、通常使用されない/ IoTデバイスからアクセスできない追加のAPIへのアクセスを許可します。侵害されたデバイスからのセッションでは問題ないかもしれませんが、攻撃者のラップトップからのセッションでは問題ありません。ええ、それはユースケース固有の非常に迅速になります。
マイクOunsworth

3
シリアルナンバー???一意のシリアル番号を見つけることは問題になりませんが、シリアル番号は秘密ではありません。キーを形成するのに役に立たない。いったいどこでシリアル番号を使用してキーを「標準的なトリック」にしていますか?
ジル 'SO-悪であるのをやめる'

6

脅威は本物ですが、幸いなことに、この種のセキュリティ上の懸念があるのはあなただけではありません。

ここで必要なのは、ESP WiFiマネージャーです。

このライブラリを使用すると、セッションが保存されていないESPはAPモードに切り替わり、Webポータルをホストします。PCまたはスマートフォンでこのAPに接続すると、Webページを介してWiFi資格情報を設定できます。

重要な情報をハードコーディングする必要はありません。また、デバイスを再フラッシュすることなく、任意のWiFiネットワークで使用できます。

使い方

  • ESPが起動すると、ステーションモードでセットアップされ、以前に保存されたアクセスポイントに接続しようとします

  • これが失敗した場合(または以前のネットワークが保存されていない場合)、ESPをアクセスポイントモードに移行し、DNSおよびWebサーバーを起動します(デフォルトのip 192.168.4.1)

  • ブラウザ(コンピューター、携帯電話、タブレット)でWiFi対応デバイスを使用して、新しく作成されたアクセスポイントに接続する

  • キャプティブポータルとDNSサーバーにより、「ネットワークへの参加」タイプのポップアップが表示されるか、アクセスしようとするドメインが設定ポータルにリダイレクトされます

  • スキャンしたアクセスポイントのいずれかを選択し、パスワードを入力して、[保存]をクリックします

  • ESPは接続を試みます。成功した場合、制御をアプリに放棄します。そうでない場合は、APに再接続して再構成します。

(ESP WiFiマネージャーのドキュメント)


1
または、APモードのときにレコードなどをダウンロードします。うまくいけば、ポスターは資産追跡のためにwifi自体を使用しようとしていない。
クリスストラットン

1
@ChrisStratton :-)実際、私は資産追跡にWiFiを使用しようとしています。幸いなことに、私が使用しているWiFIネットワークは公開されており、オープンですが、パスワードが必要な別のネットワークを使用する必要がある場合の影響が心配です。また、AzureIoT Hub接続文字列がデバイス上にあるという事実。
ラムズ

2
@rams確かに、デバイスのEEPROMを読み取ることは大きなタスクではありません。
ベンスカウリックス

3
@ramsハードウェアでは、はいEPROMを読み取ることができます。新しいデバイスには、保護が強化された安全なフラッシュ領域が含まれている場合があります。確かにこれは既知の問題であり、適切に試すにはオンチップサポートが必要です。
ショーンフーリハネ

2
@SeanHoulihane-ESP8266にはEEPROMはありません。すべてに使用されるSPIフラッシュ(Arduino機能のエミュレートの種類を含む)はESP8266の外部にあります。マルチチップモジュールでも、きちんとしたラボでプローブできる明確なダイです。
クリスストラットン

3

はい、プレーンテキストのままにすると、パスワードにアクセスできます。

良い点は、多くのwifi接続インターフェースがハッシュ化されたパスワードを受け入れることです。私が使用したものはmd5ハッシュを受け入れ、md5は非常に安全ではありませんが、それでも平均的なジョーにとっては非常に難しい挑戦です。構成ファイルに応じて、ハッシュアルゴリズムの名前を指定してパスワードを書き込むか、wifiインターフェイスが使用するデフォルトを使用します。


3
ハッシュ化されているときに機能するハッシュ化されたパスワードを抽出できれば、それを元に戻すことなくそれを使用できないようになりますか?
クリスストラットン

1
@ChrisStrattonあなたは正しいです。これを防ぐ方法は、情報セキュリティSEの場合です。この質問は、資格情報の損失を防ぐことを求めています。それにもかかわらず、ハッシュ化されたパスワードは、追加のソフトウェアなしでネットワークに接続するためにモバイルでまだ使用できません。
atakanyenel

1
はい、事実上、他のシステムでwifiパスワードを再利用する場合にある程度の保護を提供しますが、そのwifiアクセスポイントへの不正接続に対してはそれほどではありません。
クリスストラットン

1
@ChrisStrattonええ、たとえば、MACホワイトリストは、単にパスワードを保持してハッシュするよりもはるかに安全ですが、これらの手順は一般的なwifiセキュリティのためであり、パブリックデバイスの資格情報のプライバシーのためではありません。
atakanyenel

2
いいえ、MACホワイトリストは冗談です- 秘密はまったくありません。そしてもちろん、MACは盗まれたESP8266またはそのSPIフラッシュから容易に抽出されます。唯一の場所についてMACは、希望の助けをホワイトリストに登録するアクセスポイントは、いつの日か現れるかもしれないクライアントからの接続を待ってそこに座っていたが、あればWiFiネットワークに参加するGUIを使用する人々に反している、またはそれに接続されたことがなかった -すなわち、石型のものの中の剣。
クリスストラットン

1

簡単な答え-はい。できます。最低限の保護を提供するには、少なくとも何らかの難読化を実行する必要があります。


1
難読化は、デバイスがどのように動作するを見つけることを難しくしますが、デバイスのクローン作成から保護することは役に立ちません。資格情報の抽出から保護することは無意味です。必要なことは、エミュレータでファームウェアを実行することだけです。
ジル「SO-悪であるのをやめる」

完全に同意する。このような答えを出す私の動機は、<IoTネットワークのセキュリティを考慮する必要があることに注意することでした。@Mike Ounsworthは、AESやRSAインフラストラクチャを使用したソリューションを提案する詳細な回答を提供しました。もう1つ答えようと考えていますが、暗号化をどのようにすればいいのかわかりません(私は長年、支払いおよび銀行業務のソリューションを提供しています)。私の考えでは、通常は裏庭のIoTデバイスを保護するために暗号化に深く入り込むことを避けるため、実用的でバランスの取れたアドバイスを提供する必要があります。
アミットブジッチ

1
セキュリティで保護されたデバイスを作成する方法がわからないために人々がセキュリティで保護されていないデバイスを作成したい場合、それらを有効にする理由はありません。
ジル「SO-悪であるのをやめる」

私の経験では、人々は学びたいと思っていますが、セキュリティレベルと複雑さの間にはバランスが必要です。SET(en.wikipedia.org/wiki/Secure_Electronic_Transaction)に関しては、決済業界で有名な話があります。これは非常に安全ですが、実装が複雑であり、そのため実際には失敗しました。
アミットブジッチ

2
難読化により、セキュリティを向上させることなく複雑さが増します。それはバランスではありません。
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.