公開日:2017/05/25 最終更新日:2019/08/13

JVNTA#91240916
Windows アプリケーションによる DLL 読み込みやコマンド実行に関する問題

概要

Windows アプリケーションに対して DLL 読み込みやコマンド実行に関する脆弱性が多数報告されています。

影響を受けるシステム

  • Windows アプリケーション
    (おもにインストーラ作成ソフトウェアを使用して作成されたインストーラ、圧縮解凍ツールで作成された自己解凍書庫ファイル、ポータブルアプリなど)

詳細情報

Windows アプリケーション、とくにインストーラに対して DLL 読み込みに関する脆弱性が多数報告されています。これは、アプリケーション実行時に DLL ファイルが読み込まれる際、Windows のシステムディレクトリなどに置かれている正規の DLL ファイルでなく、アプリケーションと同じディレクトリに置かれている同名の DLL ファイルが優先される問題です。

多くの Windows アプリケーションはシステムディレクトリにインストールして使用されるため、一般ユーザ権限で操作している限りは、アプリケーションと同じディレクトリに、ユーザがそれと気づかないうちに細工されたファイルを置いてしまう危険性は低いと考えられます。一方、インストーラや自己解凍書庫ファイル、ポータブルアプリの類はユーザのホームディレクトリなど一般ユーザ権限で操作可能な場所に置いて起動することが一般的であり、DLL 読み込みの脆弱性を悪用される危険性が高くなると考えられます。

最近 DLL 読み込みに関する脆弱性が報告されている対象の多くは、なんらかのソフトウェアのインストーラです。これらの多くはインストーラ作成ソフトウェアを使用して作成されており、インストーラ作成ソフトウェアが提供するコンポーネントで DLL 読み込みが行われています。インストーラ作成ソフトウェアの多くでは既に対策版が提供されていますが、アプリケーション開発者が旧版のインストーラ作成ソフトウェアを使用していることにより、インストーラに脆弱性が残されている事例が多く見られます。アプリケーション開発者は、開発環境で使用するツールの状況を確認し、最新バージョンのインストーラ作成ソフトウェアを使用するように注意してください。
 

参考:
InstallShield
Best Practices to Avoid Windows Setup Launcher Executable Issues

NSIS (Nullsoft Scriptable Install System)
#1125 Code execution / Privilege escalation problems with NSIS installers

The WiX Tookit
Prevent DLL Hijacking Burn with Clean Room
WiX v3.10.2 released
WiX Toolset v3.10.3 Released

Inno Setup 5
Revision History

install4j
CHANGE LOG (RELEASE 7.0.10)

また、Windows が提供している標準の DLL ファイルの中には、実行しているアプリケーションと同じディレクトリから他の DLL ファイルを読み込むものが存在します。さらに、Windows で提供されている iexpress コマンドで作成した自己解凍書庫ファイルについても DLL 読み込みに関する問題があることが報告されています。
次に説明するように Microsoft では DLL 読み込みに関する問題を「アプリケーションディレクトリ型」と「カレントディレクトリ型」に分類しており、上記の問題は「アプリケーションディレクトリ型」の問題として扱っています。Microsoft では「アプリケーションディレクトリ型」の問題については、実際の攻撃実現性が限定的であるとしてセキュリティ更新プログラムによる対応を行っていません。
このような場合の対策としては、アプリケーションやインストーラを実行する前に同じディレクトリに不審なファイルが存在しないことを確認する、あるいは実行するファイルを信頼できるシステムディレクトリや新たに作成した一時ディレクトリに置き、そこから実行する必要があります。

「アプリケーションディレクトリ型」と「カレントディレクトリ型」について
「アプリケーションディレクトリ型」の DLL 読み込みとは、アプリケーション起動時に当該アプリケーションと同一のディレクトリに設置された DLL ファイルが、システムディレクトリにある DLL ファイルよりも優先して読み込まれる問題です。「カレントディレクトリ型」の DLL 読み込みとは、データファイルをクリックするなどして関連付けられたアプリケーションを起動する際、データファイルと同一のディレクトリに設置された DLL ファイルが、システムディレクトリにある DLL ファイルよりも優先して読み込まれる問題です。
「カレントディレクトリ型」の問題を使用した典型的な攻撃シナリオでは、データファイルと細工された DLL ファイルを同一のディレクトリに配置し、当該データファイルをクリックするなどして関連付けられたアプリケーションを起動させることで、細工された DLL ファイルを読み込ませます。
Microsoft では「アプリケーションディレクトリ型」の問題については、実際の攻撃実現性が限定的であるとしてセキュリティ更新プログラムによる対応を行っていません。一方、「カレントディレクトリ型」の問題については、セキュリティ更新プログラムによる対応を行っています。(参考: マイクロソフト セキュリティ アドバイザリ 2269637)

圧縮解凍ツールなどで作成された自己解凍書庫ファイルについて
圧縮解凍ツールなどで作成された自己解凍書庫ファイルの DLL 読み込みに関する問題も報告されています。これらの事例では、圧縮解凍ツールが提供している解凍処理を行うコードで DLL 読み込みが行われていますが、多くの圧縮解凍ツールがすでに対策版を提供しています。最新版を使うように注意してください。
 
参考:
7-Zip
Discussion
Open Discussion:7-Zip 16.03

Explzh for Windows
既知の不具合とその回避方法、制限事項、脆弱性情報など
Microsoft Windows における DLL 読み込みに関する脆弱性

Lhaplus
Lhaplus 自己解凍書庫における任意の DLL 読み込みの脆弱性

UNLHA32.DLL, UNARJ32.DLL
MHSVI#20170515-01:UNLHA32.DLL で作成された自己解凍書庫における任意の DLL 読み込みに関する脆弱性
MHSVI#20170515-02:UNLHA32.DLL における任意の DLL 読み込みに関する脆弱性
MHSVI#20170515-03:UNARJ32.DLL における任意の DLL 読み込みに関する脆弱性

コマンド実行について
Windows アプリケーションがコマンドを実行する際の挙動においても、意図しないファイルを実行する可能性があることが報告されています。たとえば、インストーラが、レジストリ設定やサービス登録のために Windows 標準コマンドを起動したり、アプリケーション固有の初期設定を行うためにインストールしたコマンドを起動したりすることがありますが、コマンドの検索パスの設定や起動方法によっては、インストーラと同じディレクトリに置かれた同名のファイルが実行される可能性があります。インストーラを実行する際は、同じディレクトリに不審なファイルが存在しないことを確認する、あるいは新たに作成した一時ディレクトリにインストーラを置いてそこから実行するなどの対策が必要です。

想定される影響

細工された DLL または実行形式のファイルが同一ディレクトリに置かれた状態でアプリケーションを実行することで、細工されたファイルに含まれる任意のコードを実行させられる可能性があります。

対策方法

アプリケーションを使用するユーザ向け:
インストーラ、自己解凍書庫ファイル、ポータブルアプリを実行する際、同一ディレクトリ内に不審なファイルが存在しないことを確認する
インストーラ、自己解凍書庫ファイル、ポータブルアプリを実行する際には、同一ディレクトリ内に不審なファイルが存在していないことを確認してから実行するか、新たに作成した一時ディレクトリにファイルをコピーしてから実行してください。
また、外部サイトからダウンロードしたファイルを、ダウンロードディレクトリに置いたままにしないことを推奨します。たとえば、細工された DLL ファイルをそれと知らずにダウンロードし、さらにインストーラをダウンロードしてそのまま実行すると、細工された DLL ファイルが同一ディレクトリに置かれた状態でインストーラを実行することになるため、危険です。

インストーラや自己解凍書庫ファイルを作成する開発者向け:
対策済みのバージョンを使用する
本件の問題に対策済みのバージョンのインストーラ作成ソフトウェアや圧縮解凍ツールを使用してください。また、コマンド実行などのカスタマイズを行う場合には、意図したディレクトリにあるコマンドを実行するよう適切にカスタマイズしてください。

インストーラ作成ソフトウェアや圧縮解凍ツールの開発者向け:
対策済みバージョンを作成する
生成されるインストーラや自己解凍書庫ファイルに本件の問題が存在しないか確認し、適切な対策を実施してください。

参考情報

  1. Japan Vulnerability Note JVNVU#707943
    Windows プログラムの DLL 読み込みに脆弱性
  2. Japan Vulnerability Note JVNTA10-238A
    Microsoft Windows における DLL 読み込みに関する脆弱性
  3. SlideShare
    DLL 読み込みの問題を読み解く
  4. Hitachi Incident Response Team
    HIRT-PUB17011:DLL読み込み問題
  5. IPA
    【注意喚起】Windowsアプリケーションの利用における注意

JPCERT/CCからの補足情報

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

謝辞

この JVNTA は、関連する脆弱性の届出を大量に受領していることに鑑み、アプリケーションユーザや開発者への啓発を目的として公開するものです。関連する届出を行っていただいた届出者のみなさん、および、対応を行っていただいた開発者のみなさんに感謝します。

関連文書

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

更新履歴

2017/08/22
[詳細情報]と[影響を受けるシステム]の記述を更新し、[参考情報]に資料を追加しました。
2017/09/28
[参考情報]にリンクを追加しました
2018/04/10
[ベンダ情報]にMicrosot SR&Dブログのエントリを追加しました。
2019/08/13
[詳細情報]および[ベンダ情報]に install4j の情報を追加しました。