クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

アタックサーフェスとポートスキャン

このレッスンのあとで: ネットワークが外に見せている入口を、スキャンの結果から一覧にできる。

55分のレッスンコマンド4件NAT ゲートウェイのラボ:nftables でマスカレードとポート転送をブラウザーで学ぶ

外から触れる入口は全部で何か

攻撃対象領域(アタックサーフェス)とは、外の誰かが触れられるネットワークの入口を、すべて合わせたものです。入口が一つ増えるごとに、守る場所も一つ増えます。

小さな会社のウェブサーバーが、ウェブの入口だけでなく、データベースの入口も世界に開いていたとします。気づかなければ、守りようがありません。今日は、入口を数える方法を学びます。

このレッスンのゴール

メモ

ネットワークが外に見せている入口を、スキャンの結果から一覧にできる。

重要な言葉

ことばいみれい
攻撃対象領域外から触れられる入口の全部
ポートサービスごとの入口の番号443
待ち受けサービスが接続を受け付けて待つこと
ポートスキャン入口を順に試して、状態を調べること
開いている接続が成り立つポートの状態
フィルタされている返事が無いポートの状態

学生が入力するセルは、このプレビューでは空白です。

ポートはサービスの入口の番号

一台の機械には、アドレスが一つあっても、サービスは何本も動きます。どのサービスへの通信かを分けるのが、ポートの番号です。

サービスが接続を受け付けて待つことを、待ち受けといいます。待ち受けているポートの数が、そのまま入口の数です。

例: よく見かけるポート

番号ふつう動いているもの外に見せてよいか
22遠隔ログイン(SSH)管理する人にだけ
80ウェブ(暗号なし)公開サーバーなら可
443ウェブ(暗号あり)公開サーバーなら可
3306データベース(MySQL)内側だけ
3389Windowsの遠隔操作外には出さない
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 について、短い報告を書きましょう。開いているポートを並べ、それぞれが何のためかを推測します。

最後に、外に見せなくてよいと思う入口を一つ選び、その理由を書きます。

このラボとソースについて: NAT ゲートウェイのラボ:nftables でマスカレードとポート転送をブラウザーで学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。