ARMデバイス(Raspberry Pi)でLinuxカーネルを起動する起動可能なSDカードであるいくつかの作業をコピープロテクトしようとしています。私はこのアプローチを使用しています:
したがって、ブートローダーがカーネルとinitrdをロードした後、カーネルはinitrdを復号化し、そのinitスクリプトを実行します。これにより、パスワードが生成され、ルートファイルシステムがマウントされます。
私の質問は:このセットアップを破るのはどれくらい簡単ですか(ルートファイルシステムを復号化し、SDカードから起動させるため)?最も弱い部分は何ですか?カーネルを逆コンパイルして、それらのカスタム暗号化関数を見つけるのはどれほど簡単ですか?
編集:明らかなことに時間を無駄にしないように、いくつかの修正があります:
この設定を破るのはどれほど簡単ですか(ルートファイルシステムを復号化し、任意のSDカードから起動するため)?
セットアップを「破る」のがどれほど難しいかは、ファイルシステム自体に署名/暗号化するために使用している方法のエントロピーのビット数によって異なります(これにより、ブルートフォースに使用できる一意の組み合わせの総数が決まります)パスワード)。
最も弱い部分は何ですか?
間違いなく、事前定義されたCIDをパスワードとして使用し、カスタムの疑似乱数生成関数を使用します。
SDカードのCIDは読み取り専用であるのは想定だけですが、この時代に非準拠のフラッシュメモリデバイスが見つかることは珍しくありません。 一部の人々 特定のSDカードでCIDを上書きする機能さえ示しています。これにより、パスワードのブルートフォース攻撃が容易になります。特に、クローンを作成した後、SDカードをエミュレートするだけの場合はそうです(これは他にも検討したいことです)。
最後に、あらゆる種類の疑似乱数ジェネレーターを使用すると、ランダムではないという理由だけで、すでにいくつかの固有の欠陥があります-(疑似乱数。事前に作成された暗号化されたブートローダー( TrueCrypt またはLUKSなど。どちらもRaspberry Piで動作します)を使用し、カーネルを手動で変更する必要がないようにすることをお勧めします。
カーネルを逆コンパイルして、それらのカスタム暗号化関数を見つけるのはどれほど簡単ですか?
何かを逆コンパイルするのは非常に難しいです。逆に、コンパイルされたアプリケーションのデアセンブリは簡単なことが多く、アセンブリを別の高級言語にリバースエンジニアリングするために使用できるツールはたくさんあります。攻撃者がコンパイルされたカーネルにさえアクセスできる場合、コードが意図的に難読化されていない限り、疑似乱数ジェネレーターのようなものを分析することはおそらく簡単です。
TL、DR:暗号化とセキュリティに関しては、車輪の再発明をしないでください。実証済みの真実に固執してください。すでに利用可能であり、RaspberryPiで正常に機能することが実証されているフルディスク暗号化オプションがいくつかあります。 SDカードのCIDを一種の「パスワード」として使用することは避けます。変更できない場合でも、この値をスプーフィングする方法があります。
コピー防止機能は、SDカードの仕様に [〜#〜] cprm [〜#〜] としてすでに含まれています。
熟練した人なら、これをクラックするのにそれほど問題はないでしょう。エミュレーターでSDカードを起動し、RAMからキーを読み取るのは比較的簡単です。次に、コピー防止機能のないバージョンをPirate Bay(など)に投稿します。それだけです。
または、エミュレーターを使用して、実行中のエミュレートされたシステムにシェルコードを挿入します。次に、実行中のシステムを使用して、復号化されたrootfsをコピーします(またはdmsetup table --showkeys
などを使用してキーを読み取ります)。
すばやく検索すると、 Raspberry Piエミュレーター の存在が判明するため、作業の一部はすでに完了しています。
別の問題、特にこれがあります。
カーネルは、復号化機能として機能する同じ暗号化機能を持つように変更されています。
これを配布する人は誰でも、GPLの条件の下でカーネルソースコードを受け取る権利があります。したがって、逆アセンブルする必要はありません。diff
を使用して追加の関数を見つけることができます。
(たとえば、チェックカーネルとストックカーネルを比較できるように、分解によってそれを見つけるのはそれほど難しいことではありません)
私はRaspberryPiのブートコードに完全には精通していませんが、埋め込まれた暗号化キーを使用してブートローダーを再フラッシュできる場合(カーネルに渡されます)、少なくともSDカードにはないので ' dエミュレータで起動する試みを阻止します。