トロイの木馬ソース攻撃、それは何ですか?

18/11/21

コンパイラをだまして、ソースコードで人間の目に見えるロジック以外のバイナリファイルを生成させることができたらどうでしょうか。 これを行うことが可能であるだけでなく、簡単に悪用できることを示します...

これは、論文の冒頭で述べられています 「トロイの木馬の出典:目に見えない脆弱性」、最近教授によって公開されました。 ケンブリッジ大学のロスアンダーソン、テキストの著者 セキュリティエンジニアリング 、そして彼の博士課程の学生であるニコラス・ブーシェーによる。 

興味をそそられて、サイバーの世界でよくあることですが、私たちは深めることに決めました...

まず、最新のプログラミング言語で記述されたプログラムにはコンパイラが必要であることを忘れないでください。コンパイラは、プログラムのテキストを分析し、構文の正確さを検証し、コンピュータで実行可能な言語で最適化されたプログラムに変換する別のプログラムです。 このことから、プログラムに不注意で脆弱性を挿入する可能性のあるコンパイラの開発における重要性をすでに理解しています。

80年代、Unixの父のXNUMX人であるKen Thomsonは、刺激的なタイトルで「チューリング賞」(コンピュータサイエンスのノーベル賞に相当)の授与の際に行われた彼の有名な講演で、これらのリスクに対してすでに警告しました。 信頼を信頼することについての考察 。 C言語のコンパイラは、それ自体がC言語で記述されたプログラムであるため、コンパイラが作成した実行可能プログラムを信頼するには、プログラムを作成した人だけでなく、コンパイラも信頼する必要があります。

ここで、BoucherとAndersonの記事に戻り、コンパイラをプログラミング言語の用語と構文を知っているテキストアナラ​​イザとして考えることから始めましょう。 テキストを形成するために使用される文字は、コンピューターでエンコードする必要があります。 

BoucherとAndersonによって提示されたこの新しいタイプの攻撃が何で構成されているかを理解するには、最初にコーディングとコーディングに使用される標準について説明する必要があります。

コンピュータの世界で長い間最も使用されている標準のXNUMXつはASCIIです。 情報交換用米国標準コード。 この規格の初版は1963年に発行され、時間の経過とともに何度か変更されました。 128の異なる文字をエンコードするのにXNUMXビットかかりました。 

コンピュータシステムの開発に伴い、ニーズが変化し、ASCII標準を拡張して、さまざまな言語からの文字や特定の環境に必要な文字をエンコードできるようにする必要がありました。

このようにして、UNICODEとして知られる標準が徐々に通過しました。 この規格では、144.697をさまざまな文字や記号の間でエンコードできます。 これらの中にはいわゆるアルファベットがあります 左から右へ (左から右へ、イタリア語、ロシア語、英語など)e 右から左へ (アラビア語、ヘブライ語など、右から左へ...)。 今日最も広く使用されているコーディング標準のXNUMXつであるUnicodeの場合、 双方向アルゴリズム (BiDi)。 

BiDiアルゴリズムは、テキストの特定の部分をどのように処理するかを明示的に指定できる、いわゆる制御文字(オーバーライド文字)を介してテキストの表示を自動的に管理するように設計されています(たとえば、 右から左への上書き、RLOは、適用されるテキストを次のように扱うことを指定します 右から左へ)。 制御文字は、テキストの一部の表示を制御できるようにする、画面上に表示されない文字です。 最もよく使用されるものをいくつか示します。

さらに、制御文字を「ネスト」できるため、非常に複雑な方法でテキストの表示を並べ替えることができます。

ここで、画面に表示されるテキストがプログラムコードである場合、原則として、ほとんどのプログラミング言語の構文では、通常、これらの制御文字をソースコードに直接挿入することはできません。それらは明らかにプログラムの制御ロジックを変更するでしょう。 ただし、多くの言語ではコメントと文字列の使用が許可されているため、コメントまたは文字列内に制御文字を挿入して、ソースコードに影響を与えることができます。 BiDi ovverrides 文字列とコメントの区切り文字は尊重されません。

BoucherとAndersonによって説明されている攻撃の種類は、今日のエンコーディングに典型的なこの特性に基づいています。 実際、制御文字のおかげで、表示されるものと実際にエンコードされてコンパイラとインタプリタに渡されるものの違いを悪用して、BoucherとAndersonによって説明されたタイプの「トロイの木馬ソース攻撃」攻撃を実行することができます。

BoucherとAndersonは、このタイプの攻撃が、C、C ++、C#、JavaScript、Java、Rust、Go、Pythonなどの最も広く使用されているプログラミング言語で可能であることも示しました。 

以下の例は、Pythonコードで、左側にエンコードされた(したがって、マシン上で実行された)コードが、表示されたソースコード(右側)とは異なることを示しています。

後者に基づくと、実行の最後にバンク['alice']で50に等しい値が見つかると予想されますが、実際には現在価値は100に等しくなります。

今までこの種の攻撃の証拠がないという事実は、私たちのように他の人が論文を読んで、おそらく概念をテストする決定をしたかもしれないので、将来のために私たちを安心させません。

ダビデ・アリウ、ジョルジオ・ジャシント、アレッサンドロ・ルゴロ

もっと知ることができます。

トロイの木馬ソース:目に見えない脆弱性

「トロイの木馬ソース」のバグは、プログラムのエンコーディングを攻撃する新しい方法です(techxplore.com)

トロイの木馬ソース攻撃は、プログラム言語のコンパイラにとって危険です(gridinsoft.com)

トロイの木馬ソース攻撃

GitHub-nickboucher / trojan-ソース:トロイの木馬ソース:目に見えない脆弱性

Unicode双方向テキストアルゴリズム-開発者ガイド| MDN(mozilla.org)

https://doi.org/10.1145/358198.358210

https://www.cl.cam.ac.uk/~rja14/book.html