Eseguire query sui risultati di Amazon GuardDuty - Amazon Athena

Eseguire query sui risultati di Amazon GuardDuty

Amazon GuardDuty è un servizio di monitoraggio della sicurezza che consente di identificare attività impreviste e potenzialmente non autorizzate o dannose nell'ambiente AWS. Quando rileva attività impreviste e potenzialmente dannose, GuardDuty genera risultati relativi alla sicurezza che è possibile esportare in Amazon S3 per l'archiviazione e l'analisi. Dopo aver esportato i risultati in Amazon S3, è possibile utilizzare Athena per eseguire le query. In questo articolo viene illustrato come creare una tabella Athena per i risultati GuardDuty ed eseguire query su di essi.

Per maggiori informazioni su Amazon GuardDuty, consulta la Guida per l'utente di Amazon GuardDuty.

Prerequisiti

  • Attivare la funzione GuardDuty per l'esportazione dei risultati in Amazon S3. Per le fasi, consulta Esportazione dei risultati nella Guida per l'utente di Amazon GuardDuty.

Creare una tabella in Athena per i risultati GuardDuty

Per eseguire query sui risultati GuardDuty da Athena, è necessario creare una tabella.

Per creare una tabella in Athena per i risultati GuardDuty
  1. Aprire la console Athena all'indirizzo https://console.aws.amazon.com/athena/.

  2. Incollare la seguente istruzione DDL nella console Athena. Modificare i valori in LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/' per puntare ai risultati GuardDuty in Amazon S3.

    CREATE EXTERNAL TABLE `gd_logs` ( `schemaversion` string, `accountid` string, `region` string, `partition` string, `id` string, `arn` string, `type` string, `resource` string, `service` string, `severity` string, `createdat` string, `updatedat` string, `title` string, `description` string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/' TBLPROPERTIES ('has_encrypted_data'='true')
    Nota

    SerDe prevede che ogni documento JSON sia su una singola riga di testo senza caratteri di terminazione riga che separano i campi nel registro. Se il testo JSON è formattato, quando si prova a eseguire una query sulla tabella dopo averla creata, è possibile che venga visualizzato un messaggio di errore come HIVE_CURSOR_ERROR: Row is not a valid JSON Object (HIVE_CURSOR_ERROR: la riga non è un oggetto JSON valido) o HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE_CURSOR_ERROR: JSONParseException: fine di input imprevisto: indicatore di chiusura previsto per OBJECT). Per ulteriori informazioni, consulta File di dati JSON nella documentazione OpenX SerDe su GitHub.

  3. Eseguire la query nella console Athena per registrare la tabella gd_logs. Al termine della query, i risultati sono pronti per le query da Athena.

Query di esempio

Negli esempi seguenti viene illustrato come eseguire query sui risultati GuardDuty da Athena.

Esempio Estrazione dei dati DNS

La query seguente restituisce informazioni relative alle istanze Amazon EC2 che potrebbero estrarre i dati tramite query DNS.

SELECT title, severity, type, id AS FindingID, accountid, region, createdat, updatedat, json_extract_scalar(service, '$.count') AS Count, json_extract_scalar(resource, '$.instancedetails.instanceid') AS InstanceID, json_extract_scalar(service, '$.action.actiontype') AS DNS_ActionType, json_extract_scalar(service, '$.action.dnsrequestaction.domain') AS DomainName, json_extract_scalar(service, '$.action.dnsrequestaction.protocol') AS protocol, json_extract_scalar(service, '$.action.dnsrequestaction.blocked') AS blocked FROM gd_logs WHERE type = 'Trojan:EC2/DNSDataExfiltration' ORDER BY severity DESC
Esempio - Accesso utente IAM non autorizzato

La query seguente restituisce tutti i tipi di risultati UnauthorizedAccess:IAMUser per un'entità principale IAM da tutte le Regioni.

SELECT title, severity, type, id, accountid, region, createdat, updatedat, json_extract_scalar(service, '$.count') AS Count, json_extract_scalar(resource, '$.accesskeydetails.username') AS IAMPrincipal, json_extract_scalar(service,'$.action.awsapicallaction.api') AS APIActionCalled FROM gd_logs WHERE type LIKE '%UnauthorizedAccess:IAMUser%' ORDER BY severity desc;

Suggerimenti per le query sui risultati GuardDuty

Quando si crea la query, tenere a mente i seguenti punti.