Armis 취약점 로그 수집

다음에서 지원:

이 문서에서는 Google Cloud Functions를 사용하여 Armis 취약점 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 원시 JSON 형식의 보안 취약점 로그를 Google SecOps UDM을 준수하는 구조화된 형식으로 변환합니다. 원시 로그에서 다양한 필드를 추출하고, 해당 UDM 필드에 매핑하고, 데이터 유형 변환을 실행하고, Google SecOps 플랫폼으로 수집하기 위해 출력을 구조화합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • 고객 ID 및 서비스 계정 사용자 인증 정보가 있는 Google SecOps 인스턴스
  • Armis Centrix 플랫폼에 대한 액세스 권한 관리
  • Armis API 보안 키 및 서버 URL
  • Cloud Functions, Secret Manager 보안 비밀, Cloud Scheduler 작업을 만들 권한이 있는 Google Cloud 에 대한 액세스
  • Armis Asset Vulnerability Management (AVM) 라이선스 또는 모듈 액세스

Google SecOps 고객 ID 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 프로필로 이동합니다.
  3. 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.

Google SecOps 서비스 계정 사용자 인증 정보 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 수집 인증 파일 (서비스 계정 JSON 파일)을 다운로드합니다.
  4. Google Secret Manager에 업로드해야 하므로 파일을 안전하게 저장하세요.

Armis API 보안 키 가져오기

  1. Armis Centrix 플랫폼에 로그인합니다.
  2. 설정 > API 관리로 이동합니다.
  3. 새 API 보안 키를 생성해야 하는 경우 만들기를 클릭합니다.
  4. 표시를 클릭하여 보안 키를 확인합니다.
  5. 보안 비밀 키를 복사하여 안전하게 저장합니다.

Google Secret Manager 구성

이 섹션에서는 Google Secret Manager를 사용하여 통합에 필요한 서비스 계정 키를 안전하게 저장하는 방법을 안내합니다.

Google SecOps 서비스 계정 보안 비밀 추가

  1. Google Cloud 콘솔에 로그인합니다.
  2. 보안 > Secret Manager로 이동합니다.
  3. 보안 비밀 만들기를 클릭합니다.
  4. 다음 구성 세부정보를 제공합니다.
    • 이름: 보안 비밀의 이름을 입력합니다 (예: secops-service-account).
    • 보안 비밀 값: 이전에 다운로드한 Google SecOps 서비스 계정 JSON 파일을 업로드하거나 콘텐츠를 직접 붙여넣습니다.
  5. 보안 비밀 만들기를 클릭합니다.
  6. 다음 형식으로 생성된 보안 비밀의 리소스 ID복사합니다.

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}
    

Armis API 보안 비밀 키 보안 비밀 추가

  1. Secret Manager에서 보안 비밀 만들기를 클릭합니다.
  2. 다음 구성 세부정보를 제공합니다.
    • 이름: 보안 비밀의 이름을 입력합니다 (예: armis-api-secret).
    • 보안 비밀 값: 이전에 획득한 Armis API 보안 비밀 키를 붙여넣습니다.
  3. 보안 비밀 만들기를 클릭합니다.
  4. 다음 형식으로 생성된 보안 비밀의 리소스 ID복사합니다.

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
    

수집 스크립트 다운로드 및 준비

  1. https://github.com/chronicle/ingestion-scripts에서 공식 Google SecOps 수집 스크립트 저장소에 액세스합니다.
  2. 저장소에서 armis 디렉터리의 콘텐츠를 다운로드합니다.
  3. 저장소에서 common 디렉터리를 다운로드합니다 (필수 종속 항목).
  4. 로컬 머신에 Cloud 함수 배포를 위한 새 디렉터리를 만듭니다.
  5. armiscommon 디렉터리의 콘텐츠를 모두 배포 디렉터리에 복사합니다.

환경 변수 구성

  1. 텍스트 편집기에서 .env.yml 파일을 엽니다.
  2. 다음 구성으로 파일을 수정합니다.

    CHRONICLE_CUSTOMER_ID: <YOUR_CUSTOMER_ID>
    CHRONICLE_REGION: "us"
    CHRONICLE_SERVICE_ACCOUNT: projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}
    CHRONICLE_NAMESPACE: <YOUR_NAMESPACE>
    POLL_INTERVAL: "10"
    ARMIS_SERVER_URL: https://<your-armis-instance>.armis.com
    ARMIS_API_SECRET_KEY: projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}
    HTTPS_PROXY: 
    CHRONICLE_DATA_TYPE: ARMIS_VULNERABILITIES
    
    • 다음 값을 바꿉니다.

      • <YOUR_CUSTOMER_ID>: Google SecOps 고객 ID
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: Secret Manager의 Google SecOps 서비스 계정 보안 비밀의 전체 리소스 ID 경로
      • <YOUR_NAMESPACE>: Google Security Operations 로그의 선택적 네임스페이스입니다 (예: armis-vulnerabilities).
      • <your-armis-instance>: Armis 테넌트 하위 도메인 (예: URL이 https://company.armis.com인 경우 company 사용)
      • projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: Secret Manager에 있는 Armis API 보안 비밀의 전체 리소스 ID 경로

Cloud 함수 배포

  1. Cloud Shell을 열거나 gcloud CLI가 설치된 로컬 터미널을 엽니다.
  2. 수집 스크립트 파일이 포함된 디렉터리로 이동합니다.
  3. 다음 명령어를 실행합니다.

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --gen2 \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 3600s \
      --region us-central1
    

Cloud Functions 1세대를 사용하여 배포 (대안)

  • 다음 명령어를 실행합니다.

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 540s \
      --region us-central1
    

Cloud Scheduler 작업 만들기

  1. Google Cloud 콘솔에서 Cloud Scheduler로 이동합니다.
  2. 작업 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 이름: 작업 이름을 입력합니다 (예: armis-vulnerabilities-scheduler).
    • 리전: Cloud 함수와 동일한 리전을 선택합니다 (예: us-central1).
    • 빈도: 크론 문법을 사용하여 일정을 입력합니다 (예: 10분마다 */10 * * * *).
    • 시간대: 선호하는 시간대 (예: UTC)를 선택합니다.
  4. 계속을 클릭합니다.
  5. 대상 유형으로 HTTP를 선택합니다.
  6. 다음 구성 세부정보를 제공합니다.
    • URL: Cloud Functions 콘솔에서 함수의 트리거 탭으로 이동하여 트리거 URL을 복사합니다. 여기에 붙여넣으세요.
    • HTTP 메서드: POST를 선택합니다.
  7. 인증 헤더> OIDC 토큰 추가를 클릭합니다.
  8. Cloud 함수에서 사용하는 서비스 계정을 선택합니다.
  9. 만들기를 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
affectedDevicesCount read_only_udm.security_result.detection_fields.value 직접 매핑, 문자열로 변환됨
attackComplexity read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
attackVector read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
availabilityImpact read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
avmRating read_only_udm.security_result.detection_fields.value 직접 매핑
봇넷 read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 여러 봇넷이 있는 경우 단일 문자열로 연결됩니다.
cisaDueDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
collection_time.nanos read_only_udm.metadata.event_timestamp.nanos 직접 매핑
collection_time.seconds read_only_udm.metadata.event_timestamp.seconds 직접 매핑
commonName read_only_udm.extensions.vulns.vulnerabilities.name 직접 매핑
confidentialityImpact read_only_udm.security_result.detection_fields.value 직접 매핑
cveUid read_only_udm.extensions.vulns.vulnerabilities.cve_id 직접 매핑
cvssScore read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score 직접 매핑, float로 변환됨
설명 read_only_udm.metadata.description 직접 매핑
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑, 문자열로 변환됨
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑, 문자열로 변환됨
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑, 문자열로 변환됨
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found 타임스탬프로 파싱되며 밀리초가 있는 형식과 없는 형식을 처리합니다.
firstWeaponizedReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
hasRansomware read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑, 문자열로 변환됨
id read_only_udm.metadata.product_log_id 직접 매핑
impactScore read_only_udm.security_result.detection_fields.value 직접 매핑, 문자열로 변환됨
integrityImpact read_only_udm.security_result.detection_fields.value 직접 매핑
isWeaponized read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑, 문자열로 변환됨
latestExploitUpdate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
numOfExploits read_only_udm.security_result.detection_fields.value 직접 매핑, 문자열로 변환됨
numberOfThreatActors read_only_udm.security_result.detection_fields.value 직접 매핑, 문자열로 변환됨
orgPriorityManualChangeReason read_only_udm.security_result.detection_fields.value 직접 매핑
orgPriorityManualChangedBy read_only_udm.principal.user.userid 직접 매핑
orgPriorityManualUpdateTime read_only_udm.principal.labels.value 직접 매핑
privilegesRequired read_only_udm.security_result.detection_fields.value 직접 매핑
publishedDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
reportedByGoogleZeroDays read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑, 문자열로 변환됨
범위 read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
줄이는 것을 read_only_udm.extensions.vulns.vulnerabilities.severity 값에 따라 심각, 높음, 보통, 낮음에 매핑되며 원래 값도 severity_details에 매핑됩니다.
상태 read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 직접 매핑
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 위협 태그가 여러 개 있는 경우 단일 문자열로 연결됩니다.
userInteraction read_only_udm.about.labels.value 직접 매핑
vulnerabilities_matches read_only_udm.metadata.url_back_to_product 직접 매핑
read_only_udm.metadata.event_type 'GENERIC_EVENT'로 설정합니다.
read_only_udm.metadata.product_name 'ARMIS'로 설정합니다.
read_only_udm.metadata.vendor_name 'ARMIS'로 설정합니다.
read_only_udm.metadata.log_type 'ARMIS_VULNERABILITIES'로 설정합니다.
read_only_udm.extensions.vulns.vulnerabilities.severity_details 'severity' 필드 값이 이 필드에 매핑됩니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.