https://a.storyblok.com/f/270183/1368x665/95a6757aab/sim-swap_security-check.png

企業レベルのセキュリティチェックでSIMスワップ詐欺を検知する

最終更新日 September 26, 2024

所要時間:1 分

はじめに

このチュートリアルでは Vonage Identity Insights の SIM スワップ機能 を使用して、潜在的なSIMスワップ詐欺を検出することにより、一般的なWebアプリのログインのセキュリティを強化する方法を学びます。

SIMスワップ詐欺とは何か?

SIMスワップ詐欺は、犯罪者がモバイル・プロバイダを騙して、被害者の電話番号を自分の管理下にあるSIMカードに転送させる悪質な手口です。いったん電話番号を乗っ取ると、2要素認証(2FA)をバイパスすることができ、個人の電子メール、銀行口座、または電話ベースの認証に依存するアプリケーションなどの機密アカウントへのアクセスが許可されます。この詐欺は2FAプロセスの脆弱性を悪用するため、アカウントのセキュリティと個人データ保護にとって重大な脅威となります。 このノートンの記事で、SIMスワップ詐欺について詳しく学んでください。.

Vonage Identity InsightsのSIMスワップ機能とは何ですか?

SIMスワップ Vonage Identity InsightsのSIMスワップ機能 は、SIMスワップ詐欺のリスクを軽減するために設計された強力なAPIです。ネットワークオペレータ (通信サービスプロバイダー(CSP)と直接通信することにより、API はユーザーの電話番号が最近新しい SIM カードに移植されたかどうかを検出することができます。この検出メカニズムは、SIMカードの変更に関連する不審な活動を特定することで、アカウントの乗っ取りを防止するのに役立ちます。Vonage Identity InsightsのSIMスワップ機能は、2FAを使用するアプリケーションのセキュリティを強化する信頼性の高い効率的な方法を提供します。

前提条件

  • Node.jsとnpm.

  • ネットワークAPI登録.

  • Vonage API Account

    To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

注:ネットワークAPIは、以下の通信サービス・プロバイダー(CSP)でのみ利用可能です。 以下の通信サービス・プロバイダー(CSPs)と国でのみ利用可能です。

概要

今日のチュートリアルでは、典型的な銀行のウェブアプリケーションのログインページの例を用意しました。SIM Swap Insightが携帯電話会社にSIMの電話番号に最近変更があったかどうかを確認するとき、そのような変更があった場合、ユーザーはログインできません。そうでなければ、アカウントにログインできます。

ユーザーはフロントエンドからログインし、本人確認を行います。フロントエンドはこの情報をサーバーに送信し、サーバーはVonageコミュニケーションサービスと通信し、コミュニケーションサービスプロバイダーとのSIMスワップの詳細を確認します。

The user logins and verifiies their identity via the front end. The front end communicates with the Vonage Communication Services that that check SIM Swap details with the Communication Service Providers.Overview Diagram

プロジェクト・アーキテクチャ

参考までに、プロジェクト・ディレクトリはこのようになります。この 完全なコードはGitHub.

[node_modules]
[public]
  client.js
  style.css
[views]
  main.html
  index.html
.env
server.js
package-lock.json
package.json
private.key

開発環境のセットアップ

はじめに、お使いのマシンにNode.jsとnpmがインストールされている必要があります。また、npmをインストールする必要があります。始めるには、マシンにNode.jsとnpmがインストールされている必要があります。また、以下を含むいくつかのnpmパッケージをインストールする必要があります。 vonage/identity-insights, dotenv, expressそして nodemonを使用して、環境変数、HTTPリクエスト、サーバー操作を処理する。

npm install

アプリの構造

依存関係をインポートして初期化し、public フォルダから静的ファイルを提供するように Express に指示する。Vonageでの認証は、アプリケーションIDと秘密鍵を提供するとIdentityInsights SDKクライアントによって自動的に処理されるため、手動でのJWTやトークン管理は必要ありません。

// server.js


require("dotenv").config();
const path = require("path");
const express = require("express");
const { IdentityInsights } = require("@vonage/identity-insights");
const fs = require("fs");


const app = express();
app.use(express.json());
app.use(express.static("public"));

Vonage Identity Insights クライアントの初期化

次に、環境変数から認証情報を読み取り、IdentityInsights クライアントをインスタンス化する。SDK はすべての認証を内部的に処理する。SDK はアプリケーション ID と秘密鍵を使用して必要なトークンを生成するため、JWT を手動で管理する必要はない。

VONAGE_PRIVATE_KEY環境変数には、private.keyファイルのファイルパス(例:./private.key)または生の鍵文字列そのものを設定することができます。以下のコードでは、両方のケースに対応しています:

const users = {
  user1: { password: "123", phoneNumber: process.env.PHONE_NUMBER }
};

const APPLICATION_ID = process.env.VONAGE_APPLICATION_ID;
const PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY;
const PERIOD = process.env.PERIOD;

if (!APPLICATION_ID || !PRIVATE_KEY) {
  console.error("VONAGE_APPLICATION_ID or VONAGE_PRIVATE_KEY not set");
  process.exit(1);
}

const keyContent = fs.existsSync(PRIVATE_KEY)
  ? fs.readFileSync(PRIVATE_KEY, "utf8")
  : PRIVATE_KEY;

if (!keyContent) {
  console.error(
    "INVALID private key. Check if the file exists or the environment variable is correctly set"
  );
  process.exit(1);
}

const identityClient = new IdentityInsights({
  applicationId: APPLICATION_ID,
  privateKey: keyContent,
});

SIMスワップ・チェック

使用する IDClientを使用すると、SIM Swap Insight を呼び出して電話番号を確認できます。SIM Swap Insight は、2 つのフィールドを通じて、モバイルネットワーク上の SIM カードのアクティベー ション日を検証する:

  • 最新SIMスワップ日時最新のSIM交換が行われた日時(UTC ISO 8601)。

  • is_swapped: 指定された期間にSIMカードが交換されたかどうかを示す

電話番号 電話番号変数はチェックしたい電話番号で、ログイン時にユーザーが入力するものです。ユーザーがログイン時に入力するものです。 PERIOD変数は、SIMが交換されたかどうかをチェックする最大時間数を指定する(1~2400、デフォルトは240)。

レスポンスが成功した場合、isSwapped フィールドの boolean 値は、指定した期間に SIM の入れ替えが発生したかどうかを示す。

async function checkSim(phoneNumber) {
  try {
    const resp = await identityClient.getIdentityInsights({
      phoneNumber: phoneNumber,
      purpose: "FraudPreventionAndDetection",
      insights: {
        format: {},
        originalCarrier: {},
        currentCarrier: {},
        simSwap: {
          period: parseInt(PERIOD),
        },
      },
    });


    return resp.insights?.simSwap?.isSwapped === true;
  } catch (error) {
    console.warn("Identity Insights SDK call failed:", error && error.message);
  }
}

ログインの構築

ログインを実装するために、次のようなPOSTエンドポイントを作成します。 /という POST エンドポイントを作成します。というPOSTエンドポイントを作成します。このエンドポイントは、入力されたユーザー名とパスワードが正しいかどうかをチェックし、アクセスを許可する前にSIMスワップチェックを実行します。

app.post("/login", async (req, res) => {
  try {
    const { username, password } = req.body;
    const user = users[username];
    if (user && user.password === password) {
      const simSwapped = await checkSim(user.phoneNumber);
      if (simSwapped) {
        return res.status(401).json({ message: "SIM Swapped" });
      } else {
        res.json({ message: "Success" });
      }
    } else {
      res.status(401).json({ message: "Invalid username or password" });
    }
  } catch (err) {
    console.error("Error during login:", err);
    res.status(500).json({ message: "Error processing request." });
  }
});

クライアントを構築する

クライアント client.jsファイルはHTML要素に関連する情報を取得し、ログインとSIM Swapチェックを処理するために作成されたサーバーエンドポイントに送信します。サーバーはSIM Swap Insightからのレスポンスを処理し、フロントエンドを通してユーザーにその情報をリレーします。ユーザーのSIMが最近交換された場合、ユーザーに通知し、携帯電話会社に連絡するなど、早急な対応を提案します。

環境変数ファイルの作成

を作成します。 .envファイルを作成し、以下の環境変数を追加する。あなたの vonage_private_keyには、秘密鍵ファイルへのパス(例えば ./private.key)、または生の鍵の内容を文字列で指定します。を参照してください。 Node.jsで環境変数を使う方法については、Michaelのブログ記事を参照してください。.

# Period in hours to check SIM Swap events
PERIOD=72

# Phone Number you'll use for the SIM Swap Insight
PHONE_NUMBER=+990123400
VONAGE_APPLICATION_ID=
VONAGE_PRIVATE_KEY=

フロントエンドの構築

を作成する。 index.htmlページを作成し、ユーザーが認証情報を入力してログインできるようにする。ユーザがユーザ名とパスワードを入力するためのフォームと、SIMスワップが検出された場合に表示されるモーダルがあります: 「警告!警告!あなたのアカウントで最近のSIMスワップが検出されました。アクセスは拒否されました。"

試してみる

サーバーがリッスンするポートを追加する(例えば3000)。

//server.js

app.listen(3000, () => {

  console.log("Server is running on port 3000");

});

サーバーJavaScriptファイルを実行して、Webアプリケーションを初期化します。

node server.js

に移動します。 localhost:3000に移動し、ログイン認証情報を入力する。そのアカウントに関連付けられている電話番号が最近交換された場合は、警告が表示され、ログインできません。そうでなければ、ログインして銀行の概要ページを見ることができます。

結論

おめでとうございます!Vonage Identity Insights SIM Swap Insightを使用して、ユーザーの電話番号が過去数日間に交換されたかどうかを検出する方法を学びました。今日学んだことは、オンラインアカウントを保護し、アカウントの乗っ取りや詐欺につながるSIMスワップ攻撃を防ぐために不可欠です。

SIMスワップがどのように機能し、個人情報にどのような影響を与えるかを理解することは、とても興味深いことです。多要素認証の方法を導入し、一般的なソーシャル・エンジニアリングの手口を知っておくことで、このような詐欺から自社とユーザーを守ることができます。

携帯電話や5Gネットワークが一般的になるにつれ、セキュリティを監視することがさらに重要になっています。SIMカードに異常な動きがないか定期的にチェックし、ソーシャルメディアやオンラインアカウントで共有する個人情報にも気を配りましょう。

質問や共有したいことがありますか?Vonageコミュニティ VonageコミュニティSlackまたは 開発者向けニュースレターでフォローしてください。 X(旧Twitter)YouTubeチャンネル YouTubeチャンネルビデオチュートリアルを購読する。 LinkedInのVonage開発者ページ開発者が学び、コミュニティとつながるためのスペースです。つながりを維持し、進捗状況を共有し、最新の開発者向けニュース、ヒント、イベントを把握してください!

さらに読む

シェア:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda Cavallaroデベロッパー・アドボケイト