【Notice】 We are pleased to announce that our "Good Faith Squatting Strategy (Phishing Takeover)" has been featured in 24 media outlets, including NIKKEI COMPASS, CNET Japan, ZDNET JAPAN, Sankei Shimbun, Toyo Keizai Online, and NewsPicks. Learn More

Website Vulnerabilities: Missing Subresource Integrity (SRI) and Its Security Risks

Website Vulnerabilities: Missing Subresource Integrity (SRI) and Its Security Risks

May 31, 2023

Without Subresource Integrity (SRI), your website is at risk of executing malicious code if external resources are tampered with. This can compromise user security, damage trust in your site, and expose sensitive data. Learn why SRI is crucial and how to implement it to protect your website and users.

Subresource Integrity(SRI)が設定されていないことの問題点はなにか

Subresource Integrity(SRI)が設定されていない場合、以下のような問題が生じる可能性があります:

  1. ソースの改ざん:SRIが設定されていない場合、外部のソース(スクリプトやスタイルシートなど)が不正に変更される可能性があります。攻撃者がネットワーク上でリソースを改ざんし、そのリソースがユーザーのブラウザで読み込まれると、信頼できないコードやマルウェアが実行される可能性があります。
  2. ソースの信頼性の低下:SRIが設定されていない場合、信頼できるソースから提供されるはずのリソースが、第三者によって改ざんされた可能性があります。これにより、ソースの信頼性が低下し、ユーザーのデータやセキュリティが危険にさらされる可能性があります。
  3. キャッシュの利用効率の低下:SRIが設定されていないと、ブラウザがリソースのキャッシュを最大限に活用できません。リソースの内容が変更されるたびに、ブラウザは新しいバージョンのリソースをダウンロードする必要があります。これにより、ユーザーのページの読み込み時間が増加し、パフォーマンスが低下する可能性があります。

SRIは、リソースの改ざんを防止するために有効なセキュリティ対策です。リソースのハッシュ値を使用して正当性を検証することで、改ざんされたリソースの使用を防止します。SRIを使用することで、信頼できるリソースの使用を確認し、攻撃やデータの漏洩のリスクを低減できます。

Subresource Integrity(SRI)の設定方法

Subresource Integrity(SRI)を設定するためには、HTMLの**<script>要素や<link>要素にintegrity属性とcrossorigin**属性を追加する必要があります。具体的な方法は以下の通りです。

  1. **<script>**要素でのSRIの設定例:
<script src="example.js" integrity="sha256-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" crossorigin="anonymous"></script>

上記の例では、**src属性で読み込むJavaScriptファイルのパスを指定し、integrity属性にはリソースのハッシュ値を指定します。ハッシュ値は、ソースファイルの整合性を検証するために使用されます。crossorigin属性にはanonymous**を設定し、クロスオリジンリクエストが正しく処理されるようにします。

  1. **<link>**要素でのSRIの設定例(CSSファイルの場合):
<link rel="stylesheet" href="styles.css" integrity="sha256-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" crossorigin="anonymous">

上記の例では、**href属性で読み込むCSSファイルのパスを指定し、integrity属性にはリソースのハッシュ値を指定します。同様に、crossorigin属性にはanonymous**を設定します。

SRIのハッシュ値は、実際のファイルのハッシュ値を取得するために、ハッシュ関数(例: SHA-256)を使用して計算する必要があります。ファイルのハッシュ値を取得するには、ハッシュ値計算ツールやウェブサービスを使用することができます。

注意点として、SRIを使用する場合、リソースの更新や変更がある場合には、ハッシュ値を再計算して更新する必要があります。また、SRIはリソースの整合性を検証するための一つの手段ですが、完全なセキュリティ対策ではありません。他のセキュリティ対策と併用することが推奨されます。

SRI Hash Generatorを使った設定の仕方

SRI Hash Generatorは、ハッシュ値を生成するための無料オンラインツールです。以下の手順に従って、SRI Hash Generatorを使用してSRIの設定に必要なハッシュ値を生成する方法を説明します:

  1. ハッシュを生成したいファイルを用意します。例えば、**example.js**というJavaScriptファイルがあるとします。
  2. SHAHashGeneratorのウェブサイトにアクセスします(**https://www.sha256hashgenerator.com/****https://www.srihash.org/** などが利用できます)。
  3. ウェブサイト上で、ファイルの内容をハッシュ化するためのテキストエリアやファイルアップロードのオプションがある場合は、**example.js**ファイルを選択またはコピー&ペーストします。
  4. ハッシュアルゴリズムとしてSHA-256を選択します。
  5. ウェブサイトが提供するハッシュ生成ボタンをクリックすると、ハッシュ値が表示されます。
  6. 表示されたハッシュ値をコピーし、それをSRIの**integrity**属性に設定します。

以下は、ハッシュ値を生成してSRIを設定するための例です(SRI Hash Generatorを使用):

<script src="example.js" integrity="sha256-V5YS8+JmUocYcThfMT/2jFkh9SRNn8FQ8g7PRt7d/Xo=" crossorigin="anonymous"></script>

上記の例では、**example.jsファイルのハッシュ値をSHA-256アルゴリズムを使用して生成し、それをintegrity**属性に設定しています。

SRI Hash Generatorを使用することで、ファイルのハッシュ値を簡単に生成し、SRIの設定に利用することができます。

SRIを設定しないことで発生するサイバー攻撃

SRIを設定しないことにより、以下のようなサイバー攻撃が発生する可能性があります:

  1. リソースの改ざん:SRIを設定しない場合、攻撃者は外部リソース(スクリプトやスタイルシートなど)を改ざんすることができます。攻撃者がリソースを改ざんし、ユーザーのブラウザが改ざんされたリソースを読み込むと、悪意のあるコードやマルウェアが実行される可能性があります。
  2. ファイルの差し替え:SRIを使用しないと、攻撃者は同じURLを使用して異なるファイルを提供することができます。攻撃者はオリジナルのリソースを盗み、攻撃目的のスクリプトやコードを含んだ別のファイルを提供することができます。これにより、信頼できないソースからのファイルの読み込みや実行が発生し、セキュリティ上のリスクが生じます。
  3. クロスサイトスクリプティング(XSS):SRIを設定しないと、攻撃者は外部スクリプトを使用してクロスサイトスクリプティング攻撃を行うことができます。攻撃者が改ざんしたスクリプトをサイトに注入すると、ユーザーのブラウザで実行されることになり、ユーザーのセッション情報や個人データが漏洩する可能性があります。

SRIは、ブラウザがリソースの整合性を検証するためのセキュリティ機構です。ハッシュ値を使用してリソースの改ざんを検出し、信頼できるリソースの使用を保証することができます。SRIを設定することで、改ざんや攻撃からの保護を強化することができます。