Kali の基本的なネットワークツール

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

はじめに

スキャナーを使う前に、アドレス、名前、ネットワーク経路、サービスポートを区別する必要があります。これらは別々の観測であり、一つの層の成功は別の層の成功を証明しません。

この実習では、Kali 環境内にローカル DNS サーバーと Web サービスを提供します。ゲートウェイをスキャンしたり、公開ターゲットに依存したりせず、ネットワークを調べ、演習用の名前を解決し、TCP の待ち受けを確認します。

アドレス、経路、ループバックの到達性を調べる

このステップでは、Kali コンテナのネットワークを調べ、範囲を限定したローカルの接続経路をテストします。

準備済みのシェルに入り、ワークスペースを選びます。

kali
cd /home/labex/project

IP アドレスはネットワークのエンドポイントを識別します。インターフェースはシステムとネットワークの接続で、経路はアドレス宛てのトラフィックの行き先を示します。コンテナは独自のネットワーク環境を持つので、ホストの設定を想定せず、この環境を調べてください。

ip は Linux のネットワークを調べます。-brief はインターフェースのアドレスを簡潔に表示します。

ip -brief address

ループバックインターフェースの lo と、127.0.0.1 を探します。ループバックの通信は、このネットワーク環境内にとどまります。他のインターフェースやアドレスは異なる場合があります。/8 や /16 のようなプレフィックスはアドレスのネットワーク範囲を表し、サービスポートではありません。

経路を調べます。

ip route

default 項目があれば、より具体的な経路に一致しない場合に使われます。ゲートウェイのスキャンや経路の変更は不要です。

ping は到達性のプローブを送ります。-c 3 はプローブを 3 回に制限し、自動的に終了させます。

ping -c 3 127.0.0.1

応答と最後のパケット概要が表示されるはずです。正確な時間は変わります。ping の応答は、そのプローブに応答があったことを示し、特定の TCP サービスの待ち受けを確認するものではありません。

学習済みの出力のリダイレクトで、インターフェースの観測を保存します。

ip -brief address > interfaces.txt
cat interfaces.txt

保存した表示には、ループバックインターフェースとそのアドレスが含まれるはずです。

演習用 DNS サーバーで名前を解決する

このステップでは、ローカル DNS サーバーを使い、名前解決とサービスへの接続を区別します。

DNS は名前をレコードに変換します。A レコードは IPv4 アドレスを保持します。この実習では、127.0.0.1 のポート 5353 に DNS サーバーと、ローカル名 training-web.test を提供します。公開 DNS サービスは不要です。

dig は DNS に問い合わせます。@127.0.0.1 はサーバー、-p 5353 は既定とは異なる DNS ポート、次の引数は名前を選び、A は IPv4 アドレスレコードを要求します。

dig @127.0.0.1 -p 5353 training-web.test A

応答欄には名前とアドレス 127.0.0.1 が示されるはずです。DNS もポートを使います。ここでのポート 5353 は演習用 DNS サーバーのもので、応答の名前が示す Web サービスのポートではありません。

表示オプション +short は応答データだけを表示します。この小さな結果を保存します。

dig @127.0.0.1 -p 5353 +short training-web.test A > dns-answer.txt
cat dns-answer.txt

想定される出力:

127.0.0.1

システムの名前検索では、直接 DNS に問い合わせる代わりにローカルファイルを使うこともあります。getent hosts は、システムに設定されたホスト名検索に名前を問い合わせます。

getent hosts localhost

出力は localhost とループバックアドレスを関連付けます。IPv6 の ::1 の場合もあります。これは、dig で提供された DNS サーバーを明示的に問い合わせることとは異なります。名前解決に成功すればアドレスは得られますが、必要なサービスがそこで利用できるか、さらに調べる必要があります。

待ち受けを調べ、TCP ポートをテストする

このステップでは、アドレスと、特定のトランスポートプロトコルおよびサービスポートを結び付けます。

ポートは、アドレス上のトランスポートのエンドポイントを識別します。TCP は接続を確立し、UDP は同じ接続ハンドシェイクなしでデータグラムを送ります。ポート番号だけでは、どのアプリケーションや脆弱性があるかは証明できません。

ss はソケット情報を表示します。-l は待ち受けソケット、-t は TCP を選び、-n はアドレスとポート番号を数値のまま表示します。

ss -ltn

ローカルエンドポイント 127.0.0.1:8080 を探します。提供された演習用 Web サービスのものです。このアドレスはコンテナ内のループバックに限定します。-t の代わりに -u で UDP ソケットを別に調べます。

ss -lun

演習用 DNS エンドポイントはポート 5353 を使います。TCP と UDP は別のポート空間を持ち、同じ番号を両方のプロトコルで使えます。

演習サービスの TCP 待ち受け行だけを保存します。パターンにはポートの前のコロンと、長い番号と区別する末尾の空白を含めます。

ss -ltn | grep ':8080 ' > service-listener.txt
cat service-listener.txt

行には LISTEN と 127.0.0.1:8080 があるはずです。間隔やキューの値は異なる場合があります。

Ncat は、アプリケーションデータを送らずに TCP 接続をテストできます。-v は状態を表示し、-z は対話型のデータセッションの代わりに接続確認を要求します。

ncat -vz 127.0.0.1 8080

状態には接続成功が表示されるはずです。これは選んだ TCP ポートが今接続を受け付ける証拠で、まだ HTTP 応答は検証しません。HTTP 自体は後の実習で調べます。

まとめ

インターフェースと経路を調べ、回数を限定した到達性テストを送り、ローカル DNS に問い合わせ、TCP と UDP の待ち受けを調べ、一つの TCP 接続をテストしました。名前解決やネットワーク到達性の成功と、アプリケーションレベルの動作を区別しました。