RSA NetWitness Platform
Versione integrazione: 11.0
Configura l'integrazione di RSA NetWitness Platform in Google Security Operations
Per istruzioni dettagliate su come configurare un'integrazione in Google SecOps, vedi Configurare le integrazioni.
Parametri di integrazione
Utilizza i seguenti parametri per configurare l'integrazione:
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Nome istanza | Stringa | N/D | No | Nome dell'istanza per cui intendi configurare l'integrazione. |
Descrizione | Stringa | N/D | No | Descrizione dell'istanza. |
Root API broker | Stringa | http://x.x.x.x:50103 | No | Root API dell'API Broker. |
Nome utente API broker | Stringa | N/D | No | Nome utente per l'API Broker. |
Password API broker | Password | N/D | No | Password per l'API Broker. |
Root API del concentratore | Stringa | http://x.x.x.x:50105 | No | Radice dell'API Concentratore. |
Nome utente API concentratore | Stringa | N/D | No | Nome utente per l'API Concentratore. |
Password API del concentratore | Password | N/D | No | Password per l'API Concentrator. |
Root API web | Stringa | https://{ip}/rest/api/ | No | Radice API dell'istanza della piattaforma Netwitness. |
Nome utente web | Stringa | N/D | No | Nome utente per l'istanza della piattaforma Netwitness. |
Password web | Password | N/D | No | Password per l'istanza della piattaforma Netwitness. |
Verifica SSL | Casella di controllo | Deselezionata | No | Se abilitata, verifica che il certificato SSL per la connessione al server RSA Netwitness Platform sia valido. |
Esegui da remoto | Casella di controllo | Deselezionata | No | Seleziona il campo per eseguire l'integrazione configurata da remoto. Una volta selezionata, viene visualizzata l'opzione per selezionare l'utente remoto (agente). |
Azioni
Dindin
Descrizione
Testa la connettività a RSA Netwitness Platform.
Parametri
N/D
Casi d'uso
N/D
Run On
Questa azione non viene eseguita sulle entità e non ha parametri di input obbligatori.
Risultati dell'azione
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Endpoint Enrich
Descrizione
Recupera le informazioni di sistema dell'endpoint in base al nome host o all'indirizzo IP. Richiede la licenza RSA Netwitness Respond, il servizio del server endpoint in esecuzione in background, nome utente web e password web configurati nella configurazione dell'integrazione.
Parametri
Nome visualizzato del parametro | Tipo | Valore predefinito | È Mandatory | Descrizione |
---|---|---|---|---|
Soglia del punteggio di rischio | Numero intero | 50 | Falso | Specifica la soglia di rischio per l'endpoint. Se l'endpoint supera la soglia, l'entità correlata verrà contrassegnata come sospetta. Se non viene specificato nulla, l'azione non controllerà il punteggio di rischio. |
Run On
Questa azione viene eseguita sulle seguenti entità:
- Indirizzo IP
- Host
Risultati dell'azione
Arricchimento delle entità
Nome campo di arricchimento | Origine (chiave JSON) | Logica - Quando applicarla |
---|---|---|
RSA_NTW_agentId | agentId | Quando disponibile in formato JSON |
RSA_NTW_hostName | hostName | Quando disponibile in formato JSON |
RSA_NTW_riskScore | riskScore | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_name | networkInterfaces/name | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_macAddress | networkInterfaces/macAddress | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_ipv4 | Elenco separato da spazi di networkInterfaces/ipv4 | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_ipv6 | Elenco separato da spazi networkInterfaces/ipv6 | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_networkIdv6 | Elenco separato da spazi networkInterfaces/networkIdv6 | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_gateway | Elenco separato da spazi networkInterfaces/gateway | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_dns | Elenco separato da spazi di networkInterfaces/dns | Quando disponibile in formato JSON |
RSA_NTW_networkInterfaces_{id}_promiscuous | networkInterfaces/promiscuous | Quando disponibile in formato JSON |
RSA_NTW_lastSeenTime | lastSeenTime | Quando disponibile in formato JSON |
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Risultato JSON
{
"items": [
{
"agentId": "575EDC44-BDF9-6D00-FFCD-D354FB641E27",
"hostName": "RSA-HOST-1",
"riskScore": 100,
"networkInterfaces": [
{
"name": "Intel(R) 82574L Gigabit Network Connection",
"macAddress": "00:50:56:A2:30:03",
"ipv4": [
"172.30.203.145"
],
"ipv6": [
"fe80::dce6:5825:454a:968d"
],
"networkIdv6": [
"fe80::"
],
"gateway": [
"172.30.203.1"
],
"dns": [
"8.8.8.8"
],
"promiscuous": false
}
],
"lastSeenTime": "2020-08-23T12:32:33.107Z"
}
],
"pageNumber": 0,
"pageSize": 100,
"totalPages": 1,
"totalItems": 1,
"hasNext": false,
"hasPrevious": false
}
Bacheca casi
Tipo di risultato | Valore / Descrizione | Tipo |
---|---|---|
Messaggio di output* | L'azione non deve non riuscire né interrompere l'esecuzione di un playbook: Se l'operazione va a buon fine e almeno una delle entità fornite è stata arricchita (is_success = true): Stampa "Successfully enriched the following endpoints from RSA Netwitness: \n {0}".format(entity.identifier list) Se non riesci ad arricchire entità specifiche(is_success = true): Stampa "Action was not able to enrich the following endpoints from RSA Netwitness \n: {0}".format([entity.identifier]) Se l'arricchimento non va a buon fine per tutte le entità (is_success = false): Stampa: "Nessuna entità è stata arricchita." L'azione deve non riuscire e interrompere l'esecuzione di un playbook: Stampa "Errore durante l'esecuzione dell'azione "Arricchisci endpoint". Motivo: {0}''.format(error.Stacktrace) Se il servizio endpoint non è stato trovato: Stampa "Errore durante l'esecuzione dell'azione "Arricchisci endpoint". Motivo: il server dell'endpoint non è stato trovato." |
Generale |
Arricchisci file
Descrizione
Recupera informazioni sul file utilizzando hash o nomi di file. Sono supportati solo MD5 e SHA256. Richiede la licenza RSA Netwitness Respond, il servizio server endpoint in esecuzione in background e il nome utente web e la password web configurati nella configurazione dell'integrazione.
Parametri
Nome visualizzato del parametro | Tipo | Valore predefinito | È Mandatory | Descrizione |
---|---|---|---|---|
Soglia del punteggio di rischio | Numero intero | 50 | No | Specifica la soglia di rischio per il file. Se il file supera la soglia, l'entità correlata verrà contrassegnata come sospetta. Se non viene specificato nulla, l'azione non controllerà il punteggio di rischio. |
Run On
Questa azione viene eseguita su tutte le entità.
Risultati dell'azione
Arricchimento delle entità
Nome campo di arricchimento | Origine (chiave JSON) | Logica - Quando applicarla |
---|---|---|
RSA_NTW_filename | firstFileName | Quando disponibile in formato JSON |
RSA_NTW_reputationStatus | reputationStatus | Quando disponibile in formato JSON |
RSA_NTW_globalRiskScore | globalRiskScore | Quando disponibile in formato JSON |
RSA_NTW_machineOsType | machineOsType | Quando disponibile in formato JSON |
RSA_NTW_size | dimensioni | Quando disponibile in formato JSON |
RSA_NTW_checksumMd5 | checksumMd5 | Quando disponibile in formato JSON |
RSA_NTW_checksumSha1 | checksumSha1 | Quando disponibile in formato JSON |
RSA_NTW_checksumSha256 | checksumSha256 | Quando disponibile in formato JSON |
RSA_NTW_entropy | entropia | Quando disponibile in formato JSON |
RSA_NTW_format | pe | Quando disponibile in formato JSON |
RSA_NTW_fileStatus | Indifferente | Quando disponibile in formato JSON |
RSA_NTW_remediationAction | Sblocca | Quando disponibile in formato JSON |
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Risultato JSON
{
"items": [
{
"firstFileName": "AM_Delta_Patch_1.321.1947.0.exe",
"reputationStatus": "Known Good",
"globalRiskScore": 0,
"firstSeenTime": "2020-08-23T00:46:25.288Z",
"machineOsType": "windows",
"signature": {
"timeStamp": "2020-08-22T21:01:55.552Z",
"thumbprint": "c6573d9ba5efc55b1ad1c59b9cafc33d232b13cc",
"context": [
"microsoft",
"signed",
"valid"
],
"signer": "Microsoft Corporation"
},
"size": 441280,
"checksumMd5": "40d93a5ed9d2d55e35857c1f1de162db",
"checksumSha1": "3096e9e4ac4cc46dcfa11a053583c2d3e14b14b8",
"checksumSha256": "34261adf58ac3c8e38724d5fbfba21037d868a2c0b6291e2a61e5a023b55c3f9",
"pe": {
"timeStamp": "2020-08-22T20:57:28.000Z",
"imageSize": 454656,
"numberOfExportedFunctions": 0,
"numberOfNamesExported": 0,
"numberOfExecuteWriteSections": 0,
"context": [
"file.exe",
"file.arch64",
"file.versionInfoPresent",
"file.resourceDirectoryPresent",
"file.relocationDirectoryPresent",
"file.debugDirectoryPresent",
"file.tlsDirectoryPresent",
"file.richSignaturePresent",
"file.companyNameContainsText",
"file.descriptionContainsText",
"file.versionContainsText",
"file.internalNameContainsText",
"file.legalCopyrightContainsText",
"file.originalFilenameContainsText",
"file.productNameContainsText",
"file.productVersionContainsText",
"file.standardVersionMetaPresent"
],
"resources": {
"originalFileName": "AM_Delta_Patch_1.321.1947.0.exe",
"company": "Microsoft Corporation",
"description": "Microsoft Antimalware WU Stub",
"version": null
},
"sectionNames": [
".text",
".rdata",
".data",
".pdata",
".rsrc",
".reloc"
],
"importedLibraries": [
"ADVAPI32.dll",
"KERNEL32.dll",
"RPCRT4.dll",
"ntdll.dll"
]
},
"elf": null,
"macho": null,
"entropy": 7.378079119412321,
"format": "pe",
"fileStatus": "Neutral",
"remediationAction": "Unblock"
}
],
"pageNumber": 0,
"pageSize": 100,
"totalPages": 1,
"totalItems": 1,
"hasNext": false,
"hasPrevious": false
}
Bacheca casi
Tipo di risultato | Valore / Descrizione | Tipo |
---|---|---|
Messaggio di output* | L'azione non deve non riuscire né interrompere l'esecuzione di un playbook: Se non riesci ad arricchire entità specifiche(is_success = true): Se l'arricchimento non va a buon fine per tutte le entità (is_success = false): L'azione deve non riuscire e interrompere l'esecuzione di un playbook: Se errore irreversibile, ad esempio credenziali errate, nessuna connessione al server, altro: Stampa "Errore durante l'esecuzione dell'azione "Arricchisci file". Motivo: {0}''.format(error.Stacktrace)
Stampa "Errore durante l'esecuzione dell'azione "Arricchisci file". Motivo: il server dell'endpoint non è stato trovato." |
Generale |
Isola endpoint
Descrizione
Isolamento dell'endpoint di richiesta in RSA Netwitness. Richiede la licenza RSA Netwitness Respond, il servizio del server endpoint in esecuzione in background e il nome utente web e la password web configurati nella configurazione dell'integrazione.
Parametri
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Commento | Stringa | N/D | Sì | Aggiungi un commento che descriva il motivo della richiesta di isolamento. |
Run On
Questa azione viene eseguita sulle seguenti entità:
- Indirizzo IP
- Host
Risultati dell'azione
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Bacheca casi
Tipo di risultato | Valore / Descrizione | Tipo |
---|---|---|
Messaggio di output* | L'azione non deve non riuscire né interrompere l'esecuzione di un playbook: Se non riesci a isolare almeno una delle entità fornite(is_success = false): L'azione deve non riuscire e interrompere l'esecuzione di un playbook: Se errore irreversibile, ad esempio credenziali errate, nessuna connessione al server, altro: Stampa "Errore durante l'esecuzione dell'azione "Isola endpoint". Motivo: {0}''.format(error.Stacktrace) Se il servizio endpoint non è stato trovato: Stampa "Errore durante l'esecuzione dell'azione "Isola endpoint". Motivo: il server dell'endpoint non è stato trovato." |
Generale |
Unisolate Endpoint
Descrizione
Annulla l'isolamento dell'endpoint di richiesta in RSA Netwitness. Richiede la licenza RSA Netwitness Respond, il servizio del server endpoint in esecuzione in background e il nome utente web e la password web configurati nella configurazione dell'integrazione.
Parametri
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Commento | Stringa | N/D | Sì | Aggiungi un commento che descriva il motivo della richiesta di isolamento. |
Run On
Questa azione viene eseguita sulle seguenti entità:
- Indirizzo IP
- Host
Risultati dell'azione
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Bacheca casi
Tipo di risultato | Valore / Descrizione | Tipo |
---|---|---|
Messaggio di output* | L'azione non deve non riuscire né interrompere l'esecuzione di un playbook: Se non riesci a isolare almeno una delle entità fornite(is_success = false): L'azione deve non riuscire e interrompere l'esecuzione di un playbook: Se errore irreversibile, ad esempio credenziali errate, nessuna connessione al server, altro: Stampa "Errore durante l'esecuzione dell'azione "Unisolate Endpoint". Motivo: {0}''.format(error.Stacktrace) Se il servizio endpoint non è stato trovato: Stampa "Errore durante l'esecuzione dell'azione "Unisolate Endpoint". Motivo: il server dell'endpoint non è stato trovato." |
Generale |
Aggiorna incidente
Descrizione
Aggiorna incidente in RSA Netwitness. Richiede la licenza RSA Netwitness Respond, nome utente web e password web configurati nella configurazione dell'integrazione.
Parametri
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
ID incidente | Stringa | N/D | Sì | Specifica l'ID dell'incidente da aggiornare. |
Stato | DDL | N/D | No | Specifica il nuovo stato dell'incidente. |
Assegnatario | Stringa | N/D | No | Specifica il nuovo assegnatario dell'incidente. |
Run On
Questa azione non viene eseguita sulle entità.
Risultati dell'azione
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Risultato JSON
{
"id": "INC-128",
"title": "High Risk Alerts: NetWitness Endpoint for RSA-HOST-1",
"summary": "",
"priority": "High",
"riskScore": 72,
"status": "RemediationRequested",
"alertCount": 136,
"averageAlertRiskScore": 72,
"sealed": true,
"totalRemediationTaskCount": 0,
"openRemediationTaskCount": 0,
"created": "2020-08-26T12:56:57.867Z",
"lastUpdated": "2020-08-26T15:31:27.953Z",
"lastUpdatedBy": null,
"assignee": "admin",
"sources": [
"ECAT"
],
"ruleId": "5ef1b33614c0552a2884c590",
"firstAlertTime": "2020-08-26T12:56:56.097Z",
"categories": [],
"journalEntries": null,
"createdBy": "High Risk Alerts: NetWitness Endpoint",
"deletedAlertCount": 0,
"eventCount": 136,
"alertMeta": {
"SourceIp": [
""
],
"DestinationIp": [
""
]
}
}
Bacheca casi
Tipo di risultato | Valore / Descrizione | Tipo |
---|---|---|
Messaggio di output* | L'azione non deve non riuscire né interrompere l'esecuzione di un playbook: If status code == 200 (is_success = true): Stampa "Successfully updated incident with ID {0} in RSA Netwitness".format(incident_id). Se il codice di stato è 400 (is_success=false): Stampa "Action wasn't able to update incident with ID {0} in RSA Netwitness. Motivo: {1}".format(incident_id, errors/message). L'azione deve non riuscire e interrompere l'esecuzione di un playbook: Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server o altro: Stampa "Errore durante l'esecuzione dell'azione "Aggiorna incidente". Motivo: {0}''.format(error.Stacktrace) |
Generale |
Aggiungere una nota all'incidente
Descrizione
Aggiungi una nota all'incidente in RSA Netwitness. Richiede la licenza RSA Netwitness Respond, nome utente web e password web configurati nella configurazione dell'integrazione.
Parametri
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
ID incidente | Stringa | N/D | Sì | Specifica l'ID dell'incidente da aggiornare. |
Nota | Stringa | N/D | Sì | Specifica a quale nota deve essere aggiunto il testo. |
Autore | Stringa | N/D | Sì | Specifica l'autore della nota. |
Run On
Questa azione non viene eseguita sulle entità.
Risultati dell'azione
Risultato script
Nome del risultato dello script | Opzioni di valore | Esempio |
---|---|---|
is_success | Vero/Falso | is_success:False |
Bacheca casi
Tipo di risultato | Valore / Descrizione | Tipo |
---|---|---|
Messaggio di output* | L'azione non deve non riuscire né interrompere l'esecuzione di un playbook: If status code == 200 (is_success = true): Stampa "Successfully added note to incident with ID {0} in RSA Netwitness".format(incident_id). Se il codice di stato è 400 (is_success=false): Stampa "L'azione non è riuscita ad aggiungere una nota all'incidente con ID {0} in RSA Netwitness. Motivo: {1}".format(incident_id, errors/message). L'azione deve non riuscire e interrompere l'esecuzione di un playbook: Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server o altro: Stampa "Errore durante l'esecuzione dell'azione "Aggiungi nota all'incidente". Motivo: {0}''.format(error.Stacktrace) |
Generale |
Connettore
RSA Netwitness Platform - Incidents Connector
Descrizione
Recupera gli incidenti dalla piattaforma RSA Netwitness.
Come utilizzare l'oggetto JSON delle credenziali
L'oggetto JSON delle credenziali fornisce un modo più flessibile per l'autenticazione alle origini dati. La configurazione più semplice del JSON avrà questo aspetto:
{
"default_username": "username",
"default_password": "password"
}
Senza "default_username" e "default_password", il connettore genererà un errore. Questa configurazione è adatta agli ambienti in cui tutte le origini dati condividono lo stesso nome utente e la stessa password. Se devi fornire credenziali specifiche per le origini dati, la struttura del file JSON sarà simile alla seguente:
{
"default_username": "username",
"default_password": "password",
"dataSources": [
{
"api_root": "172.30.203.151:50102",
"username": "username",
"password": "password"
},
{
"api_root": "172.30.203.151:50105",
"username": "username",
"password": "password"
},
{
"api_root": "172.30.203.151:50103",
"username": "username",
"password": "password"
}
]
}
Il connettore analizzerà gli eventi per la radice dell'API di origine e la confronterà con ciò che è disponibile nell'oggetto JSON delle credenziali. Se viene trovata una corrispondenza, il connettore prenderà il nome utente e la password dall'elenco "dataSources". Se non viene trovata alcuna corrispondenza, utilizzerà "default_username" e default_password. Inoltre, non è necessario fornire sia il nome utente che la password nell'elenco "dataSources". Se, ad esempio, viene fornito solo il nome utente, il connettore prenderà il nome utente dall'elenco "dataSource" e la password da "default_password".
Configura il connettore RSA Netwitness Platform - Incidents in Google SecOps
Per istruzioni dettagliate su come configurare un connettore in Google SecOps, vedi Configurazione del connettore.
Parametri del connettore
Utilizza i seguenti parametri per configurare il connettore:
Nome visualizzato del parametro | Tipo | Valore predefinito | È obbligatorio | Descrizione |
---|---|---|---|---|
Nome campo prodotto | Stringa | Nome prodotto | Sì | Inserisci il nome del campo di origine per recuperare il nome del campo prodotto. |
Nome campo evento | Stringa | tipo | Sì | Inserisci il nome del campo di origine per recuperare il nome del campo evento. |
Nome campo ambiente | Stringa | "" | No | Descrive il nome del campo in cui è memorizzato il nome dell'ambiente. Se il campo dell'ambiente non viene trovato, l'ambiente è quello predefinito. |
Pattern regex ambiente | Stringa | .* | No | Un pattern regex da eseguire sul valore trovato nel campo "Nome campo ambiente". Il valore predefinito è .* per acquisire tutto e restituire il valore invariato. Utilizzato per consentire all'utente di manipolare il campo dell'ambiente tramite la logica delle espressioni regolari. Se il pattern regex è null o vuoto oppure il valore dell'ambiente è null, il risultato finale dell'ambiente è l'ambiente predefinito. |
Timeout dello script (secondi) | Numero intero | 180 | Sì | Limite di timeout per il processo Python che esegue lo script corrente. |
Root API web | Stringa | https://{ip}/rest/api/ | Sì | Radice dell'API web dell'istanza della piattaforma RSA Netwitness. |
Nome utente web | Stringa | N/D | Sì | Nome utente dell'account RSA Netwitness Platform. |
Password web | Password | N/D | Sì | Password dell'account RSA Netwitness Platform. |
Recupero ore massime a ritroso | Numero intero | 1 | No | Numero di ore da cui recuperare gli incidenti. Nota: il connettore attenderà il tempo fornito per gli aggiornamenti agli incidenti. |
Punteggio di rischio più basso da recuperare | Numero intero | N/D | No | Il punteggio di rischio più basso degli incidenti da recuperare. Per impostazione predefinita, il connettore inserisce tutti gli incidenti.Il valore massimo è 100. |
Fallback della gravità | Stringa | Informativo | Sì | Specifica quale deve essere la gravità di riserva per l'avviso Google SecOps quando il punteggio di rischio non è disponibile. Valori possibili: Informativo, Basso, Medio, Alto, Critico. |
Numero massimo di incidenti da recuperare | Numero intero | 10 | No | Numero di incidenti da elaborare per un'iterazione del connettore. Il valore massimo è 100. |
Utilizzare la lista consentita come lista nera | Casella di controllo | Deselezionata | Sì | Se questa opzione è abilitata, la lista consentita verrà utilizzata come lista bloccata. |
Verifica SSL | Casella di controllo | Deselezionata | Sì | Se abilitato, verifica che il certificato SSL per la connessione al server della piattaforma RSA Netwitness sia valido. |
Indirizzo del server proxy | Stringa | No | L'indirizzo del server proxy da utilizzare. | |
Nome utente proxy | Stringa | No | Il nome utente del proxy con cui eseguire l'autenticazione. | |
Password proxy | Password | No | La password del proxy per l'autenticazione. | |
Oggetto JSON delle credenziali | Password | N/D | No | Questo parametro è necessario per archiviare le credenziali dell'origine dati. Questo parametro ha la priorità su "Radice API broker", "Nome utente API broker", "Password API broker", "Radice API concentratore", "Nome utente API concentratore", "Password API concentratore". Per ulteriori dettagli, consulta il portale della documentazione. |
Regole del connettore
Supporto del proxy
Il connettore supporta il proxy.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.