最終更新:2026-01-11
前回の記事では中間者攻撃(Man-in-the-Middle Attack: MitM)の概要を述べた。
本記事では、攻撃者が具体的にどのようにして通信の間に割り込むのかという技術的なメカニズムと、よくある誤解である「sftpならscpより安全なのか(MitMを防げるのか)」という点について解説する。
1. 中間者攻撃はどのように行われるか
攻撃者が通信に割り込むためには、物理的または論理的にネットワーク経路を曲げる必要がある。最も代表的で、ローカルネットワーク(LAN)内で発生しやすい手法が ARPスプーフィング である。
ARPスプーフィングの仕組み
LAN内の通信は、IPアドレスではなく MACアドレス(物理アドレス)を使って相手を特定している。どのIPがどのMACアドレスに対応するかを管理しているのが ARPテーブル である。
攻撃者はこの仕組みを悪用し、「嘘のARP応答」をばら撒くことで通信経路を奪う。
攻撃のステップ
-
正常な状態
- Client (Alice):
Server (Bob)と話したい。BobのIPは192.168.1.10だ。 - Switch: Bobは
MAC:BBだね。AliceのパケットをBobへ送ろう。
- Client (Alice):
-
毒入れ (ARP Poisoning)
- Attacker (Eve) は、Aliceに対してこう囁く。
「私が
192.168.1.10(Bob) です。MACアドレスはMAC:EE(Eve) です」 - 同時に、Bob(ルーター)に対してもこう囁く。
「私が
192.168.1.5(Alice) です。MACアドレスはMAC:EE(Eve) です」
- Attacker (Eve) は、Aliceに対してこう囁く。
-
経路の改竄
- AliceのPCはARPテーブルを更新し、「Bob = EveのPC」と誤認する。
- AliceがBobへ送ったつもりパケットは、全てEveのPCへ届くようになる。
-
中継と傍受
- Eveは受け取ったパケットを(必要なら復号・記録・改ざんして)本物のBobへ転送する。
- AliceとBobは「通信できている」ため、攻撃に気づかない。
これが物理的な切断を伴わずに通信を盗聴・乗っ取る代表的な手口である。
2. sftp は中間者攻撃を回避できるのか?
結論から言うと、プロトコルを scp から sftp に変えただけでは、中間者攻撃は回避できない。
なぜ回避できないのか
scp も sftp も、下位層(通信の土管)として SSHプロトコル を利用している。
中間者攻撃は、この「SSHのコネクション確立」の段階で発生する。
- scp の場合: 攻撃者が偽のサーバーとして振る舞い、偽の公開鍵を提示する。
- sftp の場合: 攻撃者が偽のサーバーとして振る舞い、偽の公開鍵を提示する。
どちらの場合も、クライアント(あなた)が「このホスト鍵(指紋)は正しいか?」という検証を怠り、StrictHostKeyChecking=no や警告を無視して yes を押してしまえば、攻撃は成立する。
つまり、中間者攻撃への耐性は「scpかsftpか」ではなく、「ホスト鍵の検証を正しく行っているか」に依存する。
3. では、なぜ「sftpが安全」と言われるのか?
「sftpが安全」という文脈は、中間者攻撃(通信経路の盗聴)に対してではなく、「悪意あるサーバーによるクライアントへの攻撃」 に対して使われる。
ここを混同しないことが重要である。
| 脅威の種類 | 攻撃の主体 | scp の場合 | sftp の場合 |
|---|---|---|---|
| 中間者攻撃 (MitM) | ネットワーク上の第三者 | × 脆弱 (ホスト鍵確認を怠れば死ぬ) | × 脆弱 (ホスト鍵確認を怠れば死ぬ) |
| パストラバーサル (勝手にファイルを上書き) | 接続先のサーバー | × 脆弱 (サーバーが返したパスを盲信する設計のため) | ○ 安全 (プロトコルが厳格で、クライアント主導のため) |
sftp が回避するもの
以前の記事で触れた「サーバーが ../../.bashrc を送りつけてくる」といった攻撃に対し、sftp はプロトコルレベルで以下の対策を持っている。
- 明確な命令セット: クライアントが「ファイルXを開け」「データを書け」と細かく指示するため、サーバーが勝手にファイル名を偽装する余地が少ない。
- パスの正規化: クライアント側でパスの解釈を厳格に行う実装になっている。
まとめ
セキュリティリスクと対策は、レイヤー(階層)を分けて考える必要がある。
-
中間者攻撃を防ぎたいなら
- ツールは
scpでもsftpでもどちらでも良い。 - 重要なのは SSHのホスト鍵検証(Fingerprint確認) を徹底することである。
- ツールは
-
悪意あるサーバー(または侵害されたサーバー)から身を守りたいなら
scpは使わず、sftpを使うべきである。- これが OpenSSH が
scpを非推奨とする本当の理由である。
「sftpを使えば魔法のように全てが安全になる」わけではない。適切な設定と運用(ホスト鍵の確認)があって初めて、その堅牢性が発揮されるのである。