メールに埋め込まれたスクリプトの起動を阻止する「OutlookChecker」
- Digital100 JPY
製品概要 ・「OutlookChecker」は、 Outlookの受信トレイに届いたメールを自動で検査し、 危険な添付ファイル、 本文内のリスク、 送信者のなりすましの疑いを検出する Outlook アドイン(VSTO)です。 ・「OutlookChecker」は、 Outlook起動時に自動で有効化され、 新着メールを到着都度に検査します。 ・検査は別スレッドで実行し、 Outlook本体の操作をブロッキングしません。 重要: ・本アドインは検査・表示専用であり、 元のメール本文や添付ファイルを書き換えや削除することはありません。 ・安全化された表示内容は 別ウィンドウ(プレビュー)にのみ表示され、 元のメールは、Outlook 本体や、OWA 、スマートフォンで 従来どおり読めます。 主な防御機能 1. 本文の安全化 防御対象: ・本文内の script / iframe / object / embed 等によるスクリプト実行。 ・開封確認・追跡用トリガーとして機能する外部画像。(Webビーコン) ・表示テキストと実際の遷移先が異なるフィッシングリンク。 防御方法: ・許可リスト外の要素(script, iframe, object, embed, form 等)は サニタイズ前にDOMから部分木ごと削除。 ・許可タグ・許可属性・許可 CSS プロパティを列挙した方式。 (HtmlSanitizer) ・外部HTTP/HTTPS画像はすべてブロック。 (添付画像 cid: のみローカル配信で復元) ・リンクは rel="noopener noreferrer nofollow" を付与し、 title属性で実際の遷移先URLを事前表示。 2. 通信遮断(CSP + リクエストブロッキングの二重防御) ・本文プレビューは存在しない仮想オリジンから配信され、 応答ヘッダに次の CSP を付与します。 default-src 'none'; img-src 'self' data:; style-src 'unsafe-inline'; connect-src 'none'; form-action 'none'; frame-src 'none'; object-src 'none'; base-uri 'none'; sandbox allow-same-origin ・さらに、WebView2の WebResourceRequested で全通信を捕捉し、 本文・インライン画像以外の要求は全てブロックします。 ・CSPが何らかの理由で効かなくても、外部通信は成立しません。 3. 添付ファイルの検査 検査対象拡張子(主なもの): .exe .js .vbs .ps1 .bat .cmd .hta .scr .lnk .chm、マクロ有効Office(.docm .xlsm .pptm 等)、HTMLスマグリング系(.html .htm .svg .mht 等)、近年の手口(.rdp .msix .search-ms 等)、旧形式Office(.doc .xls .ppt 等)を含めて100種以上を判定。 高度な検知機能: ・二重拡張子の検出。(例: report.pdf.exe) ・不可視Unicode文字・方向制御文字による拡張子偽装の検出。 ・ファイル名だけではなく、 先頭バイト(マジックナンバー)による実体確認。 (.pdf と名乗る実行ファイルの検出) ・ZIPの中身を展開せずに確認。 (パスワード付きZIP、入れ子アーカイブ、ZIP爆弾の検出) ・OOXML/OLE2のVBAマクロ、PDFの動的要素、 RTFの埋め込みオブジェクトの検出。 4. リンク・送信者の判定 ・表示テキストと遷移先の不一致、IPアドレス直指定、 punycode、URL内認証情報、短縮URLの検出。 ・表示名偽装、Reply-Toの差し替えの検出。 ・Authentication-Resultsヘッダから SPF / DKIM / DMARC の検証結果を読み取り判定。 5. 安全なメールプレビュー ・安全化後の本文を専用ビューアーで表示します。 ・結果は重大度(危険/注意/完了)ごとに色分けして 本文プレビューとは別の領域に表示し(本文からの偽装を防止)、 元のメールは書き換えません。 本文安全化の技術的仕組み ・スクリプト実行を防ぐために、次の3層で防御しています。 (1)サニタイズ段階での除去 ・script iframe object embed form 等を、 本文をサニタイズする前に DOM段階で部分木ごと削除します。 ・その後、許可タグ・許可属性・許可 CSS プロパティの 許可リスト方式で再度サニタイズします。 (2)CSP(Content Security Policy) ・生成したプレビュードキュメントに、 default-src 'none' を軸とする応答ヘッダを付与します。 ・サニタイザを通ってしまったコードがあっても、 CSPで実行を止めます。 (3)通信レベルの遮断 ・WebView2の WebResourceRequested で 全リクエストがネットワークに送出される前に捕捉し、 本文・インライン画像以外は フレームワーク層で全て403拒否します。 ・CSPが無効化されていても、ここで通信が成立しません。 ・この構成により、以下を実現しています。 ・WebView2エンジンの IsScriptEnabled = false に JavaScript実行を完全に無効化。 ・ダウンロード、権限要求、右クリックメニューを、すべて無効化。 ・外部リンククリック時のみ、 確認ダイアログで実際の遷移先URLと punycode表記を明示し、 承諾を得てから既定ブラウザーで開く。 補足: ・正確には、 上記の3層のいずれかが正しく機能していれば スクリプトは実行されませんが、 これは三重化による対策であり、 任意の新しい攻撃手法を 事前に特定して無効化するものではありません。