記事一覧

クロスサイトリクエストフォージェリ (CSRF) の対策と確認方法 | asp.net


今回は asp.net において クロスサイトリクエストフォージェリ (cross-site request forgeries / CSRF) への対策方法についてご紹介いたします。
クロスサイトスクリプティング (cross-site scripting / XSS) となんとなく似ているワードですね。(ちなみに XSS ではスタイルシートのCSSと紛らわしいので、Cross=X と変更されたという逸話があります。)
尚、XSS では任意の JavaScript を埋め込みできてしまうことにより閲覧したユーザーに対してスクリプトが実行されてしまう危険性を含むことでしたが、CSRF ではサーバーがリクエストを十分に検証していない場合に、攻撃者が意図しないリクエストを送信することによって、正常なリクエストとして処理を実行できてしまう危険性の事を言います。

 
aspnet_csrf_01.png



前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.対応方法

(対策1)
ViewState にセッションIDを埋め込みます。
以下のように Page の Init イベントにセッションIDをビューステートに埋め込みます。マイクロソフト推奨とのことですが、完全ではありません。マスターページに埋め込むと全てのページに対して CSRF の対策が実装できるのではないでしょうか。
※下記サンプルコードは WebForm に対しての実装方法です。asp.net MVC などは別途実装方法があるようです。

Public Class Site
Inherits System.Web.UI.MasterPage

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

'CSRF対策
Me.Page.ViewStateUserKey = Session.SessionID

End Sub

End Class


(対策2)
フォーム認証のパスワードを確認する画面を表示します。
決済時など何か登録・実行を促す際に、パスワードを求める画面を表示することにより不正なリクエストを排除することができます。Yahoo や Google などのアカウントはアカウントに関する情報を変更するページでは必ずログイン画面が表示されますね。



2.検証方法

大まかに説明しますとセッションハイジャックを行い、POST を実行すると以下のようなエラー出力を確認できます。ViewState に埋め込んだセッションIDをサーバー側で検査した結果が異なることからエラーが発生します。

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

※セッションハイジャックの方法は以前の記事「セッションハイジャック対策がされているか確認する方法」をご確認ください。


以下、検証手順詳細を記載ます。
(1)まずは正常なログインを行ったユーザーのセッションIDをコピーします。

aspnet_csrf_02.png


(2)別のセッション(別のブラウザでも新しいタブで開いた別のセッションでも構いません。)でログインします。

(3)別セッションのログイン後にセッションIDを(1)でコピーしたセッションIDに置き換えます。(ここまではセッションハイジャックと同じ手順です。)

aspnet_csrf_03.png


(4)WEBフォームに用意したボタン(SubmitでPOSTできるものなら何でも)を押下します。

(5)以下のように asp.net のエラーが出力されます。

aspnet_csrf_04.png

ViewState にセッションIDを埋め込みしていない場合は、送信した POST がサーバー側で正常に受付され、セキュリティリスクとなります。






最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。



関連記事

コメント

コメントの投稿

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。