商用利用のためにPiのソフトウェアを保護するにはどうすればよいですか?


16

Raspberry Piを商用製品で使用したいのですが、デバイス上のソフトウェアのリバースエンジニアリングを防止したいと思います。問題のソフトウェアはRubyで作成されます。エンドユーザーはSDカードに物理的にアクセスでき、Piへのルートアクセスを取得するのに十分な賢さがあると思います。

私が見るように、オプションには以下が含まれます:

  • SDカードの一部(またはすべて)を暗号化する
  • Rubyコードを難読化するか、バイトコードにコンパイルします(JRubyまたはRubinius)

暗号化が最良の解決策ですが、ユーザーにキーを要求せずに復号化する方法は考えられません。コードの難読化は確かに可能ですが、私の心ではあまり安全ではありません。

SDカードの一部を暗号化して、復号化するキーをユーザーに求めることはできますか?または、目的のデバイスでのみコードにアクセスできるようにするより良い方法はありますか?


同様のソリューションを探しています。私が得た最良の答えは、特定の条件を使用してブート後に暗号化されたイメージ(パーティション)をマウントすることです(おそらく、DRMのようなajaxコールは、動的な復号化キー、ロックアルゴリズムを持つシリアル番号((SN * date-1))-のみを提供します他の方法は、コードをバイナリにコンパイルできるコードを使用することです-c ++や.net(mono)のように、良いソフトウェアクラッカーがあなたのソフトウェアをターゲットにしないことを望みます-あなたはMicrosoftがこの問題を何年も経験していないことを知っています。それを解決しました。幸運を祈ります!
ピオトルクラ

回答:


8

もちろん、暗号化されたファイル/コンテナ/などを復号化することは可能です。パスワードを要求することなく。(暗号化された)パスワードをSDカードに保存し、それを使用してデータを復号化するだけで十分です。たとえば、簡単なopensslデモは次のとおりです。

openssl enc -a -e -salt -aes-256-cbc -pass pass:abc123 -in /tmp/plaintext.txt -out /tmp/ciphertext.enc

openssl enc -d -a -aes-256-cbc -pass pass:abc123 -in /tmp/ciphertext.enc

暗号化はPiにソフトウェアをインストールするときに実行され、復号化は実行時に、場合によってはRAMで実行されます。たとえば、パスワードは、いくつかの疑似ランダムシーケンス番号(既知)とから取得した特定のPiのシリアル番号の組み合わせにすることができますcat /proc/cpuinfo。次に、すべての意図と目的「パスワード」、つまり暗号化メカニズム全体の弱点であるこの擬似乱数を格納するために、適切に隠された場所を見つける必要があります。たとえば、SDのスペアセクターが一般的な選択ですが、実行可能ファイルの1つに埋め込むこともできます。

いずれにせよ、あなたの最善の選択肢は、ソフトウェアを暗号化およびコンパイルし、ソフトウェアにさまざまな難読化レイヤーを追加することです。

最後に、ソフトウェアにインターネット接続が必要な場合は、毎回Piにパスワードを要求させることもできます。接続内でパスワードを非表示にする必要がhttpsありますsalt。また、暗号化に関して現在の時間を使用して、応答攻撃から保護する必要があります。

ソフトウェアを安全にするための多くの(安い)オプションがあります。しかし、十分に定義された人気のしきい値にソフトウェアが達すると、かなりの金額を保護に投資しても、確実にクラックされることを知っておく必要があります。


1
セーフモードでrootとしてログインし、キーファイルを読み取り、彼のすべてのハードワークを解読し、それをロシア人に何百万も売ることができます。試してみてください。しかし、防弾ではありません。httpsでさえ、DNSリダイレクトと偽の証明書を使用して、すべて管理されたネットワーク内でだまされる可能性があります。おっと
Piotr Kula

1
@Avio:まず第一に、セクターは不明ではありません。それは知られている必要があります、それがどこにあるかは明らかではありません。ただし、復号化スクリプト/アプリケーションで見つける必要があるため、見つけることができます。どこかに復号化を行うコードを配置する必要があります。どこに置きますか?initramfsでは、一部のSDカードパーティションまたはその他の保護されていない場所。誰でも暗号化されたパーティションを解読するために使用されるアプリケーション/スクリプトを見ることができ、そして/または実行される前に何らかのアクセスを得るためにそれらを変更するだけです。
レジストフアダムスキー

1
すべての暗号化方法は問題ありません。ただし、キーはSDカードに保存されます。事業者は、Pi用のSDカードをエンドユーザーに販売したいと考えています。次に、SDカードを取り出し、ブルートハックし、悪用し、セーフモードでルートファイルに読み込み、他のすべてのデバイスの通信とソースコードに侵入します。それが難問です。私はOPがものを暗号化する方法を知っていると確信しています。彼は、システムが自動的に復号化できるようにする一方で、復号化からソフトウェアを保護する方法を尋ねます。
ピョートルクラ

1
@Avio:いいえ、そうでもありません。しかし、あなたは「どうやって?」と尋ねたので、私はそれに答えました。修辞的な質問だとは知らなかった。あなたはあなたのアイデアを実装することでアプリケーションの配布を始めるのに十分であると書いたが、私はOP(およびこれを読んでいる他の人)はこのアプローチの弱点を知っているべきだと思う。そうは言っても、Raspberry Piにはもっと良い解決策が存在するとは思わない。唯一できることは、さらに難読化することです。おそらくOPアプリケーションはリスクをとるにはあまりにも貴重であるため、RPi以外のものを使用することに決め、そこでより良い保護メカニズムを作成できます。
クシシュトフアダムスキー

1
ここでのすべての回答は、私の質問に関連するトレードオフと課題の素晴らしい議論を提供しますが、最も具体的な解決策があるので、今のところこの回答を受け入れます。/ proc / cpuinfoのシリアル番号を使用すると、リンクが失われる場合があります。
シュロックウェル

6

コードとキーがSDカードのマシン上にある場合は実際に、彼らはなります彼らは、それを逆コンパイルすることができますキーを発見することができ、彼らがします機密データを抽出することができます。

それは映画を暗号化するようなもので、DVDは視聴者に表示するために映画を解読するために必要なすべての情報を含まなければならないので、すべての映画コピー防止メカニズムは最終的に運命づけられます。

できる最善のことは、製品のリバースエンジニアリングの経済性を変えることです。

暗号化や難読化は価​​値がありますか?

今、私たちはあなた自身を完全に保護する方法がないことを確立しました、質問は次のようになります

  1. これはどのくらい起こりそうですか?
  2. あなたのアルゴリズムとデータの他の誰かにとっての価値は何ですか?
  3. ソフトウェアを使用するためのライセンスを購入することで、彼らにかかる費用はいくらですか?
  4. アルゴリズムとデータの複製にかかる費用はいくらですか?
  5. アルゴリズムとデータのリバースエンジニアリングの費用はいくらですか?
  6. アルゴリズムとデータを保護するコストはいくらですか?

これらがあなたのアルゴリズム/データを保護するために重要な経済的要請を生み出した場合、あなたはそれを検討する必要があります。たとえば、サービスの価値と顧客へのコストが両方とも高いが、コードのリバースエンジニアリングのコストがコード自体の開発コストよりもはるかに低い場合、人々はそれを試みるかもしれません。

だから、これはあなたの質問につながります

  • アルゴリズムとデータをどのように保護しますか?

難読化

あなたが提案するオプションは、コードを難読化し、上記の経済性を台無しにします-それは、あなた(6)へのコストをあまり増加させることなく、それらへのコスト(上記5)を大幅に増加させます。問題は、DVD暗号化と同様に失敗する運命にあり、3、4、5の間に十分な差がある場合、最終的に誰かがそれを行うことです。

別のオプションとして、Steganographyの形式があります。これにより、コードを解読して配布を開始した人を識別できます。たとえば、データの一部として100個の異なる浮動小数点値があり、それらの各値のLSBの1 ビットエラーがアプリケーションで問題を引き起こさない場合、一意の(各顧客に)識別子をそれらのビットにエンコードします。問題は、誰かがアプリケーションデータの複数のコピーにアクセスできる場合、それが異なることは明らかであり、非表示のメッセージを簡単に識別できるようになることです。

保護

本当に安全な唯一のオプションは、アプリケーションにソフトウェア含めるのではなく、ソフトウェアの重要な部分をサービスとして提供することです。

概念的には、アプリケーションはアルゴリズムの実行に必要なすべてのデータを収集し、クラウド内のサーバー(ユーザーが制御)へのリクエストとしてパッケージ化し、サービスが結果を計算してクライアントに返します。それが表示されます。

これにより、専有の機密データとアルゴリズムはすべて、完全に制御するドメイン内に保持され、クライアントがいずれかを抽出する可能性がなくなります。

明らかな欠点は、クライアントがサービス提供に結び付けられ、サーバーとそのインターネット接続に左右されることです。プラス面としては、常にバグが修正されています。残念ながら、まさにこれらの理由から多くの人々がSaaSに反対しています。

ただし、これは大きなステップであり、上記の大きなコストがかかる可能性があります6が、アルゴリズムとデータを完全に安全に保つための唯一の方法です。


SaaSはオプションかもしれませんが、オンラインにするサーバーごとにポイント1〜6を再確認する必要があることに注意する必要があります。また、DDoS攻撃にさらされます。
Avio

4

私は最近、この解決できない問題に対する非常に洗練されたソリューションを発明しました。このxkcdコミックに触発されました:

ここに画像の説明を入力してください

そのため、ソリューションはスーパーグルーと呼ばれます。1枚がSDカードをPIに接着している場合、カードを損傷せずに取り出すことはほとんど不可能です。

SDに保存されたパスワードで暗号化された安全な外付けSSDディスクを使用することもできます!

ここに画像の説明を入力してください


誰かが簡単に画像ファイル(dd)を作成し、それに応じて使用できます!
ヴァシリス

@Vassilisはログインなしでは不可能ですか?
ADOConnection

ライブLinuxイメージを持っている人なら誰でもできます!それはの根である必要はありません、あなたのシステム。
ヴァシリス

@Vassilisは、この手順を説明する記事を参照してください
ADOConnection

グーグルで最初に出てきたのはこれです
ヴァシリス

2

バイトコードへのコンパイルが最良の忌避剤です。暗号化に関しては、ユーザーがルートアクセス権を取得していない場合にのみ、ソフトウェアをTrueCryptボリュームに保存できます。メモリ/ディスクはいつでも検査のためにダンプできるため、パスワードを安全に保存する方法はありません。ユーザーが大量のLinuxユーティリティを持っている場所でソフトウェアが実行される場合、セキュアなデバイス(スマートカード)の助けでさえあまり役に立たないでしょう。私の知る限り、セキュアブートはR-Piのオプションではなく、ユーザーがOSをいじるのを防ぐものです。


1
起動中の暗号化は、思ったほど安全ではありません。通常のシステムブートにアクセス/バイパスするだけで、すべてミンチ肉になります。Bluraysでさえこれを正しくしませんでした。
ピョートルクラ

完全に閉じられたシステムのみがアプリケーションを保護できます。私が知っているのは、ややプログラム可能なそのようなもの-Java Cardだけです。
トマスQ.

1
はい-ただし、常にPINを入力する必要があります-PINはカードに保存されません。
ピョートルクラ

1

真の商用アプリケーションを作成したい場合、Piはエンドユーザーフォームにあるため、役に立たないでしょう!

独自のPCBを設計し、たとえばPi上にあるプロセッサを使用して、フラッシュメモリをPCBに埋め込む必要があります。

  1. 次の10秒以内にしか使用できないトップシークレットアルゴリズムに基づいて、単一のログオンコードを生成するBCM用の適切なファームウェアを作成します。
  2. 適切なソフトウェアを使用して独自のカーネルをコンパイルし、ソフトウェア上の別の暗号化パーティションを含むフラッシュ上の暗号化ファイルからルートをマウントできるいくつかのLinux機能を有効にします。
  3. BCMファームウェアは、巧妙なアルゴリズムまたは公開キーに基づいて認証キーを一度オフにするトップシークレットを生成し、それをカスタムlinuxカーネルに渡します。これにより、暗号化されたルートパーティションが読み込まれ、暗号化されたソフトウェアドライブを読み込むためにブート中に暗号化が行われます暗号化されたイメージ内。

チップ

  • 優れた認証キーは8〜16文字の長さではありません。システムより多くのシステムシンボル(HEX)とより少ない文字(ASCII)を使用して256/512バイト長の認証キーを提供することが重要です。
  • AES、TKIPは簡単にクラックされるため使用しないでください
  • 現在、Whirlpool暗号化は256/512キーを使用して解読するのが最も複雑です
  • ハッカーがフラッシュドライブを削除したり、内容をダンプしたりできる場合でも。ソフトウェアは2回暗号化されます。
  • 認証キーを傍受すると、ファームウェアから抜け出すのが非常に困難になります(BCMがファームウェアダンプを防止できるため)
  • 一部の賢いフラッシュROMには、完全なメモリダンプを防ぐ機能もあります。
  • PCBを設計する場合は、すべての暗号化データとキーを提供し、ブルートフォース攻撃を防ぐセキュリティチップを実装します(DellやAppleなど)。一部のDellは、軍事用に自己破壊します。間違ったBIOSパスワードを2回入力すると、散布爆弾でドライブが消去されます。認証キーの操作を検出する場合、同じものを実装できます。

一日の終わり。Raspberry Piは、Linuxの使用方法やいくつかのプログラムの作成方法を子供たちが学習するための教育目的を目的としています。

注目度の高い商用利用には適していません。独自のデバイスを作成し、独自の保護システムを考案する必要があります。あなたとあなた以外の誰もあなたがあなたの所有権情報を保護する方法を知らないなら、誰かが既知のエクスプロイトまたはブルートを使用してそれをハッキングする可能性は..

代替案

  • バイナリ形式でターゲットシステムにコンパイルおよび展開できるようにソフトウェアを作成します。.NETで実行されるWindows用のEXEの例、Java用のJARまたは(Linuxでは不明、C ++?)
  • 覚えておいてください、あなたが望むセキュリティはより良いです-あなたはそれにより多くのお金を費やさなければなりません。例外はありません。

1

解決策の1つは、特定のPiに対してほぼ一意のRaspberryPiのMACアドレスを使用することです。コード内でこのアドレスを確認し、コンパイル済みバージョンを提供します。これにより、リバースエンジニアリングが困難になります。

SDカードを盲目的に新しいカードにコピーする人にとっては、別のPiでSDカードが機能しません。これはあなたのソフトウェアを盗む大多数の人々を片付けるでしょう。これを破るのに十分賢い人は、ソフトウェアを作り直すのに十分賢いかもしれません、彼らは多数ではなく、彼らがあなたの販売を傷つけるとは思わない。


0

ピギーバックベースのソリューションを使用できます: Raspberry Piのソフトウェアシリアル保護


2
私が間違っているが、このデバイスがリバースエンジニアリングに対する保護を追加していない場合は修正してください。CPUシリアル番号の単純なハードコード化されたチェックでも同じことができます。
EDP

0

SPIベースのフラッシュをキャリアボードに追加して、コードを保存してみませんか?私は自分の製品でこのオプションを検討しています。SDが破損した場合、エンドユーザーがカスタムraspbianを含む新しいものと、SPIフラッシュをマウントして実行可能ファイルを実行するコードを作成できるようにします。

別のオプションは、RTCに暗号化キーを保存することです。ほとんどのRTCチップにはある程度のストレージがあり、SDまたはSPIフラッシュから実行可能ファイルのロックを解除してマウントできるキーで事前にプログラムできます。


-4

Raspberry Piの範囲で使用されているすべてのCPUは、独自のセキュアブートをサポートしていると思います。pi自体にはない4,8,16,32または64Kの内部フラッシュまたはEEPROMを再フラッシュするには、12ボルトが必要だと思います。彼らから、あなたはあなたのコードでTrustzoneをセットアップすることができますので、すべての良いものは見ることができません。また、両方の形式のスタティックRAMは、指定された回数の書き換えに対してのみ安定していることも理解しています。私の最初のステップは、予備のCPUを用意し、このセキュアブートメモリを数時間または数日間再フラッシュすることです。最終的に、すべてのビットが固定されるため、他の誰もコードを変更できなくなり、実際の製品によっては、定期的に2要素の識別(銀行など)を要求できるため、製品はコードを吐き出し、再アクティベーションコードが送信されます電子メールアドレス。piを少し変更すると、ARMにはCPUIDもあるので、多くのセキュリティレベルを選択できると思います。つまり、特定の番号にSMSを提供することもできます。たくさんの方法。


1
こんにちは、ようこそ。その投稿には多くの推測と信念があります。Piに12 Vを印加するように人々に勧める前に、より詳細な回答を提供し、適切な参考文献でバックアップすることを強くお勧めします。
ガニマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.