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

Detecte fraudes de troca de SIM com verificações de segurança de nível empresarial

Publicado em September 26, 2024

Tempo de leitura: 7 minutos

Introdução

Neste tutorial, você aprenderá a usar o recurso SIM Swap do Vonage Identity Insights para reforçar a segurança de um login típico em um aplicativo web, detectando possíveis fraudes de troca de SIM.

O que é a fraude por troca de cartão SIM?

A fraude por troca de SIM é uma técnica maliciosa na qual os criminosos induzem as operadoras de celular a transferir o número de telefone da vítima para um cartão SIM sob seu controle. Depois de sequestrarem o número de telefone, eles conseguem contornar a autenticação de dois fatores (2FA), o que lhes dá acesso a contas confidenciais, como e-mails pessoais, contas bancárias ou qualquer Application que dependa de verificação por telefone. Essa fraude explora uma vulnerabilidade no processo de 2FA, tornando-se uma ameaça significativa à segurança das contas e à proteção de dados pessoais. Saiba mais sobre a fraude de troca de SIM neste artigo da Norton.

O que é o recurso SIM Swap do Vonage Identity Insights?

O recurso SIM Swap do Vonage Identity Insights é uma API poderosa projetada para mitigar os riscos de fraudes por troca de SIM. Ao se comunicar diretamente com as operadoras de rede (Provedores de Serviços de Comunicação (CSPs), a API consegue detectar se o número de telefone de um usuário foi recentemente transferido para um novo cartão SIM. Esse mecanismo de detecção ajuda a impedir a invasão de contas, identificando atividades suspeitas relacionadas a trocas de cartão SIM. O recurso SIM Swap do Vonage Identity Insights oferece uma maneira confiável e eficiente de aumentar a segurança de aplicativos que utilizam autenticação de dois fatores (2FA).

Pré-requisitos

Observação: As APIs de rede estão disponíveis apenas nos seguintes Provedores de Serviços de Comunicação (CSPs) e países, e a lista de países será ampliada em breve.

Visão geral

Preparei um exemplo de uma página típica de login de um aplicativo bancário para o tutorial de hoje. Quando o SIM Swap Insight verifica junto às operadoras de celular se houve alguma alteração recente no número de telefone do chip, o usuário não consegue fazer o login caso tais alterações tenham ocorrido. Caso contrário, ele poderá acessar sua conta.

O usuário faz login e verifica sua identidade por meio do front-end. O front-end envia essas informações ao servidor, que, por sua vez, se comunica com a Vonage Communication Services para verificar os detalhes da troca de SIM junto aos provedores de serviços de comunicação.

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

Arquitetura do projeto

Para sua referência, é assim que ficará a estrutura do diretório do projeto. Você pode encontrar o código completo no GitHub.

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

Configure seu ambiente de desenvolvimento

Para começar, você precisará ter o Node.js e o npm instalados no seu computador. Você também precisará instalar o npm. Para começar, você precisará ter o Node.js e o npm instalados no seu computador. Você também precisará instalar alguns pacotes do npm, incluindo @vonage/identity-insights, dotenv, expresse nodemon para lidar com variáveis de ambiente, solicitações HTTP e operações do servidor.

npm install

Estruture seu aplicativo

Vamos importar e inicializar nossas dependências e configurar o Express para servir arquivos estáticos da pasta “public”. A autenticação com o Vonage é feita automaticamente pelo cliente do SDK do IdentityInsights quando você fornece seu ID de aplicativo e sua chave privada; não é necessário gerenciar manualmente JWTs ou tokens.

// 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"));

Inicializar o cliente do Vonage Identity Insights

Em seguida, leia suas credenciais a partir das variáveis de ambiente e instancie o cliente do IdentityInsights. O SDK lida com toda a autenticação internamente; ele gera os tokens necessários usando seu ID de aplicativo e sua chave privada, de modo que você não precisa gerenciar os JWTs manualmente.

A variável de ambiente VONAGE_PRIVATE_KEY pode ser definida como o caminho do arquivo private.key (por exemplo, ./private.key) ou como a própria sequência de caracteres da chave. O código abaixo lida com ambos os casos:

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,
});

Verificações de troca de cartão SIM

Usando o identityClient que você acabou de inicializar, é possível chamar o SIM Swap Insight para verificar um número de telefone. O SIM Swap Insight verifica a data de ativação de um cartão SIM na rede móvel por meio de dois campos:

  • latest_sim_swap_at: data e hora em UTC (ISO 8601) da última troca de SIM realizada

  • is_swapped: indica se o cartão SIM foi trocado durante o período especificado

O variável phoneNumber é o número de telefone que você deseja verificar; é o que o usuário insere ao fazer login. A variável PERIOD especifica o número máximo de horas para verificar se o chip foi trocado (de 1 a 2400; o padrão é 240).

Se a resposta for bem-sucedida, o valor booleano no campo isSwapped indica se ocorreu uma troca de SIM durante o período especificado.

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);
  }
}

Criar o login

Para implementar o login, vamos criar um endpoint POST chamado /login que verifica se o nome de usuário e a senha inseridos estão corretos e, em seguida, realiza uma verificação de troca de SIM antes de conceder acesso.

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." });
  }
});

Compilar o cliente

O arquivo client.js obterá as informações relevantes sobre os elementos HTML e as enviará aos endpoints do servidor criados para lidar com as verificações de login e troca de SIM. Seu servidor processa as respostas do SIM Swap Insight e repassa essas informações ao usuário por meio do seu front-end. Se o chip do usuário tiver sido trocado recentemente, informe-o e sugira ações imediatas, como entrar em contato com a operadora de celular.

Criar o arquivo de variáveis de ambiente

Crie um arquivo .env para o seu projeto e adicione as seguintes variáveis de ambiente. Sua VONAGE_PRIVATE_KEY pode ser o caminho para o seu arquivo de chave privada (por exemplo, ./private.key) ou o conteúdo bruto da chave como uma string. Consulte postagem no blog do Michael para obter uma explicação sobre como usar variáveis de ambiente no Node.js.

# 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=

Criar o front-end

Crie um página index.html onde os usuários possam inserir suas credenciais para fazer login. Há um formulário para o usuário inserir seu nome de usuário e senha, além de um modal que aparece caso seja detectada uma troca de SIM, exibindo a mensagem: “Atenção! Foi detectada uma troca recente de cartão SIM na sua Account. Acesso negado.”

Experimente

Adicione uma porta para o servidor escutar, por exemplo, 3000.

//server.js

app.listen(3000, () => {

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

});

Execute o arquivo JavaScript do servidor para inicializar o aplicativo web.

node server.js

Acesse localhost:3000 e digite suas credenciais de login. Se o número de telefone associado a essa conta tiver sido alterado recentemente, você receberá um aviso e não conseguirá fazer o login. Caso contrário, você poderá fazer o login e acessar a página de resumo do banco.

Conclusão

Parabéns, você chegou ao final deste tutorial! Você aprendeu a usar o recurso SIM Swap Insight do Vonage Identity Insights para detectar se os números de telefone dos seus usuários foram trocados nos últimos dias. O que você aprendeu hoje é essencial para proteger contas online e prevenir ataques de troca de SIM, que podem levar à invasão de contas e à fraude.

É fascinante entender como funciona a troca de cartão SIM e como ela afeta as informações pessoais. Ao implementar métodos de autenticação multifatorial e estar ciente das táticas comuns de engenharia social, você pode proteger melhor a si mesmo e aos seus usuários contra esses golpes.

À medida que os celulares e as redes 5G se tornam mais comuns, fica ainda mais importante ficar atento à sua segurança. Verifique regularmente se há atividades incomuns no seu cartão SIM e tenha cuidado com as informações pessoais que você compartilha nas redes sociais e em Accounts online.

Tem alguma dúvida ou quer compartilhar o que está criando?

Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.

Leitura complementar

Compartilhar:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroRepresentante de Desenvolvedores