[CODE BLUE 2019]NSAのように企業イントラネットへ侵入:主要SSL VPNでの事前認証RCE[レポート] #codeblue_jp
こんにちは、臼田です。
『世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議』でありますCODE BLUE 2019に参加していますのでレポートします。
このブログは下記セッションについてのレポートです。
NSAのように企業イントラネットへ侵入:主要SSL VPNでの事前認証RCE Presented by オレンジ・ツァイ メ・チャン
SSL VPNは企業の資産をインターネットでさらされている状態から保護するが、SSL VPNそのものに脆弱性があった場合はどうだろうか?SSL VPNはインターネットにさらされ、確実にイントラネットを守るものだと信頼されている。しかし、私たちはフォーチュン500に掲載されている企業のほぼ半数および政府機関が使用している複数の 主要 SSL VPNに認証無しで遠隔コードが実行できることを見つけ出した。さらに悪いことに、認証情報なしでユーザーのパスワードを変更できる「魔法の」バックドアも見つけてしまったのだ!悪事がどのように進むかを示すため、唯一さらされたHTTPSポートからroot shellを入手し、オーナーに対してサーバーをひそかに兵器化し、隠された仕様を悪用してすべてのVPNクライアントを乗っ取るデモンストレーションを行う。
複雑なクローズドソースのシステムにおいては、外部からroot shellを入手することは簡単なことではないのは確かだ。root shellへたどり着くまでには、Webアーキテクチャ、ハードコアなApache jemallocのものを含む、様々な脆弱性を悪用することをはじめとした、高度なwebとバイナリの攻撃技術が必要である。当日はすべてのダーティなテクニック、バグの連鎖、そして、ビルトイン・バックドアの各詳細を取り上げる。そして、root shellを手に入れた後のさらなる攻撃とクライアントをハックした方法を詳述する。さらに同様のターゲットのリサーチを促進するためSSL VPNに対する攻撃手法も共有する。その一方で、自分たちの以前の経験から導き出した、上記のすべての攻撃およひ可能性のあるその他のゼロデイ攻撃を軽減する一般的なハーデニング手法を紹介する。
要約すると、巨大テック企業や多くの業界リーダーを含む、何百万ものターゲットを危険にさらす能力のある実践的な攻撃を公開する。セキュリティリサーチャーが既存の枠組みにとらわれない考え方をするのを促すのを願い、これらの技術と方法論を公開している。つまり、企業が即時に軽減策を適用でき、SSL VPNは単にバーチャルプライベートネットワーク(Virtual Private Network)だけではなく、自社ネットワークの弱点(Vulnerable Point of your Network)でもあることを自覚できるようにする。
レポート
- Fortinet / Pulse SecureのSSL VPNについて話す
- イントロダクション
- SSL VPNはより広く使われている
- ブラウザがあればいいので利便性がある
- SSL VPNが安全でなければどうなるのか
- 仮想のパブリックネットワークになる
- かなりの企業が使っているが少数のベンダーが市場を持っている
- SSL VPNはインターネットに出ている必要がある
- NSAもログインが公開されている
- ハッカーも
- silent-fix case
- Palo Altoの脆弱性(1day)
- Uberが利用していたので連絡した
- まだCVEになっていない
- どうやってターゲットを選ぶか
- 並べるとPalseとFortiが一番強力だった
- Ciscoが一番CVEを持っていた
- 高いレベルの製品に挑戦したかった
- アタックベクター
- WebVPN
- 様々なプロトコルのプロキシになる
- WebSocketやJavaScriptなども利用できる
- Debug function等を見つけた
- Open Source Projectから修正した
- Libcurlなどは10年ものだった
- WebVPN
- ケーススタディ/ デモ
- Fortigate SSL VPN
- /bin/initにまとめられている
- 500MB / 85k functions
- webはapacheからmodifyされていたが2002年のものがベース
- インターネットにはログイン画面だけ
- この画面から認証なしにエクスプロイトする
- 2つのバグを利用してRCE
- snprintfでjsonファイルを読むコード
- バッファサイズを超えることができる
- 0x40入力すると.jsonがstripされる
- /dev/cmdb/sslvpn_websessionに重要情報がある
- planetextまで保存されている
- 簡単にログインできる
- すべてのWebサイトのプロキシをしてくれる
- Heap overflowがある
- Fortiだと不安定になる
- epoll()がある
- すべてのアプリが同じHeap
- 定期的にheapアロケーションされる
- プロセス終了までfreeされない
- JeMalloc allocation limitation
- 当時は行き詰まった
- Fuzzingで突破
- SSL structure (Open SSL)
- Useflue structure members
- ファンクションアドレスがあればいい
- スプレーすることにより簡単に攻撃できるように
- 3つのSSLセッションを貼る
- JS Bufferをアロケートしてオーバーフロー
- 偽のSSL structureを作成
- fuzzyなコネクションを送る必要がある
- 1-2分程度でシェルを獲得
- magic backdoor
- 古くなったパスワードをアップデートするもの
- magicを利用するとパスワードをリセットできる
- 詳細は動画で
- https://youtu.be/Aw55HqZW4x0
- Fortigate SSL VPN
- Pulse Secure SSL VPN
- スクラッチで作られている
- LDAP, RADIUS, SAMLなどを見れる
- Planetextが見れる
- Perlの関数に入れることができる
- 様々なところで強化された
- DSSafe.pmモジュールの導入もされた
- system, openなど危険な関数をフックする
- バイパスの方法を考えた
- テンプレートキャッシュがある場合があった
- 深堀りした
- コマンドパーサでみつけた
- しかし駄目だった
- 別のアプローチ
- 存在しないファイルを開こうとするとエラーになる
- STDERRをperlにパイプした
- perlがプリントアウトした
- tcpdumpが開くように
- 存在しないファイル名を指定
- STDERRを経由してコマンドを実行させた
- Hacking Twitter
- 30日たったが改善されなかったので確認
- 2FAがあったのでこれをバイパスすることを考えた
- 2FAのファイルを取得してアクセスできた
- さらにAdminになるためにSSRFした
- マネージャのパスワードをキャッシュから見つけることができなかった
- 唯一あったのはハッシュだけ
- 72Coreのインスタンスを使ってクラック
- ログインできた
- 桁数が少なく最初が"B"なのではやくヒットできた、ラッキー
- Twitter最高額の賞金が出た
- SSL VPNへの攻撃
- 新しい手法はログインベージへの攻撃
- デモ
- Cookieを取得してAdminに
- 更に設定を書き換えてクライアントが接続すると電卓が上がる
- レコメンデーション
- クライアント証明書を使う
- MFAを利用する
- フルログ取得
感想
非常にわかりやすくSSL VPNに対する攻撃が解説されました。
簡単にセキュリティを確保できることからよく使われますが、ここを突破するとなんでもアクセスできるのも怖いですね。SSL VPNの利用自体も強化しつつ、複数フェーズでセキュリティ対策をしたいですね。