CSRF, HTML Form Protocol Attack, Cross-protocol scripting attackについて
![超絶技巧CSRF / Shibuya.XSS techtalk #7](https://cdn-ak-scissors.b.st-hatena.com/image/square/71e92b56723f49f3424384acfa9fbccd37a93e87/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F847b0b26084440f6badaac2487f62cfc%2Fslide_0.jpg%3F6051191)
CSRF(Cross Site Request Forgeries)は数年前にその危険性が広く認知された攻撃手法です。Webページを見ただけで、普段自分が利用しているログインが必要なサイトに意図しないリクエストが送信されたりする問題です。 CSRFの動作原理 CSRFは攻撃用の情報を含んだWebページやEメールを利用して攻撃します。被害者が攻撃用のページを表示したり、URLをクリックすると、攻撃対象のWebサイトに利用者が意図していないリクエストを送信します。 図1 CSRF攻撃 CSRFによる不正なリクエストは被害者からリクエストなので、ログインが必要なサイトであっても既にユーザがログイン済みの場合、正規のユーザからのリクエストとして攻撃対象のWebサーバはリクエストを受け付けてしまいます。 ログインが必要ない公開サイトであっても、問い合わせフォームから大量の不正な情報が登録される、など
いろいろと原則論はあるんですが。昨今のアプリケーションは複雑化し、扱う情報はよりセンシティブになり、そしてより幅広く使われるようになっています。よって「安全な」アプリケーションを作るために必要な知識はますます増える傾向にあります。 よく分かってない人は以下のことにとりあえず気をつけましょう 1. なるべく自分で作らない これは最も重要なことです。検索する、他人に聞く、自分で考えない。これは重要です。大抵の問題は他人が作ってくれた解決策を適用できます。 例えばセキュアな問合せフォームを作ることにしましょう。気をつけるべきことは以下のことぐらいでしょうか。 送信内容の確認画面を表示する場合、ユーザーの入力した値は適切にエスケープするように 送信内容をアプリケーションの DB に格納する場合には SQL インジェクションを防がなければならないので、プリペアドステートメントを用いる CSRF 対策
以前投稿したAngularJSとRailsの丁度良い関係を探るという記事のコード解説編です。前回はざっくりとしたアーキテクチャの紹介のみにとどめていたので、このエントリでサンプルコードの詳細について解説します。 バージョン情報 ruby 2.1.3 rails 4.1.7 devise 3.2.4 angularjs 1.3.2 ディレクトリ構造 app以下のディレクトリ構造は以下のような形です。 app ├── assets │ ├── images │ ├── javascripts │ │ ├── app │ │ │ └── tasks │ │ │ ├── tasks.controller.js.erb │ │ │ ├── tasks.html.erb │ │ │ ├── tasks.js.erb │ │ │
JMeter使うのだるいなーと思ってたらruby-jmeterというRubyでテストプランを書けるツールがあった。知らなかった(迫真)。 典型的なRailsアプリのテストプラン そういう訳で典型的なRailsアプリのテストプランを書いてみたのがこちら。 ユーザーログインページでCSRFトークンを取得し、常にHTTPヘッダにつけるようにする ユーザーログイン情報をクッキーに保存 といった典型的な処理を盛り込んでいます。あとはREADME.mdを読んでもらえれば大体の書き方が把握できるかと思います。 ちなみに、# Debugというコメントの下2行をコメントアウトしてもらうと、JMeter上でデバッグ用の出力を表示することができます。テストプランが上手く動かないときに、リクエストヘッダやレスポンスを確認するのに便利です。 で、これをコマンドラインで ruby sample.jmx.rb && j
WordPress 4.0.1ではXSSの脆弱性などが修正された。悪用された場合、Webサイトをハッキングされたり、クロスサイトリクエストフォージェリ(CSRF)攻撃を仕掛けられたりする恐れがある。 ブログ作成ソフトの更新版となる「WordPress 4.0.1」が11月20日に公開された。クロスサイトスクリプティング(XSS)などの深刻な脆弱性が修正されており、ユーザーに対して自分のWebサイトを直ちに更新するよう呼び掛けている。 WordPressのブログによると、WordPress 4.0.1では3件のXSSの脆弱性を含め、計8件の脆弱性を修正した。悪用された場合、Webサイトをハッキングされたり、クロスサイトリクエストフォージェリ(CSRF)攻撃を仕掛けられたりする恐れがある。脆弱性は3.9.2までのバージョンに存在する。 更新版は、自動更新を有効にしていれば自動的に配信される。脆
※ src: 画像の場所を指定する属性。相対パスではなくURLで書けば、他のドメインにある画像を表示することも可能。つまりURLに対してGETリクエストを行う(閲覧者に行わせる)お手軽な手段とも言え、これを用いてなんらかの攻撃が行われることもしばしば。 まとめ このように、imgタグなどによって、閲覧者のブラウザからどこかのURLへ任意のリクエストを「送らせる」ことは簡単にできてしまいます。しかも、それで発生するリクエストは、閲覧者自身がリンクをクリックしたときとなんら変わりはありません。では、これを攻撃として用いられた場合(つまりCSRF)、Webプログラム側ではどのように防げばよいのでしょう。 きっとまっさきに思いつくのは、「POSTリクエストを使うようにする」、あるいは「リファラヘッダ(リンク元が記載されているヘッダ行)のチェックを行う」などでしょうか。しかしそれだけでは不
JSONPの動作原理 前回はAjaxに存在するセキュリティモデルであるSame-Originポリシーを紹介し、そのSame-Originポリシーを迂回する方法とセキュリティについて見てきました。また、回避する方法の1つめとしてリバースProxyを用いた方法を紹介しました。リバースProxyを用いた方法ではセキュリティ的な問題点もありましたが、そもそもProxyサーバを用意しなければならないため、この方法は手軽に使うことはできませんでした。 そこで考え出されたのがJSONP(JavaScript Object Notation with Padding)という方法です。 それではまず簡単にJSONPについて説明します。 Ajaxで使われるXMLHttpRequestオブジェクトには前回説明したとおりSame-Originポリシーがありクロスドメインアクセスはできません。一方、SCRIPTタグ
先日、Rails で開発しているときに意図しない InvalidAuthenticityToken エラーが発生して、すごくハマってしまいました。そのときに Rails のCSRF対策の仕組みについて調べてみましたので、ブログに残しておきます。 Rails のCSRF対策 Rails が生成した ApplicationController には以下の記述があります。 class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception end protect_from_forg
11 August 2014: はてなのサポートから連絡がきた。 いつもはてなをご利用いただきありがとうございます。 ご指摘いただきました件につきまして、ただいま対応を検討しております。 第三者に悪用される可能性もございますので、 もし、脆弱性を確認された場合には、先に弊社にご連絡いただき、 脆弱性が修正されるまで、ブログなどで詳細を公開されないようご協力いただけますと幸いです。 もしなにかご不明な点などございましたらご連絡ください。 どうぞよろしくお願いいたします。 しかしサポートにはこの記事のURLしか送っていないし、既に(一部ユーザによるDDoSも含めて)89656のスターがつくほど閲覧されているので、この記事を消してもしょうがない。よって、このまま放置する。読者は修正されるまで、決して悪用しないでほしい。 テスト RSSで見てる人は直接開いてください はてブで指摘があったが、このペ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
CSRF 脆弱性対策には攻撃者の知り得ない秘密情報をリクエストに対して要求すればよく、そのような用途としてはセッション ID がお手軽でいいよねという時代があったかと思います。 いや、もちろん、 CSRF 対策の文脈だけで言えば今も昔も間違いというわけではありません。セッション ID が秘密情報であるのは Web アプリケーションにおいて当然の前提ですので、 CSRF 対策としてリクエストに求めるべきパラメータとしての条件はたしかに満たしています。 たとえば 『安全なウェブサイトの作り方』 改訂第6版では以下のように解説されています。 6-(i)-a. (中略) その「hidden パラメータ」に秘密情報が挿入されるよう、前のページを自動生成して、実行ページではその値が正しい場合のみ処理を実行する。 (中略) この秘密情報は、セッション管理に使用しているセッション ID を用いる方法の他、
一昨日のエントリ『書籍「気づけばプロ並みPHP」にリモートスクリプト実行の脆弱性』にて、ファイル送信フォームに対するCSRF攻撃の文脈で、私は以下のように書きました。 通常のHTMLフォームを使ったCSRF攻撃では、Content-Typeをmultipart/form-dataにすることまでは可能ですが、ファイルの中身とファイル名を指定する方法がありません。従って、HTMLフォームによる攻撃経路はありません。 大半の方は、「ああ、そうだよね」という感じでお読みいただいたように思いますが、昨日サイバーディフェンス研究所の福森大喜さんから、「それIE8以前ならできるよ」と教えていただきました。福森さんの許可を得て、以下にPoCを公開します。 <form enctype="multipart/form-data" action="pro_add_check.php" method="POST"
ある日、大手SNS(Social Networking Site)のmixiの日記にこのような書き込みがあった。それも1人だけでなく、同日に数多くのユーザーの日記に同じ文面が掲載されていた。 これは、単にこのような文章がはやり、ユーザー自身が意図して掲載したのではなく、ある仕掛けによってユーザー自身が気付かないうちに引き起こされた現象なのである。その仕掛けとは、CSRF(Cross-Site Request Forgeries)と呼ばれる攻撃手法の一種だ。 編集部注: 現在、「はまちちゃん」トラップは、mixi運営者により対策されています。上記のサンプルは、mixi風に再構成したものです。 本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者およびアイティメディア株式会社は一切責任を負いかねます。ご了承ください
先日のng-mtg#4 AngularJS 勉強会でLTしようと思ったけど申し込みが間に合わなかったのでブログに書きます。 先月リリースされたAngularJS 1.2はセキュリティがんばってる的なことを聞いたので、セキュリティ周りの仕組みを調べてみました。 お題は以下です。 CSRF JSON CSP (Content Security Policy) Escaping CSRF ユニークなトークンをHTTPリクエストに載せてサーバーでチェックする対応が世の中では主流(最近はカスタムヘッダのチェックによる対策も) AngularJSでは、XSRF-TOKEN Cookieにトークンが載っていると、$httpを使ったHTTPリクエストのヘッダに自動的にX-XSRF-TOKENヘッダーが付く。 XSRF-TOKEN CookieはもちろんNot HttpOnlyで。 Angular界ではCS
更新し忘れたが、既に下記の脆弱性は修正されている 4/11/2013 6:42 PM 追記: 明日エンジニアと調査するとカスタマーサポートから連絡があり、また近日アップデートパッチを用意するとのことだ。 先日紹介した、Satechi Smart Travel Routerだが、ふと直感的にセキュリティに問題があるような予感がしたので、自分のルーターをアタックしてみた。 結果から言うとCSRFが存在し、外部からインターネット越しに細工をしてあるURLを踏ませることで、ルーターのパスワード、SSIDを書き換えたり、WiFi to WiFiのリピータ機能のソースとなるWiFiを勝手に別の場所に書き換えて、Man in the middle攻撃を成立させたりできることが発覚した。 自分がどのようにSatechi Smart Travel Routerの脆弱性を発見したのかを動画にとったので、無編集
12月10日にPC版がスタートしたサイバーエージェントのミニブログサービス「Amebaなう」で、あるURLをクリックすると、「こんにちは こんにちは!!」というフレーズとクリックしたURL文字列が自動で投稿され、「はまちや2」さんのアカウントを自動でフォローしてしまうという現象が広がった。 URLをクリックしたユーザーが意図しない機能を実行させられるWebアプリの脆弱性の一種・クロスサイトリクエストフォージェリ(CSRF)を突いたもの。同社は10日夜、URLをクリックしないようユーザーに告知。誤ってクリックした場合は投稿を削除し、はまちや2さんのフォローを外すよう呼び掛けた。11日朝までに脆弱性も修正したという。 mixiでも2005年、あるURLをクリックすると「ぼくはまちちゃん!」という日記が勝手に投稿されるという、CSRFを利用したスパムが流通したことがあった。コミュニティーサイト構
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く