Device-side metrics - AWS IoT Device Defender

Device-side metrics

Quando si crea un profilo di sicurezza, è possibile specificare il comportamento previsto del dispositivo IoT configurando comportamenti e soglie per i parametri generati dai dispositivi IoT. Di seguito sono riportati i parametri sul lato dispositivo, ovvero i parametri degli agenti installati sui dispositivi.

Byte in uscita (aws:all-bytes-out)

Numero di byte in uscita da un dispositivo durante un determinato periodo di tempo.

Usa questo parametro per specificare la quantità massima o minima di traffico in uscita che un dispositivo può inviare, misurata in byte, in un determinato periodo di tempo.

Compatibile con: Rule Detect | ML Detect

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: byte

Durata: un numero intero non negativo. I valori validi sono 300, 600, 900, 1800 o 3.600 secondi.

Esempio
{ "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 }
Esempio utilizzando un 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 }
Esempio con ML Detect
{ "name": "Outbound traffic ML behavior", "metric": "aws:all-bytes-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Byte in entrata (aws:all-bytes-in)

Numero di byte in entrata in un dispositivo durante un determinato periodo di tempo.

Usa questo parametro per specificare la quantità massima o minima di traffico in entrata che un dispositivo può ricevere, misurata in byte, in un determinato periodo di tempo.

Compatibile con: Rule Detect | ML Detect

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: byte

Durata: un numero intero non negativo. I valori validi sono 300, 600, 900, 1800 o 3.600 secondi.

Esempio
{ "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 }
Esempio utilizzando un 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 }
Esempio con ML Detect
{ "name": "Inbound traffic ML behavior", "metric": "aws:all-bytes-in", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Conteggio di porte TCP in ascolto (aws:num-listening-tcp-ports)

Numero delle porte TCP su cui il dispositivo è in ascolto.

Usa questo parametro per specificare il numero massimo o minimo di porte TCP che ogni dispositivo dovrebbe monitorare.

Compatibile con: Rule Detect | ML Detect

Unità: errori

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: errori

Durata: un numero intero non negativo. I valori validi sono 300, 600, 900, 1800 o 3.600 secondi.

Esempio
{ "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 }
Esempio utilizzando un 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 }
Esempio di utilizzo di ML Detect
{ "name": "Max TCP Port ML behavior", "metric": "aws:num-listening-tcp-ports", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Conteggio porte UDP in ascolto (aws:num-listening-udp-ports)

Numero delle porte UDP su cui il dispositivo è in ascolto.

Usa questo parametro per specificare il numero massimo o minimo di porte UDP che ogni dispositivo dovrebbe monitorare.

Compatibile con: Rule Detect | ML Detect

Unità: errori

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: errori

Durata: un numero intero non negativo. I valori validi sono 300, 600, 900, 1800 o 3.600 secondi.

Esempio
{ "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 }
Esempio utilizzando un 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 }
Esempio con ML Detect
{ "name": "Max UPD Port ML behavior", "metric": "aws:num-listening-tcp-ports", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Pacchetti in uscita (aws:all-packets-out)

Numero di pacchetti in uscita da un dispositivo durante un determinato periodo di tempo.

Usa questo parametro per specificare la quantità massima o minima di traffico in uscita totale che un dispositivo può inviare in un determinato periodo di tempo.

Compatibile con: Rule Detect | ML Detect

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: pacchetti

Durata: un numero intero non negativo. I valori validi sono 300, 600, 900, 1800 o 3.600 secondi.

Esempio
{ "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 }
Esempio utilizzando un 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 }
Esempio con ML Detect
{ "name": "Outbound sent ML behavior", "metric": "aws:all-packets-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Pacchetti in entrata (aws:all-packets-in)

Numero di pacchetti in entrata in un dispositivo durante un determinato periodo di tempo.

Usa questo parametro per specificare la quantità massima o minima di traffico in entrata totale che un dispositivo può ricevere in un determinato periodo di tempo.

Compatibile con: Rule Detect | ML Detect

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: pacchetti

Durata: un numero intero non negativo. I valori validi sono 300, 600, 900, 1800 o 3.600 secondi.

Esempio
{ "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 }

Esempio utilizzando un 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 }
Esempio con ML Detect
{ "name": "Inbound sent ML behavior", "metric": "aws:all-packets-in", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

IP di destinazione (aws:destination-ip-addresses)

Set di destinazioni IP.

Usa questo parametro per specificare un set di CIDR (Classless Inter-Domain Routings) consentiti (precedentemente chiamati whitelist) o non consentiti (precedentemente chiamati blacklist) da cui ciascun dispositivo deve o non deve connettersi a AWS IoT.

Compatibile con: Rules Detect

Operatori: in-cidr-set | not-in-cidr-set

Valori: elenco di CIDR

Unità: n/d

Esempio
{ "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 }

Porte TCP in ascolto (aws:listening-tcp-ports)

Porte TCP su cui il dispositivo è in ascolto.

Usa questo parametro per specificare un set di porte TCP consentite (precedentemente chiamate whitelist) o non consentite (precedentemente chiamate blacklist) su cui ciascun dispositivo deve o non deve restare in ascolto.

Compatibile con: Rules Detect

Operatori: in-port-set | not-in-port-set

Valori: elenco di porte

Unità: n/d

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

Porte UDP in ascolto (aws:listening-udp-ports)

Porte UDP su cui il dispositivo è in ascolto.

Usa questo parametro per specificare un set di porte UDP consentite (precedentemente chiamate whitelist) o non consentite (precedentemente chiamate blacklist) su cui ciascun dispositivo deve o non deve restare in ascolto.

Compatibile con: Rules Detect

Operatori: in-port-set | not-in-port-set

Valori: elenco di porte

Unità: n/d

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

Conteggio delle connessioni TCP stabilite (aws:num-established-tcp-connections)

Numero di connessioni TCP per un dispositivo.

Usa questo parametro per specificare il numero massimo o minimo di connessioni TCP attive che ciascun dispositivo può avere (Tutte le TCP con stati).

Compatibile con: Rule Detect | ML Detect

Operatori: less-than | less-than-equals | greater-than | greater-than-equals

Valore: intero non negativo

Unità: connessioni

Esempio
{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 3 }, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
Esempio utilizzando un 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 }
Esempio con ML Detect
{ "name": "Connection count ML behavior", "metric": "aws:num-established-tcp-connections", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

Specifica del documento di parametri dei dispositivi

Struttura generale

Nome lungo

Nome breve

Richiesto

Type

Vincoli

Note

header

hed

Y

Oggetto

Blocco completo necessario per un report in formato corretto.

parametri

met

Y

Oggetto

Un report può avere entrambi o almeno un metrics o un blocco custom_metrics.

custom_metrics

cmet

Y

Oggetto

Un report può avere entrambi o almeno un metrics o un blocco custom_metrics.

Blocco di intestazione

Nome lungo

Nome breve

Richiesto

Type

Vincoli

Note

report_id

rid

Y

Numero intero

Valore crescente in maniera monotona. Timestamp epoch consigliato.

version

v

Y

Stringa

Major.Minor

Incrementi minori con aggiunta di campo. Incrementi maggiori se i parametri vengono rimossi.

Blocco dei parametri:

Connessioni TCP

Nome lungo

Nome breve

Elemento padre

Richiesto

Type

Vincoli

Note

tcp_connections

tc

parametri

N

Oggetto

established_connections

ec

tcp_connections

N

Oggetto

Stato connessione TCP stabilita

connections

cs

established_connections

N

Elenco<Oggetto>

remote_addr

rad

connections

Y

Numero

ip:porta

IP può essere ipv6 o ipv4

local_port

lp

connections

N

Numero

>= 0

local_interface

li

connections

N

Stringa

Nome interfaccia

total

t

established_connections

N

Numero

>= 0

Numero di connessioni stabilite.

Porte TCP in ascolto

Nome lungo

Nome breve

Elemento padre

Richiesto

Type

Vincoli

Note

listening_tcp_ports

tp

parametri

N

Oggetto

ports

pts

listening_tcp_ports

N

Elenco<Oggetto>

> 0

port

pt

ports

N

Numero

> 0

I numeri di porta devono essere maggiori di 0

interface

if

ports

N

Stringa

Nome interfaccia

total

t

listening_tcp_ports

N

Numero

>= 0

Porte UDP in ascolto

Nome lungo

Nome breve

Elemento padre

Richiesto

Type

Vincoli

Note

listening_udp_ports

up

parametri

N

Oggetto

ports

pts

listening_udp_ports

N

Elenco<Porta>

> 0

port

pt

ports

N

Numero

> 0

I numeri di porta devono essere maggiori di 0

interface

if

ports

N

Stringa

Nome interfaccia

total

t

listening_udp_ports

N

Numero

>= 0

Statistiche di rete

Nome lungo

Nome breve

Elemento padre

Richiesto

Type

Vincoli

Note

network_stats

ns

metrics

N

Oggetto

bytes_in

bi

network_stats

N

Numero

Parametro delta, >= 0

bytes_out

bo

network_stats

N

Numero

Parametro delta, >= 0

packets_in

pi

network_stats

N

Numero

Parametro delta, >= 0

packets_out

po

network_stats

N

Numero

Parametro delta, >= 0

Esempio

La seguente struttura JSON utilizza nomi lunghi.

{ "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" ] } ] } }
Esempio di struttura JSON con nomi brevi
{ "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" ] } ] } }

Invio di parametri dai dispositivi

AWS IoT Device Defender Detect permette di raccogliere, aggregare e monitorare i dati dei parametri generati dai dispositivi AWS IoT per identificare i dispositivi che presentano un comportamento anomalo. In questa sezione viene illustrato come inviare parametri da un dispositivo a AWS IoT Device Defender.

È necessario distribuire in modo sicuro AWS IoT SDK versione due sui dispositivi AWS IoT connessi o nei gateway dei dispositivi per raccogliere i parametri lato dispositivo. Vedi l'elenco completo degli SDK qui.

Puoi utilizzare AWS IoT Device Client per pubblicare parametri perché fornisce un singolo agente che copre le funzionalità presenti in AWS IoT Device Defender e in AWS IoT Device Management. Queste caratteristiche includono processi, tunneling sicuro, pubblicazione di parametri AWS IoT Device Defender e altro ancora.

Pubblichi i parametri lato dispositivo sull'argomento riservato in AWS IoT per la raccolta e la valutazione di AWS IoT Device Defender.

Utilizzo di AWS IoT Device Client per la pubblicazione di parametri

Per installare AWS IoT Device Client, puoi scaricarlo da Github. Dopo aver installato il AWS IoT Device Client sul dispositivo per il quale si desidera raccogliere dati sul lato dispositivo, è necessario configurarlo per inviare parametri sul lato dispositivo a AWS IoT Device Defender. Verificare che l'AWS IoT Device Client File di configurazione abbia i seguenti parametri impostati nella sezione device-defender:

"device-defender": { "enabled": true, "interval-in-seconds": 300 }
avvertimento

È necessario impostare l'intervallo di tempo su un minimo di 300 secondi. Se si imposta l'intervallo di tempo su un valore inferiore a 300 secondi, i dati dei parametri potrebbero essere limitati.

Dopo aver aggiornato la configurazione, è possibile creare profili e comportamenti di sicurezza nell’AWS IoT Device Defender console per monitorare i parametri che i dispositivi pubblicano sul cloud. Puoi trovare i parametri pubblicati nell’AWS IoT Core console scegliendo Defend (Protezione), Detect (Rileva) e quindi Metrics (Parametri).