XXE、SSRF、安全でないデシリアライゼーション入門
2019/11/20 16:20
旬の脆弱性について説明
暑い
capital oneの事件
安全でないデシリアライゼーション
OWASP top 10
外部実体参照
XMLで外部ファイルを展開できる
XMLをパースして表示するスクリプトにはかんたんに攻撃できる
/etc/hoshs表示のデモ
徳丸本にあるらしい
URLを読み込ませてロードさせることもできる
SSRF
server side request forduri
原因
標準的な機能なのでバグではない
JSONを使えば複雑な機能なし
使わないといけない場合
DTD(DOCTYPE) を禁止する
PHPの場合
libxml2の2.9以降なら外部実体参照がデフォルトオフ
RoRの場合
REXMLを使う(デフォルトオフ)
Nokogiri NOENTオプションを使わない
明確にdocがないこともあるのでテストをするのがいい
前提
公開サーバからは内部サーバにアクセスできるような構成
攻撃者が公開サーバから内部サーバにリクストを送る
「そんなもの昔からあるじゃん」
クラウドによって再び中馬湖されるようになった
いつもはPHPのイメージがあるので今日はRoのサンプル
攻撃例
IAMのcredetialがでる
攻撃者は、SSRFによってEC2インスタンスを踏み台にしてアクセスする
一般的に脆弱性と攻撃手法は1:1の関係
しかし、SSRF攻撃とSSRF脆弱性は1:n
SSRF攻撃
SSRF攻撃が可能な脆弱性
SQLインジェクション,
XXE
ディレクトリトラバーサル
SSRF脆弱性 <-ほかは普通に防げている(はずだ)から、これを新たに考えればいい
mod_securityでWAFを作っていた
open reverse proxyがあった
WAFの権限がいっぱいあったのでS3からデータを抜かれてしまった
対策
NW的にチェックするのが今の定説(169.254にアクセスさせない)
攻撃者がDNSを触ることができるなら、DNS Rebindingで攻撃できる
攻撃デモ
対策
EC2でSSRF多層防御が実装された
IMDSv2
原理的に大丈夫というわけではないので併用してほしい
安全でないデシリアライゼーション
シリアライズ/デシリアライズ
オブジェクト -> (シリアライズ)
問題はデシリアライズの方
どんなおベブジェクトでも作れてしまう
プロパティを巧妙に作ることができるのではなcL
攻撃手法
call_user_func_array
これで呼び出せる(p. 40
Webshelの定義をつくったデモ