それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
by
ikechi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
1 それ、本当に安全? ファイルアップロードで見落としがち なセキュリティリスクと対策 ~ 2026年01月10日 BuriKaigi ~
Slide 2
Slide 2 text
池上 寛登(ikechi) ⾃⼰紹介 SUZURI‧minne事業部 Web Engineer X: penpeenpen GitHub: PenPeen
Slide 3
Slide 3 text
3 ● プロフィール画像 ● 動画‧⾳声ファイル ● CSV形式の⼀括登録機能 ファイルのアップロード機能について minne の画像アップロード機能
Slide 4
Slide 4 text
● 拡張⼦をチェックしているから⼤丈夫...! ● Content-Typeを⾒てるから⼤丈夫...! 4 セキュリティ対策、⼤丈夫? 本当にそれだけで大丈夫かな?
Slide 5
Slide 5 text
サイバー攻撃は年々増加傾向... 引⽤: https://blog.checkpoint.com/research/a-closer-look-at-q3-2024-75-surge-in-cyber-attacks-worldwide/ ● 2024年3Q 企業へのサイバー攻撃数は過去最⾼を記録(1,876件) ● 2023年の同時期と⽐較して75%増加
Slide 6
Slide 6 text
1. ファイルアップロードに潜む脅威 2. 「危険なファイルアップロード」のデモ 3. セキュアな実装のベストプラクティス アジェンダ
Slide 7
Slide 7 text
ファイルアップロードに潜む脅威 7
Slide 8
Slide 8 text
8 ファイルアップロードに潜む脅威 MIME type spoofing Remote Code Execution (RCE) 蓄積型XSS 無制限ファイルアップロード攻撃 パストラバーサル攻撃 画像処理ライブラリの脆弱性悪用 ファイルインクルージョン攻撃 WebShell アップロード Polyglot File Attack メタデータインジェクション NULLバイト攻撃
Slide 9
Slide 9 text
● 概要: ブラウザがファイルの内容からMIMEタイプを推測する挙動 ● 危険性: MIMEタイプを偽装した悪意のあるファイルがスクリプト として実⾏される可能性 9 MIME Sniffingによる脆弱性
Slide 10
Slide 10 text
● 概要: 攻撃者が任意のコードをサーバー上で実⾏できる脆弱性 ● 危険性: 悪意あるコードの実⾏ データベース情報の窃取、システム破壊、侵⼊の踏み台利⽤ ※ 最も深刻な被害が⽣まれやすい 10 Remote Code Execution (RCE)
Slide 11
Slide 11 text
11 パストラバーサル攻撃 ● 概要: 攻撃者が意図的に細⼯したファイル名やパスを使⽤し、想定 外の場所にファイルを保存させたり、システムの重要なファイル を上書きしたりする攻撃 ● 危険性: 設定ファイルの改ざん、ファイル配置によるコード実⾏
Slide 12
Slide 12 text
12 画像処理ライブラリの脆弱性悪⽤ ● 概要: 画像処理ライブラリ(ImageMagick、libpng…)の脆弱性を悪 ⽤した攻撃を⾏う。 ● 危険性: サーバー上で任意のコードが実⾏される サービス拒否(DoS)
Slide 13
Slide 13 text
13 Polyglot File Attack ● 概要: 複数のファイル形式として同時に解釈可能なファイルを作成 セキュリティチェックを回避する攻撃⼿法 ● 危険性: XSS、リモートコード実⾏、サーバー侵害
Slide 14
Slide 14 text
デモンストレーション 14
Slide 15
Slide 15 text
● Content-Typeを偽装して、HTMLをアップロード ● ファイルを開くとスクリプトが実⾏ (XSS攻撃: Cookie / Sessionの漏洩) 15 MIME Sniffing デモンストレーション Demonstration
Slide 16
Slide 16 text
16 RCE デモンストレーション Demonstration ● ファイル名に任意のコマンドを埋め込みアップロード ● コマンドが実⾏されてしまう(RCE)
Slide 17
Slide 17 text
17 パストラバーサル デモンストレーション Demonstration ● ファイル名に「../../logo.png」のようなパス操作⽂字 列を含める ● 意図したディレクトリの外にファイルが保存され、重 要なシステムファイルが上書きされてしまう
Slide 18
Slide 18 text
実装のベストプラクティス 18
Slide 19
Slide 19 text
● フロントエンドでできることは「補助的な対策」のみ ● 根本対応にはサーバーサイドの対策が必須! 19 前提
Slide 20
Slide 20 text
● マジックバイトでのファイル検証 ● 拡張⼦チェックは許可⽅式にする ● 正規表現による検証は回避可能なパターンが⽣じやす いため、完全⼀致や、RFC標準仕様に準拠した検証 ● ライブラリを⽤いて、ファイル名やMIMEタイプを安全 な形式に正規化‧サニタイズする 20 厳密な検証とサニタイゼーション
Slide 21
Slide 21 text
21 X-Content-Type-Options を指定する ● ブラウザによる⾃動的なContent-Type推測を防⽌し、 サーバーが指定したContent-Typeを厳密に適⽤させる ● 攻撃者がアップロードしたファイルを意図しない形式 として実⾏させる攻撃を防⽌する
Slide 22
Slide 22 text
22 ファイル配信⽤のドメインを分離する ● ファイル配信を⾏うドメインを分離する • アプリケーションドメイン(google.com) • ファイル配信ドメイン(googleusercontent.com) ● XSSなどの脆弱性が発⽣した場合でも、攻撃者がセッ ションCookieや認証情報を窃取することが困難にな り、被害範囲を最⼩限に抑えられる
Slide 23
Slide 23 text
● ディレクトリでのスクリプト実⾏権限を無効化 ● 画像処理ライブラリを最新に保つ ● ウイルススキャンの実施 23 サーバー環境の保護
Slide 24
Slide 24 text
まとめ 24
Slide 25
Slide 25 text
適切なセキュリティ対策を⾏い 安⼼‧安全なシステム開発を、実現しよう! 25
Slide 26
Slide 26 text
脆弱性体験アプリケーションをGitHubで公開しています。 26 デモンストレーションコード
Slide 27
Slide 27 text
● The Web Application Hacker's Handbook ● 体系的に学ぶ 安全なWebアプリケーションの作り⽅ 第2版 27 参考⽂献
Slide 28
Slide 28 text
ご静聴ありがとうございました 28 \\ エンジニア採⽤強化中!! ∕∕ 気になる⽅は登壇メンバーまで! @doskoi64 / @yukyan_p / @penpeen