工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

テキスト文字列は組み込みソフトウェアの脆弱性ですか?

長年にわたり、デスクトップコンピュータのセキュリティが懸念されてきました。マシンがインターネットに接続されると、本質的に何らかの攻撃の可能性があります。このような侵入は、データを盗んだり、システムに損害を与えたり、何らかの方法でその動作を変更したりする可能性があります。保護手段はよく知られており、広く適用されています。組み込みシステムは、ネットワーク化されることはめったになく、コードは通常、ある種のROMにあるため、このような問題の影響を受けないように見えました。世の中変わったんだよ。最近のシステムの大部分はインターネットに接続されており、コードをRAMにコピーして、そこから実行するのが一般的な方法です。これは、セキュリティが今や重要な組み込みソフトウェア設計の考慮事項であることを意味します。

英語は素晴らしいコミュニケーションツールです。非常に表現力豊かな言語であり、非常に正確で繊細なコミュニケーションを可能にします。しかし、日常のスピーチでは、私たちのほとんどは怠惰であり、100%の正確さのない単語を使用することがよくあります。ここで私が念頭に置いている例は、安全の方法です。 およびセキュリティ 同義語であるかのように、ほぼ同じ意味で使用されます。私が聞いた中で最も良い定義は次のようなものだと思います。安全とは、デバイスから世界を保護するプロセスです。セキュリティは、デバイスを世界から保護しています。今日の私のトピックはセキュリティです。

システムが本当に完全に防弾である必要がある場合は、工業用グレードの暗号化が求められます。これには通常、特定のハードウェアサポートが必要です。これは、すぐに利用できますが、そのような高度なセキュリティが必要ないアプリケーションでは過剰と見なされる場合があります。そのような場合、他の選択肢があり、それが私が探求したいことです。

ハッカーがデバイスのメモリコンテンツにアクセスできる場合、ハッカーはデバイスが何を実行し、どのように実行するかを理解し始めることができます。これは、操作を変更する最初の段階です。コードは分解される可能性があるため、ロジックを明らかにすることができます。暗号化がなければ、これを防ぐためにできることはほとんどありません。ハッカーが次に行う可能性があるのは、データの16進/ ASCIIダンプを調べて、そこに何が見つかるかを確認することです。彼らはパターンと認識可能な構造を探しています。ここで、いくつかの予防措置を講じることができます。暗号化はオプションではないかもしれませんが、難読化は可能性があります。

データの難読化の目的は、データが何であるかを認識しにくくすることで、ハッカーを遅らせたり阻止したりすることです。メモリダンプをスキャンすると、簡単に見つけられるものの1つはテキスト文字列です。それで、これが私がここで焦点を合わせるものです。

C / C ++コードでは、テキスト文字列は通常、ヌルバイトで終了するASCIIコードを含むバイトのシーケンスです。それは非常に見つけやすいので、変更します。まず、nullターミネータの代わりに、各文字列の最初のバイトが長さ指定子になります。文字列の文字は、見慣れないようにデータがわずかにスクランブルされます。私が行うのは、各バイトの2つのニブルを交換することだけです。プレーンテキストの文字列をフィードするユーティリティプログラムが必要です。ユーティリティプログラムは、適切な初期化を使用して配列の宣言を生成します。このユーティリティの中心となる機能は次のとおりです。

 void scramble(int index、unsigned char * input){unsigned char * charpointer、character; printf( "unsigned char string%d [%d] ={0x%02x、"、index、strlen(input)+ 1、strlen(input)); charpointer =入力; while(* charpointer){character =* charpointer ++;文字=((文字&0x0f)<<4)| ((文字&0xf0)>> 4); printf( "0x%02x"、文字); if(* charpointer)printf( "、"); } printf( "}; // \"%s \ "\ n"、input);} 

この関数にインデックス4と文字列「Helloworld」(元のeh?)を渡した場合、出力は次のようになります。

 unsigned char string4 [12] ={0x0b、0x84、0x56、0xc6、0xc6、0xf6、0x02、0x77、0xf6、0x27、0xc6、0x46}; //「Helloworld」

これをコピーしてコードに貼り付けることができます。その後、表示する必要があるときにテキストのスクランブルを解除する関数を作成するだけです。各文字列にインデックス番号を付ける代わりに、インデックスを置き換えることで任意の名前を付けることができます。 文字列を持つパラメータ。コメントは文字列を読み取り可能な形式で示しているため、生成されたコードはある程度自己文書化されていますが、もちろん、これはソースコードにのみ表示されることに注意してください。ハッカーがあなたのソースコードにアクセスできる場合、あなたは十分な問題を抱えているので、私はそれ以上手助けすることができません!

スクランブル解除プロセスを説明するコードは次のとおりです。

 void main(){unsigned char temp、buffer [50]; int count =string4 [0]、index =0; while(count-){temp =string4 [index + 1]; temp =((temp&0x0f)<<4)| ((temp&0xf0)>> 4); buffer [index] =temp; index ++; } buffer [index] =0; printf( "-%s- \ n"、buffer);} 

各バイトのニブルの交換は、スクランブリングを実行できるさまざまな方法の1つです。もう1つの可能性は、たとえば、各文字を3ビット左回転することです。これを行うためのコードは次のとおりです。

 unsigned char leftrotate3(unsigned char c){c =(c <<3)| (c>> 5); return c;} 

私が概説した難読化手法は、文字ごとに文字列をスクランブルします。代わりに、文字列全体に対して処理を行うことができます。たとえば、文字列をビットの長いシーケンスとして扱い、任意の数だけ左に回転させます。このアルゴリズムのコーディングは、より熱心な読者に任せます。

すべてのテキスト文字列をローカライズすることの副作用は、他の言語用に異なるバージョンのソフトウェアを作成することが非常に簡単であることです。

データの難読化は防弾にはほど遠いものであり、せいぜい深刻なハッカーの速度を低下させることになることを繰り返し強調しなければなりません。他に何もなければ、スクランブル解除コードを逆アセンブルすることができます。この手法の秘訣は、難読化を追跡するのが難しい道にすることです。本当に高度なセキュリティが必要な場合は、完全な暗号化を検討する必要があります。


埋め込み

  1. ピアノ
  2. 自動車における組み込みシステムの役割
  3. 組み込みシステムとアプリケーションの基礎
  4. 本当に不可欠な3D印刷ワークフローソフトウェアの10の機能
  5. 3Dプリントとソフトウェアがデジタルトランスフォーメーションにとって重要である理由
  6. 組み込みエッジ用のSOAFEEアーキテクチャにより、ソフトウェア定義の自動車が可能になります
  7. DevOpsを使用した組み込みソフトウェアの課題への対処
  8. ロボットはあなたの工場に近づいていますか?
  9. 組み込みソフトウェアはハードウェアサプライチェーンの性質を変えています
  10. スマートファクトリーにとってのソフトウェア相互接続の利点は何ですか?
  11. 宗教団体が施設管理ソフトウェアを導入する理由