Telnetはなぜ「危険」と言われるのか?
かつては標準的なリモートアクセス手段として使われていたTelnetですが、現在では多くのITエンジニアがこのプロトコルの使用を控えるようになっています。
その理由は、Telnetには暗号化機能が備わっておらず、パスワードや通信内容が平文で送信されるため、情報漏洩のリスクが高いからです。
本記事ではTelnetの具体的な危険性を検証し、安全な代替手段であるSSHとの違いを徹底比較します。
Telnetのセキュリティリスク
Telnetは、古くからネットワーク機器やサーバーへのリモートアクセス手段として広く利用されてきましたが、サイバーセキュリティの観点から見ると重大な課題を抱えています。その最も大きな理由は、通信が暗号化されていないという点にあります。
Telnetの危険性を検証
ここでは、Metasploitable2を用いて、Telnet通信のデータを傍受できるかどうかを検証します。
Metasploitable2:脆弱性の検証目的に開発されたUbuntuベースのやられアプリです。
検証環境
Telnetクライアント | Ubuntu 24.04.1 LTS | 192.168.21.102 |
---|---|---|
Telnetサーバー | Metasploitable2(Ubuntu) | 192.168.21.241 |
傍受サーバー | Kali Linux 2025.1 | 192.168.21.11 |
※パケットキャプチャには、Kali Linuxにデフォルトインストールされている〝tcpdump 4.99.5〟を使用します。
この記事では、物理PC上のVirtualBoxに仮想ネットワークを構築し、検証を実施しています。
検証実施
パケットキャプチャ開始
まず傍受サーバーにて、パケットキャプチャを開始します。
傍受サーバー
$ sudo tcpdump -i eth1 -tttt -v -q -A dst host 192.168.21.241 and dst port 23
Telnet接続
次に、TelnetクライアントからTelnet接続を行います。
Telnetクライアント
$ telnet 192.168.21.241
metasploitable login: admin
Password: pass123456
検証結果
傍受サーバーでTelnet通信を取得でき、ログインIDとパスワードを確認することができます。
傍受サーバー
〜 省略 〜
2025-03-12 07:25:23.639638 IP (tos 0x0, ttl 64, id 58070, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..D...f.........:....E.....|......
.[.a....a
2025-03-12 07:25:23.639881 IP (tos 0x0, ttl 64, id 58071, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..D...f.........:....E......P.....
.[.a...Q
2025-03-12 07:25:24.325621 IP (tos 0x0, ttl 64, id 58072, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..B...f.........:....E.....q......
.[.....Qd
2025-03-12 07:25:24.325926 IP (tos 0x0, ttl 64, id 58073, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..B...f.........:....E......\.....
.[......
2025-03-12 07:25:25.124519 IP (tos 0x0, ttl 64, id 58074, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..@...f.........:....E.....e4.....
.[......m
2025-03-12 07:25:25.125068 IP (tos 0x0, ttl 64, id 58075, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..@...f.........:....E............
.[......
2025-03-12 07:25:25.455083 IP (tos 0x0, ttl 64, id 58076, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..>...f.........:....E.....g......
.[.x....i
2025-03-12 07:25:25.455475 IP (tos 0x0, ttl 64, id 58077, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..>...f.........:....E......}.....
.[.y....
2025-03-12 07:25:25.788245 IP (tos 0x0, ttl 64, id 58078, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..<...f.........:....E.....a(.....
.[......n
2025-03-12 07:25:25.788613 IP (tos 0x0, ttl 64, id 58079, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..<...f.........:....E............
.[.....(
2025-03-12 07:25:26.699804 IP (tos 0x0, ttl 64, id 58080, offset 0, flags [DF], proto TCP (6), length 54)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 2
E..6..@.@..9...f.........:....E......s.....
.[.U...(.
2025-03-12 07:25:26.700038 IP (tos 0x0, ttl 64, id 58081, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..:...f.........:....E............
.[.U....
2025-03-12 07:25:26.700567 IP (tos 0x0, ttl 64, id 58082, offset 0, flags [DF], proto TCP (6), length 52)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 0
E..4..@.@..9...f.........:....E............
.[.V....
2025-03-12 07:25:27.808249 IP (tos 0x0, ttl 64, id 58083, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..7...f.........:....E.....V......
.[......p
2025-03-12 07:25:28.180308 IP (tos 0x0, ttl 64, id 58084, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..6...f.........:....E.....c......
.[......a
2025-03-12 07:25:28.592015 IP (tos 0x0, ttl 64, id 58085, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..5...f.........:....E.....P......
.[......s
2025-03-12 07:25:28.813086 IP (tos 0x0, ttl 64, id 58086, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..4...f.........:. ..E.....O
.....
.[.....@s
2025-03-12 07:25:29.652838 IP (tos 0x0, ttl 64, id 58087, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..3...f.........:.!..E............
.[.....V1
2025-03-12 07:25:29.955366 IP (tos 0x0, ttl 64, id 58088, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..2...f.........:."..E......'.....
.[......2
2025-03-12 07:25:30.292441 IP (tos 0x0, ttl 64, id 58089, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..1...f.........:.#..E............
.[.^....3
2025-03-12 07:25:30.741642 IP (tos 0x0, ttl 64, id 58090, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@..0...f.........:.$..E............
.[......4
2025-03-12 07:25:31.088307 IP (tos 0x0, ttl 64, id 58091, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@../...f.........:.%..E......K.....
.[.y....5
2025-03-12 07:25:31.375799 IP (tos 0x0, ttl 64, id 58092, offset 0, flags [DF], proto TCP (6), length 53)
192.168.21.102.54234 > 192.168.21.241.telnet: tcp 1
E..5..@.@......f.........:.&..E............
.[.....:6
〜 省略 〜
6、14、22、30、38行目の最終文字をつなげると「ログインID」になります。
- 6行目の最終文字:a
- 14行目の最終文字:d
- 22行目の最終文字:m
- 30行目の最終文字:i
- 38行目の最終文字:n
58、62、66、71、75、79、83、87、91、95行目の最終文字をつなげると「パスワード」になります。
- 58行目の最終文字:p
- 62行目の最終文字:a
- 66行目の最終文字:s
- 71行目の最終文字:s
- 75行目の最終文字:1
- 79行目の最終文字:2
- 83行目の最終文字:3
- 87行目の最終文字:4
- 91行目の最終文字:5
- 95行目の最終文字:6
tcpdumpの出力結果だと分かりにくいので、-wオプション
を指定してファイル出力したpcapファイルをWireSharkに読み込み、TCPストリーム表示すると、

と表示され、ログインIDとパスワードが一目瞭然です。
Telnetの代替手段(SSH)
Telnetの最大の欠点は、通信内容が暗号化されず、平文のまま送受信されることにあります。これに対しSSH(Secure Shell)は、安全性を重視した設計となっており、通信を開始する段階から終始暗号化された状態を保ちます。そのため、万が一通信を傍受されても、内容を復号することは極めて困難です。またSSHでは公開鍵認証方式を利用することも可能であり、パスワード認証に比べて強固なセキュリティを実現しています。
SSHは本当に暗号化されているのか?
SSH通信は本当に暗号化されているのか確認するため、企業システムでも広く採用されているAlmaLinuxを用いて検証してみました。
検証環境
Telnetクライアント | Ubuntu 24.04.1 LTS | 192.168.21.102 |
---|---|---|
Telnetサーバー | AlmaLinux 9.5 | 192.168.21.103 |
傍受サーバー | Kali Linux 2025.1 | 192.168.21.11 |
検証実施(Telnet)
パケットキャプチャ開始
tcpdumpでパケットキャプチャ(結果をpacpファイルに出力)します。
傍受サーバー
$ sudo tcpdump -i eth1 -tttt -v -q -A dst host 192.168.21.103 and \(dst port 22 or dst port 23\) -w telnet.pcap
Telnet接続
Telnetクライアント(Ubuntu)からTelnetサーバー(AlmaLinux)にTelnet接続します。
$ telnet 192.168.21.103
Alma login: admin
Password: pass123456
検証実施(SSH)
パケットキャプチャ開始
tcpdumpでパケットキャプチャ(結果をpacpファイルに出力)します。
傍受サーバー
$ sudo tcpdump -i eth1 -tttt -v -q -A dst host 192.168.21.103 and \(dst port 22 or dst port 23\) -w ssh.pcap
SSH接続
SSHクライアント(Ubuntu)からSSHサーバー(AlmaLinux)にSSH接続します。
$ ssh -l admin 192.168.21.103
admin@192.168.21.103's password: pass123456
検証結果
パケットキャプチャの結果(pacpファイル)をWireSharkに読み込み、TCPストリーム表示を行った結果は、以下のとおりです。
傍受サーバー(Telnet接続のパケット)

傍受サーバー(SSH接続のパケット)
