Guía del usuario de la CLI de Google SecOps

Disponible en:

El SDK de Google Security Operations proporciona una interfaz de línea de comandos (CLI) completa que facilita la interacción con los productos de Google SecOps desde tu terminal. La nueva interfaz de línea de comandos secops sustituye a la antigua chronicle_cli y ofrece funciones mejoradas y una experiencia de usuario optimizada.

Información general

La CLI de secops proporciona acceso a lo siguiente:

  • Buscar y analizar eventos de UDM
  • Gestionar feeds, reenviadores y analizadores
  • Crear y gestionar reglas de detección
  • Gestionar alertas y casos
  • Gestionar listas de referencia y tablas de datos
  • Exportar datos a BigQuery y Google Cloud Storage
  • Consultar a la IA de Gemini para obtener información valiosa sobre seguridad
  • Y mucho más

Los comandos de la CLI de Google SecOps usan la siguiente sintaxis:

$ secops COMMAND [SUBCOMMAND] [OPTIONS]

Por ejemplo, para buscar eventos:

$ secops search --query "metadata.event_type = \"NETWORK_CONNECTION\"" --time-window 24

Antes de empezar

Antes de instalar la CLI de Google SecOps, asegúrate de que tienes lo siguiente:

  • Python 3.8 o una versión posterior instalada en tu entorno. Para obtener más información, consulta Instalar Python.
  • Una instancia de Google SecOps con los permisos de acceso adecuados.
  • Credenciales de autenticación (cuenta de servicio o credenciales predeterminadas de la aplicación).

Instalación

Instala el SDK de SecOps, que incluye la CLI:

pip install secops

Verifica la instalación:

$ secops --help

Autenticación

La CLI admite varios métodos de autenticación:

# Set up ADC with gcloud
gcloud auth application-default login

Usar una cuenta de servicio

Coloca el archivo JSON de tu cuenta de servicio en una ubicación segura y haz referencia a él en los comandos:

$ secops search --service-account "/path/to/service-account.json" --customer-id "your-instance-id" --project-id "your-project-id" --query "metadata.event_type = \"USER_LOGIN\""

Configuración

Guarda los ajustes habituales para no tener que repetirlos en los comandos:

Guardar configuración

# Save instance and authentication settings
$ secops config set --customer-id "your-instance-id" --project-id "your-project-id" --region "us"

# Save service account path (optional)
$ secops config set --service-account "/path/to/service-account.json" --customer-id "your-instance-id" --project-id "your-project-id"

# Set default time window
$ secops config set --time-window 48

Ver configuración

$ secops config view

Borrar configuración

$ secops config clear

Regiones

La CLI admite todas las regiones de Google SecOps. Puedes definir la región de las siguientes formas:

  • La marca --region con cualquier comando
  • El archivo de configuración con secops config set --region REGION

Entre las regiones admitidas se incluyen las siguientes: * US (predeterminada) * EUROPE * ASIA-SOUTHEAST1 * ASIA-SOUTH1 * AUSTRALIA-SOUTHEAST1 * EUROPE-WEST2, EUROPE-WEST3, EUROPE-WEST6, EUROPE-WEST9 y EUROPE-WEST12 * Y más

Comandos principales

Buscar eventos

Busca eventos de UDM con la sintaxis de consulta:

# Search with UDM query
$ secops search --query "metadata.event_type = \"NETWORK_CONNECTION\"" --time-window 24 --max-events 100

# Search using natural language
$ secops search --nl-query "show me failed login attempts" --time-window 24

# Export results as CSV
$ secops search --query "metadata.event_type = \"USER_LOGIN\" AND security_result.action = \"BLOCK\"" \
    --fields "metadata.event_timestamp,principal.user.userid,principal.ip" \
    --time-window 24 --csv

Información de la entidad

Obtener información detallada sobre IPs, dominios o hashes de archivos:

$ secops entity --value "8.8.8.8" --time-window 24
$ secops entity --value "example.com" --time-window 24
$ secops entity --value "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" --time-window 24

Estadísticas

Realiza análisis estadísticos de tus datos:

$ secops stats --query "metadata.event_type = \"NETWORK_CONNECTION\"
match:
  target.hostname
outcome:
  \$count = count(metadata.id)
order:
  \$count desc" --time-window 24

Gestión de feeds

Gestionar feeds de ingesta de datos en Google SecOps:

Mostrar feeds

$ secops feed list

Crear feed

# Create an HTTP feed
$ secops feed create \
    --display-name "My HTTP Feed" \
    --details '{"logType":"projects/your-project-id/locations/us/instances/your-instance-id/logTypes/WINEVTLOG","feedSourceType":"HTTP","httpSettings":{"uri":"https://example.com/feed","sourceType":"FILES"}}'

Actualizar feed

$ secops feed update --id "feed-123" --display-name "Updated Feed Name"

Habilitar o inhabilitar el feed

$ secops feed enable --id "feed-123"
$ secops feed disable --id "feed-123"

Eliminar feed

$ secops feed delete --id "feed-123"

Gestión de analizadores

Los analizadores procesan y normalizan los datos de registro sin procesar en formato UDM:

List Parsers

$ secops parser list
$ secops parser list --log-type "WINDOWS"

Obtener detalles del analizador

$ secops parser get --log-type "WINDOWS" --id "pa_12345"

Crear analizador

# Create from file
$ secops parser create --log-type "CUSTOM_LOG" --parser-code-file "/path/to/parser.conf"

# Create from string
$ secops parser create --log-type "CUSTOM_LOG" --parser-code "filter { mutate { add_field => { \"test\" => \"value\" } } }"

Analizador de prueba

Prueba un analizador con registros de muestra antes de implementarlo:

# Test with inline logs
$ secops parser run \
    --log-type OKTA \
    --parser-code-file "./parser.conf" \
    --log '{"message": "Test log 1"}' \
    --log '{"message": "Test log 2"}'

# Test with logs from file
$ secops parser run \
    --log-type WINDOWS \
    --parser-code-file "./parser.conf" \
    --logs-file "./sample_logs.txt"

Activar o desactivar el analizador

$ secops parser activate --log-type "WINDOWS" --id "pa_12345"
$ secops parser deactivate --log-type "WINDOWS" --id "pa_12345"

Eliminar analizador

$ secops parser delete --log-type "WINDOWS" --id "pa_12345"

Gestión de extensiones de analizador

Las extensiones de analizador amplían los analizadores sin sustituirlos:

Mostrar extensiones

$ secops parser-extension list --log-type OKTA

Crear ampliación

$ secops parser-extension create --log-type OKTA \
    --log /path/to/sample.log \
    --parser-config-file /path/to/parser-config.conf

Activar extensión

$ secops parser-extension activate --log-type OKTA --id "1234567890"

Gestión de reenviadores

Los reenviadores se usan para ingerir registros con configuraciones específicas:

Crear reenviador

# Basic forwarder
$ secops forwarder create --display-name "my-custom-forwarder"

# With metadata and settings
$ secops forwarder create --display-name "prod-forwarder" \
    --metadata '{"environment":"prod","team":"security"}' \
    --upload-compression true \
    --http-settings '{"port":80,"host":"example.com"}'

Mostrar reenviadores

$ secops forwarder list --page-size 100

Obtener reenviador

$ secops forwarder get --id "1234567890"

Actualizar reenviador

$ secops forwarder update --id "1234567890" --display-name "updated-name"

Eliminar reenviador

$ secops forwarder delete --id "1234567890"

Ingestión de registros

Ingiere registros en Google SecOps:

Ingerir registros sin procesar

# From file
$ secops log ingest --type "OKTA" --file "/path/to/okta_logs.json"

# With labels
$ secops log ingest --type "WINDOWS" --file "/path/to/logs.xml" \
    --labels "environment=production,team=security"

# Inline message
$ secops log ingest --type "WINDOWS" --message "{\"event\": \"data\"}"

Ingerir eventos de UDM

$ secops log ingest-udm --file "/path/to/udm_event.json"

Mostrar tipos de registro

$ secops log types
$ secops log types --search "windows"

Generar mapeo de UDM

$ secops log generate-udm-mapping \
    --log-format "JSON" \
    --log '{"id":"123","user":"test_user","source_ip":"192.168.1.10"}'

Gestión de reglas

Gestionar reglas de detección:

Reglas de la lista

$ secops rule list --page-size 50

Crear regla

$ secops rule create --file "/path/to/rule.yaral"

Actualización de la regla

$ secops rule update --id "ru_12345" --file "/path/to/updated_rule.yaral"

Habilitar o inhabilitar una regla

$ secops rule enable --id "ru_12345" --enabled true
$ secops rule enable --id "ru_12345" --enabled false

Probar regla

Para probar una regla con el historial de datos, siga estos pasos:

# Test for last 24 hours
$ secops rule test --file "/path/to/rule.yaral" --time-window 24

# Test with specific time range
$ secops rule test --file "/path/to/rule.yaral" \
    --start-time "2023-07-01T00:00:00Z" \
    --end-time "2023-07-02T00:00:00Z" \
    --max-results 1000

Validar regla

$ secops rule validate --file "/path/to/rule.yaral"

Eliminar regla

$ secops rule delete --id "ru_12345"

Gestión de alertas

Recibir y gestionar alertas:

$ secops alert --time-window 24 --max-alerts 50
$ secops alert --snapshot-query "feedback_summary.status != \"CLOSED\"" --time-window 24

Gestión de casos

Recuperar los detalles del caso:

$ secops case --ids "case-123,case-456"

Tablas de datos

Las tablas de datos son colecciones de datos estructurados que se usan en reglas de detección:

Crear tabla de datos

$ secops data-table create \
    --name "suspicious_ips" \
    --description "Known suspicious IP addresses" \
    --header '{"ip_address":"CIDR","description":"STRING","severity":"STRING"}'

Añadir filas

$ secops data-table add-rows \
    --name "suspicious_ips" \
    --rows '[["192.168.1.100","Scanning activity","Medium"]]'

List Rows

$ secops data-table list-rows --name "suspicious_ips"

Eliminar tabla de datos

$ secops data-table delete --name "suspicious_ips"

Listas de referencias

Las listas de referencia son listas de valores sencillas para las reglas de detección:

Crear lista de referencias

$ secops reference-list create \
    --name "admin_accounts" \
    --description "Administrative accounts" \
    --entries "admin,administrator,root,superuser"

Actualizar lista de referencias

$ secops reference-list update \
    --name "admin_accounts" \
    --entries "admin,administrator,root,superuser,sysadmin"

Mostrar listas de referencias

$ secops reference-list list

Exportación de datos

Exportar datos para analizarlos:

Crear exportación

# Export specific log type
$ secops export create \
    --gcs-bucket "projects/my-project/buckets/my-bucket" \
    --log-type "WINDOWS" \
    --time-window 24

# Export all logs
$ secops export create \
    --gcs-bucket "projects/my-project/buckets/my-bucket" \
    --all-logs \
    --time-window 168

Comprobar el estado de la exportación

$ secops export status --id "export-123"

Cancelar exportación

$ secops export cancel --id "export-123"

List Available Log Types for Export

$ secops export log-types --time-window 24

Integración de la IA de Gemini

Consulta a la IA de Gemini para obtener información valiosa sobre seguridad:

# Ask about security concepts
$ secops gemini --query "What is Windows event ID 4625?"

# Generate detection rules
$ secops gemini --query "Write a rule to detect PowerShell downloading files"

# Get vulnerability information
$ secops gemini --query "Tell me about CVE-2021-44228"

Habilita Gemini:

$ secops gemini --opt-in

Gestión de paneles de control

Gestionar paneles de control nativos:

Crear panel

$ secops dashboard create \
    --display-name "Security Overview" \
    --description "Security monitoring dashboard" \
    --access-type PRIVATE

Mostrar paneles

$ secops dashboard list --page-size 10

Actualizar panel

$ secops dashboard update --id dashboard-id \
    --display-name "Updated Security Dashboard" \
    --description "Updated security monitoring dashboard"

Exportar o importar un panel de control

# Export
$ secops dashboard export --dashboard-names 'projects/your-project-id/locations/us/instances/your-instance-id/nativeDashboard/xxxxxxx'

# Import
$ secops dashboard import --dashboard-data-file dashboard_data.json

Añadir gráfico al panel de control

$ secops dashboard add-chart --dashboard-id dashboard-id \
    --display-name "DNS Query Chart" \
    --description "Shows DNS query patterns" \
    --query-file dns_query.txt \
    --chart_layout '{"startX": 0, "spanX": 12, "startY": 0, "spanY": 8}'

Eliminar panel

$ secops dashboard delete --id dashboard-id

Ejemplos avanzados

Completar el flujo de trabajo del analizador

Recupera, prueba e implementa un analizador:

# List parsers
$ secops parser list --log-type "OKTA" > okta_parsers.json

# Get parser details
PARSER_ID=$(cat okta_parsers.json | jq -r '.[0].name' | awk -F'/' '{print $NF}')
$ secops parser get --log-type "OKTA" --id "$PARSER_ID" > parser_details.json

# Extract parser code
cat parser_details.json | jq -r '.cbn' | base64 -d > okta_parser.conf

# Test parser
$ secops parser run \
    --log-type "OKTA" \
    --parser-code-file "okta_parser.conf" \
    --logs-file "sample_logs.txt" > parser_result.json

# Activate if successful
$ secops parser activate --log-type "OKTA" --id "$PARSER_ID"

Flujo de trabajo de búsqueda y exportación

Buscar eventos y exportar resultados:

# Search for failed logins
$ secops search \
    --query "metadata.event_type = \"USER_LOGIN\" AND security_result.action = \"BLOCK\"" \
    --fields "metadata.event_timestamp,principal.user.userid,principal.ip" \
    --time-window 24 \
    --csv > failed_logins.csv

# Get entity details for suspicious IPs
cat failed_logins.csv | awk -F',' '{print $3}' | sort -u | while read ip; do
    secops entity --value "$ip" --time-window 72
done

Pruebas e implementación de reglas

Para crear, probar y desplegar una regla de detección, sigue estos pasos:

# Create rule file
cat > suspicious_activity.yaral << 'EOF'
rule suspicious_powershell {
    meta:
        description = "Detects suspicious PowerShell activity"
        severity = "Medium"
    events:
        $e.metadata.event_type = "PROCESS_LAUNCH"
        $e.principal.process.file.full_path = /powershell\.exe/i nocase
        $e.principal.process.command_line = /download|invoke-expression|hidden/i nocase
    condition:
        $e
}
EOF

# Validate rule
$ secops rule validate --file suspicious_activity.yaral

# Test against historical data
$ secops rule test --file suspicious_activity.yaral --time-window 168

# Create and enable if tests pass
$ secops rule create --file suspicious_activity.yaral
$ secops rule enable --id "ru_generated_id" --enabled true

Solución de problemas

Incidencias frecuentes

Errores de autenticación

Si se producen errores de autenticación:

  1. Verificar que tus credenciales sean válidas
  2. Comprueba que tu cuenta de servicio tenga los permisos necesarios
  3. Asegúrate de que ADC esté configurado correctamente: gcloud auth application-default login

Errores de región

Si recibes errores relacionados con la región:

  1. Verificar que la región es compatible
  2. Comprueba que tu instancia esté en la región especificada
  3. Usa la marca --region o configúrala

Límite de frecuencia

Si tienes problemas con el límite de frecuencia:

  1. Reducir la frecuencia de las llamadas a la API
  2. Usar la paginación en conjuntos de resultados de gran tamaño
  3. Implementar un tiempo de espera exponencial para los reintentos

Obtener ayuda

Ver la ayuda de cualquier comando:

$ secops --help
$ secops search --help
$ secops rule create --help

Migración desde chronicle_cli

Si vas a migrar desde la versión antigua de chronicle_cli, aquí tienes una asignación de los comandos habituales:

chronicle_cli secops
chronicle_cli feeds create secops feed create
chronicle_cli feeds list secops feed list
chronicle_cli feeds update secops feed update
chronicle_cli feeds delete secops feed delete
chronicle_cli parsers list secops parser list
chronicle_cli parsers create secops parser create
chronicle_cli parsers activate secops parser activate
chronicle_cli forwarders create secops forwarder create
chronicle_cli forwarders list secops forwarder list

La nueva CLI de secops ofrece muchas funciones adicionales que no están disponibles en chronicle_cli, como las siguientes:

  • Búsqueda en lenguaje natural
  • Integración de la IA de Gemini
  • Gestión del panel de control
  • Pruebas y validación de reglas
  • Tablas de datos y listas de referencia
  • Gestión de casos
  • Y mucho más

Otros recursos