Raccogliere i log EDR di Uptycs
Questo documento spiega come importare i log Uptycs EDR in Google Security Operations utilizzando Amazon S3. Il parser trasforma i log JSON non elaborati in un modello UDM (Unified Data Model). Estrae innanzitutto i campi dal JSON, esegue la pulizia e l'arricchimento dei dati, quindi mappa le informazioni pertinenti ai campi UDM corrispondenti, gestendo vari tipi di dati e casi limite per garantire una rappresentazione accurata e coerente all'interno dello schema UDM.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Accesso privilegiato a Uptycs
- Accesso privilegiato ad AWS (S3, IAM)
Ottenere i prerequisiti di Uptycs
- Accedi alla console di amministrazione di Uptycs.
- Vai a Configurazione > Utenti.
- Seleziona il tuo utente o crea un utente del account di servizio.
- Fai clic su User API key (Chiave API utente).
- Copia e salva in una posizione sicura i seguenti dettagli:
- Chiave API
- API Secret
- ID cliente
- API Domain (derivato dall'URL di Uptycs, ad esempio
mystack.uptycs.io)
Configura il bucket AWS S3 e IAM per Google SecOps
- Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket.
- Salva il nome e la regione del bucket per riferimento futuro (ad esempio,
uptycs-telemetry-export). - Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente i criteri.
- Cerca i criteri AmazonS3FullAccess.
- Seleziona la policy.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configura il ruolo e il criterio IAM per i caricamenti S3
- Nella console AWS, vai a IAM > Policy.
- Fai clic su Crea criterio > scheda JSON.
Inserisci la seguente policy:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Sid": "AllowListBucket", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }- Sostituisci
uptycs-telemetry-exportse hai inserito un nome bucket diverso.
- Sostituisci
Fai clic su Avanti > Crea policy.
Assegna al criterio il nome
uptycs-s3-write-policy.Vai a IAM > Utenti.
Seleziona l'utente creato per le esportazioni di Uptycs.
Fai clic su Aggiungi autorizzazioni > Allega norme direttamente.
Cerca e seleziona
uptycs-s3-write-policy.Fai clic su Avanti > Aggiungi autorizzazioni.
Configura Uptycs Export Raw Telemetry
- Accedi alla console Uptycs.
- Vai alla sezione di configurazione dell'esportazione.
- Configura la destinazione di esportazione S3.
- Fornisci i seguenti dettagli di configurazione:
- Tipo di esportazione: seleziona Telemetria non elaborata.
- Destinazione: seleziona Amazon S3.
- Formato: seleziona JSON.
- Bucket S3: inserisci
uptycs-telemetry-export. - Prefisso percorso S3: inserisci
telemetry/. - Regione AWS: seleziona la regione del bucket.
- ID chiave di accesso AWS: inserisci la chiave di accesso dell'utente IAM.
- Chiave di accesso segreta AWS: inserisci la chiave di accesso segreta.
- Tipi di eventi: seleziona tutti i tipi di telemetria richiesti.
- Testa e attiva l'esportazione.
Creare un utente IAM di sola lettura per Google SecOps
- Vai alla console AWS > IAM > Utenti.
- Fai clic su Add users (Aggiungi utenti).
- Fornisci i seguenti dettagli di configurazione:
- Utente: inserisci
secops-reader. - Tipo di accesso: seleziona Chiave di accesso - Accesso programmatico.
- Utente: inserisci
- Fai clic su Crea utente.
- Collega la criterio per la lettura minima (personalizzata): Utenti > secops-reader > Autorizzazioni > Aggiungi autorizzazioni > Collega le norme direttamente > Crea norma.
Nell'editor JSON, inserisci la seguente policy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }Imposta il nome su
secops-reader-policy.Vai a Crea criterio > cerca/seleziona > Avanti > Aggiungi autorizzazioni.
Vai a Credenziali di sicurezza > Chiavi di accesso > Crea chiave di accesso.
Scarica il file CSV (questi valori vengono inseriti nel feed).
Configura un feed in Google SecOps per importare i log di Uptycs
- Vai a Impostazioni SIEM > Feed.
- Fai clic su + Aggiungi nuovo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Uptycs EDR logs). - Seleziona Amazon S3 V2 come Tipo di origine.
- Seleziona Uptycs EDR come Tipo di log.
- Fai clic su Avanti.
- Specifica i valori per i seguenti parametri di input:
- URI S3:
s3://uptycs-telemetry-export/telemetry/ - Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- ID chiave di accesso: chiave di accesso utente con accesso al bucket S3.
- Chiave di accesso segreta: chiave segreta dell'utente con accesso al bucket S3.
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- URI S3:
- Fai clic su Avanti.
- Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| osquery_raw_data.answer | read_only_udm.network.dns.answers.name | Valore estratto da osquery_raw_data.answer se osquery_raw_data.answer non è vuoto. |
| osquery_raw_data.container_id | read_only_udm.metadata.product_log_id | Valore estratto da osquery_raw_data.container_id se osquery_raw_data.container_id non è vuoto. |
| osquery_raw_data.local_address | read_only_udm.principal.ip | Valore estratto da osquery_raw_data.local_address se osquery_raw_data.local_address non è vuoto ed è un indirizzo IP valido. |
| osquery_raw_data.local | read_only_udm.principal.ip | In caso contrario, il valore viene estratto da osquery_raw_data.local se osquery_raw_data.local non è vuoto ed è un indirizzo IP valido. |
| osquery_raw_data.local_port | read_only_udm.principal.port | Valore estratto da osquery_raw_data.local_port e convertito in numero intero se osquery_raw_data.local_port non è vuoto. |
| osquery_raw_data.md5 | read_only_udm.target.process.file.md5 | Valore estratto da osquery_raw_data.md5 se osquery_raw_data.md5 non è vuoto. |
| osquery_raw_data.port | read_only_udm.target.port | Valore estratto da osquery_raw_data.port e convertito in numero intero se osquery_raw_data.port non è vuoto. |
| osquery_raw_data.question | read_only_udm.network.dns.questions.name | Valore estratto da osquery_raw_data.question se osquery_raw_data.question non è vuoto. |
| osquery_raw_data.remote_address | read_only_udm.intermediary.ip | Valore estratto da osquery_raw_data.remote_address se osquery_raw_data.remote_address non è vuoto. |
| osquery_raw_data.remote_port | read_only_udm.intermediary.port | Valore estratto da osquery_raw_data.remote_port e convertito in numero intero se osquery_raw_data.remote_port non è vuoto. |
| osquery_raw_data.type | read_only_udm.network.dns.questions.type | Valore estratto da osquery_raw_data.type e convertito in numero intero se osquery_raw_data.type non è vuoto. |
| osquery_raw_data.uid | read_only_udm.principal.user.userid | Valore estratto da osquery_raw_data.uid se osquery_raw_data.uid non è vuoto e non è uguale a "0". |
| osquery_raw_data.worker_instance_id | read_only_udm.principal.user.userid | In caso contrario, il valore viene estratto da osquery_raw_data.worker_instance_id se osquery_raw_data.worker_instance_id non è vuoto. |
| upt_asset_group_id | read_only_udm.principal.user.group_identifiers | Valore estratto da upt_asset_group_id se upt_asset_group_id non è vuoto. |
| upt_asset_group_name | read_only_udm.principal.group.group_display_name | Valore estratto da upt_asset_group_name se upt_asset_group_name non è vuoto. |
| upt_asset_id | read_only_udm.principal.asset.asset_id | Stringa concatenata "UPT ASSET ID:" con il valore di upt_asset_id se upt_asset_id non è vuoto. |
| upt_hash | read_only_udm.target.file.md5 | Tutte le occorrenze di "-" vengono sostituite con "" in upt_hash. Il valore viene quindi assegnato a read_only_udm.target.file.md5 se upt_hash non è vuoto. |
| upt_hostname | read_only_udm.principal.hostname | Valore preso da upt_hostname se upt_hostname non è vuoto. |
| upt_resource_type | read_only_udm.target.resource.type | Valore estratto da upt_resource_type se upt_resource_type non è vuoto. |
| upt_time | read_only_udm.metadata.event_timestamp.seconds | Valore estratto da upt_time se upt_time non è vuoto. |
| read_only_udm.metadata.event_type | Il valore è impostato su "PROCESS_LAUNCH" se osquery_raw_data.pid non è vuoto. Il valore è impostato su "NETWORK_DNS" se osquery_raw_data.question non è vuoto. Il valore è impostato su "GENERIC_EVENT" se event_type è vuoto. | |
| read_only_udm.metadata.log_type | Il valore è impostato su "UPTYCS_EDR". | |
| read_only_udm.metadata.product_name | Il valore è impostato su "UPTYCS_EDR". | |
| read_only_udm.metadata.vendor_name | Il valore è impostato su "UPTYCS". | |
| read_only_udm.network.application_protocol | Il valore è impostato su "DNS" se osquery_raw_data.question non è vuoto. | |
| read_only_udm.security_result.action | Il valore è impostato su "ALLOW" se osquery_raw_data.return_code è uguale a "SUCCESS" o osquery_raw_data.success è uguale a "1". | |
| read_only_udm.target.process.command_line | Valore estratto da osquery_raw_data.cmdline se osquery_raw_data.cmdline non è vuoto. | |
| read_only_udm.target.process.file.full_path | Valore estratto da osquery_raw_data.path se osquery_raw_data.path non è vuoto. | |
| read_only_udm.target.process.parent_process | Il valore viene creato iterando l'array ancestor_list in osquery_raw_data.ancestor_list. Per ogni elemento dell'array, vengono estratti e formattati command_line, full_path del file e pid in una struttura JSON che rappresenta la catena di processi. | |
| read_only_udm.target.process.pid | Valore estratto da osquery_raw_data.pid se osquery_raw_data.pid non è vuoto. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.