VPN経由でNmapの結果が変わる?対象を固定しよう
トンネルが上がると、ホスト名が別のアドレスに解決されることがある。ポート状態の変化を読み取る前に、数値の対象を固定しておこう。
同じウェブサイトへの二回のポートスキャンが食い違うのは、実行の間に名前が別のアドレスへ解決されたからであり、トンネルが対象の見え方を変えたからではない。ホスト名は検索の指示であり、Nmapはスキャンの時点でそれに従う。リゾルバが別のレコードを返せば、二回目のスキャンは別のマシンを測ったことになる。
数値アドレスを固定すれば、比較は再び意味を持つ。レポートの他のすべて、タイミングから中間装置まで、それぞれ独自の制御を要する別の変数のままだ。
レポートでは同じに見える二つの実験
名前をそれ自身と比べれば、少なくとも二つのものを同時に変えている——パケットが通る経路と、リゾルバが返した宛先だ。出力の差をどちらか一方に帰すことはできない。この曖昧さこそ、前後のスキャンが誰にも決着できない論争になる通常の理由である。
アドレスをそれ自身と比べれば、宛先は構造上固定される。それでも異なるものは、経路、送信元アドレス、その間のフィルタリング、あるいはマシン自身の状態に属する。変数を一つ除いたのであって、すべて除いたのと同じではない。
ポート表から何かを結論づける前に、二つの実験のどちらを実際に実行したのかを書き留める。この区別は学術的に聞こえるが、二回目に到達したアドレスでは一度も開いていなかったポートをVPNが遮断した、とレポートが言うまでは。
| Comparison | What stays fixed | What a difference can mean |
|---|---|---|
| Name against name | The string you typed | Resolver answer, answer order or split-horizon policy changed |
| Address against address | The numeric destination | Source path, filtering or service placement changed |
まず解決し、次に記録したアドレスをスキャンする
解決と探査を分け、二つの事実を別の場所に残す。システムに何を解決したのか尋ね、その答えを保存し、それからNmapに文字どおりのアドレスを渡す。トンネルを下ろした状態と上げた状態で、同じ二つのコマンドを繰り返す。
getent hosts scan.example.net dig +short scan.example.net A nmap -Pn -sV -p 443,8443 192.0.2.40
ここでは-Pnフラグが重要だ——発見プローブを無視するホストはそうしないとダウンとして報告され、空の結果が閉じたポートと誤読されるからだ。-sVは運用者が承認した対象にだけ使い、バージョン探査は素の接続より騒がしく書面の範囲に属する。
Nmapのターゲット指定のリファレンスは、ホスト名がスキャン前にアドレスへ解決されること、複数のアドレスが返るときはすべてを要求しない限り最初のものをスキャンすることを明言している。この振る舞いにVPN固有のものは何もない。スプリットDNS、別のリゾルバ、新しい順序で応答するロードバランサーは、トンネルなしでも同じ効果を生む。
解決された値を、アドレスファミリー、フラグの集合、タイムスタンプとともにスキャン出力の隣に残す。企業名を返す逆引きは別の観測であり、どのバックエンドが応答したかの証拠ではない。
変化したポート状態が教えられることと教えられないこと
宛先が固定されれば、開からフィルタ済みへ変わるポートは通常、経路を指す。上流のACL、ステートフルファイアウォール、トンネルの出口を家庭用の出口と違う扱いにするプロバイダーを考えよう。範囲が許すなら同じサブネット内の二つ目の承認済みアドレスを試して絞り込む——ホスト名を入れ替えるとリゾルバの問いが戻ってくるからだ。一回の実行につき変数一つ、それが手法のすべてである。
サービスのバナーが変わる間も開いたままのポートは別の話だ。そのパターンは接続をバックエンド間に配分するフロントエンドに当てはまり、こちら側でどれだけスキャンしてもその背後のテナントを名指しすることはできない。
スキャンが決して語らないのは意図だ。フィルタ済みのポートはポリシーの結果であり、誰かがあなたのトンネルを選んだ証拠ではない。開いたポートも、背後のアプリケーションがあなたに応答する証拠ではない——どちらの物語を書く前にも、運用しているコンポーネントのログと突き合わせる。
比較がレビューに耐えるように結果を記録する
有用な記録には、要求した名前、解決されたアドレスとそのファミリー、正確なフラグ、使用中の送信元アドレス、宛先を対象とした承認が含まれる。時刻も加える——DNSの応答は回転し、タイムスタンプのないレポートは同じ議論を二度招くからだ。スキャナーのバージョンも加える——既定の探査挙動はリリース間でずれるからだ。二回の実行が異なる手法を使ったなら、別の実験として扱い、脚注ではなく見出しでそう述べる。
所見には、宛先が違うのか、送信元の経路が違うのか、まだ説明できない差なのか、あるがままのラベルを付ける。その語彙がスキャンレポートを正直に保ち、リゾルバの応答がVPN傍受の事象として再公開されるのを止める。次の一歩は通常、アドレスを固定したもう一回の実行であり、より広いスキャンではない。