インフラセキュリティの処方箋

第43回2018年2月~いまも発見される、DLL読み込みに関する脆弱性~どう悪用されるのか&対処は

2月は、地味にじわじわくる脆弱性が複数発見されました。発見された脆弱性の中身を紐解くと、延々昔から発見されているものも多くあります。

今月はその中から、DLL読み込みに関する脆弱性を題材に取り上げます。

2月に公開された「DLL読み込みに関する脆弱性」の例

2018年2月は、⁠DLL読み込みに関する脆弱性」⁠以下、本文中は「本件脆弱性」と称します)がやたらと公開されました。

以下は、JVNにより公開された、本件脆弱性に関する報告一覧です。

「DLL読み込みに関する脆弱性」のCVSS評価

CVSSによる本件脆弱性の評価は、すべて以下のとおりです。

CVSS v3:基本値: 7.8
  • AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
  • ローカル脆弱性(AC:L⁠⁠、難度は低い(AC:L⁠⁠、ユーザによる操作は必要(UI:R)
  • 影響は、操作ユーザの権限で及ぼす範囲に閉じる(S:U)
  • 機密性(C⁠⁠、完全性(I⁠⁠、可用性(A)に対する影響は高(C:H/I:H/A:H)
CVSS v2:基本値: 6.8
  • AV:N/AC:M/Au:N/C:P/I:P/A:P
  • ネットワーク脆弱性(AC:N⁠⁠、難度は中(AC:M⁠⁠、認証は不要(Au:N)
  • 機密性(C⁠⁠、完全性(I⁠⁠、可用性(A)に対する影響は部分的(C:P/I:P/A:P)

「DLL読み込みに関する脆弱性」がトリガする前提としくみ

本件脆弱性は、脆弱性のあるプログラムと悪意あるDLLが同じディレクトリに配置されている場合にトリガされる可能性があります。

 本件脆弱性がトリガされる前提としくみ
図 本件脆弱性がトリガされる前提としくみ

図中①~②は本件脆弱性がトリガされる前提、③~⑤は本件脆弱性がトリガされるしくみです。

「DLL読み込みに関する脆弱性」の原因

最近発見される本件脆弱性は、多くの場合「プログラム実行時にあらかじめ読み込まれるDLLの存在」「DLL検索の優先順位」に起因します。

以下の資料に、対策も含めてわかりやすく解説されています。

本記事の図では「DLLをダウンロードしたディレクトリ」「実行ファイルをダウンロードしたディレクトリ」が同じであり、かつそのディレクトリ上にある実行ファイルをそのまま実行する、という構図を想定しています。

「DLL読み込みに関する脆弱性」の対策

本件脆弱性は、ユーザ側で取れる自衛策と開発側で取るべき対策の2つが存在します。それぞれの対策は独立です。

ユーザ側で取れる自衛策

ユーザ側は、ダウンロードした実行ファイル類に、本件脆弱性が存在する可能性を考慮して、そのような実行ファイルを使う前に以下のような段階を踏むことで、本件脆弱性の影響を緩和することが可能です。

  • 新しくディレクトリ/フォルダを作成する
  • 新しく作成したディレクトリ/フォルダに、ダウンロードした実行ファイル類をコピー/移動する
  • 新しく作成したディレクトリ配下の実行ファイルを実行する

すでに別のマルウェアなどにより、システムディレクトリなどに悪意あるDLLが配置されている場合は、この方法だけだと対処は難しいですが、多くの場合は上記のような対処は有効です。

開発側で取るべき対策

開発側が取るべき対策は、何通りかあります。

自己解凍ファイルなど、ダウンロードした実行ファイルをそのまま実行することを想定できる場合

自己解凍ファイルが利用する実行ファイルについて、あらかじめ読み込まれるDLLを最小限にします。

開発側がプログラム実行のための環境を設定可能な場合

ダウンロードしたプログラムをそのまま実行するのではなく、インストールを経て実行できるようにします。

配布するインストーラが実行ファイルになる場合

インストーラ作成プログラムを、本件脆弱性について対処したものに変更し、インストーラを実行ファイルではなく、マイクロソフトインストーラ(MSI)形式のものにします。

参考資料

筆者が見る限り、JVNの以下の資料が、詳細かつわかりやすく本脆弱性について説明しています。

対策を検討される際には、上記の資料を一読されることをお勧めします。

おすすめ記事

記事・ニュース一覧