セキュリティ

ウェブアプリに対する典型的な攻撃手法とその対策まとめ


ブラウザの機能が強化されるとともに、多様なアプリケーションがウェブ上で実現できるようになっています。同時に、ウェブサイトやウェブアプリが重要な情報を取り扱うケースも増えて、ハッカーの攻撃対象になることも多くなってきました。そうした場面でハッカーがよく利用する典型的な攻撃手法とその対策について、エンジニアのヴァルン・ナイクさんがブログにまとめています。

CSRF, CORS, and HTTP Security headers Demystified
https://blog.vnaik.com/posts/web-attacks.html


◆1:CSRF
CSRFはクロスサイトリクエストフォージェリの略称で、ユーザーがログイン済みのウェブサイトに対して第三者がアクションを実行させる攻撃のことです。攻撃は下記の手順で行われます。

1. ユーザーが悪意あるウェブサイトにアクセスする
2. 悪意あるウェブサイトにはオンラインバンクに送金依頼を出すための隠しフォームが設置されており、もしユーザーがオンラインバンクにログインしたままだった場合にはユーザーから送金指示が出てしまう
3. 悪意あるウェブサイトとオンラインバンクはオリジンが異なるため、ブラウザはリクエストの結果を悪意あるウェブサイトに伝えないものの、送金自体は行われてしまう

こうした攻撃を保護するには、下記のCSRFトークンという仕組みを利用するのが良いとナイクさんは述べています。

1. オンラインバンクがユーザーにフォームを提供するたびに、CSRFトークンを生成してフォームの非表示フィールドに挿入する
2. ユーザーからのリクエストを受信した際に、CSRFトークンをチェックして以前に生成していたものと一致するか確認する

CSRFを保護するにはアプリケーションにコードを追加する必要があり、Nginxなどのプロキシサーバーレイヤーでは保護できないとのこと。また、CookieにSameSite属性を利用するだけでもCSRFを防止することが可能です。

◆2:CORS
CORSはクロスオリジンリソースシェアリングの略称で、通常は不可能な別オリジンのリソース利用を可能にするという、セキュリティを緩和するための仕組みのことです。ウェブサイトが別オリジンにXHRを行うと、ブラウザはまずプリフライトと呼ばれるリクエストを行い、現在のウェブサイトからのアクセスが許可されているかを確認します。

CORSの仕組みを利用することで、「gigazine.net」「gigazine.co.jp」「gigazine.biz」など複数のウェブサイトから同じAPIにアクセスすることが可能になります。また、ブラウザから利用可能なAPIを第三者に提供する場合もCORSの設定が必要です。

なお、CORSはブラウザの保護機能なので、ハッカーの自作ツールなどブラウザ以外からの通信では機能しないとのこと。


◆3:XSS
XSSはクロスサイトスクリプティングの略称で、ハッカーがクライアント側のスクリプトをウェブページに挿入する攻撃のことです。サニタイズが不十分な入力フォームを利用して設置されることが多く、また最もよく利用されている手法だとのこと。

XSSを防止するにはユーザーから受け付けた入力を表示する際にサニタイズを行うことが大切です。ナイクさんによると、サニタイズは入力側ではなく出力側で行う方が良いそうで、データベース内に生データを残しておくことで、これまでHTMLでしか提供していなかったデータをREST APIで提供するといったビジネス要件の変更にも柔軟に対応できるようになるとのこと。

アプリケーションをXSSから保護するためには「Cross Site Scripting Prevention - OWASP Cheat Sheet Series」などを参考にするのが良いそうです。

◆4:CSP
CSPはコンテンツセキュリティポリシーの略称で、XSS攻撃を軽減するための追加のセキュリティレイヤーです。スクリプトやCSS、画像、フレーム、フォームアクションなどのソースとして有効なドメインを指定することで、そのホワイトリストにないドメインからのリソースの読み込みを防止する仕組みとなっています。

CSPを設定したからと言ってXSSを無視できるわけではないものの、侵入された後の被害軽減には役立つとのこと。ただし、CSPの設定は非常に難しいそうで、ウェブサイトに新しいフォントやスクリプトを追加するたびにCSPを適切に設定し直す必要があるほか、開発時は動作するものの本番環境では壊れてしまうなどの問題が発生しがち、とナイクさんは述べています。


CSPの実装には「Content-Security-Policy Header ⟶ CSP Reference & Examples」が参考になるほか、Google製のテストツールも役立つとのことです。

◆5:HSTS
HSTSはHTTPストリクトトランスポートセキュリティの略称で、ブラウザがHTTPではなくHTTPSのみを使用してアクセス可能であることをサーバーが宣言できるようにすることで、プロトコルダウングレード攻撃Cookieハイジャックを防止する機能のことです。

例えば、外出先でFree Wi-Fiを利用した際に、そのアクセスポイントがハッカーの用意したものだった場合、ウェブサイトとやりとりしたデータが盗み取られてしまう危険がありますが、ウェブサイトがHSTSを利用しており、以前に一度でもHTTPSでアクセスしたことがある場合にはセキュリティが保たれるようになります。この状況でハッカーがMITM攻撃を試みた場合、ブラウザはアクセスを拒否するとのこと。


◆6:証明書の透明性
HTTPS通信を行うための証明書が偽造されていないかどうかをチェックするための方法が「Certificate Transparency(証明書の透明性)」です。認証局が証明書を発行する際に公開のログに発行情報を記録しておき、ブラウザは証明書のSCT(署名付き証明書タイムスタンプ)欄を利用してログサーバーを検索し、証明書がログの記録と一致するかを確認することで証明書の正当性を検証可能です。

上記の仕組みを導入することで、ドメインの所有者が知らないうちにドメインの証明書が発行されてしまうことを防止できるとのこと。詳細については、「Certificate Transparency : Certificate Transparency」が参考になると述べられています。

◆7:Set-Cookie
Set-Cookie」は昔から利用されてきたHTTPヘッダーで、幅広いウェブサイトで利用されており、正しく構成するのが最も重要なヘッダーです。とはいえ、Set-Cookieの設定は簡単で、Set-Cookieにはいくつかのディレクティブが存在していますが、原則として下記の3つを設定しておけば良いとのこと。

・SameSite=Strict
この設定は別ドメインからCookieを利用できないようにすることでCSRF攻撃を防止してくれます。

・Secure
CookieがHTTPS接続でのみ利用可能になります。

・HttpOnly
JavaScriptからCookieにアクセスできなくなります。

ナイクさんは、このページの対策は実行可能なことのほんの一部に過ぎないとした上で、セキュリティ団体「OWASP」が発行しているウェブセキュリティレポートのトップ10の多くがアプリケーション自体に起因するものであることから、アプリケーションの設計とアーキテクチャもセキュリティを守るために重要だと述べています。

この記事のタイトルとURLをコピーする

・関連記事
無料でロシアのハッカーを退散させられる「トリック」とは? - GIGAZINE

Windowsのソースコードを盗み出したハッカー集団の手口と無料対策ツールが公開される - GIGAZINE

「システムを隠す」ことでセキュリティを高めるのは本当に悪なのか? - GIGAZINE

iPhoneの強固なセキュリティがハッカーの隠れ蓑になってしまっているという指摘 - GIGAZINE

Cloudflareが「CAPTCHAの狂気」からの完全脱却を表明、物理セキュリティキーを使うシステムを提案 - GIGAZINE

in ネットサービス,   ウェブアプリ,   セキュリティ, Posted by log1d_ts

You can read the machine translated English article here.