【実務・中級編】 ポート21番(FTP)およびポート20番:平文ファイル転送プロトコルにおける認証情報盗聴とマルウェアドロップのリスク – サイバーセキュリティとプライバシー保護実践ガイド

「まだFTPで運用してるの?」——現代のネットワークでポート21番を開けるという罪

こんにちは。インフラエンジニアとして幾多の現場を渡り歩いてきましたが、いまだに「レガシーな運用」という名の地雷原で踊らされているプロジェクトを救出に行く機会が絶えません。

特に最近、ヒヤリハット事例として報告を受けたのが、「FTP(TCP/20, 21)を使ったセキュアではないファイル転送」です。2024年の今、このプロトコルをインターネットに晒すことは、玄関の鍵を開けたまま、リビングの机の上に現金を置いて外出するのと同義です。

なぜこれほどまでにFTPが危険なのか。そして、私たちはどうやってこの「負の遺産」から脱却すべきなのか。ネットワークの深層から解説します。

—

なぜFTPは「悪」なのか?:パケットに刻まれる認証情報

FTP(File Transfer Protocol)の最大の問題は、通信が「平文(クリアテキスト)」であることです。

FTPは、コマンドチャンネル(TCP/21)とデータチャンネル(TCP/20)を分けて通信します。このとき、ログイン時の USER コマンドや PASS コマンドは、何の暗号化も施されずにパケットへ載せられます。

もし、ネットワーク経由で誰かが tcpdump や Wireshark を走らせていたらどうなるか。あなたのパスワードは、パケットヘッダーのすぐ後ろで、丸見えの状態で流れています。

# WiresharkでFTP通信をキャプチャした際のイメージ
# 悪意ある第三者は以下の文字列を即座に特定できる
USER admin
PASS p@ssword123

さらに恐ろしいのは、「セッションハイジャック」です。FTPの通信にはシーケンス番号の予測困難性や認証の継続性に関する堅牢な仕組みがないため、コネクションが確立された後にパケットを割り込ませる攻撃が容易に成立してしまいます。

—

現場で遭遇する「マルウェアドロップ」の恐怖

FTPは単なる「パスワード漏洩」に留まりません。多くの企業でFTPが放置される最大の理由は、「古いNASやバッチ処理がFTPしか喋れないから」というものですが、これがマルウェアの侵入口になります。

攻撃者は、認証情報を盗聴した後に、本来のファイルを改ざんしたり、あるいはバックドアとなるマルウェアを静かにドロップ(設置)します。Webサーバーの公開ディレクトリにFTPでアクセスできる場合、.php や .js ファイルに悪意あるスクリプトを埋め込まれれば、そこから大規模な情報漏洩に繋がるのは時間の問題です。

—

脱却への道:SFTPへの移行ガイド

FTPを使い続ける理由は、もうどこにもありません。現代のインフラでは、SSHのセキュアなトンネルを通る SFTP (SSH File Transfer Protocol) 一択です。

1. Pythonによるセキュアな転送例(paramiko利用)

Pythonでスクリプトを書く際は、標準ライブラリの ftplib ではなく、paramiko を使ってください。

import paramiko

# 接続設定
hostname = "sftp.example.com"
username = "your_user"
key_path = "/home/user/.ssh/id_rsa"

# SSHクライアントの初期化
transport = paramiko.Transport((hostname, 22))
key = paramiko.RSAKey.from_private_key_file(key_path)
transport.connect(username=username, pkey=key)

sftp = paramiko.SFTPClient.from_transport(transport)

# ファイルのアップロード
sftp.put("local_data.csv", "/remote/path/data.csv")
print("セキュアな転送が完了しました")

sftp.close()
transport.close()

2. CLIでの日常運用(curlの活用)

もし curl を使う場合も、FTPのプロトコル指定を止め、SFTPプロトコルを明示しましょう。

# 間違ったFTPの使用例(絶対に避ける!)
# curl -u user:pass ftp://example.com/file.txt

# 正しいSFTPの使用例
# 公開鍵認証を利用するのが鉄則
curl -u user: --key ~/.ssh/id_rsa sftp://example.com/remote/path/file.txt

—

インフラエンジニアへの提言:ポートを閉ざす勇気

もし、あなたがインフラの責任者なら、まず iptables や firewalld の設定を確認してください。

# サーバーの21番ポートを即座に遮断する例
sudo firewall-cmd --permanent --remove-port=21/tcp
sudo firewall-cmd --reload

「業務が止まる」と悲鳴を上げる現場もあるでしょう。しかし、「平文でパスワードを流し、マルウェアの温床を作る」リスクを放置することの方が、経営に対する責任放棄です。

どうしてもレガシーシステムがFTPを要求する場合は、「VPN経由でのみアクセスを許可する」あるいは「IPホワイトリストで特定の管理端末からしか通信できないようにする」といった境界防御を死守してください。しかし、それはあくまで「延命措置」に過ぎません。

—

結びに:境界防御の基本を再定義する

ゼロトラストの時代において、「通信経路が暗号化されていない」というのは、致命的な脆弱性です。

  • ポート21番は「穴」です。 今すぐふさぎましょう。
  • 通信はすべて暗号化。 プロトコルを見直してください。
  • 認証は鍵ベースで。 パスワード認証は過去の遺物です。

技術は進歩していますが、攻撃者の手法もまた進化しています。私たちが守るべきはサーバーのスペックではなく、その中にある「データ」と「信頼」です。今日、このブログを読んだその瞬間から、あなたのネットワークの「無防備な入り口」を閉ざす一歩を踏み出してください。

現場からは以上です。次のトラブルシューティングでお会いしましょう。

コメント

タイトルとURLをコピーしました