Pular para o conteúdo principal

EIR (Registro de Identidade de Equipamento)

Visão Geral

O HSS inclui um EIR (Registro de Identidade de Equipamento) embutido que fornece verificação de identidade de equipamentos para dispositivos móveis. O EIR valida números IMEI (Identidade Internacional de Equipamento Móvel) para determinar se o equipamento móvel está autorizado, foi roubado ou está sob observação antes de permitir o acesso à rede.

Principais Capacidades

  • Interface S13: Verificação de identidade de equipamento via protocolo Diameter
  • Validação de IMEI: Verificar a identidade do equipamento usando IMEI/IMEISV
  • Correspondência Flexível: Correspondência de padrão baseada em regex para IMEI, IMEISV e IMSI
  • Classificação em Três Níveis: Suporte a lista branca, lista negra e lista cinza
  • Políticas Configuráveis: Comportamento personalizável para equipamentos desconhecidos
  • REST API: Operações completas de CRUD para gerenciamento de regras do EIR

Arquitetura

Interface Diameter

InterfaceID da AplicaçãoParPropósito
S1316.777.252MME/SGSNVerificação de identidade de equipamento

Banco de Dados de Regras de Equipamento

O EIR utiliza um sistema de correspondência baseado em regras flexíveis:

Ações de Regra:

  • whitelist - Permitir equipamento
  • blacklist - Bloquear equipamento
  • greylist - Monitorar equipamento

Padrões Regex: Correspondência contra IMEI, IMEISV ou IMSI

Valores de Status do Equipamento

StatusCódigoSignificadoAção na Rede
Whitelist0Equipamento aprovadoPermitir acesso à rede
Blacklist1Equipamento roubado/bloqueadoNegar acesso à rede
Greylist2Equipamento sob observaçãoPermitir com monitoramento

Interface S13

Operações Suportadas

Solicitação de Verificação de Identidade de Equipamento (ECR) / Resposta de Verificação de Identidade de Equipamento (ECA)

Direção: MME/SGSN → HSS (EIR)

Gatilho: MME verifica a identidade do equipamento durante o anexo ou atualização da área de rastreamento

AVPs de Solicitação:

  • Session-Id
  • Origin-Host, Origin-Realm
  • Destination-Realm
  • Auth-Session-State
  • Terminal-Information
    • IMEI (15 dígitos)
    • Software-Version (2 dígitos, opcional)
  • User-Name (IMSI, opcional)
  • Vendor-Specific-Application-Id

Ações do EIR:

  1. Extrair IMEI, Software-Version (se presente) e IMSI (se presente)
  2. Se IMSI fornecido:
    • Validar se o assinante existe e está habilitado
    • Atualizar o estado do assinante com as informações da última vez visto
  3. Tentar pesquisa de equipamento em ordem de prioridade:
    • Correspondência IMEISV (IMEI + Software-Version concatenados)
    • Correspondência IMEI (somente IMEI)
    • Correspondência IMSI (se fornecido na solicitação)
    • Política de equipamento desconhecido (comportamento padrão configurado)
  4. Retornar status do equipamento

AVPs de Resposta:

  • Session-Id (ecoado da solicitação)
  • Result-Code: 2001 (sucesso)
  • Equipment-Status: 0 (whitelist) / 1 (blacklist) / 2 (greylist)

Respostas de Erro:

  • Experimental-Result: 5422 (equipamento/assinante não encontrado)
  • Experimental-Result: 5012 (erro geral)

Lógica de Correspondência de Equipamentos

Ordem de Prioridade

O EIR utiliza uma estratégia de pesquisa em cascata para maximizar a flexibilidade de correspondência:

1. IMEISV (IMEI + Software-Version)
↓ (se não houver correspondência)
2. IMEI apenas
↓ (se não houver correspondência)
3. IMSI (se fornecido na solicitação)
↓ (se não houver correspondência)
4. Política de Equipamento Desconhecido

Algoritmo de Correspondência

Passo 1: Correspondência IMEISV

  • Concatenar IMEI + Software-Version: "35979139461611" + "08" = "3597913946161108"
  • Testar contra todos os padrões regex de regras do EIR
  • Retornar ação ("whitelist", "blacklist", "greylist") da primeira regra correspondente

Passo 2: Correspondência IMEI (fallback)

  • Usar apenas IMEI: "35979139461611"
  • Testar contra todos os padrões regex de regras do EIR
  • Retornar ação da primeira regra correspondente

Passo 3: Correspondência IMSI (fallback se IMSI fornecido)

  • Usar IMSI da solicitação: "999999876543210"
  • Testar contra todos os padrões regex de regras do EIR
  • Retornar ação da primeira regra correspondente
  • Caso de uso: Bloquear todos os equipamentos para um assinante específico

Passo 4: Política de Equipamento Desconhecido (fallback final)

  • Configuração: eir_unknown_equipment_behaviour
  • Opções:
    • :whitelist - Permitir equipamento desconhecido (permissivo)
    • :blacklist - Bloquear equipamento desconhecido (restritivo)
    • :greylist - Observar equipamento desconhecido (moderado)
    • :reject_unknown_equipment - Retornar erro 5422 (estrito)

Exemplos de Padrões Regex

PadrãoCorrespondênciasCaso de Uso
"35979139461650"IMEI exatoLista branca/lista negra de dispositivo único
"3597913946165.*"Coringa de prefixo IMEIFaixa de fabricante/modelo
"3597913946161108"IMEISV exatoDispositivo específico com versão de software
"999999876543210"IMSIBloquear todos os equipamentos para assinante
"359791.*"Coringa TACAtribuição de todo o tipo de dispositivo

Fluxos de Mensagens Comuns

Fluxo 1: Verificação de Equipamento - IMEI Conhecido na Lista Branca

Fluxo 2: Verificação de Equipamento - IMEI na Lista Negra (Dispositivo Roubado)

Fluxo 3: Verificação de Equipamento - Equipamento Desconhecido (Política de Lista Branca)

Fluxo 4: Verificação de Equipamento - Equipamento Desconhecido (Política de Rejeição)

Fluxo 5: Verificação de Equipamento - Assinante Desconhecido

Fluxo 6: Verificação de Equipamento - Correspondência IMEISV

Fluxo 7: Verificação de Equipamento - Bloqueio de IMSI

REST API

Gerenciamento de Regras do EIR

Caminho base: /api/eir/rule

Listar Todas as Regras do EIR

Solicitação:

GET /api/eir/rule

Resposta (HTTP 200):

{
"data": [
{
"id": "e7f6a5b4-c3d2-4e1f-8a9b-0c1d2e3f4a5b",
"action": "whitelist",
"regex": "3597913946165.*",
"inserted_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z"
},
{
"id": "f8a7b6c5-d4e3-4f2a-9b0c-1d2e3f4a5b6c",
"action": "blacklist",
"regex": "35979139461640",
"inserted_at": "2025-01-16T14:20:00Z",
"updated_at": "2025-01-16T14:20:00Z"
}
]
}

Obter Regra Específica do EIR

Solicitação:

GET /api/eir/rule/{id}

Resposta (HTTP 200):

{
"data": {
"id": "e7f6a5b4-c3d2-4e1f-8a9b-0c1d2e3f4a5b",
"action": "whitelist",
"regex": "3597913946165.*"
}
}

Criar Regra do EIR

Solicitação:

POST /api/eir/rule
Content-Type: application/json

{
"action": "blacklist",
"regex": "35979139461640"
}

Validação:

  • action: Obrigatório, deve ser "whitelist", "blacklist" ou "greylist"
  • regex: Obrigatório, deve ser um padrão regex válido, único entre todas as regras

Resposta (HTTP 201):

{
"data": {
"id": "0362b7ab-9bd6-4d8a-8b1a-2f4c6e8d0a1c",
"action": "blacklist",
"regex": "35979139461640"
}
}

Resposta de Erro (HTTP 400):

{
"errors": {
"regex": ["já foi utilizado"]
}
}

Atualizar Regra do EIR (Parcial)

Solicitação:

PATCH /api/eir/rule/{id}
Content-Type: application/json

{
"action": "greylist"
}

Resposta (HTTP 200):

{
"data": {
"id": "0362b7ab-9bd6-4d8a-8b1a-2f4c6e8d0a1c",
"action": "greylist",
"regex": "35979139461640"
}
}

Substituir Regra do EIR

Solicitação:

PUT /api/eir/rule/{id}
Content-Type: application/json

{
"action": "whitelist",
"regex": "359791394616.*"
}

Resposta (HTTP 200):

{
"data": {
"id": "0362b7ab-9bd6-4d8a-8b1a-2f4c6e8d0a1c",
"action": "whitelist",
"regex": "359791394616.*"
}
}

Deletar Regra do EIR

Solicitação:

DELETE /api/eir/rule/{id}

Resposta (HTTP 204 Sem Conteúdo)

Configuração

Configuração do Serviço Diameter

Aplicação S13 (config/runtime.exs):

%{
application_name: :s13,
application_dictionary: :diameter_gen_3gpp_s13,
vendor_specific_application_ids: [
%{vendor_id: 10415, auth_application_id: 16_777_252}
]
}

Comportamento de Equipamento Desconhecido

Configure o comportamento padrão para equipamentos que não correspondem a nenhuma regra em config/runtime.exs:

Exemplo:

config :hss, :eir,
unknown_equipment_behaviour: :whitelist

Valores Válidos:

  • :whitelist - Permitir equipamento desconhecido (padrão, permissivo)
  • :blacklist - Bloquear equipamento desconhecido (restritivo)
  • :greylist - Monitorar equipamento desconhecido (moderado)
  • :reject_unknown_equipment - Retornar erro Diameter 5422 (estrito)

Casos de Uso:

  • Desenvolvimento/Teste: :whitelist - Permitir todos os dispositivos
  • Produção (permissivo): :whitelist - Apenas bloquear dispositivos ruins conhecidos
  • Produção (moderado): :greylist - Registrar dispositivos desconhecidos para revisão
  • Produção (estrito): :reject_unknown_equipment - Permitir apenas dispositivos registrados

Tratamento de Erros

Código de ResultadoTipoSignificadoCausa
2001SucessoDIAMETER_SUCCESSVerificação de equipamento concluída
5422ExperimentalDIAMETER_ERROR_EQUIPMENT_UNKNOWNAssinante não encontrado ou equipamento desconhecido rejeitado
5012ExperimentalDIAMETER_ERROR_UNKNOWNErro de processamento

Casos de Uso

1. Gestão de Dispositivo Roubado

Cenário: Dispositivo reportado como roubado

Ação:

POST /api/eir/rule
{
"action": "blacklist",
"regex": "35979139461640" # IMEI exato
}

Resultado: Dispositivo negado acesso à rede no próximo anexo

2. Lista Branca de Fabricante

Cenário: Pré-aprovar toda a faixa de modelo de dispositivo

Ação:

POST /api/eir/rule
{
"action": "whitelist",
"regex": "359791394.*" # TAC para fabricante/modelo
}

Resultado: Todos os dispositivos na faixa TAC aprovados

3. Bloqueio de Equipamento de Assinante

Cenário: Bloquear todos os equipamentos para assinante específico (bloqueio de SIM)

Ação:

POST /api/eir/rule
{
"action": "blacklist",
"regex": "999999876543210" # IMSI
}

Resultado: Qualquer equipamento usado com este SIM é bloqueado

4. Lista Cinza de Equipamento de Teste

Cenário: Monitorar equipamento de teste em produção

Ação:

POST /api/eir/rule
{
"action": "greylist",
"regex": "35979139.*" # Faixa TAC de equipamento de teste
}

Resultado: Equipamento permitido, mas sinalizado para monitoramento

5. Controle de Versão de Software

Cenário: Bloquear versão de firmware vulnerável específica

Ação:

POST /api/eir/rule
{
"action": "blacklist",
"regex": "359791394616.*05" # Faixa IMEI + Versão de Software 05
}

Resultado: Apenas dispositivos com Versão de Software "05" na faixa IMEI bloqueados

Detalhes de Implementação

Componentes Internos

A funcionalidade do EIR é implementada usando vários módulos internos:

  • Manipulador de Protocolo S13 - Processamento de mensagens ECR/ECA
  • Motor de Correspondência de Equipamentos - Correspondência baseada em regex para IMEI/IMEISV/IMSI
  • Banco de Dados de Regras do EIR - Armazenamento e pesquisa de padrões
  • Controlador da REST API - Endpoints de gerenciamento de regras

Função de Pesquisa de Status do Equipamento

A pesquisa de status do equipamento segue esta lógica em cascata:

  1. Correspondência IMEISV: Verificar IMEI + Software-Version concatenados
  2. Correspondência IMEI: Verificar apenas IMEI
  3. Correspondência IMSI: Verificar IMSI (se fornecido)
  4. Equipamento Desconhecido: Aplicar política padrão configurada

Resultados Possíveis:

  • whitelist - Equipamento permitido
  • blacklist - Equipamento bloqueado
  • greylist - Equipamento sob observação
  • reject_unknown_equipment - Rejeição estrita

Considerações de Segurança

Privacidade do IMEI

Os números IMEI são identificadores sensíveis. O EIR:

  • Não registra valores de IMEI em texto simples por padrão
  • Usa pesquisas em banco de dados com hash (se configurado)
  • Restringe o acesso à API a administradores autenticados

Ordenação de Regras

As regras do EIR são avaliadas na ordem do banco de dados (por ID). Para padrões conflitantes:

Regra 1: regex "359791.*" ação "whitelist"  (ampla)
Regra 2: regex "35979139461640" ação "blacklist" (específica)

Recomendação: Crie regras específicas antes de curingas amplos para garantir que a lista negra tenha precedência.

Limitação de Taxa

Considere implementar limitação de taxa em:

  • Solicitações S13 ECR de pares não confiáveis
  • Modificações de regras da REST API do EIR
  • Consultas de pesquisa de IMEI para prevenir ataques de enumeração

Documentação Relacionada

Apêndice: Estrutura do IMEI

Formato do IMEI (15 dígitos)

35 9791 394616 1
│ │ │ └─ Dígito de verificação (algoritmo de Luhn)
│ │ └─ Número de série (6 dígitos)
│ └─ FAC (Código de Montagem Final, 4 dígitos)
└─ TAC (Código de Atribuição de Tipo, 8 dígitos no total, incluindo RBI)
│ └─ RBI (Identificador do Corpo de Relato, 2 dígitos)
└─ Fabricante/Modelo (6 dígitos)

Formato do IMEISV (16 dígitos)

35 9791 394616 1 08
│ │ │ │ └─ Versão de Software (2 dígitos)
└─ IMEI (15 dígitos)

Exemplos de Padrões

IMEI/IMEISVPadrãoCorrespondências
3597913946161083597913946161.*Todos os dispositivos com TAC+FAC+Serial 359791394616*
35979139461614035979139461614.Todos os dígitos de verificação para Serial 359791394616141-9
3597913946164035979139461640Correspondência exata de IMEI
35979139461630083597913946163008Correspondência exata de IMEISV (IMEI + SV)