安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP
Telnet、FTP、HTTPなどの平文プロトコルによって認証情報が露出する理由と、暗号化された代替プロトコル(SSH、SFTP、HTTPS)がこれらの問題を解決する仕組みを理解します。
「安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP」はCoddyKit上の無料Security+ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSecurity+ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Security+ Academyコースには全4レッスンが含まれています。
平文プロトコルの問題
インターネットの基盤となる多くのプロトコルは、セキュリティが主要な関心事ではなかった1970年代と1980年代に設計されました。平文プロトコルは、ユーザー名、パスワード、機密情報など、すべてのデータをネットワーク上で平文のまま送信します。同じネットワークセグメント上にあるデバイスや、パケットが通過するシステムは、Wiresharkなどの無料で利用できるツールを使って、このトラフィックを傍受して読み取れます。ネットワークスイッチが使われている環境では、通常はポート間のトラフィックが分離されますが、ARPスプーフィングによってトラフィックを攻撃者のシステムへリダイレクトできるため、「内部」ネットワークであっても平文プロトコルは危険です。
# What an attacker sees on the wire with Telnet
# (captured via Wireshark or tcpdump)
tcpdump -i eth0 -A port 23
# Sample Telnet capture output:
..login: admin..
..password: S3cr3tPa$$...
..$ ls -la /etc/passwd..
# Every keystroke is visible in plaintext
# Credentials, commands, and file contents - all exposedTelnetとSSHの比較
Telnet(TCPポート23)はシステムへのリモートコマンドラインアクセスを提供しますが、すべてを平文で送信します。ユーザー名とパスワードも暗号化されずに送信され、組み込みの認証機能はこれら以外にありません。SSH (Secure Shell)(TCPポート22)は、Telnetを暗号化および認証済みの通信チャネルに置き換えます。SSHは非対称鍵交換を使ってセッションキーを確立し、その後の通信を対称暗号化で暗号化します。また、SSHはサーバーを認証してサーバーのなりすましを防ぎ、パスワード認証に加えて公開鍵認証(パスワードなしで利用でき、パスワードより安全)にも対応しています。
# SSH connection (encrypted, server authenticated)
ssh admin@192.168.1.10
# SSH key-based authentication (no password)
ssh -i ~/.ssh/id_rsa admin@192.168.1.10
# Generate SSH key pair
ssh-keygen -t ed25519 -C 'admin@company.com'
# Copy public key to server
ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.10
# Disable Telnet on network devices (Cisco IOS)
no service telnet
line vty 0 4
transport input ssh
login localSSHの鍵交換と認証
SSHのセキュリティは、堅牢な鍵交換プロセスに基づいています。接続時にクライアントは、サーバーのホストキーをローカルに保存されたコピーと照合します。これにより、サーバーのなりすましを防止できます。ホストキーが予期せず変更されると、SSHはユーザーに警告します。これは、man-in-the-middle攻撃の一般的な兆候です。サーバーの検証後、クライアント認証にはパスワード(通信中は暗号化されますが、ブルートフォース攻撃を受けやすい)、公開鍵(クライアントが秘密鍵を所有していることを証明する方式で、はるかに強力)、またはkeyboard-interactive(MFAに対応)を使用できます。組織は、インターネットに公開するSSHサービスで鍵ベース認証を必須にし、パスワード認証を無効にする必要があります。
# Harden SSH server configuration
# /etc/ssh/sshd_config
Port 22
PermitRootLogin no
PasswordAuthentication no # Require key auth only
ChallengeResponseAuthentication no
MaxAuthTries 3
AllowUsers admin deploy
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
ClientAliveInterval 300 # Disconnect idle sessions
ClientAliveCountMax 0
# Restart SSH after changes
systemctl restart sshdFTPとSFTPおよびFTPSの比較
FTP (File Transfer Protocol)(TCPポート20/21)は、認証情報、コマンド、ファイルデータをすべて平文で転送するため、内容が露出します。FTPは別個のデータチャネル(パッシブモードまたはアクティブモード)も使用するため、ファイアウォールルールが複雑になります。SFTP (SSH File Transfer Protocol)は、ポート22上のSSHを介してファイル転送をトンネリングします。名前が似ているだけで、FTPとはまったく異なるプロトコルです。FTPS (FTP Secure)は、元のFTPプロトコルにTLS暗号化を追加します。SFTPは単一のポートを使用し、SSHの認証と暗号化を利用できるため、一般的にはSFTPが推奨されます。すべての本番システムでFTPを無効にする必要があります。
# SFTP usage (over SSH, single connection)
sftp admin@fileserver.company.com
sftp> put localfile.zip /uploads/
sftp> get /reports/monthly.pdf .
sftp> ls /uploads/
sftp> exit
# Automated SFTP transfer with key auth
sftp -i ~/.ssh/id_rsa admin@fileserver.company.com <<EOF
put /tmp/report.csv /incoming/
EOF
# Disable FTP on Linux (remove vsftpd)
apt purge vsftpd
# Verify no FTP listener:
ss -tlnp | grep ':21'HTTPとHTTPSの比較
HTTP(TCPポート80)は、フォームデータ、セッションCookie、認証トークンなどのWebコンテンツを平文で送信します。HTTPS(TCPポート443)はHTTPをTLSで包み、暗号化、サーバー認証、データの完全性を提供します。組織は、HTTPトラフィックをすべてHTTPSへリダイレクト(301リダイレクト)し、ブラウザーがHTTPで接続するのを防ぐHSTSを実装し、HTTPやJavaScript経由でセッショントークンを盗まれるのを防ぐsecureおよびHttpOnly Cookieフラグを設定して、どこでもHTTPSを適用する必要があります。現在のブラウザーはHTTPサイトを「安全ではありません」と表示するため、HTTPSはすべてのWebサービスに求められる基本要件です。
# nginx: force HTTPS redirect
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/ssl/example.crt;
ssl_certificate_key /etc/ssl/example.key;
add_header Strict-Transport-Security
'max-age=31536000; includeSubDomains; preload';
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
}SNMP v1/v2とSNMPv3の比較
SNMP (Simple Network Management Protocol)は、ネットワークデバイスとサーバーを管理します。SNMPv1およびv2cは、コミュニティ文字列(実質的には共有パスワード)を平文で送信します。「public」(読み取り)や「private」(書き込み)などのコミュニティ文字列は既定値であり、攻撃者にも知られています。SNMPトラフィックを傍受した攻撃者はコミュニティ文字列を入手し、デバイス構成を読み取ったり、デバイス設定を変更したりできます。SNMPv3は、ユーザーごとの認証情報を使った認証(HMAC-MD5またはHMAC-SHA)と暗号化(AES)を追加しており、本番環境で使用できる唯一のバージョンです。SNMPv1/v2cは無効にする必要があります。
# SNMPv3 configuration (Cisco IOS)
snmp-server group MYGROUP v3 priv
snmp-server user MONITORUSER MYGROUP v3 \
auth sha MyAuthP@ss priv aes 128 MyPrivP@ss
# SNMPv3 query from monitoring server
snmpwalk -v3 -l authPriv \
-u MONITORUSER \
-a SHA -A MyAuthP@ss \
-x AES -X MyPrivP@ss \
192.168.1.1 sysDescr
# Disable SNMPv1/v2c:
no snmp-server community public ro
no snmp-server community private rwLDAPとLDAPSの比較
LDAP (Lightweight Directory Access Protocol)(TCPポート389)は、既定ではディレクトリサービス(Active Directory、OpenLDAP)への認証とクエリを平文で行うため、認証情報とディレクトリデータが露出します。LDAPS(LDAP over SSL/TLS、TCPポート636)は、証明書を使って接続を暗号化します。StartTLSは、同じポート389を使い、既存のLDAP接続をTLSにアップグレードする別の方式です。LDAPSとStartTLSはいずれも暗号化を提供しますが、一般的にはLDAPSのほうがシンプルで信頼性も高くなります。組織は、LDAPを利用するすべてのアプリケーションがLDAPSを使うように設定し、ファイアウォールでポート389の平文LDAPをブロックする必要があります。
POP3/IMAPと暗号化メール取得
従来のメールクライアントは、POP3(ポート110)やIMAP(ポート143)を使って平文でメールを取得します。暗号化された代替手段には、POP3S(ポート995、TLS)とIMAPS(ポート993、TLS)があります。最新のメールプラットフォーム(Exchange Online、Google Workspace)は、すべてのクライアント接続でTLSを適用し、パスワードの代わりにOAuth 2.0のトークンベース認証をサポートしています。組織はメールプロトコルの基本認証を無効にする必要があります。最新の認証(OAuth 2.0 + MFA)を必須にすることで、従来のメールプロトコルにおける平文認証の仕組みを悪用するクレデンシャルスタッフィング攻撃を防止できます。
# Protocol port reference card
Protocol Insecure Port Secure Port Replacement
--------- ------------ ---------- -----------
Telnet 23 22 SSH
FTP 20/21 22 SFTP
HTTP 80 443 HTTPS
SMTP 25 587/465 SMTPS
POP3 110 995 POP3S
IMAP 143 993 IMAPS
LDAP 389 636 LDAPS
SNMP 161/162 161/162 SNMPv3
RDP 3389 3389 RDP+NLA+TLS実務におけるプロトコルの置き換え
安全でないプロトコルを置き換えるには、安全なバージョンを有効にするだけでは不十分です。安全でないバージョンを積極的に無効化する必要があります。手順は、既存のプロトコルの使用状況を監査(Nmapスキャン、ファイアウォールログ)し、アプリケーションと構成を安全なプロトコルへ移行し、十分にテスト(業務アプリケーションが動作しなくなる可能性があります)してから、ファイアウォールとホストで安全でないプロトコルをブロックすることです。よくある落とし穴として、古いプリンターや組み込みデバイスがFTPまたはSNMPv2にしか対応していない場合や、古い産業システムがTelnetに依存している場合があります。このような場合は、単純なプロトコルのアップグレードではなく、ネットワーク分離またはベンダー製品への置き換えが必要です。
# Audit for insecure protocol usage
# Nmap: find all Telnet listeners on network
nmap -p 23 10.0.0.0/24 --open -sV
# Find FTP listeners
nmap -p 21 10.0.0.0/24 --open
# Find HTTP (not HTTPS) web services
nmap -p 80 --open 10.0.0.0/24
# Check for SNMPv1/v2c community strings
nmap -sU -p 161 --script snmp-info 10.0.0.0/24
# Block Telnet at firewall after migration
iptables -A FORWARD -p tcp --dport 23 -j DROP
iptables -A INPUT -p tcp --dport 23 -j DROPリモートデスクトッププロトコルのセキュリティ
RDP (Remote Desktop Protocol)(ポート3389)は、Windowsのリモート管理に広く使われており、主要な攻撃対象となっています。安全でないRDP構成には、ポート3389をインターネットに公開すること、パスワードのみの認証を使うこと、NLAを無効にすることが含まれます。RDPの強化では、完全なセッションが開始する前に認証を行うNetwork Level Authentication (NLA)を有効にして未認証の接続をブロックし、すべてのRDPセッションでTLS 1.2+を必須にし、RDPをインターネットに公開するのではなくVPNまたはRDPゲートウェイの背後に配置し、ブルートフォース攻撃を防ぐためにアカウントロックアウトを適用します。多くのランサムウェアキャンペーンは、公開されていて十分に保護されていないRDPを通じて初期アクセスを獲得しています。
安全でないプロトコルの段階的な廃止
本番環境で安全でないプロトコルから移行するには、業務の中断を避けるための慎重な計画が必要です。段階的なアプローチは次のとおりです。フェーズ1 — 検出:Nmapスキャンを実行し、ファイアウォールログを監査して、平文プロトコルの使用箇所をすべて特定します。フェーズ2 — 安全な代替手段の有効化:既存の安全でないサービスと並行して、SSH、SFTP、HTTPSを構成します。フェーズ3 — 利用側の移行:スクリプト、アプリケーション、監視ツール、ユーザーワークフローを更新し、安全なプロトコルを使うようにします。フェーズ4 — 無効化とブロック:各ホストで安全でないサービスを無効にし、ファイアウォールでポートをブロックします。各フェーズでテストを行うことで、本番環境の停止を防止できます。
# Phase 4: Disable and block Telnet permanently
# Disable Telnet service on Linux
systemctl stop telnet.socket
systemctl disable telnet.socket
# Block Telnet at iptables
iptables -A INPUT -p tcp --dport 23 -j DROP
iptables -A OUTPUT -p tcp --dport 23 -j DROP
# Save rules
iptables-save > /etc/iptables/rules.v4
# Block at network firewall (Cisco ASA)
access-list OUTSIDE_IN deny tcp any any eq 23
# Verify: should timeout / connection refused
nc -zv 192.168.1.10 23クイックチェック
このレッスンで学んだCompTIA Security+ (SY0-701)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、平文プロトコル(Telnet、FTP、HTTP、SNMPv1/v2c、LDAP)は認証情報やデータをネットワーク盗聴にさらすため、置き換える必要があること、安全な代替プロトコル(SSH、SFTP、HTTPS、SNMPv3、LDAPS)はTLSまたはSSHによる暗号化を使用して同じ機能を保護すること、またプロトコルを置き換える際は、レガシーな依存関係を監査した後、ファイアウォールとホストの両方で安全でないバージョンを無効にする必要があることを学びました。次は、TLSのバージョン、暗号スイート、完全前方秘匿性について学びます。
よくある質問
「安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP」レッスンは無料ですか?
はい。「安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Security+ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Security+ Academyコースには全4レッスンが含まれています。
「安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP」で何を学びますか?
Telnet、FTP、HTTPなどの平文プロトコルによって認証情報が露出する理由と、暗号化された代替プロトコル(SSH、SFTP、HTTPS)がこれらの問題を解決する仕組みを理解します。 ブラウザで直接実行するハンズオンコードでSecurity+ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Security+ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSecurity+ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSecurity+ Academyレッスンでコードを書いて実行できますか?
はい。すべてのSecurity+ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP
- TLSバージョン、暗号スイート、完全前方秘匿性
- セキュアDNS:DNSSECとDNS over HTTPS(DoH)
- IPsec、VPNプロトコル、リモートアクセスセキュリティ