おれさまラボ

実際に手を動かして理解を深めるブログ。

ScreenOS脆弱性(CVE-2015-7755)による認証回避を試してみた

実際にやってみると脆弱性の恐ろしさがよくわかる。

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へリモート接続するというものです。

f:id:naoto408:20160124220202j:plain

 

実験

まずは、Teratermから普通にログイン。デフォルトのユーザ名、パスワードを入力します。

f:id:naoto408:20160125003015p:plain

もちろん、ログイン可能です。

f:id:naoto408:20160125003231p:plain

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」にしてみました。

f:id:naoto408:20160125003455p:plain

もちろん、認証失敗するためログインできません。

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

それでは、いよいよ脆弱性をついた認証です。パスフレーズにある文字列を入力します。

f:id:naoto408:20160125003400p:plain

なんと本当にログインできてしまいました!簡単すぎて悪寒が走りました。

f:id:naoto408:20160125003829p:plain

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」というユーザは登録されていません。

f:id:naoto408:20160125004243p:plain

ユーザはなんでもいいので、「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.

# CLIsshからの変更(saveのログ)

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 netscreen

# CLItelnetからの変更(saveのログ)

Date       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.

 また、不正にログインしたユーザはログイン中のユーザとして表示されません。

f:id:naoto408:20160125011702p:plain

まとめ

特定の文字列さえ知っていれば、簡単にログインできてしまう今回の脆弱性は非常に恐ろしいものだと思います。何より一番恐ろしい点は「誰でも簡単に実行できてしまうこと」です。

回避策としては、下記が挙げられています。

  • 対策バージョン(ScreenOS 6.2.0r19, 6.3.0r21)へのダウングレード、またはアップグレードを実施する
  • 必要ないポートでのリモートアクセスはすべてdisableにする

unset interface <ログインを許可しないポート> manage ssh

  • 管理ポートへのアクセスを必要最低限のIPに制限する

set admin manager-ip <アクセスをするIPアドレス>

 バージョンアップは、通信断等伴うことがあり、なかなか敷居が高いですが、できる限り早急に対象バージョンへ移行することが望ましいですね。

 

参考

Juniper Networks - 2015-12 Out of Cycle Security Bulletin: ScreenOS: Multiple Security issues with ScreenOS (CVE-2015-7755, CVE-2015-7756) - Knowledge Base

ScreenOSにおける認証回避の脆弱性にご注意を! | ラック公式ブログ | 株式会社ラック

※実際に認証可能な文字列の記載のあるサイトは敢えて参考URLとしては載せていません。