DefenderでもMacを守りたい

DefenderでもMacを守りたい

はじめに

こんにちは、CISO部の兵藤です。日々ZOZOの安全を守るためSOC業務に取り組んでいます。

本記事ではMicrosoftのDefender for Endpointを用いてAppleのmacOSに対してセキュリティ対策するTipsについて紹介します。

また、CISO部ではその他にもZOZOを守るための取り組みを行っています。詳細については以下の「OpenCTIをSentinelに食わせてみた」をご覧いただければと思います。

techblog.zozo.com

目次

背景と概要

ZOZOではmacOSのエンドポイントの保護にMicrosoft Defender for Endpointを利用しています。Microsoft Defender for Endpointは、macOSに対してもエンドポイント保護ができます。

ですが、Windows端末に対して行うことができるインシデント対応時のエンドポイトの機能とmacOSの機能には差分があるため、独自でmacOSに対して分析調査を行う必要があります。そのための簡易なスクリプトを用意し、インシデント対応に活用しています。その事例について本記事で紹介します。

前提知識

Microsoft Defender for Endpoint導入方法

ZOZOではユーザ端末を管理するために、Microsoft Intuneを利用しています。Microsoft Intuneは、Windows端末だけでなくmacOSにもFirewallやGateKeeperなどセキュリティの設定プロファイルやアプリを配ることができます。Microsoftのライセンスを購入している組織はこういった形でmacOSに対してもIntuneで管理することがあるかと思います。

Microsoft Defender for EndpointもIntuneによって配ることが可能です。詳しくは公式ドキュメントをご覧ください。構成プロファイルが多いですが、必要な構成プロファイルとなるためIntuneで配布する必要があります。

macOSとWindowsでのDefender for Endpointの機能差分

Defender for Endpointを使ったインシデント対応では、UI上の右上の3点リーダーから表示される以下の機能群を使うことが多いと思います。

Windowsでの機能
Windowsでの機能
macOSでの機能
macOSでの機能

左図はWindowsでのDefender for Endpointの機能群で、右図はmacOSでの機能群です。

大きな違いは「分離スクリプトから強制解放をダウンロード」と「自動調査の開始」です。「分離スクリプトから強制解放をダウンロード」についてはWindows用のバッチファイルなのでmacOSでは使えません。「自動調査の開始」についてはDefender for Endpointが、FileやProcess、Driver、通信先、永続化の有無(レジストリ)などを自動で調査してくれる機能です。普段はアラームトリガーで動くのですが、手動でも実行できます。Windows特有の調査項目もあるので、これもmacOSでは使えません。

macOSへのLive Response機能

Defender for Endpointは端末に対してリモートからコマンドベースの操作が可能です。リアルタイムで端末の情報を遠隔から取得できたり、ファイルの取得や削除が可能で、インシデント対応においては何かと便利です。

macOSでもこのLive Response機能を使うことができます。macOSで利用できるコマンドは公式ドキュメントをご覧ください。Windowsと違ってmacOSでは分離機能、アンチウィルススキャンなどがコマンドで利用可能です。また、runコマンドについてはmacOS上でbashスクリプトの起動が可能です。

Live ResponseのBashスクリプトの登録と実行

macOSではLive Response機能を利用し端末上でBashスクリプトを利用できます。この機能で用意しておいた便利スクリプトを起動し、SOC対応に活用しています。

このスクリプトはDefender for EndpointのLive Response起動時の画面から登録できます。まずは、右上の「ライブラリへのファイルのアップロード」を選択します。

libraryへの登録その1

次にアップロードするファイルを選択し、アップロードします。

libraryへの登録その2

アップロード完了後は、Live Responseのlibraryコマンドでアップロードしたスクリプトを確認できます。このLlibraryに保存されているスクリプトはlibrary deleteコマンドで消さない限り残るので、一度登録しておけばSOC対応中に何度も呼び出すことが可能です。

libraryコマンド

このlibraryに存在するスクリプトの起動は以下のコマンドで行います。

run <bash-file in library>

ここまでのオペレーションで、macOS上でカスタムしたBashスクリプトを実行できます。

スクリプトのTips

スクリプトを侵害された可能性のある端末で回すことになるので、侵害の度合いや対応フェーズによってスクリプトを回す、回さないの判断があると思います。それについてはアラームの出方によって都度判断することをお勧めします。

デバイス分離の際の通知スクリプト

Defender for Endpointではデバイスのネットワーク(以降NW)上からの分離が可能です。この機能を使うとデバイスのユーザーはネットワーク通信を用いた操作ができなくなるので、業務が止まってしまいます。出社している場合は同フロアや同僚の助けを借りて対処が可能ですが、リモートワークが主体の弊社ではSOCの対応なのか、NWでの不具合なのか判断がつきません。

Windows環境の場合は、デバイス分離の際にユーザーへ通知する機能1が存在します。macOSではこのような機能はありません。

Windowsでの分離通知
Windowsでのデバイス分離の通知

macOSでもユーザが判断するために、デバイス分離の際にカスタムスクリプトを回すことによって、端末のユーザに通知できます。以下にスクリプトの例を示します。

script_message='display dialog "コンピュータウィルスの感染の疑いがあるため、SOCにてPCを隔離いたしました。\n現状の詳細について、緊急のお問い合わせはこちら\n\n<電話番号を記載>" with title "SOC_Alert" with icon caution buttons {"OK"}'

/usr/bin/osascript -e "${script_message}"

社内の緊急時の連絡先や対応フローに沿って手順を記載すると、ユーザも安心して今後の対応に進むことができると思います。

子プロセスまで切るスクリプト

Defender for EndpointのLive Response機能ではremediateと言ったコマンドがあります。このコマンドについては以下のように公式ドキュメント2に記載されています。

デバイス上のエンティティを修復します。 修復アクションは、エンティティの種類によって異なります。

  • ファイル: 削除
  • プロセス: イメージ ファイルを停止、削除する
  • サービス: イメージ ファイルを停止、削除する
  • レジストリ エントリ: 削除
  • スケジュールされたタスク: 削除
  • スタートアップ フォルダー項目: ファイルを削除する

このコマンドによってプロセスを遠隔から切ることができるのですが、子プロセスまでまとめて切ることができません。

そこでmacOSに存在する便利なコマンドpkillを用いたスクリプトで、親から子プロセスまで切ることができます。

/usr/bin/pkill -P "$1"

このスクリプトをLive Responseで実行する際には以下のようにします。

run pkill.bash <親のPID>

不審なプロセスから作成される子プロセスをまとめて切ることができるので便利です。

フォレンジックアーティファクト取得スクリプト

Defender for Endpointでは「調査パッケージの収集」の機能を利用すると、フォレンジックに役立つ情報をリアルタイムで収集できます。lsofkextstatコマンド出力、.zsh_historyファイルなど多彩なログを収集可能です。収集できる情報については公式ドキュメントを参照してください。

この「調査パッケージの収集」機能で目ぼしい情報は収集できます。ですが、各インシデントによっては別途ブラウザのログや、ASL(Apple System Log)、SFLファイルを確認したいことがあります。

これらのアーカイブファイルがどんなログなのか確認したい場合は、JSAC 2022で行われたAn Introduction to macOS Forensics with Open Source Softwareのスライドを参考にしてみるとわかりやすいです。

どういったログなのか理解していないと思わぬ情報の見落としに繋がる可能性があります。そこで、事前に取得できるアーティファクトを確認しておくことが重要です。

例えば「com.apple.LaunchServices.QuarantineEventsV2のログはデフォルトではwgetなどのダウンロードではcom.apple.quarantine拡張属性がつかないので記録されない」などです。

これらのmacOSの各種アーティファクトを追加で取得する際に便利なツールAutoMacTCを用いてスクリプト作成しました。

AutoMacTCはセキュリティベンダーであるCrowdStrikeが公開しているmacOSのフォレンジックツールです。このツールを使うことで、macOSの各種ログや設定ファイルを取得できます。

その他のフォレンジックツールはmacOSの性質上、再起動が必要です。そこで、リアルタイムフォレンジックを行えるツールで、各種ログを取得できるAutoMacTCを選定しました。

また、AutoMacTCはmacOSにデフォルトであるPython 3で動作し、追加のパッケージもpipなどでインストールしないため、迅速にアーティファクトを取得できます。最近はメンテナンスされていないのが難点ではあるので、その点は注意が必要です。こちらのIssueなどのように収集対象が変わっている場合があります。

このツールをDefender for EndpointのLive Responseで使うためには、諸々の準備が必要です。

まずAutoMacTCで利用するmodulesをzip圧縮しておきます。

zip -r modules.zip modules

このmodules.zipファイルとautomactc.pyを事前にLive Responseのlibraryに登録しておきます。そして以下のカスタムスクリプトもlibraryに登録しておきます。

folder="/Library/Application Support/Microsoft/Defender/response/" #Live Responseがputfileコマンドでファイルを置くディレクトリ
modulefile="modules.zip"
pyfile="automactc.py"

/usr/bin/unzip -o "${folder}${modulefile}" -d "${folder}"
/usr/bin/python3 "${folder}${pyfile}" -m all -o "${folder}"

登録した後はzipファイルやPythonスクリプトをputfileコマンドで展開し、カスタムスクリプトをrunするだけでAutoMacTCが動作します。動作後のアーティファクトはgetfileコマンドで取得できます。

追加で様々なアーティファクトを取得でき便利です。

まとめ

Defender for EndpointをMacで活用するためのTipsを紹介しました。macOSでのインシデント対応においては、Windowsとは異なる機能差分があるため、独自のスクリプトを用意しておくと便利です。

ZOZOではこれからもSOCの運用体制を整備し、ZOZOの安全性の向上を図っていきたいと考えています。

おわりに

ZOZOでは、一緒に安全なサービスを作り上げてくれる仲間を募集中です。ご興味のある方は、以下のリンクから是非ご応募ください!

corp.zozo.com

カテゴリー