Microsoft Defender for Endpointで印刷・外付けディスク利用を追跡

皆さんこんにちは。国井です。
コロナ禍でリモートワークを導入する機会もだいぶ増えたと思いますが、
一方で使い機会が物理的に少なくなったと思われるのがプリンターではないでしょうか?
リモートワークでオフィスのプリンターに印刷要求をしたとしても
受け取るのに出社しなければならないので、だったら印刷しなくてもいいや。
そう考える機会もぼちぼち出てくると思います。
一方、リモートワークを導入することで、自宅のプリンターやコンビニのプリンターなど
好き勝手にプリンターに接続し、印刷をするような人も出てくる可能性があります。

その制御ってどうすればいいんだろと調べていたら、会社で定めたプリンター以外を使わせないようにしたいというときはIntuneまたはGPOを使ってアクセス制御ができますよ、という記事がマイクロソフトのdocsに掲載されていました。

これを見ていて思ったのですが、
プリンターのアクセスをブロックするのではなく、プリンターのアクセスを追跡したい場合ってどうするんだろうか?と。
前置きが長くなりましたが、今日はMicrosoft Defender for Endpointを使ってプリンターへのアクセスがあった場合、これを見つける方法を探ってみたいと思います。
(外付けハードディスクの利用を見つける方法もあるよ)

Microsoft Defender for Endpointでアクティビティの追跡

Microsoft Defender for EndpointはWindows 10デバイスに対してオンボーディングと呼ばれる設定を事前に行っておくことによって、Windows 10デバイス上のアクティビティがMicrosoft Defender for Endpointの画面上で確認できるようになります。
ここで言うアクティビティとは、ファイルアクセス、レジストリアクセス、ネットワークアクセスなどのことで、Microsoft 365 Defenderポータルサイトにアクセスすると確認できます。
ただアクティビティを一覧で見せられても膨大なログなので、現実的に利用する場合はクエリを書いて見たいものだけを取り出します。クエリはMicrosoft 365 Defenderポータルサイト追及 > 高度な追及からクエリ文を書いて確認します。

クエリを書くときは1行目にスキーマを定義して、見たいログのジャンルを指定します。
例えば、前述のdocsでも紹介されているDeviceEventsスキーマはデバイスで行われたイベントを出力するスキーマで実行するとログが大量に出てきます。

image

このログを見てもらうとActionTypeという列があり、これがデバイス上でどのような操作を行ったかを大まかに表すものになっていることがわかります。実際、前述のdocsでもIntuneで制限がかけられたプリンターへのアクセスがあった場合にはActionTypeにPrintJobBlockedと記録されるよと書いてあります。ここまでのところでActionTypeを使えば、どんな操作があるのかがわかるということが理解できました。

ActionTypeで出力される情報を一覧表示

続いてActionType列にはどのような文字列がログに出てくるのか見てみましょう。
過去に行われたアクティビティはActionTypeを見ればわかるということだったので、
ActionTypeに出力された文字列一覧を実行回数の多い順に並べるクエリを書いてみました。

DeviceEvents
| summarize count() by ActionType
| order by count_ desc

その結果がこちら。

image

画面が切れてしまって一覧に表示されていないのですが、USB接続の外付けハードディスクを利用した場合、ActionTypeにUsbDriveMountedと記録されます。
ですので、今度は次のようなクエリを書いて外付けハードディスクの利用だけを表示させてみました。

DeviceEvents
| where ActionType == “UsbDriveMounted”

image

あらま。よく使われていることがわかります。
さらに詳細情報を見たいときは必要な列だけ絞り込んで表示させてみましょう。
今度はこんな感じのクエリを書いてみました。

DeviceEvents
| where ActionType == “UsbDriveMounted”
| project Timestamp,DeviceName,ActionType,AdditionalFields

image

すると、見たい内容だけが絞り込まれて表示されていることがわかります。
さらに特定のログをクリックすると、その詳細が右側の画面に表示されます。
これで、いつディスクを接続したか、どのデバイスが接続したか、どのユーザーが接続したか、どのドライブ文字を利用したか、などがわかります。

ちなみにUSBの外付けディスクを禁止する会社は多いと思いますが、
それについてもIntuneまたはGPOから設定可能です。

プリンターのアクセス履歴を追跡

続いてプリンターアクセスを追跡します。
ところが、ActionTypeにプリンターのジョブはありません。
プリンターはドライバーをロードした情報はActionTypeから確認できるのですが、
印刷要求そのものはどうやらDeviceEventsスキーマから追跡できないようなのです。
(どなたか、こうやったら見えるよ!などの情報があれば連絡ください)

そこで私はネットワークプリンターにアクセスするのであれば、ネットワークアクセスを追跡すればよいのではないかと考え、DeviceNetworkEventsスキーマを使ってプリンターが持つIPアドレスへのアクセスを追跡することにしました。

DeviceNetworkEvents
| where RemoteIP == “プリンターのIPアドレス”

image

すると、ご覧のように結果が確認できました。
spoolsv.exeからプリンターへのアクセスが行われているとログに書かれているので、
DeviceProcessEventsスキーマから追跡しても見えそうな気がするのですが、
DeviceProcessEventsスキーマからプリンターアクセスを確認することはできませんでした。

【おまけ】ユーザーがアクセスしたWebサイトを追跡

DeviceNetworkEventsスキーマはネットワークアクセスを追跡するので、例えばブラウザーからWebアクセスがあれば、それもログに残ります。アクセスしたURLはRemoteURL列に記録されるので、Dropboxへのアクセスがあったことを追跡したければ、こんな感じでクエリを書きます。

DeviceNetworkEvents
| where RemoteUrl contains “dropbox”

image

使い勝手の問題は多少あるかもしれないけど、操作ログを追跡する使い方もできるんだなってことがわかりました。今回、クエリの書き方については端折って解説しましたが、Microsoft 365インシデント対応コースでは実機でクエリを体験できますので、ご興味のある方は参加してみてください。