Métricas do lado do dispositivo - AWS IoT Device Defender

Métricas do lado do dispositivo

Ao criar um Perfil de segurança, você pode especificar o comportamento esperado do seu dispositivo de IoT configurando comportamentos e limites para métricas geradas por dispositivos de IoT. A seguir são apresentadas as métricas do lado do dispositivo, que são métricas de atendentes instalados nos dispositivos.

Bytes de saída (aws:all-bytes-out)

O número de bytes de saída de um dispositivo durante um determinado período.

Use essa métrica para especificar a quantidade máxima ou mínima de tráfego de saída que um dispositivo deve enviar, medido em bytes em um determinado período.

Compatível com: regras do Detect | ML Detect

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: bytes

Duração: um inteiro não negativo. Os valores válidos são 300, 600, 900, 1800 ou 3.600 segundos.

exemplo
{ "name": "TCP outbound traffic", "metric": "aws:all-bytes-out", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 4096 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo usando um statisticalThreshold.
{ "name": "TCP outbound traffic", "metric": "aws:all-bytes-out", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Outbound traffic ML behavior", "metric": "aws:all-bytes-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Bytes em (aws:all-bytes-in)

O número de bytes de entrada para um dispositivo durante um determinado período.

Use essa métrica para especificar a quantidade máxima ou mínima de tráfego de entrada que um dispositivo deve receber, medido em bytes em um determinado período.

Compatível com: regras do Detect | ML Detect

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: bytes

Duração: um inteiro não negativo. Os valores válidos são 300, 600, 900, 1800 ou 3.600 segundos.

exemplo
{ "name": "TCP inbound traffic", "metric": "aws:all-bytes-in", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 4096 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo usando um statisticalThreshold.
{ "name": "TCP inbound traffic", "metric": "aws:all-bytes-in", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Inbound traffic ML behavior", "metric": "aws:all-bytes-in", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Contagem de porta TCP de escuta (aws:num-listening-tcp-ports)

O número de portas TCP nas quais o dispositivo está em escuta.

Use essa métrica para especificar o número máximo de portas TCP em que cada dispositivo deve escutar.

Compatível com: regras do Detect | ML Detect

Unidade: falhas

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: falhas

Duração: um inteiro não negativo. Os valores válidos são 300, 600, 900, 1800 ou 3.600 segundos.

exemplo
{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 5 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo usando um statisticalThreshold.
{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Max TCP Port ML behavior", "metric": "aws:num-listening-tcp-ports", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Contagem de porta UDP de escuta (aws:num-listening-udp-ports)

O número de portas UDP nas quais o dispositivo está em escuta.

Use essa métrica para especificar o número máximo de portas UDP em que cada dispositivo deve escutar.

Compatível com: regras do Detect | ML Detect

Unidade: falhas

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: falhas

Duração: um inteiro não negativo. Os valores válidos são 300, 600, 900, 1800 ou 3.600 segundos.

exemplo
{ "name": "Max UDP Ports", "metric": "aws:num-listening-udp-ports", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 5 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo usando um statisticalThreshold.
{ "name": "Max UDP Ports", "metric": "aws:num-listening-udp-ports", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Max UPD Port ML behavior", "metric": "aws:num-listening-tcp-ports", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Saída de pacotes (aws:all-packets-out)

O número de pacotes de saída de um dispositivo durante um determinado período.

Use esta métrica para especificar a quantidade máxima ou mínima do tráfego total de saída que um dispositivo deve enviar em um determinado período.

Compatível com: regras do Detect | ML Detect

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: pacotes

Duração: um inteiro não negativo. Os valores válidos são 300, 600, 900, 1800 ou 3.600 segundos.

exemplo
{ "name": "TCP outbound traffic", "metric": "aws:all-packets-out", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 100 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo usando um statisticalThreshold.
{ "name": "TCP outbound traffic", "metric": "aws:all-packets-out", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Outbound sent ML behavior", "metric": "aws:all-packets-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Pacotes em (aws:all-packets-in)

O número de pacotes de entrada para um dispositivo durante um determinado período.

Use esta métrica para especificar a quantidade máxima ou mínima do tráfego total de entrada que um dispositivo deve receber em um determinado período.

Compatível com: regras do Detect | ML Detect

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: pacotes

Duração: um inteiro não negativo. Os valores válidos são 300, 600, 900, 1800 ou 3.600 segundos.

exemplo
{ "name": "TCP inbound traffic", "metric": "aws:all-packets-in", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 100 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

Exemplo usando um statisticalThreshold.

{ "name": "TCP inbound traffic", "metric": "aws:all-packets-in", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Inbound sent ML behavior", "metric": "aws:all-packets-in", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

IPs de destino (aws:destination-ip-addresses)

Um conjunto de destinos IP.

Use esta métrica para especificar um conjunto de Encaminhamento Entre Domínios Sem Classificação (CIDR) permitidos (anteriormente chamado de lista de permissões) ou negados (anteriormente chamado de lista negra) dos quais cada dispositivo deve ou não se conectar à AWS IoT.

Compatível com: regras do Detect

Operadores: in-cidr-set | not-in-cidr-set

Valores: uma lista de CIDRs

Unidades: n/a

exemplo
{ "name": "Denied source IPs", "metric": "aws:destination-ip-address", "criteria": { "comparisonOperator": "not-in-cidr-set", "value": { "cidrs": [ "12.8.0.0/16", "15.102.16.0/24" ] } }, "suppressAlerts": true }

Portas TCP de escuta (aws:listening-tcp-ports)

As portas TCP nas quais o dispositivo está em escuta.

Use essa métrica para especificar um conjunto de portas TCP permitidas (anteriormente chamado de lista de permissões) ou negadas (anteriormente chamado de lista negra) em que cada dispositivo deve ou não ouvir.

Compatível com: regras do Detect

Operadores: in-port-set | not-in-port-set

Valores: uma lista de portas

Unidades: n/a

{ "name": "Listening TCP Ports", "metric": "aws:listening-tcp-ports", "criteria": { "comparisonOperator": "in-port-set", "value": { "ports": [ 443, 80 ] } }, "suppressAlerts": true }

Portas UDP de escuta (aws:listening-udp-ports)

As portas UDP nas quais o dispositivo está em escuta.

Use essa métrica para especificar um conjunto de portas UDP permitidas (anteriormente chamado de lista de permissões) ou negadas (anteriormente chamado de lista negra) em que cada dispositivo deve ou não ouvir.

Compatível com: regras do Detect

Operadores: in-port-set | not-in-port-set

Valores: uma lista de portas

Unidades: n/a

{ "name": "Listening UDP Ports", "metric": "aws:listening-udp-ports", "criteria": { "comparisonOperator": "in-port-set", "value": { "ports": [ 1025, 2000 ] } } }

Contagem de conexões TCP estabelecidas (aws:num-established-tcp-connections)

O número de conexões TCP para um dispositivo.

Use esta métrica para especificar o número máximo ou mínimo de conexões TCP ativas que cada dispositivo deve ter (todos os estados TCP).

Compatível com: regras do Detect | ML Detect

Operadores: less-than | less-than-equals | greater-than | greater-than-equals

Valor: um inteiro não negativo

Unidades: conexões

exemplo
{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 3 }, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo usando um statisticalThreshold.
{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
exemplo Exemplo de uso do ML Detect
{ "name": "Connection count ML behavior", "metric": "aws:num-established-tcp-connections", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Especificação da documentação de métricas do dispositivo

Estrutura geral

Nome longo

Nome curto

Obrigatório

Tipo

Restrições

Observações

cabeçalho

hed

Y

Objeto

Bloco completo necessário para um relatório bem formado.

métricas

met

Y

Objeto

Um relatório pode ter ambos ou pelo menos um bloqueio metrics ou custom_metrics.

custom_metrics

cmet

Y

Objeto

Um relatório pode ter ambos ou pelo menos um bloqueio metrics ou custom_metrics.

Bloco do cabeçalho

Nome longo

Nome curto

Obrigatório

Tipo

Restrições

Observações

report_id

rid

Y

Inteiro

Aumentando o valor de forma monotônica. Timestamp epoch recomendado.

versão

v

Y

String

Major.Minor

Pequenos incrementos com adição de campo. Principais incrementos se as métricas forem removidas.

Bloco de métricas:

Conexões TCP

Nome longo

Nome curto

Elemento principal

Obrigatório

Tipo

Restrições

Observações

tcp_connections

tc

métricas

N

Objeto

established_connections

ec

tcp_connections

N

Objeto

Estado TCP estabelecido

conexões

cs

established_connections

N

List<Object>

remote_addr

rad

conexões

Y

Número

ip:port

IP pode ser IPv6 ou IPv4

local_port

lp

connections

N

Número

>= 0

local_interface

li

conexões

N

String

Nome da interface

total

t

established_connections

N

Número

>= 0

Número de conexões estabelecidas

Portas TCP de escuta

Nome longo

Nome curto

Elemento principal

Obrigatório

Tipo

Restrições

Observações

listening_tcp_ports

tp

métricas

N

Objeto

portas

pts

listening_tcp_ports

N

List<Object>

> 0

porta

pt

portas

N

Número

> 0

as portas devem ser números maiores que 0

interface

se

portas

N

String

Nome da interface

total

t

listening_tcp_ports

N

Número

>= 0

Portas UDP de escuta

Nome longo

Nome curto

Elemento principal

Obrigatório

Tipo

Restrições

Observações

listening_udp_ports

up

métricas

N

Objeto

portas

pts

listening_udp_ports

N

List<Port>

> 0

porta

pt

portas

N

Número

> 0

As portas devem ser números maiores que 0

interface

se

portas

N

String

Nome da interface

total

t

listening_udp_ports

N

Número

>= 0

Estatísticas de rede

Nome longo

Nome curto

Elemento principal

Obrigatório

Tipo

Restrições

Observações

network_stats

ns

métricas

N

Objeto

bytes_in

bi

network_stats

N

Número

Métrica delta, >= 0

bytes_out

bo

network_stats

N

Número

Métrica delta, >= 0

packets_in

pi

network_stats

N

Número

Métrica delta, >= 0

packets_out

po

network_stats

N

Número

Métrica delta, >= 0

exemplo

A seguinte estrutura JSON usa nomes longos.

{ "header": { "report_id": 1530304554, "version": "1.0" }, "metrics": { "listening_tcp_ports": { "ports": [ { "interface": "eth0", "port": 24800 }, { "interface": "eth0", "port": 22 }, { "interface": "eth0", "port": 53 } ], "total": 3 }, "listening_udp_ports": { "ports": [ { "interface": "eth0", "port": 5353 }, { "interface": "eth0", "port": 67 } ], "total": 2 }, "network_stats": { "bytes_in": 29358693495, "bytes_out": 26485035, "packets_in": 10013573555, "packets_out": 11382615 }, "tcp_connections": { "established_connections": { "connections": [ { "local_interface": "eth0", "local_port": 80, "remote_addr": "192.168.0.1:8000" }, { "local_interface": "eth0", "local_port": 80, "remote_addr": "192.168.0.1:8000" } ], "total": 2 } } }, "custom_metrics": { "MyMetricOfType_Number": [ { "number": 1 } ], "MyMetricOfType_NumberList": [ { "number_list": [ 1, 2, 3 ] } ], "MyMetricOfType_StringList": [ { "string_list": [ "value_1", "value_2" ] } ], "MyMetricOfType_IpList": [ { "ip_list": [ "172.0.0.0", "172.0.0.10" ] } ] } }
exemplo Exemplo de estrutura JSON usando nomes curtos
{ "hed": { "rid": 1530305228, "v": "1.0" }, "met": { "tp": { "pts": [ { "if": "eth0", "pt": 24800 }, { "if": "eth0", "pt": 22 }, { "if": "eth0", "pt": 53 } ], "t": 3 }, "up": { "pts": [ { "if": "eth0", "pt": 5353 }, { "if": "eth0", "pt": 67 } ], "t": 2 }, "ns": { "bi": 29359307173, "bo": 26490711, "pi": 10014614051, "po": 11387620 }, "tc": { "ec": { "cs": [ { "li": "eth0", "lp": 80, "rad": "192.168.0.1:8000" }, { "li": "eth0", "lp": 80, "rad": "192.168.0.1:8000" } ], "t": 2 } } }, "cmet": { "MyMetricOfType_Number": [ { "number": 1 } ], "MyMetricOfType_NumberList": [ { "number_list": [ 1, 2, 3 ] } ], "MyMetricOfType_StringList": [ { "string_list": [ "value_1", "value_2" ] } ], "MyMetricOfType_IpList": [ { "ip_list": [ "172.0.0.0", "172.0.0.10" ] } ] } }

Envio de métricas de dispositivos

O AWS IoT Device Defender Detect pode coletar, agregar e monitorar dados de métricas gerados por dispositivos da AWS IoT para identificar dispositivos que apresentam comportamento anormal. Esta seção mostra como enviar métricas de um dispositivo para o AWS IoT Device Defender.

Você deve implantar com segurança a versão dois de SDK de AWS IoT nos dispositivos de AWS IoT conectados ou gateways de dispositivo, para coletar métricas no lado do dispositivo. Veja a lista completa de SDKs aqui.

Você pode usar o AWS IoT Device Client para publicar métricas, já que ele fornece um único atendente que abrange os recursos presentes tanto no AWS IoT Device Defender quanto no AWS IoT Device Management. Esses recursos incluem trabalhos, encapsulamento seguro, publicação de métricas do AWS IoT Device Defender e muito mais.

É possível publicar métricas do lado do dispositivo no tópico reservado, em AWS IoT, para a coleta e avaliação do AWS IoT Device Defender.

Usar o AWS IoT Device Client para publicar métricas

Para instalar o AWS IoT Device Client, você pode baixá-lo do Github. Depois de instalar o AWS IoT Device Client no dispositivo para o qual você deseja coletar dados do lado do dispositivo, é preciso configurá-lo para enviar métricas do lado do dispositivo para o AWS IoT Device Defender. Verifique se o arquivo de configuração do do AWS IoT Device Client tem os seguintes parâmetros definidos na seção device-defender:

"device-defender": { "enabled": true, "interval-in-seconds": 300 }
Atenção

Você precisa definir o intervalo de tempo para um mínimo de 300 segundos. Se você definir o intervalo de tempo para menos de 300 segundos, seus dados de métrica talvez fiquem limitados.

Depois de atualizar sua configuração, você pode criar perfis e comportamentos de segurança no console do AWS IoT Device Defender para monitorar as métricas que seus dispositivos publicam na nuvem. Você pode encontrar métricas publicadas no console do AWS IoT Core escolhendo Defender, Detect e, em seguida, Métricas.