ISPからの読み取りからAVRフラッシュを保護しますか?


15

ISPを介した読み取りからフラッシュ全体を保護しようとしています。ブートローダーがあり、アプリケーションセクションを自己プログラムできます。

ロックバイトの設定:

LB1/LB2 ユーザーがブートローダーを使用して新しいファームウェアをアップロードすることを許可しません。

BLB12/BLB11そしてBLB01&BLB02、私は間違っていないよ場合は、ISPを通じてフラッシュを読んで防ぐことはできません。

それでは、ユーザーがカスタムブートローダーによってファームウェアを更新し、同時に読み取りからフラッシュを保護する方法はありませんか?

回答:


18

チップを指定しなかったので、以下は主に8ビットのatmegaデバイス向けですが、一般的な情報です。より具体的な情報については、特定のチップのデータシートの「メモリプログラミング」セクションをお読みください!

そうは言っても、あなたが言ったように、すべてのAVRデバイスにはLB1とLB2という2つのロックビットが含まれています。これらを(0、低に)プログラミングすると、以下の表に従って、フラッシュおよびEEPROMメモリに書き込まれた内容に保護が追加されます。保護レベルは3つのモードに分けられます。モード1は保護を提供せず、モード3は最大の保護を提供します。ロックビットを再プログラムするだけで、より高い保護モードに移行できます。

AVRでは、「高」ビットを「低」に変更できますが、その逆はできません。「低」ロックビットを「高」に変更することはできないため、保護レベルを下げることはできません。ロックビットをクリアするには、フラッシュメモリを消去する完全なチップ消去が必要です。

AVRロックビットテーブル

これらの2つのロックビット(LB1およびLB2)が低いと、99.9%の人がファームウェアを盗むのを防ぎます!おそらく99.9%以上。ほとんどの場合、コードをリバースエンジニアリングする方が簡単です。

それでは、ユーザーがカスタムブートローダーによってファームウェアを更新し、同時に読み取りからフラッシュを保護する方法はありませんか?

ブートローダー保護ヒューズ(BLB12およびBLB11)を備えたデバイスでは、私の知る限り(誤解される可能性がありますが、以前はこれに問題があったと思います)、カスタムブートローダーセクションをロックし SPIを無効にして、 97〜98%の人々から保護されています。

ただし、ロックビットがプログラムされていない場合、有効なメモリロック機能はありません!!! ISPの無効化は、70%のユーザーをブロックするのに十分です。

いくつかの追加情報については、セルフプログラミング機能を備えたデバイスのブートローダーに関連するロックビットを除き、ロックビットとヒューズは通常のフラッシュまたはEEPROMスペースに配置されず、ソフトウェアからもアクセスできません。表2このアプリノートの、特定のデバイスで何ができるかを特定するのに役立ちます。

AtmelのAVRラインは高度なセキュリティデバイスではありません(明示的に明記されていない限り!)。そのため、コードの安全性は保証されていません。すべての非セキュアデバイス(および悲しいことに、一部のセキュアデバイスでも)と同様に、それらは一般的な攻撃を受けやすいです!


編集

HVプログラミングインターフェイスヘッダーをオンボードに配置します。しかし、誰かがHVプログラマーを使ってフラッシュを読むことはできますか?HVプログラマーは、ISP / Jtagが無効になっていてもチップを消去できることを知っています。

どうしても必要な場合を除き、ボードの設計にHVプログラマーを含めるべきではないと思います。HVプログラマー(12ボルトの信号)は、ロックされた(ほとんどの場合ロックされた)チップをプログラムするための安全対策としてのみ利用可能です。理論的にはこれがされただけでは何も読んでいないデバイスをプログラムするためのもの。そして、私は読書を可能にする悪用について聞いたことがありません。

ブートローダーをアップグレードするために(時々)HVプログラミングインターフェイスヘッダーをオンボードに配置します。しかし、誰かがHVプログラマーを使ってフラッシュを読むことはできますか?HVプログラマーは、ISP / Jtagが無効になっていてもチップを消去できることを知っています。

ブートローダーを介してロックされたフラッシュを更新する方法があると思います(内部書き込みフラグやISRに関係するかもしれません)。しかし、メモを検索し、テストする必要があります。私はこれを〜20時間行うことはできません。そのため、これとあなたが言及したプロセッサのみに焦点を当てた新しい質問をすることを強くお勧めします。とてもいい質問です!


最後のコメントに+1、他のすべてが失敗した場合、すべてのブロックがチップをはんだ付け解除し、AVRデバッガ/プログラマーにロックビットをリセットするだけで、セキュリティがすべて失われます。
helloworld922

@Garrett Fogerlie:私がコードを盗もうとしていると思うようになった理由がわからないので、私に知らせてください。私は自分のコード、自分のブートローダーを最小限に保護しようとしています。とにかく、これに関するいくつかの質問。チップはATMega328であり、ファミリーで一般的なロックビットの使用法があると考えられています。とを説明LB1しました。これは、LB2アップグレードの目的でブートローダーを使用するオプションを制限するものとして私の質問でも説明しました。そのため、オプションではありません。用として、BLB12そしてBLB11-私は理解していないものだという。(続き)
パブロ

これらのビットを設定しても、だれもが外部からフラッシュ(アプリケーション+ブートローダー)を読み取ることはできません。データシートから、これらのビットはLPM / SPMコマンドをブロックするだけであるように見えますが、シリアルプログラマーはそれを使用していません。シリアルプログラミングとjtagを無効にすることに関しては、これは私にとって大きな疑問です。ブートローダーをアップグレードするために(時々)オンボードのHVプログラミングインターフェイスヘッダーを配置します。しかし、誰かがHVプログラマを使用してフラッシュを読むことはできますか?HVプログラマーは、ISP / Jtagが無効になっていてもチップを消去できることを知っています。
パブロ

@pablo、申し訳ありませんが、私は違反を意味しませんでした。私が最初にあなたの質問を見たとき、盗難のアイデアは私には起こりませんでした。そして、ロックされたコードの取得にいくらか焦点を当てた回答を書きました。しかし、私は職場にいたので、その回答を提出する前に、約2時間の一時停止がありました。それから私が戻ってきたとき、私はまだ答えがないことに気づき、少し驚いた。そしてあなたの質問を読み直したとき、私は「盗難」が理由であるかもしれないと思った。あなたのせいではありません。免責事項を削除しました。プロセッサモデルは...理由は8月16日/ 32ビットAVRのがあるので、その表に記載されている&違いの必要でした
ギャレットFogerlie

1
ガレット・フォガリー:HVプログラマーをオンボードに搭載するつもりはありませんでしたが、ヘッダーだけです:)しかし、ロックビットが機能し、ISPヘッダーを使用してデバイス全体のフラッシュを書き換えて書き換えることができる場合に備えて、それは必要ないことがわかりました。私の元の質問への答えを要約すると-LB1とLB2を設定すると、だれでもフラッシュ領域全体を読み取ることができなくなり、同時にブートローダーを介してプログラムメモリを書き込むことができなくなります。
パブロ

3

一部のATMegaデバイスでロックビットを使用しても、ブートローダーでコードを更新できます。

ATMega 328でLB1とLB2をプログラミングしました。その後、ブートローダーを呼び出し、メインプログラムを更新しました。すべてが完全に機能しました。

ISPは、フラッシュ/ eeprom /ヒューズを読み書きすることはできませんが、ブートローダーはアプリケーションセクションを書き込むことができます。

ISPでのチップ消去はロックビット(LB1およびLB2)をクリアしますが、フラッシュ/ EEPROM全体も消去するため、コードを保護できます(ただし、ブートローダーがハッキングされないことを保証する必要があります)


3
これは、現在受け入れられている回答をどのように改善しますか?
イグナシオバスケス-アブラムス

標準のArduinoスタイルのブートローダーが常駐している限り、ブートローダーLPMをアプリケーションメモリに対して無効にする高度な328P専用モードを使用しない限り、ブートローダー自体にリードバック機能があるため、リードバックのロックはほとんど意味がありません。それ以外の場合は、ブートローダーを変更してそれを削除する必要がありますが、プログラミングの検証ができなくなります。(あなたは、潜在的に異なる検証メカニズムを作成することもできますが、それはまた、AVRDUDE置き換える/変更するためにあなたを必要とする非標準になります)
クリス・ストラットン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.