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
| Interface | ID da Aplicação | Par | Propósito |
|---|---|---|---|
| S13 | 16.777.252 | MME/SGSN | Verificaçã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 equipamentoblacklist- Bloquear equipamentogreylist- Monitorar equipamento
Padrões Regex: Correspondência contra IMEI, IMEISV ou IMSI
Valores de Status do Equipamento
| Status | Código | Significado | Ação na Rede |
|---|---|---|---|
| Whitelist | 0 | Equipamento aprovado | Permitir acesso à rede |
| Blacklist | 1 | Equipamento roubado/bloqueado | Negar acesso à rede |
| Greylist | 2 | Equipamento sob observação | Permitir 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:
- Extrair IMEI, Software-Version (se presente) e IMSI (se presente)
- Se IMSI fornecido:
- Validar se o assinante existe e está habilitado
- Atualizar o estado do assinante com as informações da última vez visto
- 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)
- 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ão | Correspondências | Caso de Uso |
|---|---|---|
"35979139461650" | IMEI exato | Lista branca/lista negra de dispositivo único |
"3597913946165.*" | Coringa de prefixo IMEI | Faixa de fabricante/modelo |
"3597913946161108" | IMEISV exato | Dispositivo específico com versão de software |
"999999876543210" | IMSI | Bloquear todos os equipamentos para assinante |
"359791.*" | Coringa TAC | Atribuiçã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 Resultado | Tipo | Significado | Causa |
|---|---|---|---|
| 2001 | Sucesso | DIAMETER_SUCCESS | Verificação de equipamento concluída |
| 5422 | Experimental | DIAMETER_ERROR_EQUIPMENT_UNKNOWN | Assinante não encontrado ou equipamento desconhecido rejeitado |
| 5012 | Experimental | DIAMETER_ERROR_UNKNOWN | Erro 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:
- Correspondência IMEISV: Verificar IMEI + Software-Version concatenados
- Correspondência IMEI: Verificar apenas IMEI
- Correspondência IMSI: Verificar IMSI (se fornecido)
- Equipamento Desconhecido: Aplicar política padrão configurada
Resultados Possíveis:
whitelist- Equipamento permitidoblacklist- Equipamento bloqueadogreylist- Equipamento sob observaçãoreject_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
- Protocolos Diameter - Especificação do protocolo S13
- Referência da API - Documentação completa da API
- Arquitetura - Arquitetura geral do HSS
- Guia de Operações - Procedimentos operacionais
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/IMEISV | Padrão | Correspondências |
|---|---|---|
| 359791394616108 | 3597913946161.* | Todos os dispositivos com TAC+FAC+Serial 359791394616* |
| 359791394616140 | 35979139461614. | Todos os dígitos de verificação para Serial 359791394616141-9 |
| 35979139461640 | 35979139461640 | Correspondência exata de IMEI |
| 3597913946163008 | 3597913946163008 | Correspondência exata de IMEISV (IMEI + SV) |