Sterra Security Tech Blog

株式会社ステラセキュリティの公式技術ブログ

Windows特有のセキュリティ機構とBring Your Own Container

取締役CTOの小竹(aka tkmru)です。 前々回前回に引き続きEDRバイパス手法の1つであるBring Your Own Container(BYOC)について紹介します。

BYOCは、Dockerコンテナを悪用して、EDRを回避する手法です。 この手法は、OSに標準搭載されたツールを悪用する「Living off the Land」(LotL)の考え方を、開発ツールであるDockerに応用したものです。 BYOCの概要を紹介している記事はこちら

tech-blog.sterrasec.com

前回の記事ではmacOSTCCを回避してBYOCを活用する方法について解説しました。

tech-blog.sterrasec.com

経験豊富なWindowsユーザの方の中には、前回の記事を読んだ時、WindowsのControlled folder accessが有効な環境であればどうなるのだろうと思った方もいるでしょう。 今回はControlled folder accessをはじめとするWindows特有のセキュリティ機構がBYOCを行う時にどのように振る舞うのかを紹介します。

バインドマウント時に表示されるDocker Desktop Dialog

Windows上で-vオプションを用いてホストOSのディレクトリをコンテナにマウントした状態でコンテナを起動しようとすると、Docker Desktopはファイル共有の許可を求めるDocker Desktop Dialogを表示します。 このダイアログはWindows環境のみの機能です。

例えば、次のコマンドを実行すると、C:\Users\<ユーザ名>\Downloads へのアクセス許可を求めるダイアログが表示されます。

$ docker run --rm -v C:\Users\<ユーザ名>\Downloads:/lib/modules -it ubuntu /bin/bash

Docker Desktop Dialogが出すダイアログ

これによって、Dockerがホストのファイルシステムへアクセスする際に、ユーザの明示的な許可が必要になります。

Docker Desktop Dialogの回避

docker cpコマンドを使用することでDocker Desktop Dialogを表示させずに、ホストからコンテナへファイルをコピーすることが可能です。 まず、既存のコンテナ、またはバックグラウンドで稼働する新しいコンテナを用意します。

$ docker run -d -p 8080:80 nginx

その後、docker cpコマンドを使い、ホスト上のファイルをコンテナ内の指定したパスにコピーします。 この操作では、Docker Desktop Dialogは表示されません。

$ docker cp C:\Users\<ユーザ名>\Downloads\secret.txt <container ID>:/lib/modules

docker cpは単発のコピーしか行いません。 -vによるバインドマウントと違い、コンテナとホスト間の持続的な接続が発生しないため、コンテナが侵害されても、ホスト上のファイルまで改ざんされたり、削除されたりするリスクはありません。 そのため、docker cp-vに比べて安全なファイル転送方法とみなされており、Docker Desktop Dialogが表示されないと考えられます。

ファイルの不正な操作を防ぐControlled folder access

Windows 10, 11およびWindows Server 2019には、「ランサムウェア保護」の一環として「Controlled folder access(コントロールされたフォルダーアクセス)」というセキュリティ機能が含まれています。 この機能は、信頼されていない悪意のあるアプリが、保護されたフォルダー内のファイルを不正に変更することを防ぐことを目的としています。

次のリンクの公式ドキュメントでは「制御されたフォルダー アクセス」と表記されていますが、言語設定が日本語のWindowsでは「コントロールされたフォルダーアクセス」と表示されます。Microsoftのドキュメントの日本語訳はユーザを混乱させますね😢

learn.microsoft.com

続いて、Controlled folder accessの主な特徴を紹介します。

デフォルトで無効

Controlled folder accessは、ユーザが利用しているアプリケーションの意図しないブロックを防ぎ、互換性を保つため、Windowsの初期状態では無効になっています。 Windowsセキュリティの設定から「ウイルスと脅威の防止」を開き、「Controlled folder access」のトグルを操作することで有効にできます。

Controlled folder accessの設定画面

管理者権限で動作するPowerShellより次のコマンドを入力することでも有効にできます。

Set-MpPreference -EnableControlledFolderAccess Enabled

ファイルの変更をブロックし、通知する

Controlled folder accessは信頼できるアプリケーションのリストにアプリケーションが含まれているかどうかで動作が変わります。 保護されたフォルダ内のファイルを変更しようとするアプリが、「信頼できる」と判断されない限り、その動作はブロックされ、ユーザに通知が届きます。 Microsoftは、アプリの普及率や評価、有効なデジタル署名を持つかといった基準で多くの主要なアプリケーションを「信頼できる」リストに追加しています。 もし信頼すべきアプリが誤ってブロックされた場合、ユーザは手動でそのアプリを許可リストに追加することができます。

保護対象のフォルダ

Controlled folder accessは、システム全体ではなく、重要なフォルダのみを保護の対象とします。 ランサムウェアの主な標的となりやすい、次のフォルダが保護対象に設定されています。

ユーザ個別のフォルダー:

  • C:\Users\<ユーザ名>\Documents
  • C:\Users\<ユーザ名>\Pictures
  • C:\Users\<ユーザ名>\Videos
  • C:\Users\<ユーザ名>\Music
  • C:\Users\<ユーザ名>\Favorites

全ユーザ共通のパブリックフォルダ:

  • C:\Users\Public\Documents
  • C:\Users\Public\Pictures
  • C:\Users\Public\Videos
  • C:\Users\Public\Music

Dockerによる操作はControlled folder accessに検知されない

Controlled folder accessを有効にしている状態でも、Dockerの操作(バインドマウントやdocker cp)はブロックされません。 これは、Docker DesktopがWindowsによって「信頼されたアプリケーション」として扱われているためと推測できます。 Controlled folder accessは、未知のプログラムや評判の低いプログラムによるファイルの変更を防ぐことを目的としています。 Docker Desktopのように、広く利用され、適切なデジタル署名がされたアプリケーションは、ブロックされることなく動作します。 そのため、DockerのプロセスがControlled folder accessの保護対象のフォルダ内のファイルにアクセスしても、ブロックされることはありません。

まとめ

DockerのバインドマウントはDocker Desktop Dialogを出現させますが、docker cpコマンドでDocker Desktop Dialogを回避できます。 また、Controlled folder accessは、信頼されたアプリケーションの動作を妨げないため、docker cpによるファイル操作はブロックされません。 これらの挙動は、Windows上でのコンテナ利用におけるセキュリティ上の留意点として理解しておくべきポイントです。

弊社ではEDRバイパスの手法を日々リサーチしており、EDR製品の性能検証や、EDRが導入されているシステムに対するペネトレーションテストに対応できます。 ご興味がある方は問い合わせフォームよりご連絡ください。 また最近、ブログではEDRバイパスの解説記事が続いていますが、弊社の主力サービスはWebアプリケーション/スマホアプリの脆弱性診断です。 脆弱性診断のお問い合わせもお待ちしております。