それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
by
ikechi
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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