サーバ情報の収集

ネットワーク情報収集で得た情報をもとに、今度はサーバに関する情報収集を実施します。本件で確認する手法は、対象サーバに直接アクセスするため、場合によっては不正アクセスと認識されます。とはいえ、このフェーズを無視することはできません。攻撃者もある程度のリスクを承知で行動します。また、セキュリティの観点から攻撃者の行動を理解しておくことはとても重要になるので一つづつ理解していきましょう。


・利用するツールやコマンド

・稼働しているサーバ確認

・ネットワーク構成の確認

・各種ポートスキャン

・まとめ


・利用するツールやコマンド

 以下の項目で収集した情報を元に、ツール・コマンドを駆使してさらに情報を収集します。

 ・ping

 ICMPというプロトコルを使って対象サーバの生存を確認するためのコマンドです。応答が返ってくればそのサーバは存在することになります。しかし、タイムアウトしたからといって存在しないとは限りません。サーバもしくは手前のファイアウォールでICMPをフィルタ(禁止)している可能性もあるからです。

 Windowsのコマンドプロンプトから以下のように使用します。

ping 対象サーバのIPアドレスもしくはドメイン名

※実行例(応答がある場合とない場合)

ping 8.8.8.8

8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =124ms TTL=113
8.8.8.8 からの応答: バイト数 =32 時間 =216ms TTL=113
8.8.8.8 からの応答: バイト数 =32 時間 =58ms TTL=113
8.8.8.8 からの応答: バイト数 =32 時間 =116ms TTL=113

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 58ms、最大 = 216ms、平均 = 128ms

ping 8.8.8.9
8.8.8.9 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。

8.8.8.9 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)

※ドメイン名で実行

ping google.co.jp

google.co.jp [172.217.175.99]に ping を送信しています 32 バイトのデータ:
172.217.175.99 からの応答: バイト数 =32 時間 =47ms TTL=111
172.217.175.99 からの応答: バイト数 =32 時間 =77ms TTL=111
172.217.175.99 からの応答: バイト数 =32 時間 =52ms TTL=111
172.217.175.99 からの応答: バイト数 =32 時間 =55ms TTL=111

・telnet

 telnetとはコンソール接続を提供するコマンドです。Linuxでは標準で利用できますが、Windwosではサービス登録設定をしないと利用できません。

windowsの機能メニューから、telnetクライアントにチェックを
入れることで利用可能

 telnetはTCPのポート23を利用しますが、ポート番号は指定することができます。そのため、このポート番号を変更して対象サーバのポートに向けて有効・無効を確認することができる場合があります。

書式:telnet 対象サーバIPアドレス ポート番号
telnet 0.0.0.0 80

・nmap

 nmapはポートスキャン用ツールの代表です。以下のことができるツールとなっています。

  ・ポートスキャン
  ・サービスアプリの種類・バージョン検出
  ・OSバージョン検出  など

書式:nmap [オプション] 対象サーバIPアドレス
nmap 0.0.0.0

・稼働しているサーバ確認

 まず初めに試すのは「ping」コマンドです。最も簡単ですぐに実行できます。ただし、最近ではpingの応答を返さないようにファイアウォールで遮断していることがあります。そのため、応答がないから稼働していないと判断するのは難しいです。

 また、対象が複数になった場合pingコマンドでは1つずつしか実行できないため大変手間がかかります。そこでnmapを使って実行する方法もあります。

nmap -sn -PE 192.168.100.0/24

 実行結果を基に稼働しているサーバのIPアドレスが確認できたら次の調査を実施します。


・ネットワーク構成の確認

 インターネット通信では、送信元・宛先が直接に接続されることはありません。いくつかのネットワーク機器を経由して接続されます。この接続経路を確認することでネットワーク構成を推測できることがあります。

 実際に経路確認を実施してみます。Windowsでは「tracert」、Linuxでは「traceroute」を使います。

windows
tracert [対象サーバIPアドレス]

Linux
traceroute [対象サーバIPアドレス]

tracert 8.8.8.8

dns.google [8.8.8.8] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1     3 ms     1 ms     1 ms  172.20.10.1
  2    47 ms     *       52 ms  192.168.3.86
  3   121 ms    53 ms    73 ms  192.168.3.81
  4    49 ms    41 ms    39 ms  192.168.11.193
  5    49 ms    38 ms    38 ms  192.168.11.169
  6    67 ms    34 ms    38 ms  192.168.11.244
  7   118 ms    50 ms    34 ms  192.168.11.249
  8    55 ms    56 ms    45 ms  softbank126133027209.bbtec.net [126.133.27.209]
  9     *        *        *     要求がタイムアウトしました。
 10     *        *        *     要求がタイムアウトしました。
 11   109 ms    59 ms    49 ms  72.14.214.193
 12    77 ms    44 ms    40 ms  108.170.225.241
 13   112 ms    51 ms    67 ms  72.14.238.23
 14    79 ms    43 ms    40 ms  dns.google [8.8.8.8]

トレースを完了しました。

 仮に3台のサーバが稼働していたとします。各IPアドレスに対して実際にコマンドを発行した結果、以下の通りでした。この場合以下のことが推測できる場合があります。

tracert 2.1.1.1

[2.1.1.1] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1     3 ms     1 ms     1 ms  172.20.10.1
 1     3 ms     1 ms     2 ms  1.1.1.1
 1     3 ms     1 ms     1 ms  2.1.1.1

トレースを完了しました。

tracert 2.1.1.2

[2.1.1.2] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1     3 ms     1 ms     1 ms  172.20.10.1
 1     3 ms     1 ms     2 ms  1.1.1.1
 1     3 ms     1 ms     1 ms  2.1.1.2

トレースを完了しました。

tracert 2.1.1.3

[2.1.1.3] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1     3 ms     1 ms     1 ms  172.20.10.1
 1     3 ms     1 ms     2 ms  1.1.1.1
 1     3 ms     1 ms     1 ms  2.1.1.3

トレースを完了しました。

各サーバは同じセグメント内におり、手前にFW「1.1.1.1」が存在している

・各種ポートスキャン

 サーバはインターネットに公開されている以上なにかしらサービスが提供されています。そこでそれらサーバについてどのようなポートを使ってサービス提供しているか確認することをポートスキャンといいます。

 代表的なツールとして「nmap」があります。これは対象サーバに対してどのポートが空いているか・有効であるかを確認するツールになります。ここでは代表的なスキャンを確認します。

 ①SYNスキャン

 1つ目がSYNスキャンと呼ばれるもの。通常TCP通信を利用する時には3ウェイハンドシェイクという手順を行います。3つ目の「ACK」が終わったところで接続されて、サーバ側にログが出力されます。

3ウェイハンドシェイク  最後のACKで接続が確立されてサーバ側にもログが残る

 これを利用したものがSYNスキャンになります。通常通りSYNを投げます。サーバから「SYN / ACK」の応答があればこのTCP接続は有効であると判断できるのでこの時点で攻撃側は「RST」を返します。これによりサーバ側で接続が確立されなかったのでログには残りません。「RST」とは、接続を強制的に終了するフラグです。

「SYN / ACK」が確認できればいいので「RST」で強制的に切断

 接続が確立されずにサーバ側から「RST」が返ってくれば接続に利用したTCP接続はできないと判断できます。

サーバから「RST」が返ってきたので無効と判断

 SYNスキャンはログに残りにくいため、「ステルススキャン」と呼ばれることもあります。

 ②クローズドポートスキャン

 SYNパケットを送信することとは違って、規定とは違ったパケットを投げることで得られる応答からポートの状態を確認することをクローズドポートスキャンといいます。

 スキャンの種類は以下の通り。

  ・NULL:制御フラグを一切利用しない
  ・FIN:FINフラグを利用
  ・Xmas:FIN、URG、PUSHフラグを利用

 このスキャンでは、明確な応答があるポートがクローズポートなのでそれ以外がオープンという判定になります。ただしネットワークエラーやパケット損失などが発生することもあるので信頼性が低い欠点があります。

 ③IPIDスキャン

 IPIDスキャンとは、スキャンする端末を踏み台に利用してスキャンを実行することを指します。IPIDとは、パケットを1つ送信する毎に値が1増えるものです。RSTパケットい着目した動作イメージを以下に作成しました。初期値を0として確認していきます。

  ①攻撃者は踏み台端末のオープンポートに対して「SYN / ACK」を送信
   踏み台は適切な通信ではないと判断するので「RST」を返す
   この時に「IPID」の値を1つ増やして「IPID=1」を返す

  ②攻撃者は対象サーバに送信元を「踏み台」に偽装して「SYN」を送信

  ③対象はポートがオープンであれば「SYN / ACK」をそうでなければ「RST」を「踏み台」へ返す
   SYN / ACKの場合、踏み台からRSTを対象サーバへ送信、IPID=2として返す
   RSTの場合、なにもせず通信は終了する

  ④攻撃者は踏み台端末のオープンポートに対して「SYN / ACK」を送信
   踏み台は適切な通信ではないと判断するので「RST」を返す
   この時の「IPID」の値によってポートが空いているかどうか判断
   IPID=2であれば「クローズ」、IPID=3であれば「オープン」と判断

 すこしややこしい感じではありますが、このように判断をします。ただし、このスキャンには欠点があり踏み台となる端末が頻繁に通信をしていた場合正確なIPIDを返せない場合があります。


・まとめ

 本件ではサーバの情報収集方法を確認してみました。どの方法も難しくはなくちょっとした知識があれば実行できる内容です。情報収集となってはいますが、場合によっては攻撃を受けているものと判断されることがあります。

 また、これら知識を持っていることで守る側としての対応方法もいくつか浮かぶと思います。「クラッカーのやることはわからない」と考えず同じ知識を身に着けることで今後の対策などの材料にできるといいですね。


返信を残す

メールアドレスが公開されることはありません。

CAPTCHA