Windows 8以降でEMETを使用する場合や、Windows 10 Fall Creators UpdateのWindows Defender Exploit Protectionを使用する場合、「必須ASLR」を有効にしても適切なランダム化が行われないとして、CERT/CCが問題の詳細と緩和策を公開している(
Vulnerability Notes Database VU#817544、
BetaNewsの記事、
BleepingComputerの記事、
Will Dormann氏のツイート)。
モジュールに割り当てるメモリーアドレスをランダム化して攻撃者によるデータの悪用を困難にするASRLだが、Windowsの既定では「/DYNAMICBASE」オプションを使用してコンパイルされた(ASLRの適用をオプトインした)モジュールにのみ適用される。必須ASLRを有効にするとオプトインしていないモジュールにもASLRを強制することが可能となるが、エントロピーを確保するにはボトムアップ型のメモリー割り当てでベースアドレスをランダム化する「ボトムアップASLR」も重要だ。
Windows 8以降では必須ASLR/ボトムアップASLRがOSの機能に組み込まれているため、EMET/Exploit Protectionはオプションをレジストリに設定する機能のみを提供する。設定が格納されるレジストリ値は「HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel」の「MitigationOptions」という値なのだが、EMET/Exploit Protectionともにデフォルトではこの値が作成されない。
Exploit Protectionのデフォルトでは必須ASLRが「既定でオフにする」、ボトムアップASLRが「既定でオンにする」に設定されている。必須ASLRはMitigationOptionsが存在しなければオフになるため問題ないが、ボトムアップASLRはUI上の表示に反してオフになっている。CERT/CCでは有効な設定を含む.regファイルの内容を公開しているが、Exploit ProtectionでボトムアップASLRをいったんオフにし、再度オンにすることで有効なレジストリ値をセットすることも可能だ。なお、「既定値を使用する(<オン>)」を選択した場合は有効なレジストリ値がセットされないので注意が必要だ。