[CODE BLUE 2017]国産IT資産管理ソフトウェアの(イン)セキュリティ 西村 宗晃 – Muneaki Nishimura -[レポート] #codeblue_jp #codeblue_jp_t1

こんにちは、臼田です。

『世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議』でありますCODE BLUE 2017に参加していますのでレポートします。

このブログは下記セッションについてのレポートです。

国産IT資産管理ソフトウェアの(イン)セキュリティ - 西村 宗晃 - Muneaki Nishimura -

レポート

  • 特定の製品を批判するわけではなく、危機感を共有したい
  • リクルートグループでRED TEAMを発足
    • 国内で初めてのRED TEAM
    • 非常に多くの脆弱性を発見している
    • サードパーティの脆弱性が見つかることも

脆弱性を探し始めたきっかけ

  • 3月のあの事件
  • 国産IT資産管理ソフトウェアの脆弱性が実際のサイバー攻撃に悪用されているとしてTVや全国紙でパッチ適用が呼びかけられた
  • 悪用された脆弱性
    • エージェントの待受ポートで偽の管理機からの命令を実行
    • 通常は内部IPしか利用しないが、USBモデム製品等によってグローバルIPを振る場合がある
    • これを利用してインターネットから直接デバイスを攻撃
  • 募る危機感
    • これを気にサイバー攻撃の潮目が代わり、国産IT資産管理ソフトウェアの脆弱性を狙った攻撃が増えるのでは
    • 社内ではいくつかの競合製品を採用している、これらも気になる
    • RED TEAMで検査することに
  • 見つかった様々な脆弱性
    • 社員PCの遠隔操作
    • 任意コードの実行
    • DB改ざん
    • 社員PCから収集した機密情報の漏洩
    • 管理機の通信をなりすませる脆弱性

国産IT資産管理ソフトウェアとは

  • 社員PCを一元管理するためのソフトウェア
    • PCにインストールされたソフトウェア情報の収集
    • 閲覧したWebサイトやアップロードしたファイル情報の収集
    • PC上でのデバイスの利用制限
    • ファイルやプログラムの遠隔配布・実行
    • PCのデスクトップ画面共有や遠隔操作
  • それなんてMeterpreter?
  • 基本構成
    • 社員PCにはエージェントが入っている
    • エージェントは定期的に管理サーバにアクセス
    • 管理者は管理コンソールから管理サーバにアクセス
  • 主な通信
    • 管理者から管理機への管理操作
    • 管理者から社員PCへの画面共有・遠隔操作
    • 管理機から社員PCへの管理機変更通知
    • 社員PCから管理機へのインベントリ送信
    • 社員PCから管理機への管理指示の確認

国産IT資産管理ソフトウェアの脆弱性

  • 脆弱性はどこにあるか?
    • すべての経路
    • アクセス制御不備
    • 管理通信の偽装
    • 管理機との通信の悪用
  • 主な攻撃ベクタ
    • 悪い社員が管理機を攻撃
    • 攻撃者が社員PCや管理機を攻撃(グローバルIPがある場合)
  • 管理通信の偽装
    • 管理機からのリクエストをキャプチャする
    • 独自のプロトコルによる通信で暗号化されている
    • よく見ると規則性がある
      • length
      • MLSC
      • 常に01
      • 後ろはペイロード
      • 16byteの倍数なのでブロック暗号を推測
      • 鍵が端末の中にあるのでは?
    • 社員PCのインストールフォルダにKeyフォルダがある
    • Keyファイルの先頭byteを利用すると管理機のFQDNとポート番号が出てきた
    • AES128-CBCだった
    • 暗号の鍵はいつ生成されるの?
      • 製品ごと異なる
      • この製品はインストーラに埋め込まれた固定鍵
      • 他社はどうかと思い導入事例にある某社の社員に聞いてみた
      • 同じでした
    • 偽の管理機と通信させることができるのでは?
      • 書き換えたペイロードを暗号化して別のPCに送信
      • 計算機の起動をPCに要求する偽の管理機を設置
      • いっぱい起動した、しかもrootで
  • 遠隔操作ポートの悪用
    • 遠隔操作ポートを待ち受けているプロセスを調査
    • 590xポートで待ち受けている
    • vncのオプションで-rfnoauthというのがあった
    • 接続するとVNCのバージョン不一致で接続できない
    • ncで接続
    • サーバはVNC 3.8対応だと送信する
    • バージョンを一致させる用に通知してもProtocol mismatch
    • バージョンを1 - 999で回した
    • ncでそれを使ったらいけた
    • マウスカーソルを動かすコマンドを送ったらマウスを奪われた
    • Python vnc viewerを利用して快適に利用できた
    • 認証無しで他人のPCをフルコントロール
      • インディケータがないので無茶な操作さえしなければ気づかれない
  • 管理指示ポートの悪用
    •  管理指示ポートの通信をキャプチャ
    • Burpで怪しい管理指示を発見
      • IDとパスワードで認証している用にみえる動作を発見
      • IDとパスワードを消しても200が返ってくる
    • whereStringにOR 1=1を入れたらいろいろ返ってきた
      • SQLインジェクション発見
      • 管理者からのアクセスのみ通信が許可されていれば問題ないのでは
      • しかし、社員との通信も同じバーチャルホストを利用しているので絞れない
    • 管理機のDBから機密情報がだだ漏れ
      • 社員PCから収集した各種インベントリ情報
      • USBデバイスの使用履歴
      • クリップボードのデータまで丸見え
  • 管理機との通信の悪用
    • 暗号化の過信
      • 暗号化のみで横逆を防ごうとしている清貧
      • 鍵屋アルゴリズムを知らなくても溶ける場合が多い
      • 暗号が解けると管理機や他のPCに対する小劇が可能となる
      • 例1
        • 管理者コンソールのログイン画面にID/PWが自動入力される
        • データは暗号化された状態でPC上のローカルファイルに保存されている
        • ユーザ名とパスワードを入れ替えるとユーザ名が見れる
        • 暗号アルゴリズムを使いまわす必要がある
        • 他のデータについてもその手法を利用して確認する
        • 体験版でもその手法を利用できる
      • 例2
        • Windows Crypt APIを利用しておりDLLに渡されたパラメータを見るだけで分かる
      • 例3
        • エージェントに任意の置き換えたデータを暗号化させる
      • 暗号が解けると1
        • エージェントが作成したテンポラリファイルを復号化
        • SQLのバッチファイルが出現
        • 中身をDELETE文にすると管理機のDBが消えた
      • 暗号が解けると2
        • ポート番号と管理者パスワードが出てきた
        • そのポートとパスワードで他の社員PCを遠隔操作できた
    • ディレクトリトラバーサル
      • 管理機がテンポラリファイルのパスを動的に組み立てている場合
      • そもそも管理機にコマンドインターフェイスがある場合もある
      • 端末番号を用いたディレクトリトラバーサル
        • 社員の端末番号を../../../...に置き換えるなど
      • 管理機から任意のファイルを呼び出すことが出来る
      • 管理機のファイルパスを指定できるコマンド
        • コマンドのファイルパスを書き換えることで管理機上にある任意のファイルを読み書きできる
  • さいごに
    • 脆弱性を探して気づいたこと
      • 脆弱性対策のなされていない清貧が多い
      • 脆弱性を公表したことのないベンダーが多い
      • ソフトウェアの体験版は個人でも入手できる
      • サイバーテロ組織も同様の方法で体験版を入手しているのかも
    • このような脆弱性を減らしていくために
      • 自社で導入するソフトウェア製品のセキュリティ品質に関心をもつこと
        • 導入時にセキュリティ評価(脆弱性検査)を実施する
        • 脆弱性に対する取り組みをベンダーにヒアリングする
      • セキュリティ研究者にも注目してほしい
        • 国産ソフトウェアの脆弱性を見つける善意の目を増やしたい

感想

いままで気にしていなかった製品で脆弱性が眠っている可能性があることが具体例とともにわかりました。

どのような製品であっても、脆弱性の存在する可能性について検討し、評価していくことが大切ですね。