SSTによる安全なWebサイト運営のためのセキュリティ情報

SSTのこと
  • shareSNSでシェア
  • Facebookでシェアする
  • Xでシェアする
  • Pocketに投稿する
  • はてなブックマークに投稿する

「CODE BLUE 2017」参加レポート(羽鶴編)

こんにちは。SST入社2年目の羽鶴です。

先日、11/9と11/10に新宿で開催された国内最大級のセキュリティ系カンファレンス「CODE BLUE」に参加してまいりましたので、その参加レポートを簡単に書かせて頂きます。

Step-Oriented Programmingによる任意コード実行の可能性

こちらは、KOZOSで有名な坂井 弘亮さんのセッションでした。発表内容のテーマとしては組み込み機器のデバックポートが奪われた場合、どのようなことが起きるかといったものでした。組み込み機器のデバックに使用されるスタブというメインプログラムの制御機構を利用することで、DEPなどの保護機構があったとしても、機械語コードを組み立てて任意のプログラムを実行させることが可能になると言った内容でした。

スタブは開発時にしか使われないものなので、殆どの場合は出荷時に除去されるようですが、デバック用のコネクタを取り外しただけでスタブのプログラムを残したままにしていると、後からはんだ付けすることでアクセスできてしまうこともあるようです。発表の中では、実際にGDBでRSP(リモート・シリアル・プロトコル)を喋って、目的の機械語命令を探し出し、機械語コードを組み立てるといったデモが行われましたが、パズルや推理ゲームのような感覚で非常に興味を惹かれました。

普段は、Webのレイヤーのセキュリティを主に扱っているので、こういった低レイヤーなセキュリティの話はとても新鮮で、視野を広げる良い機会になりました。

HTTP/2 クライアントのパッシブ・フィンガープリンティング

こちらは、普段扱っているWebレイヤーのセキュリティということで、楽しみにしていたセッションの1つでした。HTTP/2は比較的新しいプロトコルで、2015年にRFCが策定されて以来、徐々にシェアが拡大し2017年11月現在ではAlexaの上位1000万サイトの内20.7%が対応しているようです。

発表の趣旨としては、ブラウザとWebサーバー間でやり取りされるHTTP/2の各種パラメータを集めることで、クライアント側のOSバージョンなどの情報を推定できるといったもので、例えば、HTTP/2の通信を開始するにはSETTINGS FRAMEと呼ばれる通信に関する設定情報の交換が必要になりますが、そこでやり取りされる値の大小がブラウザやOS、バージョンの組み合わせによって異なります。実際に手元のマシンにインストールされているChromeとFirefoxの通信をキャプチャすると以下のようになります。

Windows10 + Chrome 62(64bit)
HyperText Transfer Protocol 2
Stream: Magic
    Magic: PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n
Stream: SETTINGS, Stream ID: 0, Length 18
    Length: 18
    Type: SETTINGS (4)
    Flags: 0x00
    0... .... .... .... .... .... .... .... = Reserved: 0x0
    .000 0000 0000 0000 0000 0000 0000 0000 = Stream Identifier: 0
    Settings - Header table size : 65536
    Settings - Max concurrent streams : 1000
    Settings - Initial Windows size : 6291456
Stream: WINDOW_UPDATE, Stream ID: 0, Length 4
Windows10 + Firefox 57(64bit)
HyperText Transfer Protocol 2
Stream: Magic
Stream: SETTINGS, Stream ID: 0, Length 18
    Length: 18
    Type: SETTINGS (4)
    Flags: 0x00
    0... .... .... .... .... .... .... .... = Reserved: 0x0
    .000 0000 0000 0000 0000 0000 0000 0000 = Stream Identifier: 0
    Settings - Header table size : 65536
    Settings - Initial Windows size : 131072
    Settings - Max frame size : 16384
Stream: WINDOW_UPDATE, Stream ID: 0, Length 4
Stream: PRIORITY, Stream ID: 3, Length 5
Stream: PRIORITY, Stream ID: 5, Length 5
Stream: PRIORITY, Stream ID: 7, Length 5
Stream: PRIORITY, Stream ID: 9, Length 5
Stream: PRIORITY, Stream ID: 11, Length 5
Stream: PRIORITY, Stream ID: 13, Length 5

上2つの差異としては

ChromeはMax concurrent streamsを送信しているが、Firefoxは送信していない
FirefoxはMax frame sizeを送信しているが、Chromeは送信していない
ChromeのInitial Windows sizeは6291456だが、Firefoxは131072になっている
FirefoxはSETTINGS FRAMEで3,5,7,9,11,13のidleストリームを送信している
※FirefoxはSETTING FRAMEで送信したidleストリームを使って、コンテンツの種類ごとにグルーピングを行い、優先順位と依存関係を管理しているようです。

OSが同じでもブラウザが違うだけでこれだけの差異が出ました。このほかにもヘッダーの並び順やWINDOW_UPDATE FRAMEのwindow_size_incrementの値などの情報を集めることで、より詳細なクライアントの情報を得ることができるようです。今回は、クライアント側のフィンガープリンティングでしたが、サーバー側の挙動なども見てみると面白そうだなと思いました。

国産IT資産管理ソフトウェアの(イン)セキュリティ

こちらは、株式会社リクルートテクノロジーズの西村 宗晃さんによるセッションでした。IT資産管理ソフトウェアは設置されたネットワーク上に存在するホストの様々な情報の収集や、更新プログラムの配布、ポリシーの適用等を行える便利なツールですが、ホスト情報を一元管理していたり、システム上で高い権限を持つなどの性質があるため、侵入を受けた場合の影響は非常に大きなものになります。

発表の中では国内のIT資産管理ソフトウェアを分析して見つかった脆弱性の内容がいくつか紹介されましたが、中には認証なしに他人のPCをフルコントロールできる脆弱性や、社員のクリップボードの内容まで閲覧できてしまうなどの非常に危険なものがありました。基本的には社内の内部ネットワークで使用されるIT資産管理ソフトウェアですが、社員が外出先で公共Wifiや、モバイルWifiルータなどを利用した際にグローバルIPが付与され、そこを攻撃者に狙われるケースもあるようです。

SSRFの新時代 -有名プログラミング言語内のURLパーサーを攻撃!
こちらは、DEVCOREのOrange Tsai氏によるセッションでした。該当としては、言語やライブラリに実装されているURLパーサの解釈の違いを利用して、Protocol SmugglingやRCEなどを可能にするといったものでした。例えば、Python製のライブラリでスクレイピングなどにも使われるurllibやrequestsを例にとると、ホスト名の解釈に以下のような違いがあります。

この解釈の違いを利用して、サーバ上や、イントラネットで稼働しているメールサーバ、その他のサービスを不正に利用することが可能になります。他にもNode.jsでは\xff\x2E\xFF\x2Eを利用することでサーバ上のファイルにアクセスできたり、GLibcではCR-LFを挿入することで、解釈をコントロールできるようです。サーバサイドのプログラムは高い権限で動作することが多いので、SSRFが成功したときの影響度はそれなりに高いものになりそうです。

最後に

去年に引き続きCODE BLUEに参加するのは今回で2回目となりましたが、毎回、非常に濃ゆい内容のセッションばかりで、日常の業務や、本を読むだけでは得られない貴重な情報を得られたと感じています。また、2日目に開催されたネットワーキングパーティでは、同年代のセキュリティエンジニアや業界で活躍されている著名な方とお話しできる貴重な機会でした。機会があれば、また次回も参加したいと思います。

  • shareSNSでシェア
  • Facebookでシェアする
  • Xでシェアする
  • Pocketに投稿する
  • はてなブックマークに投稿する

この記事の筆者

筆者