none
Windows 10 バージョン 1903 でリモート アシスタンス (msra.exe) を実行するとエラーメッセージが表示されることがある RRS feed

  • 全般的な情報交換

  • こんにちは、Platform SDK (Windows SDK) サポート チームです。
    今回は、Windows 10 バージョン 1903 でリモート アシスタンス (msra.exe) を実行した場合に、「msra.exe - 正しくないイメージ」というメッセージが表示され、操作できなくなる問題についてご紹介します。
    回避策も記載しましたので、同様の現象が起きている方は参考にしていただければと思います。

    [現象]
    Windows 10 バージョン 1903でリモート アシスタンス (msra.exe) を実行した場合に、以下のエラー メッセージが表示される場合があります。 (エラー メッセージ内の  D:\sample\SampleHookDLL64.dll は環境により異なります)

    このエラー メッセージは、[OK] ボタンをクリックしてクローズしても再度表示されるため、リモート アシスタンスの操作ができなくなります。
    また同時にイベント ログのシステムに、このエラー メッセージと同様のイベントが記録されます。

    [原因]
    この現象は、SetWindowHookEx 関数によりフック処理を実行しているアプリケーションが動作している環境で発生する可能性があります。
    このようなアプリケーションの例として、ユーザー操作を記録するようなアプリケーションやユーザー操作を補助するアプリケーションがあります。
    Windows 10 バージョン 1903 では、セキュリティ強化のために msra.exeに対するこういったフック処理を禁止し、フック処理が行われるタイミングでエラー メッセージを表示してユーザーに通知しています。
    しかし、SetWindowHookEx 関数によるフック処理は連続実行され、ユーザーがエラー メッセージを閉じたあともフック処理が継続的に実行されるため、エラー メッセージが表示し続けることになります。この連続表示する動作は、フック処理の構造上抑止することができません。
    なお、msra.exeはリモート アシスタンスを実行するためのプロセスであるため、他のユーザーの PC を操作したり、情報を読み取ったりすることができます。
    このような msra.exeの機能の特性上、マルウェア対策としてマイクロソフト製以外の DLL のロードを禁止するような実装に変更されていることをご理解ください。


    [対処策]
    ・実行環境での対処策 - 1
    暫定的な対処策とはなりますが、以下のレジストリ設定により、エラー メッセージの表示と、イベント ログの記録を抑止することができます。
    ただし、フック処理が継続的に実行されることは抑止できないため、その影響によって msra.exe の操作パフォーマンスが低下する場合があります。
    また、本当にマルウェアが動作していた場合にユーザーが問題を把握することができなくなるため、セキュリティの観点では推奨できない方法であることにご注意ください。

    1. エラー メッセージの表示を抑止するレジストリ
    下記レジストリ値を設定することで、エラー メッセージの表示を抑止することが可能です。
      キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
      名前 : ErrorMode
      値 : 2

    2. イベント ログの記録を抑止するレジストリ

    下記レジストリ値を設定することで、イベント ログの記録を抑止することが可能です。
      キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\EventLog-System\{47bfa2b7-bd54-4fac-b70b-29021084ca8f}
      名前: Enabled
      値: 0

    ・実行環境での対処策 – 2
    管理者権限で起動した PowerShell から以下のコマンドを実行します。

      Set-ProcessMitigation -Name c:\Windows\System32\msra.exe -Enable DisableExtensionPoints
    これにより、msra.exe プログラムに対する拡張ポイント (メッセージ フック、DLL インジェクション) が無効化され、DLL のロード自体を事前に抑止することで現象を回避することができます。
    なお、以下の条件を満たす場合、DLL のインジェクションは無効化されないため、このコマンドを実行しても回避できません。
    o アプリケーション マニフェストで uiAccess が true に設定されている
    o モジュールが secure location (C:\Program Files など保護されたフォルダー) にインストールされている
    o モジュールがデジタル署名されている

    ・フック処理を実行するアプリケーションでの対処策
    この現象は、SetWindowsHookEx 関数の第 4 引数に 0 を指定し、すべてのプロセスをフック対象とするようなフック アプリケーションを実行した場合に発生する可能性があります。
    そのため、フック対象のプロセス名を判別し、msra.exe 以外のプロセスに対してのみ SetWindowHookEx 関数を呼び出すような実装により対処することができます。
    その際、第 4 パラメータは 0 でなく、対象プロセス内の各スレッド ID を指定します。

    [状況]
    このリモート アシスタンスが操作できなくなる現象は不正な DLL インジェクションを防止するためのセキュリティ強化の影響で発生していますが、マイクロソフトではより影響を抑えた方法でのセキュリティ強化を検討しています。

    Windows 10, version 2004 ではエラー メッセージを表示しないように緩和措置が取られました。ただし、上記の [実行環境での対処策 – 2] でも述べられている 3 つの条件を満たす DLL では、 msra.exe に対するフックを繰り返し試行されることから msra.exe の操作パフォーマンスが低下する可能性があります。
    次期バージョン以降の Windows 10 において、このパフォーマンスの問題に対処することができるか調査・検討を進めています。方針が確定次第、改めてご案内いたします。

    <2020 年 6 月 15  日 (月) 更新>
    Windows 10, version 2004 における対応状況を追記しました。

    <2019 年 12 月 18  日 (水) 更新>
    軽微な修正を行いました。

    <2019 年 12 月 11  日 (水) 更新>
    “実行環境での対処策 – 2” および “状況” を追記しました。

    <2019 年 9 月 17  日 (火) 更新>

    パスの誤りを修正しました。 (d:\samples\SmpleHookDll64.dll -> D:\sample\SampleHookDLL64.dll)



    2019年9月13日 8:46
    所有者