コラム

Jamf Protect の「ネットワーク隔離ワークフロー」のつくり方

セキュリティツールが怪しい振る舞いやマルウェアの挙動を検知した際、その時点では原因や詳細がよくわかっていない場合が多く、状況を悪化させないために問題が発生した端末を「ネットワーク隔離」することがよくあると思います。

ネットワーク隔離により端末に接続可能なネットワークをブロックすることで、端末からインターネットに接続不可になります。逆に、インターネット(攻撃者等)から端末にも接続不可になります。端末がネットワーク隔離されている状態でセキュリティーチームがインシデントを調べたり、インシデントレスポンスを実施したりします。セキュリティーチームの対応が終わったら、通常にインターネットを使えるようにネットワーク設定を戻します。

Jamf Protect には、「Analytics」という振る舞い検知機能があります。振る舞い検知で怪しい振る舞いやマルウェアの挙動を検知したら、自動的に Jamf Pro に用意されたワークフローをトリガーする仕組みの構成ができます。
今回紹介したい「ネットワーク隔離ワークフロー」は、Jamf Protect の Analytics で怪しい振る舞いを検知した際、Jamf Pro のポリシーの処理と連携してネットワーク隔離を行います。

ネットワーク隔離ワークフロー とは

ネットワーク隔離ワークフロー

今回ご紹介するサンプルについて

Jamf Open Source Community に公開されている soar_playbooks にあるendpoint_network_isolation を使って、スクリーンショットを撮ったタイミングでネットワークを切断するフローを起動します。
また、対応後の復帰を想定して、ネットワーク設定を戻すフローを起動する処理も作成します。

必要な設定項目

Jamf Protect 側
・Analytics のスマートグループ識別子(Smart Group’s Identifier)

Jamf Pro 側
拡張属性:Jamf Protect – Smart Groups、ネットワーク隔離のステータス
スマートグループ:Analytics の検知用のグループ、ネットワーク隔離がかかっているグループ
ポリシー・スクリプト:ネットワーク隔離を強制する設定、ネットワーク隔離を解除する設定

設定方法

① Jamf Protect ワークフローのために必要な基本コンポーネントを作成

Jamf Protect 側
ワークフローを連携したい Analytics(今回の例ではスクリーンショットを取得するする振る舞い)の「Analytics Action」に「Add to Jamf Pro Smart Group」設定のチェックを入れて「Identifier」を設定し、保存します。
※Identifierという項目には、後ほど Jamf Pro のスマートグループの条件に設定する値と同じ値を設定します。

スマートグループ識別子(Smart Group’s Identifier)を設定

登録後、上記の設定をしたAnalyticをPlanから、適用端末に割当られているPlanのAnalytic Setに割り当ててください。

検証前の確認ポイント
・端末に適用されているプランのHash値が最新版PlanのHash値と一致しているかどうかを確認
手順
①Jamf Protect のComputersで対象端末をクリックします。
②Computer Detailsタブをクリックし、下にスクロールします。

端末に適用されているプランは最新版

端末に適用されているプランが最新版ではない場合

※端末に適用されているプランが最新版にならない場合、端末はインターネットに接続しているかどうかを確認して、インターネットを接続している状態でもPlan Hashがアップデートされていなかったら、以下のいずれかを実行します。

  • 同じ管理画面に一番上にスクロールして、オンラインになっている状態で「Request Check-in」ボタンがあります。 Jamf Protect にチェックインして、最新版のプラン情報をもらうために「Request Check-in」をクリックします。

「Request Check-in」ボタン

  • 対象端末のTerminal.app から「sudo protectctl checkin」コマンドを実行します。

Jamf Pro 側
Jamf Protect ワークフローのための必要な基本のコンポーネントを作成

  • Jamf Protect – Smart Groups 拡張属性
    ※この設定は、 Jamf Pro インスタンスで1つあれば結構です。既存の設定がある場合は次へ進んでください。

    左側の「設定」> コンピュータ管理タブの「拡張属性」> 右上の「テンプレートから新規作成」>「Jamf Protect – Smart Groups」をクリックします。そのまま右下「保存」をクリックして良いです。

「Jamf Protect – Smart Groups」拡張属性

  • Analytics の検知用のスマートグループ:左側の「コンピュータ」>「スマートコンピュータグループ」>右上の「新規」をクリックしたら、以下のとおり設定して保存します。
    • グループの表示名:ネットワーク隔離ワークフローのグループなので、ネットワーク隔離ワークフロー関連の名前を設定(例えば、protect-networkIsolation)
    • クライテリア:「Jamf Protect – Smart Groups」is「設定されたJamf Protect Analyticのスマートグループ識別子(Smart Group’s Identifier)」

Analytics の検知用のスマートグループのクライテリア

この設定により検知対象の Analytic(例では screenshotNam )が検知されると、端末は Analytics の検知用のスマートグループ(例では protect-networkIsolation )に入ります。

② ネットワーク隔離ワークフローを構成

ネットワーク隔離スクリプト等は、以下 Jamf Protect の Github URLに参考して、ワークフローを構成します。
https://github.com/jamf/jamfprotect/tree/main/soar_playbooks/endpoint_network_isolation 
こちらスクリプトは、すべてネットワークをブロックして、Jamf Pro URLとAPNsとの通信を除外してコミュニケーションができるような設定のスクリプトです。

2.1 ネットワーク隔離を強制する設定

  • ネットワーク隔離を強制するスクリプト:左側の「設定」> コンピュータ管理タブの「スクリプト」>右上の「新規」して, endpoint_network_isolation_enforce.shの内容を設定します。
    ※ endpoint_network_isolation_enforce.shの67行目に許可・ブロックするネットワークルールのファイル名を設定します。下記の例のように自社名をfileNameに設定していただくとよいと思います。
fileName="com.{自社名}.isolate"
例)fileName="com.magichat.isolate"
  • ネットワーク隔離を強制するポリシー:左側の「コンピュータ」>「ポリシー」> 右上の「新規」して以下の設定を行う
    • 一般ペイロード
      • トリガー:「カスタム」に設定し、「カスタムイベント」に「protect」を設定
        ※この「protect」は予約語なので、そのとおりに設定してください。
      • 実行頻度:Ongoing
    • スクリプトペイロード:ネットワーク隔離を強制するスクリプトを選択
    • ファイルとプロセスペイロード:「コマンドを実行」に以下コマンド設定します。
      rm /Library/Application\ Support/JamfProtect/groups/*; sleep 5; jamf recon;
    • スコープ:Analyticsの検知用のスマートグループ( protect-networkIsolation )

一般ペイロードの設定

ファイルとプロセスペイロードの設定

スコープの設定

ネットワーク隔離を強制するワークフローが完成しました!
Analytics が端末でスクリーンショットの取得を検知すると検知用のスマートグループ(protect-networkIsolationグループ)に入り、ネットワーク隔離設定(network isolation protectポリシー)が適用されます。

ネットワーク隔離設定を適用された状態で、セキュリティーチームはインシデントレスポンスを対応します。
対応が終わったら、ネットワーク設定を通常の状態に戻します。

続いて、ネットワーク隔離を解除する設定のご紹介です。

2.2 ネットワーク隔離を解除する設定

ネットワーク隔離のステータス拡張属性

  • ネットワーク隔離を適用しているスマートグループ:左側の「コンピュータ」>「スマートコンピュータグループ」>右上の「新規」をクリックしたら、以下を設定して保存します。
    • クライテリア:「設定されたネットワーク隔離のステータス拡張属性」is「Enforced」

ネットワーク隔離を適用しているスマートグループの設定

この設定を実施すると、ネットワーク隔離が適用されている端末が特定できます!
※ネットワーク隔離を強制するポリシーの最後にインベントリー更新するコマンド(jamf recon)を実行したのは、最新の端末のネットワーク隔離のステータスを反映するためです。
※※ 今回、「ネットワーク隔離を適用しているスマートグループ」に、ネットワーク隔離を解除する設定を配布します。その際、インシデントレスポンスの対応完了も配布の条件とするため、下記のように対応終了判断のスタティックグループも加えて管理してもよいと思います。

ネットワーク隔離の解除を許可した端末グループの設定(特定デバイスのみ)

  • ネットワーク隔離を解除するスクリプト:左側の「設定」> コンピュータ管理タブの「スクリプト」>右上の「新規」して, endpoint_network_isolation_revert.sh の内容を設定します。
    ※ endpoint_network_isolation_revert.sh の48行目のファイル名(fileName)に「ネットワーク隔離を強制するスクリプトに設定されたネットワークルールのファイル名」と一致するように修正します。

ネットワーク隔離を解除するスクリプトの設定

  • ネットワーク隔離を解除するポリシー(Self Service に展開):左側の「コンピュータ」>「ポリシー」> 右上の「新規」をクリックして以下を設定
    • 一般ペイロード
      • トリガー:設定なし
      • 実行頻度:Ongoing
    • スクリプトペイロード:ネットワーク隔離を解除するスクリプトを選択
    • メインテナンスペイロード:「インベントリをアップデート」のチェックを入れる
    • スコープ:ネットワーク隔離を適用しているスマートグループ
    • Self Service:「Self Service でポリシーを使用可能にする」のチェックを入れて、Self Service の設定をカスタマイズします。

一般ペイロードの設定

スコープの設定

Self Serviceの設定

ネットワーク隔離を解除する設定も完成しました!
ネットワーク隔離設定を適用している端末には、Self Service アプリを起動して、ネットワーク隔離を解除するポリシーを実行すると、通常のネットワーク状態に戻ります。

挙動を確認しましょう!

この動画では、スクリーンショットを取得すると自動的にネットワーク隔離が強制されることが確認できます。その後、Self Service からネットワーク設定を元に戻す動作も確認できます。

おまけ : 追加のネットワークルールを除外したい

問題です。 ネットワーク隔離を強制するスクリプトの中でネットワークルールの設定箇所どこでしょうか?

回答:以下の部分です(140-153行目)。

# Block all incoming connections
block in all
# Pass in incoming connections from Apple addresses and Jamf Pro
pass in from { ${apnsIPRange}, ${JamfProInstance} } to any no state

# Pass in DHCP
pass in inet proto udp from port 67 to port 68
pass in inet6 proto udp from port 547 to port 546

# Block all outgoing connections
block out from any to any no state

# Pass out outgoing connections to Apple addresses and Jamf Pro
pass out from any to { ${apnsIPRange}, ${JamfProInstance} } no state

こちらは、パケットフィルター(ファイアウォールの一つ)のルールです。

パケットフィルタリングとは、通信機器やコンピュータの持つネットワーク制御機能の一つで、外部から受信したデータ(パケット)を管理者などが設 定した一定の基準に従って通したり破棄したりすること。

技術文書:パケットフィルタリング 【packet filtering】 PF

ネットワーク隔離を強制する際、サードパーティ製品(インシデントレスポンスツール・SIEM製品)へデータを送信したり、コミュニケーション・仕事ができるようにIPアドレスやポートを除外したりしないといけないことがあります。
以下よく使うシンタックスや書き方に参考して、設定されているネットワークルールの意味がよくわかって、必要に応じてネットワークルールを追加したり、編集したりすることができるようになります。

設定のシンタックス

  • アクション
    • block :パケットの通信をブロック
    • pass :パケットの通信を許可
  • 方向
    • in : インバウンドパケット
    • out : アウトバウンドパケット
  • ログに記録
    • log : 一致するパケットをログに記録します。
  • IPv4 / IPv6指定
    • inet : IPv4アドレス(例:174.043.122.222)
    • inet6 : IPv6アドレス(例:3ffe:1900:fe21:4545:0000:0000:0000:0000)
  • プロトコール
    • proto : プロトコール(tcp, udp, icmp など)

ルールの書き方
[アクション] [方向] [log] [IPv4 / IPv6指定] [proto プロトコール] [from 発信元IPアドレス] [to 宛先IPアドレス] [port ポート]

ルールのサンプル
・pass in inet proto udp from port 67 to port 68
→ ポート67(サーバー側)からポート68(クライアントまたは、MacBook側)へのUDPプロトコルを使用したIPv4着信通信を許可します。

・pass log proto udp to port { 123 4172 4195 5938 }
ポート123、4172、4195、5938 へのUDPプロトコルによる通信を許可して、ログに記録します。

・pass proto tcp to 203.0.113.2 port 22
203.0.113.2(ポート22) へのTCPプロトコルによる通信を許可します。
など

参考情報https://www.openbsd.org/faq/pf/filter.html

最後に

以上の手順で、ネットワーク隔離ワークフローを皆さんの環境に構成したり、ネットワーク隔離のルールをカスタマイズしたりすることができるようになりました。

パケットフィルターの設定は、ネットワーク隔離だけでなく、日常でネットワークセキュリティーを高めるために設定している会社もあります。

今回の内容で Jamf Protect ワークフローの基本をご理解いただけたと思いますので、今後はいろいろな対策ワークフローが作成できるようになると思います。

以上、 今回はエンジニアのナトニチャが担当いたしました。
最後まで読んでいただき、ありがとうございました。

この記事をシェア
  • URLをコピーしました

製品に関するご相談・価格など
お気軽にご相談ください

問い合わせる