実際にやってみると脆弱性の恐ろしさがよくわかる。
12月17日に発表されたJuniper社ScreenOSにおいて、特定の文字列を入力することで認証を回避できる脆弱性が発見、公表されました。この脆弱性には下記のような特徴があります。
- 悪用が非常に容易である
- 境界防御を担うファイアーウォールが対象である
- 認証回避が可能な文字列がすでに広く公開されてしまっている
このように、この脆弱性はCriticalなものであり緊急に対応が必要とされています。
※私の働いている会社では対策済みですし、お客様の環境でも対策済みです。
※脆弱性対象バージョンはScreenOS 6.3.0r17~6.3.0r20です。
「悪用が非常に容易である」ということもあり、ちょっと興味があったので手元のSSG5を使って実験をしてみました。実験環境を整えるまでに時間がかかったことは内緒です。
テスト環境
構成は単純でこんな感じです。ファームウェアは6.3.0r19.0を使用しています。
ほとんど初期設定のまま(SSHの許可だけ変更しました)、trust側のeth0/2にLAN線を接続、初期設定で割り当てられている192.168.1.1へリモート接続するというものです。
実験
まずは、Teratermから普通にログイン。デフォルトのユーザ名、パスワードを入力します。
もちろん、ログイン可能です。
eventログはこんな感じ。
Date Time Module Level Type Description
2016-01-27 06:55:00 system warn 00515 Admin user netscreen has logged on via
SSH from 192.168.1.10:53879
2016-01-27 06:55:00 system warn 00528 SSH: Password authentication
successful for admin user 'netscreen'
at host 192.168.1.10.
2016-01-27 06:55:00 system info 00519 ADM: Local admin authentication
successful for login name netscreen
次に、登録されていない架空のユーザ「aaaa」でログインしてみます。
※パスワードは「netscreen」にしてみました。
もちろん、認証失敗するためログインできません。
eventログにも失敗が残っています。
Date Time Module Level Type Description
2016-01-27 06:57:02 system warn 00528 SSH: Password authentication failed
for admin user 'aaaa' at host
192.168.1.10.
2016-01-27 06:57:02 system warn 00518 ADM: Local admin authentication failed
for login name aaaa: invalid login
name
それでは、いよいよ脆弱性をついた認証です。パスフレーズにある文字列を入力します。
なんと本当にログインできてしまいました!簡単すぎて悪寒が走りました。
eventログを見ると、systemとして確かに成功していることがわかります。
Date Time Module Level Type Description
2016-01-27 06:57:58 system warn 00515 Admin user system has logged on via
SSH from 192.168.1.10:53905
2016-01-27 06:57:58 system warn 00528 SSH: Password authentication
successful for admin user 'aaaa' at
host 192.168.1.10.
もちろん、「aaaa」というユーザは登録されていません。
ユーザはなんでもいいので、「bbbb」というユーザ名でももちろん成功します。
Date Time Module Level Type Description
2016-01-27 07:03:29 system warn 00515 Admin user system has logged on via
SSH from 192.168.1.10:53951
2016-01-27 07:03:29 system warn 00528 SSH: Password authentication
successful for admin user 'bbbb' at
host 192.168.1.10.
設定変更も可能です。ただ、イベントログ上では変更したユーザが存在しないので表示がERRORになっています。
2016-01-27 16:36:06 system info 00767 System configuration saved from ERROR
by system.
ちなみに、正しいユーザでの設定変更ログはこんな感じになります。
# WebUIからの変更(saveのログ)
Date Time Module Level Type Description
2016-01-27 15:54:21 system info 00767 System configuration saved by
netscreen via web from host
192.168.1.10 to 192.168.1.1:80 by
netscreen.Date Time Module Level Type Description
2016-01-27 17:03:46 system info 00767 System configuration saved by
netscreen via ssh-cmd:0 from host
192.168.1.10:55133 by netscreenDate Time Module Level Type Description
2016-01-27 15:33:51 system info 00767 System configuration saved by
netscreen via telnet-cmd:0 from host
192.168.1.10:53598 by netscreen.
また、不正にログインしたユーザはログイン中のユーザとして表示されません。
まとめ
特定の文字列さえ知っていれば、簡単にログインできてしまう今回の脆弱性は非常に恐ろしいものだと思います。何より一番恐ろしい点は「誰でも簡単に実行できてしまうこと」です。
回避策としては、下記が挙げられています。
- 対策バージョン(ScreenOS 6.2.0r19, 6.3.0r21)へのダウングレード、またはアップグレードを実施する
- 必要ないポートでのリモートアクセスはすべてdisableにする
unset interface <ログインを許可しないポート> manage ssh
- 管理ポートへのアクセスを必要最低限のIPに制限する
set admin manager-ip <アクセスをするIPアドレス>
バージョンアップは、通信断等伴うことがあり、なかなか敷居が高いですが、できる限り早急に対象バージョンへ移行することが望ましいですね。
参考
ScreenOSにおける認証回避の脆弱性にご注意を! | ラック公式ブログ | 株式会社ラック
※実際に認証可能な文字列の記載のあるサイトは敢えて参考URLとしては載せていません。