こちらはYuruvent Advent Calendar 2025 8日目の記事です。
本記事はサイバーセキュリティ向上とインシデント防止のための情報共有を目的としており、犯罪行為や不正アクセスを推奨・助長する意図は一切ありません。
はじめに
DLLサイドローディング。
それは、セキュリティ系のブログやニュースを読んでいると頻出する謎の言葉です。
言葉の響きからして、DLLをサイドからローディングしているのでしょうか。そこはかとなく攻撃的なニュアンスを醸し出しています。
さて、今回はそんなセキュリティニュース頻出単語であるDLLサイドローディングが何なのか、DLLとは何なのかを調べて本記事にまとめていこうと思います。
DLL
DLLは dynamic link library とよばれるファイル形式の一つです。拡張子は.dll。
直訳すると動的リンクのライブラリ。ほぼ訳せてないですね。
動的リンクとは、プログラム実行時に必要な機能を持つ外部モジュールを読み込み機能を連結させる方式です。
ここでいう"必要な機能を持つ外部モジュール"というのがDLLファイル。つまりDLLファイルは外部のプログラムによって使われるライブラリという認識でいいと思います。
Windows OSでよく使用されており、Microsoftも解説を行っています。
またMicrosoftはそこでDLLの3つのメリットについても提示しています。
- 使用するリソースの数を減らす
- モジュール式アーキテクチャを促進する
- 展開とインストールを容易にする
(Microsoft DLLとは https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/setup-upgrade-and-drivers/dynamic-link-library より)
要は「外部のライブラリを使用することで大規模なプログラムが作りやすいし、保守もしやすい、しかもディスクやメモリのリソースも節約しやすい」ということですね。
一方でDLLが自身のプログラム内で別のDLLを呼び出す場合には依存関係が発生し、依存先のDLLに変更が加わった際に実行できなくなる可能性があるとも言及されています。
参考:
サイドローディング
サイドローディングとは、ソフトウェアを公式ストアや正規の配布経路以外から端末に導入することを指します。
通常の経路でソフトウェアのチェックなどが行われている場合(モバイル端末のアプリストアなどがそうですね)、サイドローディングはそれらのチェックを回避しやすいです。そのため悪意のある攻撃者にとって悪意のある改造を行ったソフトウェアを頒布する際に利用しやすい手段の一つです。
※ただしDLLサイドローディングで使用される「サイドローディング」とは少しだけニュアンスが異なります
参考:
DLLサイドローディング
ここまでの内容からもなんとなく伝わるかもしれませんが、DLLサイドローディングはDLLをサイドローディングするサイバー攻撃手法です。
ただし前述の通り、ここで使われるサイドローディングの意味は前述のサイドローディングと少しだけニュアンスが異なります。
DLLサイドローディングは正規のものと同名の悪意のあるDLLファイルを標的の端末に導入しますが、このDLLファイルは正規のものに置き換わるのではなく、特定の正規プログラムにとってDLLの検索順序が高い正規EXEと同一のディレクトリなどに配置されます。これは正規のDLLファイルの改ざんは検知しやすいなどの要因によるものです。
こうして標的となった端末の正規プログラムは気づかないうちに非正規のDLLファイルを参照します。正規のベンダなどによって作成されたプログラムファイル経由の参照は検知されにくく、攻撃者に設計された悪意のあるコードを実行することになります。
DLLサイドローディングはDLLハイジャックと呼ばれる攻撃の一種で、その中でも最も一般的なもの、とPalo Alto Networksの脅威インテリジェンス/セキュリティコンサルティングチームであるUNIT42は表現しています。DLLハイジャックは読んで字のごとく、DLLをハイジャックしようとする攻撃のことです。またDLLハイジャックはLotL(Living-Off-the-Land)攻撃の一種でもあります。
因みにDLLサイドローディングではMITRE ATT&CKのT1574.001に分類されています。
参考文献:
どうやって防御すべきなのか
ここではDLLサイドローディングを防御するための手法について、開発側/運用側の両面でまとめます。
【開発側】
- アプリケーションがDLLを読み込む際に完全なパスを指定する
- 完全なパスが指定されていない場合はDLL検索順序によって検索が行われるため、優先的に検索されるディレクトリに配置された不正なDLLファイルを読み込む可能性がある
- すべてのDLLファイルにデジタル署名を行う(運用時に検証が必須)
- WindowsでSafeDllSearchModeを有効化する(デフォルトで有効)
- LOAD_LIBRARY_SEARCHフラグやSetDefaultDllDirectories 関数の仕様
など
【運用側】
- すべてのDLLファイル使用時にデジタル署名の検証を行う(開発時に署名が必須)
- 承認済みアプリケーションを指定可能なソリューションの使用
- 書き込み可能/共有ディレクトリにDLLファイルを配置しない
- アクセス制御リストなどでフォルダへのファイル書き込みを制限する
など
またこれらの手法だけでなく、万が一に備えた多層防御も重要です。
参考:
おわりに
ということで、DLLサイドローディングとはDLLを実行プログラムのサイドにローディングする手法のことでした。
もっと細かくすると、DLLとは外部ライブラリのことで、DLLサイドローディングとはプログラムがDLLを参照する構図を悪用した攻撃という認識がよさそうですね。古典的な手段とされていますが現在でも使用されているのは、その明快かつ検知が難しいところが気に入られているのでしょうか。
防御のためには開発と運用の両面で気を配る必要があり、かなり考えることが多そうですね。
繰り返しになりますが、本記事はサイバーセキュリティ向上とインシデント防止のための情報共有を目的としており、犯罪行為や不正アクセスを推奨・助長する意図は一切ありません。