と思ったので今回の記事を書いています。
IPAの安全なウェブサイトの作り方で紹介があるように、CSRF(Cross-Site Request Forgery)はよく聞くと思いますので、それも合わせてまとめていきます。
だからリクエストフォージェリってなんなのさ
英単語に戻すと、Request Forgeryとなり、単にリクエストを偽装する。という意味になります。
Forgeryには法律用語で文書を偽造するような意味もあるようです。
こう、セキュリティ用語は英単語の意味そのものを理解する方が、記憶に定着して良いですね。
リクエストフォージェリとは全然関係ありませんが、XMLの署名のパターンにエンベロープとエンベローピングとデタッチの3種類があるんですが、このエンベロープとエンベローピングってどっちがどっちだよ!!!となりますよね。
でも、英単語に直せばあら不思議、それぞれenveloped, envelopingになって、
- エンべローブ(enveloped)は、署名が文書に含まれる
- エンベローピング(enveloping)は、署名が文書を含んでいる
というイメージがつきやすくなります(?)。
なぜ過去分詞形を現在形っぽいカタカナにしたのかと不思議になりますね…
グチグチ言っていても仕方ないので、閑話休題。
CSRFってなんなのさ?
CSRF(Cross-Site Request Forgery)は、ログインなどに使用しているセッションを利用して、悪意のある第三者が勝手に情報を送信するような攻撃です。
例えば、ショッピングサイトの決済を勝手にされてしまったり、インターネットバンキングなどで不正送金されてしまったりします。
各種サイトでは、CSRF対策をされているはずなので、有名サイトを利用する一般利用者からすると、そこまで怖い話でもないかもしれません。
こう言ったジャンルのサイトを運営する際には、注意が必要ですね。
どのように注意すべきかはIPAが書いてくれていますが、決済などの重要な処理をする直前に、正しい動線でリクエストされたものかを検証する手段を入れておくと良いみたいです。
SSRFってなんなのさ?
リクエストフォージェリで検索していると、見慣れないSSRF(Server-Side Request Forgery)という単語を見かけました。
こちらはサーバサイドで起こるもののようですが、詳しく見ていきます。
有名な徳丸先生のブログを参考にすると、「通常は到達できない内部のサーバに対して、Webサーバのような公開サーバから攻撃する」方法のようです。
確かに、ユーザリクエストから任意のAPIにリクエストできる状態は不味そうですね…
他によく聞く、ディレクトリトラバーサルやOSコマンドインジェクションのような攻撃もSSRFの一種ということのようです。
脆弱なアプリケーションが公開されていると、恐ろしいですね…
戒めのために、ユーザからのAPIリクエストを全て通過させる門番のイラストを描いてもらいました。
強そうな門番が知らない人を通して中の人が慌てている感じがお気に入りです笑
感想
意図しないうちに何かが起こるのはやっぱり怖いですね…
パスワードを盗まれて乗っ取られるような場合も嫌ではありますが、まだ見つけやすく対処しやすい気がします。
どのようなパターンもですが、利用者の立場だと怪しいサイトには近づかないのが一番ですね。