外から触れる入口は全部で何か
攻撃対象領域(アタックサーフェス)とは、外の誰かが触れられるネットワークの入口を、すべて合わせたものです。入口が一つ増えるごとに、守る場所も一つ増えます。
小さな会社のウェブサーバーが、ウェブの入口だけでなく、データベースの入口も世界に開いていたとします。気づかなければ、守りようがありません。今日は、入口を数える方法を学びます。
このレッスンのゴール
メモ
ネットワークが外に見せている入口を、スキャンの結果から一覧にできる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| 攻撃対象領域 | 外から触れられる入口の全部 | |
| ポート | サービスごとの入口の番号 | 443 |
| 待ち受け | サービスが接続を受け付けて待つこと | |
| ポートスキャン | 入口を順に試して、状態を調べること | |
| 開いている | 接続が成り立つポートの状態 | |
| フィルタされている | 返事が無いポートの状態 |
学生が入力するセルは、このプレビューでは空白です。
ポートはサービスの入口の番号
一台の機械には、アドレスが一つあっても、サービスは何本も動きます。どのサービスへの通信かを分けるのが、ポートの番号です。
サービスが接続を受け付けて待つことを、待ち受けといいます。待ち受けているポートの数が、そのまま入口の数です。
例: よく見かけるポート
| 番号 | ふつう動いているもの | 外に見せてよいか |
|---|---|---|
| 22 | 遠隔ログイン(SSH) | 管理する人にだけ |
| 80 | ウェブ(暗号なし) | 公開サーバーなら可 |
| 443 | ウェブ(暗号あり) | 公開サーバーなら可 |
| 3306 | データベース(MySQL) | 内側だけ |
| 3389 | Windowsの遠隔操作 | 外には出さない |
| 53 | 名前の問い合わせ(DNS) | 必要な相手にだけ |
学生が入力するセルは、このプレビューでは空白です。
待ち受けているポートを見る
sudo ip netns exec lan ss -ltnここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
待ち受けの一覧の読み方
ss -ltn は、待ち受け中(-l)のTCP(-t)のポートを、数字のまま(-n)並べます。ラボの lan では、0.0.0.0:80 と 0.0.0.0:8081 の二行が出ます。
0.0.0.0 は「どのアドレス宛てでも受ける」という意味です。この二つが、lan という機械の入口です。
ポートスキャンは入口を順に試す
外から入口を調べるには、ポートスキャンを使います。ポートに接続を一つずつ試し、返事の違いで状態を決めます。
状態は三つです。返事の違いを、下の表で確かめましょう。守る側も、攻撃する側と同じ目で、自分のネットワークを見ておく必要があります。
例: 三つの状態と返事
| 状態 | 相手の返事 | わかること |
|---|---|---|
| 開いている(open) | 接続が成り立つ | サービスが待ち受けている |
| 閉じている(closed) | 「ここには無い」と断られる | 機械は生きているが、サービスは無い |
| フィルタされている | 何も返ってこない | ファイアウォールが捨てている可能性 |
学生が入力するセルは、このプレビューでは空白です。
一つのポートを試す
sudo ip netns exec gw nc -z -w 1 10.0.0.2 8081 && echo open || echo closedここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
四つのポートを順に試す
for p in 22 80 443 8081; do sudo ip netns exec gw nc -z -w 1 10.0.0.2 $p && echo "$p open" || echo "$p closed"; doneここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
結果が言うこと
最初の実行は open と出ます。nc -z は、データを送らずに接続だけを試す指定です。
二つ目は 22 closed、80 open、443 closed、8081 open の順に出ます。この機械の入口は80と8081の二つです。8081は「内側だけ」の想定のページで、これが予定外の入口の例です。
調べてよいのは、ラボの中の自分の機械だけです。他人のネットワークを、許可なく調べてはいけません。
よくある間違い
注意
「22番が開いていれば、必ずSSHが動いている」と思う人が多いです。ポート番号は習慣で、決まりではありません。別のサービスが22番を使うことも、SSHが別の番号で動くこともあります。番号は手がかりとして読みましょう。
開いている行を数える
printf '22/tcp open ssh\n80/tcp open http\n443/tcp closed https\n' | grep -c openここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
入口を減らす順番がある
見つけた入口には、三つの問いを順に立てます。これは本当に必要か。必要なら、誰に見せるのか。見せるなら、最新の状態か。
要らないなら、サービスを止めて、起動もしないようにします。必要でも相手が限られるなら、次の課で学ぶルールで絞ります。
発展: 自分の言葉で報告する
ラボの lan について、短い報告を書きましょう。開いているポートを並べ、それぞれが何のためかを推測します。
最後に、外に見せなくてよいと思う入口を一つ選び、その理由を書きます。