Web Risk API を活用したフィッシングサイト対策の実践

1:はじめに

近年、電子メールやSNSを悪用したフィッシング詐欺が急増しています。

本稿では、Google が提供するセキュリティ製品である Web Risk API を利用し、アプリケーションやサービス内で危険な URL を検知する仕組みを構築する方法を解説します。

2:Web Risk APIの概要

Web Risk は、Google が継続的に更新している「安全ではないウェブリソースのリスト」と照合することで、クライアントアプリケーションが URL の安全性を確認できるエンタープライズ向けのセキュリティサービスです。

本 API を用いて、以下の主要な脅威タイプの URL を検出可能です。

  • MALWARE (悪意のあるソフトウェア)
  • SOCIAL_ENGINEERING (ソーシャルエンジニアリング、フィッシング詐欺など)
  • UNWANTED_SOFTWARE (不審または迷惑なソフトウェア)

3:Web Risk の利用形態

Web Risk API には、主に目的に応じた 2つの利用方法があります。

3.1. Lookup API (推奨/手軽な方法) クライアントがチェックしたい URL を直接 Web Risk サーバーに送信し、サーバー側で安全性を判定して結果を即座に返却する方法です。

  • 利点: 実装がシンプルで、迅速に URL の安全性を確認できます。今回の実装例で採用している方式です。

  • 注意点: チェックごとに API コールが発生するため、大量の URL を扱う場合、コスト効率を考慮する必要があります。

3.2. Update API (大規模運用向け) クライアントが、リスクのある URL をハッシュ化したリストを定期的にダウンロードし、ローカルデータベースに保存する方式です。

  • 利点: URL のチェックの大部分をローカルで完結できるため、API コール回数が大幅に削減され、運用コストの最適化につながります。

  • 注意点: 実装が複雑になり、ローカルデータベースの管理が必要になります。

4:事前準備と認証設定

4.1. 必要な Gem のインストール 以下のコマンドを実行し、Web Risk 用のクライアントライブラリをインストールします。

gem install google-cloud-web_risk

gemをインストール

4.2. サービスアカウント認証の設定 Google Cloud のクライアントライブラリは、サービスアカウントを用いた認証を推奨しています。

  • JSON 秘密鍵ファイルの取得: Google Cloud Console でサービスアカウントを作成し、その JSON 形式の秘密鍵ファイルをダウンロードしてください。

サービスアカウントでキーを追加

  • 環境変数の設定: ダウンロードしたファイルの絶対パスを、環境変数 GOOGLE_APPLICATION_CREDENTIALS に設定します。
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/secret-key.json"

これにより、アプリケーションコードに機密情報を記述することなく、認証を完了できます。

5:実装コード例 (Lookup API)

事前準備が完了したら、Lookup API を用いた URL チェック機能を Ruby で実装します。

require "google/cloud/web_risk"
require "google/cloud/web_risk/v1"

def search_uri(uri, threat_type)
  web_risk_service_client = Google::Cloud::WebRisk.web_risk_service

  request = Google::Cloud::WebRisk::V1::SearchUrisRequest.new(
    uri: uri,
    threat_types: [threat_type]
  )

  begin
    response = web_risk_service_client.search_uris(request)

    if response.threat && !response.threat.threat_types.empty?
      puts "URI: #{uri}"
      puts "⚠️ このURLは危ないです:"
      response.threat.threat_types.each do |threat|
        puts " - #{threat}"
      end
    else
      puts "URI: #{uri}"
      puts "✨ このURLは安全です。"
    end
  rescue Google::Cloud::Error => e
    puts "❌ エラー: #{e.message}"
  end
end

uri_to_check = "http://testsafebrowsing.appspot.com/s/malware.html"

threat_type = :MALWARE 

search_uri(uri_to_check, threat_type)

実行結果(例)

結果

6:まとめ

Web Risk API は、アプリケーションのセキュリティレベルを向上させるための強力なツールです。アプリケーション内での不審なリンクのフィルタリングや、ユーザーへの注意喚起に活用することで、フィッシング詐欺による被害を未然に防ぐことができます。

運用においては、Lookup API の手軽さと Update API のコスト効率を比較し、サービス規模に応じた最適な利用形態を選択することが重要です。