拡張機能はブラウザ内の特別な権限にアクセスできるため、攻撃者にとって格好のターゲット 無償ツールキットで拡張機能が不正使用されると、その拡張機能のすべてのユーザーが 防ぐことができます。以下を組み込むことで、拡張機能の安全性とユーザーを保護 学びました。
デベロッパー アカウントを保護する
拡張機能コードは、Google アカウントを通じてアップロード、更新されます。開発者がアカウントが 攻撃者は悪意のあるコードをすべてのユーザーに直接 push する可能性があります。以下の方法でこれらのアカウントを保護します。 特にデベロッパー アカウントを作成し、2 要素認証プロセスを有効にしていることが望ましい。 セキュリティ キーが必要です。
グループを選択したままにする
グループ公開を使用している場合は、グループを信頼できるデベロッパーに制限します。同意しない 知らない人からのメンバーシップ リクエスト。
HTTP を使わない
データをリクエストまたは送信するときは、HTTP 接続は使用しないでください。HTTP 接続は、すべての HTTP 盗聴したり改変したりします。HTTPS が組み込まれているため、常に HTTPS を使用することをおすすめします。 ほとんどの中間者攻撃を回避できます。
最小限の権限をリクエストする
Chrome ブラウザは、拡張機能が明示的にリクエストした権限へのアクセスを制限している マニフェストを使用します。拡張機能では、API と API の登録のみを行い、権限を最小限に抑える ウェブサイト全体。任意のコードは最小限に抑える必要があります。
拡張機能の権限を制限することで、潜在的な攻撃者が悪用できるものを制限できる。
クロスオリジンの XMLHttpRequest
拡張機能は、拡張機能自体とドメインからリソースを取得するためにのみ XMLHttpRequest を使用できます。 権限で指定されます。
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"permissions": [
"/*",
"https://*.google.com/"
],
"manifest_version": 2
}
この拡張機能は、developer.chrome.com と Google のサブドメインへのアクセスを
権限に "/*"
と "https://*google.com/"
をリストする。もし
アクセスするウェブサイトとやり取りできる権限は、
一致パターン。攻撃者は、"https://user_bank_info.com"
または
"https://malicious_website.com"
とやり取りします。
マニフェスト フィールドを制限する
マニフェストに不要な登録を含めると脆弱性が生じ、拡張される 目に留まりやすくなりますマニフェスト フィールドは、拡張機能が依存するフィールドに限定し、特定のフィールドを指定します。 登録できます。
外部接続可能
externally_connectable
フィールドを使用して、対象の外部の拡張機能とウェブページを
情報をやり取りできます。拡張機能が外部から接続できるユーザーを制限します
提供します。
{
"name": "Super Safe Extension",
"externally_connectable": {
"ids": [
"iamafriendlyextensionhereisdatas"
],
"matches": [
"/*",
"https://*google.com/"
],
"accepts_tls_channel_id": false
},
...
}
ウェブアクセス可能なリソース
web_accessible_resources
で、ウェブからリソースにアクセスできるようにすると、
エクステンションを検出できる可能性があります。
{
...
"web_accessible_resources": [
"images/*.png",
"style/secure_extension.css",
"script/secure_extension.js"
],
...
}
Web アクセスが可能なリソースが多いほど、潜在的な攻撃者が悪用できる可能性も高くなります。維持 最小限に抑える必要があります。
露骨な表現を含むコンテンツ セキュリティ ポリシーを含める
クロスサイトを防ぐため、拡張機能のコンテンツ セキュリティ ポリシーをマニフェストに含めてください。 防止できます。拡張機能がそれ自体からリソースのみを読み込む場合は、以下を登録します。
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"content_security_policy": "default-src 'self'"
"manifest_version": 2
}
特定のホストからのスクリプトを拡張機能に含める必要がある場合は、それらを含めることができます。
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"content_security_policy": "default-src 'self' https://extension.resource.com"
"manifest_version": 2
}
実行可能 API を避ける
コードを実行する API は、より安全な代替手段に置き換える必要があります。
document.write() と innerHTML
document.write()
と innerHTML
を使用して HTML 要素を動的に作成する方が簡単な場合もありますが、
拡張機能と依存しているウェブページが攻撃者にさらされる
できます。代わりに、手動で DOM ノードを作成し、innerText
を使用して動的コンテンツを挿入します。
function constructDOM() {
let newTitle = document.createElement('h1');
newTitle.innerText = host;
document.appendChild(newTitle);
}
eval()
攻撃を防ぐため、可能な限り eval()
は使用しないでください。eval()
は、渡されたコードをすべて実行します。
悪意のある可能性があります。
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// WARNING! Might be evaluating an evil script!
var resp = eval("(" + xhr.responseText + ")");
...
}
}
xhr.send();
代わりに、より安全で高速な JSON.parse()
などのメソッドを使用することをおすすめします。
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// JSON.parse does not evaluate the attacker's scripts.
var resp = JSON.parse(xhr.responseText);
}
}
xhr.send();
コンテンツ スクリプトを慎重に使用する
コンテンツ スクリプトは孤立した世界で暮らしていますが、攻撃の影響を受けません。
- コンテンツ スクリプトは、ウェブページと直接やり取りする拡張機能の唯一の部分です。 このため、悪意のあるウェブページはコンテンツ スクリプトが依存している DOM の一部を操作する可能性があります。 名前付きアイテムなど、予期しないウェブ標準の動作を悪用します。
- ウェブページの DOM とやり取りするには、コンテンツ スクリプトを 表示されます。これにより、コンテンツ スクリプトがサイドチャネル攻撃によってデータ漏洩する脆弱性が生まれる (例:Spectre など)、悪意のあるウェブページが不正使用された場合に攻撃者に乗っ取られる レンダリングされます。
機密性の高い作業は、拡張機能の背景などの専用プロセスで行う必要があります。 スクリプト。拡張機能の権限をコンテンツ スクリプトに誤って公開しないようにする:
- コンテンツ スクリプトからのメッセージが攻撃者( すべての入力を検証してサニタイズし、スクリプトをクロスサイト スクリプティングから保護します)。
- コンテンツ スクリプトに送信されたデータがウェブページに漏洩する可能性があることを想定してください。センシティブ データを送信しない (拡張機能からのシークレット、他のウェブ生成元のデータ、閲覧履歴など)をコンテンツ 使用できます。
- コンテンツ スクリプトがトリガーできる特権操作の範囲を制限する。許可しない
任意の URL へのリクエストをトリガーしたり、任意の引数を
拡張機能 API(たとえば、任意の URL を
fetch
やchrome.tabs.create
API)。
入力の登録とサニタイズ
対象の拡張機能のみにリスナーを制限することで、悪意のあるスクリプトから拡張機能を保護 受信データの送信者の期待、検証、すべての入力のサニタイズを行います。
拡張機能を runtime.onRequestExternal
に登録できるのは、
外部のウェブサイトまたは拡張機能からの通信です。送信者が
できます。
// The ID of an external extension
const kFriendlyExtensionId = "iamafriendlyextensionhereisdatas";
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if (sender.id === kFriendlyExtensionId)
doSomething();
});
拡張機能自体からの runtime.onMessage イベントを介して送信されたメッセージであっても、精査する必要があります。 MessageSender が、不正使用されたコンテンツ スクリプトからのものではないことを確認します。
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.allowedAction)
console.log("This is an allowed action.");
});
ユーザー入力と受信をサニタイズして、拡張機能による攻撃者のスクリプトの実行を防ぎます。 拡張機能自体や承認済みのソースからのデータも含められます。実行可能な API を避ける。
function sanitizeInput(input) {
return input.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}