コンテンツにスキップ

ELF binaries do not enforce secure binary properties

ELF バイナリは安全なバイナリ プロパティを強制していません

説明

コンパイラ、オペレーティング システム、プロセッサは、バッファ オーバーフローなどのメモリ破損の脆弱性や、ROP (Return-Oriented-Programming) などのメモリ悪用手法のリスクから保護し、軽減するためのさまざまな技術を提供します。

ネイティブ コードは次のような保護機能の恩恵を簡単に受けられます。

  • RELRO: RELRO は、メモリ破損の悪用手法に対する安全性を高めるためのメモリ保護技術です。RELRO は GOT の上書き攻撃を防止します。
  • ASLR: ASLR は、メモリ破損の悪用手法に対する安全性を高めるためのメモリ保護技術です。ASLR はバイナリのアドレス空間をランダム化し、制御されたアドレスへのジャンプを防ぎます。
  • No eXecute: メモリ破損の悪用手法に対する安全性を高めるため、メモリ領域を実行不可としてマークします。
  • Stack canary: メモリ破損の発生時に上書きされるカナリアをメモリに追加します。カナリアは実行時にチェックされ、メモリ破損の脆弱性が悪用されるのを防ぎます。

推奨事項

GCC でコンパイルするときにスタック カナリア機能が有効になっていることを確認するには、次のいずれかのコンパイラ オプションを指定します。

  • 基本的なスタック保護には -fstack-protector を使用します。
  • ローカル配列やローカル フレーム アドレスへの参照を持つ関数を含む強力な保護には、-fstack-protector-strong を使用します。
  • 各関数の包括的な保護チェックには、-fstack-protector-all を使用します。

リンク

標準

  • OWASP_MASVS_L1:
    • MSTG_CODE_9
  • OWASP_MASVS_v2_1:
    • MASVS_CODE_2
  • OWASP_MASVS_L2:
    • MSTG_CODE_9
  • PCI_STANDARDS:
    • REQ_2_2
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY213
    • SECURITY255