公開日: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)
この 1 行を追加することで、その後に続く関数がエクスポートされます。実行ファイルの生成時に関数名をエクスポートすることで、mingw-w64 はリロケーションテーブルを削除しなくなります。

ベンダ情報

参考情報

  1. CERT/CC Vulnerability Note VU#307144
    mingw-w64 by default produces executables that opt in to ASLR, but are not compatible with ASLR
  2. SourceForge
    [Mingw-w64-public] ASLR/--dynamicbase and -pie with MinGW-w64
  3. Sourceware Bugzilla – Bug 17321
    Bug 17321 - add --enable-reloc-section option to generate proper relocation sections to .exes
  4. Sourceware Bugzilla – Bug 19011
    Bug 19011 - Issues with ld on mingw-w64 and bad defaults

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

謝辞

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE CVE-2018-5392
JVN iPedia