ヘッドレス組み込みデバイスの機密データを安全な方法で暗号化することは可能ですか?

ヘッドレス組み込みデバイスの機密データを安全な方法で暗号化することは可能ですか?

当社は、すべてのデータ(オペレーティングシステム、ソフトウェアなど)がSDカードに保存されているRaspberry Piを使用しています。私たちはこれらのデバイスを設定し(ソフトウェアをロードし)、現場(私たちが制御できない環境)に送ります。このPisには機密データがあり、現場の誰かがPisを取り、これらの機密データにアクセスするかどうかを心配しています。

重要なデータをSDカードに保存せずにセキュアなネットワークを介してストリーミングする確実なソリューションは、私たちには効果がありませんでした。 Piが常にインターネットや他の種類のネットワークにアクセスできるわけではありません。

もう一つの明確な解決策は、データが格納されているパーティションを暗号化することですが、これは難しいことです。 Piは実行時にこの機密データにアクセスできる必要があります。つまり、使用する暗号化の種類に関係なく、Piは起動時に暗号化されたパーティションの復号化を許可する必要があります。つまり、本質的に欠陥のある非暗号化パーティションに格納されている一種の復号化キーが必要であることを意味します。攻撃者は簡単にキーにアクセスし、それを使用して暗号化されたパーティションの暗号化を解除する可能性があります。

この問題を解決できるいくつかのハードウェアソリューション(Zymkeyなど)があります。我々は努力し、Zymkeyをキーとして暗号化されたルートパーティションに侵入するのに5分以上かかりました。。問題は、ルートパーティションを暗号化できますが、起動時にカーネルとパラメータをカーネルに渡すファイルを格納するブートパーティションを暗号化できないことです。これにより、攻撃者はブート時にカーネルにシェルを実行するように要求し、攻撃者に暗号化されたルートパーティションへのフルアクセスを許可するなど、ブートローダファイルを変更できます。

独自のカスタムカーネルをコンパイルしたがパラメータを許可しないため、ブートパラメータが攻撃者にシェルを提供できない場合でも、カスタムカーネルは攻撃者がアクセスできる/bootパーティションに保存されます。カスタムコアを通常のコアに置き換えることを防ぐ方法はありません。

一部のハードウェアソリューションを構成し、SDカードを接着したり、Piをブービートラップボックスに入れたり、誰かがボックスを開こうとすると、暗号化キーを削除してパーティション暗号化を削除(または再起動)できることがわかります。 )。これは比較的バイパスしやすく、せいぜいハッキーです。

だから私の質問は次のとおりです。概念的には、ルートパーティション全体を暗号化したり、機密ファイルを保存したりできるデータパーティションの一部のみを暗号化することで、攻撃者がSDカードを手に入れた場合に暗号化できなくなりますか?ファイル自体を取得するには? Linuxは、実行中でもこれらのファイルを復号化して使用できる必要があります。

答え1

最小限の物理的セキュリティがなければ、機密データを保護することはできません。 Raspberry Piには物理的なセキュリティはありません。改ざん防止ボックスに入れるか、改ざん防止機能を備えた他のハードウェアを使用する必要があります。

はい、費用がかかります。セキュリティは一般的に対価を払う機能です。

から送信された通知あなたが引用したフォーラム投稿Raspberry Piの補助装置としてのみ機能するZymkeyは何も保護できません。 Pi自体に対する物理的な保護も必要です。

セキュアブート機能を備えたシングルボードコンピュータが動作する必要があります。特におすすめのモデルはありません。確かにそれも大丈夫です。ラズベリーパイへのTPMのインストール;これを行うと、セキュアブートは提供されませんが(コードを実行する前にコードは確認されません)、確認ブートが提供されます(コードが予期されないとTPMはキーを取得できません)。いずれにしても、SDカード交換などの小規模物理攻撃に対してのみ保護し、RAMバスへの論理プローブの挿入などの侵入攻撃に対しては保護しません。

答え2

これを行うには、暗号化されたファイルをアプリケーションがファイルを格納するリポジトリとして使用してLUKSを使用できます。

暗号化されたボリュームを使用するには、次のことが必要です。

  1. 暗号化されたLUKSボリュームを開きます。
  2. アプリケーションで使用するマウントポイントに暗号化されたボリュームをマウントします。

終わったら、

  1. ボリュームマウントポイントをマウント解除します。
  2. 暗号化されたLUKSボリュームを閉じます。

以下のリンクされた投稿では、必要な手順について説明します。

Linuxで暗号化されたファイルボルトを作成する

答え3

過去にも同様の問題が発生しました。完璧な解決策はないと予想しています。侵入者がシステム侵入に投資する時間と状況を困難にするために投資する時間に応じて、多くが異なります。確かに100%安全な解決策はありません。 Zymkeyソリューションは本当にきれいですが、プロジェクトによっては費用がかかり、場合によってはそれほど効果的ではないかもしれません。

これが私がしたことであり、顧客の要求に十分でした。

  1. すべての暗号化されたデータを含む隠しボリュームを作成します(読み取り専用に設定し、可能であれば一度読み込んで速度を向上させます。暗号化されたボリュームは非常に遅く、頻繁にアクセスまたは変更するデータには使用しないでください)。私の場合は、保存されたコードを一度だけ読みます。
  2. いくつかの確認を実行するコマンドを作成し、ボリュームをマウントします。 Cなどの低レベルの言語を使用してください(たとえば、私も知っています。少し難しいですが、正しく実行すると、侵入者は逆アセンブラまたはカーネルデバッガを使用します)。
  3. コンパイル時にすべてのシンボルを隠す
  4. すべての文字列は非常に複雑なアルゴリズムを使用して難読化されます。 (文字列にはパスワード、ファイル名、外部コマンドなどが含まれており、デフォルトではすべて)
  5. 難読化された文字列暗号化(私はlibtomcryptを使用しています)
  6. すべての文字列が見えないことを確認してください(stringsコマンドを使用)。
  7. 有効な関数の間にランダムで複雑な数学関数を挿入して、分解を複雑にします。
  8. このコマンドは外部コマンドを実行し、複数の認証変数を必要とする暗号化されたファイルシステムをマウントします。
  • PIの固有のシリアル番号(/proc/cpuinfo)を使用してください。
  • 他のカード(またはPI)と一緒にSDカードのシリアル番号を使用してください。
  • コマンドを使用して動的に生成されたいくつかの追加ファイル
  • dosパーティション(start.elf、kernel.img)のファイルのチェックサムの使用
  • ルートパスワードが変更されていないことを確認してください。
  • ご使用の環境に適した時間帯、オペレーティングシステムのバージョン、およびオペレーティングシステムのその他の側面を確認してください。
  • どのタイプのネットワークアクセス(ローカルのみ)がある場合、またはそれに接続されている特定のデバイスがある場合は、そのデバイスが存在することを確認してください。
  1. ファイルはメモリに作成、マウント、削除する必要があります。
  2. パスワードは、ps / top / htopに表示されないように環境変数に渡す必要があります。
  3. デフォルトでは、これらの条件がすべて満たされない場合、コマンドは実行されません。

これらのチェックがすべて正しい場合、コマンドはボリュームをマウントします。 (コマンドの実行をシステムサービスとして追加します)。使用しない既知のサービスをインストールし、実行可能ファイルを新しいコマンドで置き換えます。他のサービスに対して実行されるスクリプトのコマンドを非表示にすることもできます。

ちょっと時間がかかりましたが、Cの昔を思い出して楽しんでいました。 Cコマンドコードを侵入する方法は明らかですが、侵入者は数日夜を明かして眠れなくなります。私の場合、顧客は他の人がSDカードをコピーするのを避けたかったので、これは私たちにとってうまくいきました。

関連情報