ウェブサイト脆弱性:Subresource Integrity(SRI)が設定されていない
2023年5月31日
この記事では、Subresource Integrity(SRI)が設定されていない場合に生じる問題点について説明します。SRIが欠如していると、以下のリスクが発生する可能性があります。まず、外部のソースが不正に変更され、ユーザーのブラウザでマルウェアが実行される可能性があります。また、信頼できるソースから提供されるリソースが改ざんされることで、ソースの信頼性が低下し、ユーザーのデータやセキュリティが危険にさらされる可能性があります。
Subresource Integrity(SRI)が設定されていないことの問題点はなにか
Subresource Integrity(SRI)が設定されていない場合、以下のような問題が生じる可能性があります:
- ソースの改ざん:SRIが設定されていない場合、外部のソース(スクリプトやスタイルシートなど)が不正に変更される可能性があります。攻撃者がネットワーク上でリソースを改ざんし、そのリソースがユーザーのブラウザで読み込まれると、信頼できないコードやマルウェアが実行される可能性があります。
- ソースの信頼性の低下:SRIが設定されていない場合、信頼できるソースから提供されるはずのリソースが、第三者によって改ざんされた可能性があります。これにより、ソースの信頼性が低下し、ユーザーのデータやセキュリティが危険にさらされる可能性があります。
- キャッシュの利用効率の低下:SRIが設定されていないと、ブラウザがリソースのキャッシュを最大限に活用できません。リソースの内容が変更されるたびに、ブラウザは新しいバージョンのリソースをダウンロードする必要があります。これにより、ユーザーのページの読み込み時間が増加し、パフォーマンスが低下する可能性があります。
SRIは、リソースの改ざんを防止するために有効なセキュリティ対策です。リソースのハッシュ値を使用して正当性を検証することで、改ざんされたリソースの使用を防止します。SRIを使用することで、信頼できるリソースの使用を確認し、攻撃やデータの漏洩のリスクを低減できます。
Subresource Integrity(SRI)の設定方法
Subresource Integrity(SRI)を設定するためには、HTMLの**<script>
要素や<link>
要素にintegrity
属性とcrossorigin
**属性を追加する必要があります。具体的な方法は以下の通りです。
- **
<script>
**要素でのSRIの設定例:
<script src="example.js" integrity="sha256-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" crossorigin="anonymous"></script>
上記の例では、**src
属性で読み込むJavaScriptファイルのパスを指定し、integrity
属性にはリソースのハッシュ値を指定します。ハッシュ値は、ソースファイルの整合性を検証するために使用されます。crossorigin
属性にはanonymous
**を設定し、クロスオリジンリクエストが正しく処理されるようにします。
- **
<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の設定に必要なハッシュ値を生成する方法を説明します:
- ハッシュを生成したいファイルを用意します。例えば、**
example.js
**というJavaScriptファイルがあるとします。 - SHAHashGeneratorのウェブサイトにアクセスします(**https://www.sha256hashgenerator.com/** や **https://www.srihash.org/** などが利用できます)。
- ウェブサイト上で、ファイルの内容をハッシュ化するためのテキストエリアやファイルアップロードのオプションがある場合は、**
example.js
**ファイルを選択またはコピー&ペーストします。 - ハッシュアルゴリズムとしてSHA-256を選択します。
- ウェブサイトが提供するハッシュ生成ボタンをクリックすると、ハッシュ値が表示されます。
- 表示されたハッシュ値をコピーし、それを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を設定しないことにより、以下のようなサイバー攻撃が発生する可能性があります:
- リソースの改ざん:SRIを設定しない場合、攻撃者は外部リソース(スクリプトやスタイルシートなど)を改ざんすることができます。攻撃者がリソースを改ざんし、ユーザーのブラウザが改ざんされたリソースを読み込むと、悪意のあるコードやマルウェアが実行される可能性があります。
- ファイルの差し替え:SRIを使用しないと、攻撃者は同じURLを使用して異なるファイルを提供することができます。攻撃者はオリジナルのリソースを盗み、攻撃目的のスクリプトやコードを含んだ別のファイルを提供することができます。これにより、信頼できないソースからのファイルの読み込みや実行が発生し、セキュリティ上のリスクが生じます。
- クロスサイトスクリプティング(XSS):SRIを設定しないと、攻撃者は外部スクリプトを使用してクロスサイトスクリプティング攻撃を行うことができます。攻撃者が改ざんしたスクリプトをサイトに注入すると、ユーザーのブラウザで実行されることになり、ユーザーのセッション情報や個人データが漏洩する可能性があります。
SRIは、ブラウザがリソースの整合性を検証するためのセキュリティ機構です。ハッシュ値を使用してリソースの改ざんを検出し、信頼できるリソースの使用を保証することができます。SRIを設定することで、改ざんや攻撃からの保護を強化することができます。