Telnetはなぜ危険なのか?セキュリティリスクを実際に検証してみた!

Telnetはなぜ「危険」と言われるのか?

かつては標準的なリモートアクセス手段として使われていたTelnetですが、現在では多くのITエンジニアがこのプロトコルの使用を控えるようになっています。

その理由は、Telnetには暗号化機能が備わっておらず、パスワードや通信内容が平文で送信されるため、情報漏洩のリスクが高いからです。

本記事ではTelnetの具体的な危険性を検証し、安全な代替手段であるSSHとの違いを徹底比較します。

目次

Telnetのセキュリティリスク

Telnetは、古くからネットワーク機器やサーバーへのリモートアクセス手段として広く利用されてきましたが、サイバーセキュリティの観点から見ると重大な課題を抱えています。その最も大きな理由は、通信が暗号化されていないという点にあります。

Telnetでは、ログインIDやパスワードを含むすべてのデータが平文で送受信されるため、通信経路上に盗聴や傍受を目的とした攻撃者が存在した場合、認証情報を簡単に盗まれてしまいます。

Telnetの危険性を検証

ここでは、Metasploitable2を用いて、Telnet通信のデータを傍受できるかどうかを検証します。

Metasploitable2:脆弱性の検証目的に開発されたUbuntuベースのやられアプリです。

検証環境

TelnetクライアントUbuntu 24.04.1 LTS192.168.21.102
TelnetサーバーMetasploitable2(Ubuntu)192.168.21.241
傍受サーバーKali Linux 2025.1192.168.21.11

※パケットキャプチャには、Kali Linuxにデフォルトインストールされている〝tcpdump 4.99.5〟を使用します。

この記事では、物理PC上のVirtualBoxに仮想ネットワークを構築し、検証を実施しています。

他者のネットワークにおけるパケットキャプチャは法的リスクを伴うため、決して実施しないようお願いいたします。

検証実施

STEP

パケットキャプチャ開始

まず傍受サーバーにて、パケットキャプチャを開始します。

傍受サーバー

$ sudo tcpdump -i eth1 -tttt -v -q -A  dst host 192.168.21.241 and dst port 23
STEP

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ストリーム表示すると、

Telnetのパケットキャプチャ結果をWireSharkのTCPストリームした画像

と表示され、ログインIDとパスワードが一目瞭然です。

Telnetの代替手段(SSH)

Telnetの最大の欠点は、通信内容が暗号化されず、平文のまま送受信されることにあります。これに対しSSH(Secure Shell)は、安全性を重視した設計となっており、通信を開始する段階から終始暗号化された状態を保ちます。そのため、万が一通信を傍受されても、内容を復号することは極めて困難です。またSSHでは公開鍵認証方式を利用することも可能であり、パスワード認証に比べて強固なセキュリティを実現しています。

TelnetとSSHの違いは単なる暗号化の有無にとどまらず、認証方式、データの完全性保証、セッションの保護といった多方面にわたります。Telnetはセキュリティの考慮がなされていない時代の遺物であり、現代のサイバー攻撃に対しては極めて脆弱です。SSHは、これらの脆弱性を克服し、安全な通信を実現するための標準的な選択肢となっています。

SSHは本当に暗号化されているのか?

SSH通信は本当に暗号化されているのか確認するため、企業システムでも広く採用されているAlmaLinuxを用いて検証してみました。

検証環境

TelnetクライアントUbuntu 24.04.1 LTS192.168.21.102
TelnetサーバーAlmaLinux 9.5192.168.21.103
傍受サーバーKali Linux 2025.1192.168.21.11

検証実施(Telnet)

STEP

パケットキャプチャ開始

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
STEP

Telnet接続

Telnetクライアント(Ubuntu)からTelnetサーバー(AlmaLinux)にTelnet接続します。

$ telnet 192.168.21.103
Alma login: admin
Password: pass123456

検証実施(SSH)

STEP

パケットキャプチャ開始

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
STEP

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接続のパケット)

AlmaLinuxのTelnet通信のパケットキャプチャの結果(pacpファイル)をWireSharkに読み込み、TCPストリーム表示を行った画像

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

AlmaLinuxのSSH通信のパケットキャプチャの結果(pacpファイル)をWireSharkに読み込み、TCPストリーム表示を行った画像

SSH接続のパケットは暗号化されており、ログインIDとパスワードを判別できないことが確認できます。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次