Google SecOps CLI 사용자 가이드

다음에서 지원:

Google Security Operations SDK는 터미널에서 Google SecOps 제품과 쉽게 상호작용할 수 있는 포괄적인 명령줄 인터페이스 (CLI)를 제공합니다. 새로운 secops CLI는 향상된 기능과 개선된 사용자 환경으로 기존 chronicle_cli을 대체합니다.

개요

secops CLI는 다음 항목에 대한 액세스를 제공합니다.

  • UDM 이벤트 검색 및 분석
  • 피드, 전달자, 파서 관리
  • 감지 규칙 만들기 및 관리하기
  • 알림 및 케이스 처리
  • 참조 목록 및 데이터 표 관리
  • BigQuery 및 Google Cloud Storage로 데이터 내보내기
  • Gemini AI에 보안 통계 쿼리
  • 그 외 다양한 혜택

Google SecOps CLI 명령어는 다음 구문을 사용합니다.

$ secops COMMAND [SUBCOMMAND] [OPTIONS]

예를 들어 이벤트를 검색하려면 다음 단계를 따르세요.

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

시작하기 전에

Google SecOps CLI를 설치하기 전에 다음이 있어야 합니다.

  • 환경에 Python 3.8 이상이 설치되어 있어야 합니다. 자세한 내용은 Python 설치를 참고하세요.
  • 적절한 액세스 권한이 있는 Google SecOps 인스턴스
  • 인증 사용자 인증 정보 (서비스 계정 또는 애플리케이션 기본 사용자 인증 정보)

설치

CLI가 포함된 SecOps SDK를 설치합니다.

pip install secops

설치를 확인합니다.

$ secops --help

인증

CLI는 여러 인증 방법을 지원합니다.

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

서비스 계정 사용

서비스 계정 JSON 파일을 안전한 위치에 배치하고 명령어에서 참조합니다.

$ 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\""

구성

명령어에서 반복을 피하기 위해 일반적인 설정을 저장합니다.

구성 저장

# 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

구성 보기

$ secops config view

구성 지우기

$ secops config clear

리전

CLI는 모든 Google SecOps 리전을 지원합니다. 다음을 사용하여 리전을 설정할 수 있습니다.

  • 모든 명령어와 함께 사용되는 --region 플래그
  • secops config set --region REGION를 사용하는 구성 파일

지원되는 지역은 다음과 같습니다. * US (기본값) * EUROPE * ASIA-SOUTHEAST1 * ASIA-SOUTH1 * AUSTRALIA-SOUTHEAST1 * EUROPE-WEST2, EUROPE-WEST3, EUROPE-WEST6, EUROPE-WEST9, EUROPE-WEST12 * 기타

핵심 명령어

이벤트 검색

쿼리 구문을 사용하여 UDM 이벤트를 검색합니다.

# 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

법인 정보

IP, 도메인 또는 파일 해시에 대한 자세한 정보를 가져옵니다.

$ 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

통계

데이터에 대한 통계 분석을 실행합니다.

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

피드 관리

Google SecOps에서 데이터 수집 피드를 관리합니다.

피드 나열

$ secops feed list

피드 만들기

# 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"}}'

피드 업데이트

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

피드 사용 설정/사용 중지

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

피드 삭제

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

파서 관리

파서는 원시 로그 데이터를 처리하고 UDM 형식으로 정규화합니다.

파서 나열

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

파서 세부정보 가져오기

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

파서 만들기

# 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\" } } }"

테스트 파서

배포 전에 샘플 로그에 대해 파서를 테스트합니다.

# 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"

파서 활성화/비활성화

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

파서 삭제

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

파서 확장 프로그램 관리

파서 확장 프로그램은 기존 파서를 대체하지 않고 확장합니다.

확장 프로그램 나열

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

확장 프로그램 만들기

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

확장 프로그램 활성화

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

전달자 관리

포워더는 특정 구성으로 로그를 수집하는 데 사용됩니다.

전달자 만들기

# 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"}'

전달자 나열

$ secops forwarder list --page-size 100

전달자 가져오기

$ secops forwarder get --id "1234567890"

전달자 업데이트

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

전달자 삭제

$ secops forwarder delete --id "1234567890"

로그 수집

Google SecOps에 로그를 수집합니다.

원시 로그 수집

# 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\"}"

UDM 이벤트 수집

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

로그 유형 나열

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

UDM 매핑 생성

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

규칙 관리

감지 규칙을 관리합니다.

규칙 나열

$ secops rule list --page-size 50

규칙 만들기

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

규칙 업데이트

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

규칙 사용 설정/사용 중지

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

규칙 테스트

이전 데이터에 대한 규칙을 테스트하려면 다음 단계를 따르세요.

# 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

규칙 검증

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

규칙 삭제

$ secops rule delete --id "ru_12345"

알림 관리

알림을 받고 관리하려면 다음 단계를 따르세요.

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

케이스 관리

케이스 세부정보를 가져옵니다.

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

데이터 테이블

데이터 테이블은 감지 규칙에 사용되는 구조화된 데이터 모음입니다.

데이터 테이블 만들기

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

행 추가

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

행 나열

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

데이터 테이블 삭제

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

참조 목록

참조 목록은 감지 규칙의 단순한 값 목록입니다.

참조 목록 만들기

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

참조 목록 업데이트

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

참조 목록 나열

$ secops reference-list list

데이터 내보내기

분석을 위해 데이터 내보내기:

내보내기 만들기

# 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

내보내기 상태 확인

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

내보내기 취소

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

내보낼 수 있는 로그 유형 나열

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

Gemini AI 통합

Gemini AI에 보안 통계 쿼리:

# 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"

Gemini 사용 설정하기:

$ secops gemini --opt-in

대시보드 관리

기본 대시보드 관리:

대시보드 만들기

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

대시보드 나열

$ secops dashboard list --page-size 10

대시보드 업데이트

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

대시보드 내보내기/가져오기

# 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

대시보드에 차트 추가

$ 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}'

대시보드 삭제

$ secops dashboard delete --id dashboard-id

고급 예

파서 워크플로 완료

파서를 가져오고, 테스트하고, 배포합니다.

# 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"

검색 및 내보내기 워크플로

이벤트를 검색하고 결과를 내보내려면 다음 단계를 따르세요.

# 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

규칙 테스트 및 배포

감지 규칙을 만들고 테스트하고 배포합니다.

# 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

문제 해결

일반적인 문제

인증 오류

인증 오류가 발생하면 다음 단계를 따르세요.

  1. 사용자 인증 정보가 유효한지 확인
  2. 서비스 계정에 필요한 권한이 있는지 확인
  3. ADC가 올바르게 구성되어 있는지 확인합니다. gcloud auth application-default login

지역 오류

지역 관련 오류가 발생하는 경우:

  1. 리전이 지원되는지 확인
  2. 인스턴스가 지정된 리전에 있는지 확인
  3. --region 플래그 사용 또는 구성에서 설정

비율 제한

비율 제한 문제의 경우:

  1. API 호출 빈도 줄이기
  2. 대규모 결과 집합에 페이지로 나누기 사용
  3. 재시도를 위해 지수 백오프 구현

도움말 보기

모든 명령어의 도움말을 확인합니다.

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

chronicle_cli에서 이전

기존 chronicle_cli에서 이전하는 경우 일반적인 명령어의 매핑은 다음과 같습니다.

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

새로운 secops CLI는 다음과 같이 chronicle_cli에서 사용할 수 없는 다양한 추가 기능을 제공합니다.

  • 자연어 검색
  • Gemini AI 통합
  • 대시보드 관리
  • 규칙 테스트 및 검증
  • 데이터 테이블 및 참조 목록
  • 케이스 관리
  • 그 외 다양한 혜택

추가 리소스