「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Webアプリケーション脆弱性対策]]

*目次 [#wd4a0d41]
#contents

*概要 [#ia074187]
[[ASP.NET]]でのCSRF(XSRF)対策方針について纏める。
-CSRF(XSRF)は利用中のブラウザから攻撃者により~
任意の認証済みリクエストを発生させる攻撃方法で、~
任意の情報の更新処理を送り付ける事が出来る。

*対応方針の材料 [#a119b84a]
-[[ASP.NET]]でのCSRF(XSRF)対策方針について纏める。

**[[ASP.NET Web Forms]] [#iffca9fe]
*対応方針の案 [#n243165a]
案件依存だが・・・。

***POST [#x5f84c6b]
**フレームワーク毎の違い [#ac2d4300]

***[[ASP.NET Web Forms]] [#iffca9fe]

-POST~
[[ViewState>ASP.NET ViewState]] の ViewStateUserKey にセッション ID を割り当てる方法がメジャー。

***GET [#k5635c95]
GETでは攻撃しやすいのでQueryStringで予期せぬCRUD等の操作がされないように作る。
-GET~
--攻撃しやすいのでQueryStringで予期せぬCRUD等の操作がされないように作る。
--具体的には、画面の初期表示のみにGETを使用するなどする。

**[[ASP.NET MVC]] [#b06cdc95]
***[[ASP.NET MVC]] [#b06cdc95]

***POST [#ec6b7116]
-POST~
ValidateAntiForgeryToken属性とHtml.AntiForgeryTokenヘルパを使う。

***GET [#q106a76d]
GETでは攻撃しやすいのでQueryStringで予期せぬCRUD等の操作がされないように作る。
-GET
--攻撃しやすいのでQueryStringで予期せぬCRUD等の操作がされないように作る。
--具体的には、画面の初期表示のみにGETを使用するなどする。

**[[WebAPI]] [#k02fa149]
***[[WebAPI]] [#k789c88e]
-主に、業務系SPAの裏のWebAPIは同様に対応が必要になる。
-Cookieに設定したX-CSRF-TOKENを、HTTPヘッダに設定する方式が一般的。
-ソレ以外のWebAPIは、client_id, client_secretの基本認証やbearer tokenを使用。

-参考
--ASP.NET Core で防ぐクロスサイト リクエスト フォージェリ (XSRF または CSRF) 攻撃 | Microsoft Docs~
https://docs.microsoft.com/ja-jp/aspnet/core/security/anti-request-forgery

*対応方針の案 [#n243165a]
案件依存だが・・・。

**[[ASP.NET Web Forms]] [#w10d9b44]

[[上記>#iffca9fe]]から選択。

**[[ASP.NET MVC]] [#h8202df2]

[[上記>#b06cdc95]]から選択。

**[[WebAPI]] [#lfe3f4c3]

[[上記>#k02fa149]]から選択。

**判断材料 [#db46d410]
案件毎にCSRF(XSRF)対策のポリシーを持って対応する必要がある。

***診断ツールと診断結果 [#l0f1d462]
-GETが通れば即、warningになるので診断ツールの誤検知が多い。
-CSRF(XSRF)になっても実際に問題は起きるかどうかはアプリの作りによる。

***攻撃対象 [#p4e64803]
***攻撃対象サイト [#p4e64803]
一般的に、足がつかない、
-匿名アクセス可能なサイトか、
-フリーメールサービスのアドレスでサインアップ可能なサイト

が多いと考える。

***攻撃者 [#z2bcbf96]
-上記のような匿名アクセスが可能なサイトの場合、誰でも攻撃可能。
-会員制サイトの場合、そのサイトを利用可能な会員でしないと、攻撃方法を見い出せない。
***攻撃者の属性 [#z2bcbf96]
-攻撃方法の特定
--匿名アクセスが可能なサイトの場合、誰でも攻撃可能。
--会員制サイトの場合、そのサイトを利用可能な会員でしないと、攻撃方法を見い出せない。

***[[攻撃方法・対策方法>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?SC%EF%BC%9A%E8%84%85%E5%A8%81#xd433779]] [#s35e1263]
-攻撃方法が解れば、
--攻撃自体は誰でも出来る。
--しかし、最近は、[[SameSite属性の件>#t5ea50ee]]の対策もあり、~
同一サイトでないとPOSTでの攻撃も、し難くなって来ている。

***[[一般的な攻撃・対策方法>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?SC%EF%BC%9A%E8%84%85%E5%A8%81#xd433779]] [#s35e1263]

**SessionIDを使うのは非推奨の流れ。 [#x983b2db]
-[[セッションIDをCSRFトークンに使うべきでない理由 – JUMPERZ.NET Blog>https://kanatoko.wordpress.com/2016/12/21/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3id%E3%82%92csrf%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AB%E4%BD%BF%E3%81%86%E3%81%B9%E3%81%8D%E3%81%A7%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1/]]

-CSRF対策用トークンの値にセッションIDそのものを使ってもいい時代なんて、そもそも無かった~
https://gist.github.com/mala/9086206
--CSRF 対策用トークンの値にセッション ID そのものを使ってもいい時代は終わりつつある - co3k.org~
https://co3k.org/blog/csrf-token-should-not-be-session-id

*参考 [#a8f3a2cf]
-クロスサイト・リクエストフォージェリ(CSRF)対策(ASP.NET,C#,VB.NET編) | Webセキュリティの小部屋~
https://www.websec-room.com/2013/03/06/473

-ASP.NET Core MVC で追加されたAutoValidateAntiforgeryToken属性が便利 - 時が癒す~
http://mrgchr.hatenablog.com/entry/2016/11/16/000000

**[[SameSite属性の件]] [#t5ea50ee]

**[[XSRF(CSRF)とは?>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?SC%EF%BC%9A%E8%84%85%E5%A8%81#xd433779]] [#aa0d7174]

**[[脆弱性対策のポイント - Open 棟梁 Wiki>https://opentouryo.osscons.jp/index.php?%E8%84%86%E5%BC%B1%E6%80%A7%E5%AF%BE%E7%AD%96%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88]] [#dde764f4]

----
Tags: [[:テスト]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS