<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>セキュリティ on 設計書</title><link>https://Hitamuki.github.io/image-upload/design/security/</link><description>Recent content in セキュリティ on 設計書</description><generator>Hugo</generator><language>ja</language><atom:link href="https://Hitamuki.github.io/image-upload/design/security/index.xml" rel="self" type="application/rss+xml"/><item><title>画像アップロード</title><link>https://Hitamuki.github.io/image-upload/design/security/sec001-upload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://Hitamuki.github.io/image-upload/design/security/sec001-upload/</guid><description>&lt;h1 id="画像アップロード"&gt;画像アップロード&lt;a class="anchor" href="#%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="id"&gt;ID&lt;a class="anchor" href="#id"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;sec001-upload&lt;/p&gt;
&lt;h2 id="関連仕様設計"&gt;関連仕様・設計&lt;a class="anchor" href="#%e9%96%a2%e9%80%a3%e4%bb%95%e6%a7%98%e8%a8%ad%e8%a8%88"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://Hitamuki.github.io/image-upload/requirements/req001-upload/"&gt;req001-upload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://Hitamuki.github.io/image-upload/design/interaction/ia001-upload/"&gt;ia001-upload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://Hitamuki.github.io/image-upload/design/common/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E8%A8%AD%E8%A8%88%E6%8C%87%E9%87%9D/"&gt;セキュリティ設計指針&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="概要"&gt;概要&lt;a class="anchor" href="#%e6%a6%82%e8%a6%81"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;画像アップロード時における脅威と、それに対する具体的な防御策を定義する。&lt;/p&gt;
&lt;h2 id="セキュリティリスク分析"&gt;セキュリティリスク分析&lt;a class="anchor" href="#%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e3%83%aa%e3%82%b9%e3%82%af%e5%88%86%e6%9e%90"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-ファイル形式偽装攻撃"&gt;1. ファイル形式偽装攻撃&lt;a class="anchor" href="#1-%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e5%bd%a2%e5%bc%8f%e5%81%bd%e8%a3%85%e6%94%bb%e6%92%83"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;脅威&lt;/strong&gt;: 悪意のある実行ファイルを画像ファイルとして偽装してアップロードされる&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;防御策&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;バイナリ検証&lt;/strong&gt;: ファイルの拡張子だけでなく、マジックナンバー（バイナリヘッダ）を読み取り、許可された画像形式であることを検証する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;許可リスト&lt;/strong&gt;: JPEG、PNG、WebPなど許可された画像形式のみを受け付ける&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ファイル内容スキャン&lt;/strong&gt;: アップロード後にウイルススキャンを実施する&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-不正アクセスとデータ漏洩"&gt;2. 不正アクセスとデータ漏洩&lt;a class="anchor" href="#2-%e4%b8%8d%e6%ad%a3%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%a8%e3%83%87%e3%83%bc%e3%82%bf%e6%bc%8f%e6%b4%a9"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;脅威&lt;/strong&gt;: 認証されていないユーザーによる画像へのアクセスや第三者への漏洩&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;防御策&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;署名付きURL&lt;/strong&gt;: S3へのアップロード・ダウンロードには署名付きURLを使用する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有効期限制御&lt;/strong&gt;: 署名付きURLの有効期限を厳格に管理する（アップロード用5分、閲覧用1時間）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最小権限原則&lt;/strong&gt;: アップロードされたファイルはデフォルトで非公開とし、presigned URL経由のみ閲覧可能とする&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-リソース枯渇攻撃"&gt;3. リソース枯渇攻撃&lt;a class="anchor" href="#3-%e3%83%aa%e3%82%bd%e3%83%bc%e3%82%b9%e6%9e%af%e6%b8%87%e6%94%bb%e6%92%83"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;脅威&lt;/strong&gt;: 大量のアップロードによるストレージ容量の枯渇や、サービス妨害&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;防御策&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;サイズ制限&lt;/strong&gt;: ファイルサイズを5MB以下に制限する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;レート制限&lt;/strong&gt;: IPアドレスまたはユーザーIDごとにアップロード回数を制限する（1分間に10回まで）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;クォータ管理&lt;/strong&gt;: ユーザーごとの総アップロード容量を制限する&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-中間者攻撃"&gt;4. 中間者攻撃&lt;a class="anchor" href="#4-%e4%b8%ad%e9%96%93%e8%80%85%e6%94%bb%e6%92%83"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;脅威&lt;/strong&gt;: 通信経路でのデータ改ざんや盗聴&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;防御策&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TLS強制&lt;/strong&gt;: 全通信をHTTPS（TLS 1.2以上）に限定する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;証明書検証&lt;/strong&gt;: SSL/TLS証明書の厳格な検証を行う&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HSTS&lt;/strong&gt;: HTTP Strict Transport Securityを有効化する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="セキュリティ要件"&gt;セキュリティ要件&lt;a class="anchor" href="#%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e8%a6%81%e4%bb%b6"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-多層防御-defense-in-depth"&gt;1. 多層防御 (Defense in Depth)&lt;a class="anchor" href="#1-%e5%a4%9a%e5%b1%a4%e9%98%b2%e5%be%a1-defense-in-depth"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;バイナリ検証&lt;/strong&gt;: システムは、ファイルの拡張子だけでなく、マジックナンバー（バイナリヘッダ）を読み取り、許可された画像形式であることを検証しなければならない。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;署名付きURL&lt;/strong&gt;: S3 へのアップロードには署名付き URL を使用し、その有効期限は発行から &lt;strong&gt;5分間&lt;/strong&gt; としなければならない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-最小権限の原則"&gt;2. 最小権限の原則&lt;a class="anchor" href="#2-%e6%9c%80%e5%b0%8f%e6%a8%a9%e9%99%90%e3%81%ae%e5%8e%9f%e5%89%87"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;S3 ACL&lt;/strong&gt;: アップロードされたファイルはデフォルトで非公開とし、認可用 presigned URL を介してのみ閲覧可能とする。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-リソース制限"&gt;3. リソース制限&lt;a class="anchor" href="#3-%e3%83%aa%e3%82%bd%e3%83%bc%e3%82%b9%e5%88%b6%e9%99%90"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Size Limit&lt;/strong&gt;: バックエンドは、署名付き URL 発行前にリクエストされたファイルサイズが 5MB 以下であることを厳密に検証しなければならない。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rate Limit&lt;/strong&gt;: IP アドレスまたはユーザー ID ごとに、一定時間内のアップロード回数を制限しなければならない（1分間に 10回まで等）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-通信セキュリティ"&gt;4. 通信セキュリティ&lt;a class="anchor" href="#4-%e9%80%9a%e4%bf%a1%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TLS強制&lt;/strong&gt;: 全ての通信はHTTPS（TLS 1.2以上）でなければならない。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;証明書検証&lt;/strong&gt;: SSL/TLS証明書の有効性を検証しなければならない。&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>