As descobertas do Security Command Center modelam os possíveis riscos à segurança dos recursos de uma organização. Uma descoberta sempre está relacionada a um recurso específico no Security Command Center.
Este guia mostra como usar as bibliotecas de cliente do Security Command Center para acessar as descobertas de uma organização. Cada descoberta pertence a uma fonte. A maioria dos provedores de descobertas e detectores produz descobertas na mesma fonte.
Antes de começar
Antes de configurar uma fonte, faça o seguinte:
Tamanho da página
Todas as APIs de lista do Security Command Center são paginadas. Cada resposta retorna uma página de resultados e um token para retornar a próxima página. O tamanho da página é configurável. O pageSize padrão é 10, ele pode ser definido como no mínimo 1 e no máximo 1.000.
Retenção de descobertas
As descobertas contêm uma série de snapshots event_time
que capturam o estado e as propriedades da descoberta sempre que uma vulnerabilidade ou ameaça associada é encontrada durante as verificações.
O Security Command Center armazena snapshots por 13 meses a partir da event_time
ou do evento em que o evento ocorreu. Depois de 13 meses, a descoberta de snapshots e os respectivos dados é excluída do banco de dados do Security Command Center e não pode ser recuperada. Isso resulta em menos snapshots em uma descoberta, limitando a capacidade de visualizar o histórico de uma descoberta e como ela muda ao longo do tempo.
Uma descoberta persiste no Security Command Center, desde que contenha pelo menos um snapshot com um event_time
mais recente do que 13 meses. Para manter as descobertas e todos os dados deles por períodos mais longos, exporte-os para outro local de armazenamento. Leia Como exportar dados do Security Command Center para ver instruções.
Como listar todas as descobertas em uma organização
gcloud
# ORGANIZATION_ID=organization-id gcloud scc findings list $ORGANIZATION_ID
Para mais exemplos, execute:
gcloud scc findings list --help
Python
Java
Go
Node.js
A saída para cada descoberta é semelhante à seguinte:
finding:
category: 'Persistence: IAM Anomalous Grant'
createTime: '2020-09-13T12:30:10.248Z'
eventTime: '2020-09-13T12:30:09.528Z'
name: organizations/organization-id/sources/source-id/findings/finding-id
parent: organizations/organization-id/sources/source-id
resourceName: //cloudresourcemanager.googleapis.com/projects/project-number
securityMarks:
name: organizations/organization-id/sources/source-id/findings/finding-id/securityMarks
sourceProperties:
affectedResources:
- gcpResourceName: //cloudresourcemanager.googleapis.com/projects/project-number
detectionCategory:
indicator: audit_log
ruleName: iam_anomalous_grant
subRuleName: service_account_granted_sensitive_role_to_member
technique: persistence
detectionPriority: HIGH
evidence:
- sourceLogId:
insertId: insert-id
projectId: project-id
timestamp:
nanos: 183000000
seconds: '1600000206'
findingId: finding-id
properties:
sensitiveRoleGrant:
bindingDeltas:
- action: ADD
member: user:user-email@gmail.com
role: roles/editor
members:
- user:user-email@gmail.com
principalEmail: principal-email.iam.gserviceaccount.com
sourceId:
customerOrganizationNumber: 'organization-id'
projectNumber: 'project-number'
state: ACTIVE
resource:
name: //cloudresourcemanager.googleapis.com/projects/project-number
parentDisplayName: organization-name
parentName: //cloudresourcemanager.googleapis.com/folders/folder-id
projectDisplayName: project-id
projectName: //cloudresourcemanager.googleapis.com/projects/project-number
Como filtrar descobertas
Uma organização pode ter muitas descobertas. O exemplo anterior não usa um filtro, portanto, todos os registros de descoberta são retornados. O Security Command Center permite que você use filtros de localização para receber informações somente sobre as descobertas que quer e limitar o pai a uma fonte específica.
Os filtros de localização são como cláusulas "onde" nas instruções SQL, exceto que em vez de colunas, eles se aplicam aos objetos retornados pela API.
Veja abaixo um exemplo de listagem de descobertas que têm a categoria
"MEDIUM_RISK_ONE
". As categorias específicas podem mudar, e você precisa consultar
a documentação de um provedor de descoberta para determinar as categorias usadas.
gcloud
# ORGANIZATION_ID=organization-id # SOURCE_ID="source-id" FILTER="category=\"MEDIUM_RISK_ONE\"" gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID --filter="$FILTER"
Para mais exemplos, execute:
gcloud scc findings list --help
Python
Java
Go
Node.js
O Security Command Center também é compatível com matrizes e objetos JSON completos como tipos de propriedade em potencial. É possível filtrar por:
- Elementos de matriz
- Objetos JSON completos com correspondência parcial de string no objeto
- Subcampos de objetos JSON
Os subcampos precisam ser números, strings ou booleanos e precisam usar os seguintes operadores:
- Strings:
- Equalização completa
=
- String parcial correspondente a
:
- Equalização completa
- Números:
- Desigualdades
<
,>
,<=
,>=
- Equalização
=
- Desigualdades
- Booleanos:
- Equalização
=
- Equalização
Os exemplos posteriormente nesta página pressupõem que o seguinte objeto JSON é uma propriedade de fonte em uma descoberta:
{
"outer_object": {
"middle_object": {
"deeply_nested_object": {
"x": 123,
},
"y": "some-string-value",
},
"z": "some-other-string-value",
"u": ["list-element-1", "list-element-2", "list-element-3", ],
},
}
Exemplo de filtragem de descobertas
Neste exemplo, o objeto JSON anterior é uma propriedade de fonte chamada
my_property
em uma descoberta. O exemplo a seguir inclui consultas para descobertas
que têm o objeto como uma propriedade. Você também pode usar esses filtros com outros
filtros usando AND
e OR
na consulta.
# ORGANIZATION_ID=organization-id
# SOURCE_ID="source-id"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.middle_object.deeply_nested_object.x = 123"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.middle_object.y = \"some-string-value\""
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.middle_object.y : \"string-value\""
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.z = \"some-other-string-value\""
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.z : \"other-string-value\""
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.u : \"list-element-1\""
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.u : \"list-element-2\""
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--filter="source_properties.my_property.outer_object.u : \"list-element-3\""
Exemplo de classificação de descobertas
É possível classificar as descobertas por subcampos rígidos que são tipos primitivos: strings,
números e booleanos. Neste exemplo, o objeto JSON anterior é uma propriedade de fonte chamada
my_property
em uma descoberta. O exemplo a seguir inclui
consultas para classificar os campos de descoberta:
# ORGANIZATION_ID=organization-id
# SOURCE_ID="source-id"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--order-by="source_properties.my_property.outer_object.middle_object.deeply_nested_object.x DESC"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--order-by="source_properties.my_property.outer_object.middle_object.deeply_nested_object.x"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--order-by="source_properties.my_property.outer_object.middle_object.y DESC"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--order-by="source_properties.my_property.outer_object.middle_object.y"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--order-by="source_properties.my_property.outer_object.z DESC"
gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID \
--order-by="source_properties.my_property.outer_object.z"
Consultas pontuais
O Security Command Center permite listar descobertas em um determinado período de snapshot de até 13 meses. Leia Como encontrar a retenção para mais informações.
gcloud
# ORGANIZATION_ID=organization-id # SOURCE_ID="source-id" # READ_TIME follows the format YYYY-MM-DDThh:mm:ss.ffffffZ READ_TIME=2019-02-28T07:00:06.861Z gcloud scc findings list $ORGANIZATION_ID --source=$SOURCE_ID --read-time=$READ_TIME
Para mais exemplos, execute:
gcloud scc findings list --help
Python
Java
Go
Node.js
Exemplos de filtros
Veja a seguir alguns outros filtros de descoberta úteis.
Descobertas que ocorreram após um ponto no tempo
Esses filtros de exemplo correspondem às descobertas mais recentes após
quarta-feira, 5 de junho de 2019, às 22:12:05 GMT. Com o filtro event_time
, é possível
expressar tempo usando os seguintes formatos e tipos:
Tempo Unix (em milissegundos) como um literal inteiro
"event_time > 1559772725000"
RFC 3339 como um literal de string
"event_time > \"2019-06-05T22:34:40+00:00\""