公開日:2018/08/06 最終更新日:2018/08/06
      
        JVNVU#99390733
        mingw-w64 が生成する実行ファイルにおいて ASLR が機能しない問題
              
      
      mingw-w64 がデフォルト状態で生成する Windows 実行ファイルはリロケーションテーブルを持たないため、ASLR (アドレス空間配置のランダム化) が適切に機能しません。
- mingw-w64
ASLR はメモリ上のコードを使った攻撃への対策として用いられる技術で、近年の Windows プラットフォームでも採用されています。ASLR が機能するためには Windows 実行ファイルがリロケーションテーブルを持つ必要があります。しかし、mingw-w64 によって生成された Windows 実行ファイルは、ASLR の有効化を示す「Dynamic base」PE ヘッダがデフォルトで含まれているにもかかわらず、リロケーションテーブルが削除されてしまいます。結果として、mingw-w64 によって生成された実行ファイルには、return-oriented-programming (ROP) 攻撃に対する脆弱性が存在します。
mingw-w64 によって生成された、ASLR が有効化されているとされる Windows 実行ファイルは、実際には ASLR が有効化されていません。結果として、実行ファイルに存在する種々の脆弱性が悪用されやすい状態となります。
ワークアラウンドを実施する
mingw-w64 にリロケーションテーブルの作成を強制させることで、本問題による影響を軽減することが可能です。
影響を受けるプログラムのソースコードにおける main 関数の前に、次の 1 行を加えることで、mingw-w64 に対しリロケーションテーブルを持つ実行ファイルの生成を強制することが可能です。
- __declspec(dllexport)
- 
                            CERT/CC Vulnerability Note VU#307144
 mingw-w64 by default produces executables that opt in to ASLR, but are not compatible with ASLR
- 
                            SourceForge
 [Mingw-w64-public] ASLR/--dynamicbase and -pie with MinGW-w64
- 
                            Sourceware Bugzilla – Bug 17321
 Bug 17321 - add --enable-reloc-section option to generate proper relocation sections to .exes
- 
                            Sourceware Bugzilla – Bug 19011
 Bug 19011 - Issues with ld on mingw-w64 and bad defaults




























