Cisco Umbrella DNS 로그 수집

다음에서 지원:

이 문서에서는 AWS S3 버킷을 사용하여 Google Security Operations 피드에 Cisco Umbrella DNS 로그를 수집하는 방법을 설명합니다. 파서는 JSON 및 CSV 형식의 로그를 모두 처리합니다. 필드를 추출하고 UDM과 일치하도록 이름을 바꾸며, 프록시 및 IP 로그를 비롯한 다양한 로그 버전과 형식을 처리하고, ID, 보안 카테고리, 네트워크 이벤트에 대한 특정 로직을 실행하여 추출된 데이터를 UDM 스키마로 병합합니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • AWS IAM 및 S3에 대한 권한이 있는지 확인합니다.
  • Cisco Umbrella에 대한 권한 액세스 권한이 있는지 확인합니다.

Cisco 관리 Amazon S3 버킷 구성

  1. Cisco Umbrella 대시보드에 로그인합니다.
  2. 관리 > 로그 관리로 이동합니다.
  3. Cisco 관리 Amazon S3 버킷 사용 옵션을 선택합니다.
  4. 다음 구성 세부정보를 제공합니다.
    • 리전 선택: 지연 시간을 줄이려면 내 위치와 가까운 리전을 선택합니다.
    • 보관 기간 선택: 기간을 선택합니다. 보관 기간은 7일, 14일 또는 30일입니다. 선택한 기간이 지나면 데이터가 삭제되어 복구할 수 없습니다. 수집 주기가 정기적인 경우 더 짧은 기간을 사용하세요. 보관 기간은 나중에 변경할 수 있습니다.
  5. 저장을 클릭합니다.
  6. 계속을 클릭하여 선택한 내용을 확인하고 활성화 알림을 받습니다.
    활성화 완료 창이 표시되면 액세스 키보안 비밀 키 값이 표시됩니다.
  7. 액세스 키보안 비밀 키 값을 복사합니다. 이러한 키를 분실한 경우 다시 생성해야 합니다.
  8. 확인 > 계속을 클릭합니다.
  9. 요약 페이지에 구성과 버킷 이름이 표시됩니다. 조직의 요구사항에 따라 로깅을 사용 중지하거나 사용 설정할 수 있습니다. 하지만 새 데이터가 추가되더라도 보관 기간에 따라 로그가 삭제됩니다.

선택사항: 자체 관리 AWS S3 버킷의 사용자 액세스 키 구성

  1. AWS 관리 콘솔에 로그인합니다.
  2. 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
  3. 생성된 사용자를 선택합니다.
  4. 보안 사용자 인증 정보 탭을 선택합니다.
  5. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  6. 사용 사례서드 파티 서비스를 선택합니다.
  7. 다음을 클릭합니다.
  8. 선택사항: 설명 태그를 추가합니다.
  9. 액세스 키 만들기를 클릭합니다.
  10. CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  11. 완료를 클릭합니다.
  12. 권한 탭을 선택합니다.
  13. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  14. 권한 추가를 선택합니다.
  15. 정책 직접 연결을 선택합니다.
  16. AmazonS3FullAccess 정책을 검색하여 선택합니다.
  17. 다음을 클릭합니다.
  18. 권한 추가를 클릭합니다.

선택사항: 자체 관리 Amazon S3 버킷 구성

  1. AWS 관리 콘솔에 로그인합니다.

  2. S3로 이동합니다.

  3. 버킷 만들기를 클릭합니다.

  4. 다음 구성 세부정보를 제공합니다.

    • 버킷 이름: Amazon S3 버킷의 이름을 제공합니다.
    • 리전: 리전을 선택합니다.
  5. 만들기를 클릭합니다.

선택사항: 자체 관리 AWS S3 버킷의 버킷 정책 구성

  1. 새로 만든 버킷을 클릭하여 엽니다.
  2. 속성> 권한을 선택합니다.
  3. 권한 목록에서 버킷 정책 추가를 클릭합니다.
  4. 다음과 같이 사전 구성된 버킷 정책을 입력합니다.

    {
      "Version": "2008-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::BUCKET_NAME/*"
        },
        {
          "Sid": "",
          "Effect": "Deny",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::BUCKET_NAME/*"},
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:GetBucketLocation",
          "Resource": "arn:aws:s3:::BUCKET_NAME"
        },
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::BUCKET_NAME"
        }
      ]
    }
    
    • BUCKET_NAME을 제공한 Amazon S3 버킷 이름으로 바꿉니다.
  5. 저장을 클릭합니다.

선택사항: 자체 관리 Amazon S3 버킷에 필요한 인증

  1. Cisco Umbrella 대시보드에서 Admin > Log management > Amazon S3를 선택합니다.
  2. 버킷 이름 필드에 정확한 Amazon S3 버킷 이름을 지정한 다음 확인을 클릭합니다.
  3. 인증 절차의 일환으로 README_FROM_UMBRELLA.txt라는 파일이 Cisco Umbrella에서 Amazon S3 버킷으로 업로드됩니다. 업로드된 readme 파일을 보려면 브라우저를 새로고침해야 할 수 있습니다.
  4. README_FROM_UMBRELLA.txt 파일을 다운로드하고 텍스트 편집기를 사용하여 엽니다.
  5. 파일에서 고유한 Cisco Umbrella 토큰을 복사하여 저장합니다.
  6. Cisco Umbrella 대시보드로 이동합니다.
  7. 토큰 번호 필드에 토큰을 지정하고 저장을 클릭합니다.
  8. 인증에 성공하면 버킷이 인증되었음을 알리는 확인 메시지가 대시보드에 표시됩니다. 버킷을 확인할 수 없다는 오류가 표시되면 버킷 이름의 구문을 다시 확인하고 구성을 검토하세요.

Cisco Umbrella DNS 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정> 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다(예: Cisco Umbrella DNS 로그).
  4. 소스 유형으로 Amazon S3 V2를 선택합니다.
  5. 로그 유형으로 Cisco Umbrella DNS를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 매개변수의 값을 지정합니다.

    • S3 URI: 버킷 URI입니다.
      • s3:/BUCKET_NAME/
        • BUCKET_NAME을 버킷의 실제 이름으로 바꿉니다.
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
  8. 다음을 클릭합니다.

  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
action security_result.action_details 이 값은 JSON 로그에 있는 경우 action 필드에서 가져오거나 CSV 로그에 있는 경우 column6 또는 column7에서 가져와 대문자 (ALLOW 또는 BLOCK)로 변환됩니다.
amp.disposition security_result.detection_fields[].key 값은 ampDisposition입니다.
amp.disposition security_result.detection_fields[].value 값은 amp.disposition 필드에서 가져옵니다.
amp.malware security_result.detection_fields[].key 값은 ampMalware입니다.
amp.malware security_result.detection_fields[].value 값은 amp.malware 필드에서 가져옵니다.
amp.score security_result.detection_fields[].key 값은 ampScore입니다.
amp.score security_result.detection_fields[].value 값은 amp.score 필드에서 가져옵니다.
blocked_categories security_result.category_details 값은 blocked_categories 필드에서 가져옵니다.
blockedfiletype security_result.detection_fields[].key 값은 egress type입니다.
blockedfiletype security_result.detection_fields[].value 값은 blockedfiletype 필드에서 가져옵니다.
bundleid additional.fields[].key 값은 bundleid입니다.
bundleid additional.fields[].value.string_value 값은 bundleid 필드에서 가져옵니다.
categories[] security_result.category_details 값은 categories[].label 필드에서 가져옵니다.
column1 metadata.event_timestamp.seconds 값은 column1 필드에서 타임스탬프로 파싱됩니다. 프록시 로그의 경우 datetime 필드가 있으면 결합되어 타임스탬프로 파싱됩니다.
column10 network.http.user_agent 값은 column10 필드에서 가져옵니다.
column10 additional.fields[].value.string_value 값은 column10 필드에서 가져옵니다.
column11 target.port 값은 column11 필드에서 가져옵니다.
column12 principal.resource.name 값은 column12 필드에서 가져옵니다.
column13 security_result.rule_id 값은 column13 필드에서 가져옵니다.
column14 security_result.action_details 값은 column14 필드에서 가져옵니다.
column2 principal.user.user_display_name 값은 column2 필드에서 가져옵니다.
column2 principal.user.userid 값은 column2 필드에서 가져옵니다.
column2 principal.location.name 값은 column2 필드에서 가져옵니다.
column3 principal.hostname 값은 column3 필드에서 가져옵니다.
column3 principal.user.product_object_id 값은 column3 필드에서 가져옵니다.
column3 principal.location.city 값은 column3 필드에서 가져옵니다.
column3 additional.fields[].value.string_value 값은 column3 필드에서 가져옵니다.
column4 principal.asset.ip 값은 column4 필드에서 가져옵니다.
column4 principal.ip 값은 column4 필드에서 가져옵니다.
column4 principal.port 값은 column4 필드에서 가져옵니다.
column5 principal.asset.ip 값은 column5 필드에서 가져옵니다.
column5 principal.ip 값은 column5 필드에서 가져옵니다.
column5 target.asset.ip 값은 column5 필드에서 가져옵니다.
column5 target.ip 값은 column5 필드에서 가져옵니다.
column6 security_result.action_details 값은 column6 필드에서 가져옵니다.
column6 target.port 값은 column6 필드에서 가져옵니다.
column7 network.received_bytes 값은 column7 필드에서 가져옵니다.
column7 additional.fields[].value.string_value 값은 column7 필드에서 가져옵니다.
column8 principal.asset.ip 값은 column8 필드에서 가져옵니다.
column8 principal.ip 값은 column8 필드에서 가져옵니다.
column8 target.url 값은 column8 필드에서 가져옵니다.
column9 principal.port 값은 column9 필드에서 가져옵니다.
column9 network.http.referral_url 값은 column9 필드에서 가져옵니다.
data_center_name principal.resource.name 값은 data_center_name 필드에서 가져옵니다.
datacenter.label security_result.detection_fields[].key 값은 datacenter label입니다.
datacenter.label security_result.detection_fields[].value 값은 datacenter.label 필드에서 가져옵니다.
destinationip target.asset.ip 값은 destinationip 필드에서 가져옵니다.
destinationip target.ip 값은 destinationip 필드에서 가져옵니다.
direction network.direction 값은 direction 필드에서 가져와 대문자로 변환됩니다.
domain network.dns.questions[].name 값은 domain 필드에서 가져오며, 후행 점이 있는 경우 삭제됩니다.
dstPort target.port 값은 dstPort 필드에서 가져옵니다.
dstip target.asset.ip 값은 dstip 필드에서 가져옵니다.
dstip target.ip 값은 dstip 필드에서 가져옵니다.
egress.ip security_result.detection_fields[].key 값은 egress ip입니다.
egress.ip security_result.detection_fields[].value 값은 egress.ip 필드에서 가져옵니다.
egress.type security_result.detection_fields[].key 값은 egress type입니다.
egress.type security_result.detection_fields[].value 값은 egress.type 필드에서 가져옵니다.
externalip principal.asset.ip 값은 externalip 필드에서 가져옵니다.
externalip principal.ip 값은 externalip 필드에서 가져옵니다.
forwardingmethod additional.fields[].key 값은 forwardingmethod입니다.
forwardingmethod additional.fields[].value.string_value 값은 forwardingmethod 필드에서 가져옵니다.
granular_identity principal.user.user_display_name granular_identitymost_granular_identity이 모두 있는 경우 값은 granular_identity 필드에서 가져옵니다. 그렇지 않으면 _policy_identity 필드에서 파생되며 identityType에 따라 추가로 파싱됩니다.
granular_identity principal.user.email_addresses 값은 정규 표현식을 사용하여 granular_identity 필드에서 추출됩니다.
granular_identity principal.user.first_name 값은 정규 표현식을 사용하여 granular_identity 필드에서 추출됩니다.
granular_identity principal.user.last_name 값은 정규 표현식을 사용하여 granular_identity 필드에서 추출됩니다.
granular_identity principal.user.userid 값은 정규 표현식을 사용하여 granular_identity 필드에서 추출됩니다.
granular_identity principal.hostname 값은 granular_identity 필드에서 가져옵니다.
granular_identity principal.location.name 값은 granular_identity 필드에서 가져옵니다.
identity_types additional.fields[].value.string_value 값은 identity_types 필드에서 가져옵니다.
identities[] principal.user.product_object_id 값은 identities[] 필드에서 가져옵니다.
identities principal.user.product_object_id 값은 identities 필드에서 가져옵니다.
internalip principal.asset.ip 값은 internalip 필드에서 가져옵니다.
internalip principal.ip 값은 internalip 필드에서 가져옵니다.
isolated.fileaction security_result.detection_fields[].key 값은 isolated fileaction입니다.
isolated.fileaction security_result.detection_fields[].value 값은 isolated.fileaction 필드에서 가져옵니다.
isolated.state security_result.detection_fields[].key 값은 isolated state입니다.
isolated.state security_result.detection_fields[].value 값은 isolated.state 필드에서 가져옵니다.
most_granular_identity principal.user.identityType granular_identitymost_granular_identity이 모두 있는 경우 값은 most_granular_identity 필드에서 가져옵니다. 그렇지 않으면 _policy_identity_type 필드에서 가져옵니다.
nat_destination_ip principal.asset.ip 값은 nat_destination_ip 필드에서 가져옵니다.
nat_destination_ip principal.ip 값은 nat_destination_ip 필드에서 가져옵니다.
odns_categories security_result.category_details 값은 odns_categories 필드에서 가져옵니다.
policy.ruleid security_result.rule_id 값은 policy.ruleid 필드에서 가져옵니다.
policy.rulesetid security_result.detection_fields[].key 값은 rulesetid입니다.
policy.rulesetid security_result.detection_fields[].value 값은 policy.rulesetid 필드에서 가져옵니다.
policy.timebasedrule security_result.detection_fields[].key 값은 timebasedrule입니다.
policy.timebasedrule security_result.detection_fields[].value 값은 policy.timebasedrule 필드에서 가져옵니다.
port target.port 값은 port 필드에서 가져옵니다.
query_type_name network.dns.questions[].type 숫자 부분이 정규 표현식을 사용하여 query_type_name 필드에서 추출되고 정수로 변환됩니다.
query_type_name additional.fields[].value.string_value 괄호 안의 문자열 부분이 정규 표현식을 사용하여 query_type_name 필드에서 추출됩니다.
querytype network.dns.questions[].type 이 값은 querytype 필드에서 가져오며 DNS 레코드 유형에 따라 숫자 값에 매핑됩니다.
referer network.http.referral_url 값은 referer 필드에서 가져옵니다.
requestmethod network.http.method 값은 requestmethod 필드에서 가져옵니다.
requestsize network.sent_bytes 값은 requestsize 필드에서 가져와 부호 없는 정수로 변환됩니다.
response additional.fields[].value.string_value 값은 response 필드에서 가져옵니다.
responsecode network.http.response_code 값은 responsecode 필드에서 가져옵니다.
responsefilename target.file.names 값은 responsefilename 필드에서 가져옵니다.
responsesize network.received_bytes 값은 responsesize 필드에서 가져와 부호 없는 정수로 변환됩니다.
returncode network.dns.response_code 값은 returncode 필드에서 가져와 부호 없는 정수로 변환됩니다.
securityoverridden additional.fields[].key 값은 securityoverridden입니다.
securityoverridden additional.fields[].value.string_value 값은 securityoverridden 필드에서 가져옵니다.
sha256 target.file.sha256 값은 sha256 필드에서 가져옵니다.
source_ip principal.asset.ip 값은 JSON 로그에 있는 경우 source_ip 필드에서 가져오고 CSV 로그에 있는 경우 column3에서 가져옵니다.
source_ip principal.ip 값은 JSON 로그에 있는 경우 source_ip 필드에서 가져오고 CSV 로그에 있는 경우 column3에서 가져옵니다.
srcPort principal.port 값은 srcPort 필드에서 가져옵니다.
statuscode network.http.response_code 값은 statuscode 필드에서 가져옵니다.
tenantcontrols additional.fields[].key 값은 tenantcontrols입니다.
tenantcontrols additional.fields[].value.string_value 값은 tenantcontrols 필드에서 가져옵니다.
timestamp metadata.event_timestamp.seconds 값은 timestamp 필드에서 타임스탬프로 파싱됩니다.
tunnel_name additional.fields[].key 값은 tunnel_name입니다.
tunnel_name additional.fields[].value.string_value 값은 tunnel_name 필드에서 가져옵니다.
tunnel_type metadata.product_event_type 값은 tunnel_type 필드에서 가져옵니다.
type additional.fields[].key 값은 type입니다.
type additional.fields[].value.string_value 값은 type 필드에서 가져옵니다.
url target.url 값은 url 필드에서 가져옵니다.
useragent network.http.user_agent 값은 useragent 필드에서 가져옵니다.
verdict security_result.action_details 값은 verdict 필드에서 가져옵니다.
warnstatus security_result.detection_fields[].key 값은 warnstatus입니다.
warnstatus security_result.detection_fields[].value 값은 warnstatus 필드에서 가져옵니다. 값은 DNS Lookup Type입니다. 괄호 안의 문자열 부분은 정규 표현식을 사용하여 query_type_name 필드에서 추출되거나 필드가 없는 경우 빈 문자열입니다. 값은 특정 필드의 존재 여부에 따라 결정됩니다. question.name가 있으면 NETWORK_DNS, principal.iptarget.ip가 모두 있으면 NETWORK_CONNECTION, principal.ip만 있으면 STATUS_UPDATE, 그 외의 경우에는 GENERIC_EVENT입니다.DNS request and response were made. 값은 UMBRELLA_DNS입니다. 값은 Umbrella DNS입니다. 값은 Cisco입니다. 값은 처음에 DNS로 설정됩니다. requestmethod가 유효한 HTTP 메서드인 경우 HTTP으로 변경됩니다. 숫자 부분은 정규 표현식을 사용하여 query_type_name 필드에서 추출되어 정수로 변환되거나 querytype 필드에서 파생되어 DNS 레코드 유형에 따라 숫자 값에 매핑됩니다. 값은 parseduseragent 필터를 사용하여 useragent 또는 column10 필드에서 파생됩니다. 이 값은 쉼표로 분할된 column3 필드의 마지막 부분에서 가져오거나 필드가 없는 경우 빈 문자열입니다. 값은 쉼표로 분할된 column3 필드의 첫 번째 부분에서 가져오거나 column3가 없는 경우 column2 필드에서 가져옵니다. 값은 정규 표현식을 사용하여 column2 또는 column3 필드에서 추출됩니다. 값은 정규 표현식을 사용하여 column2 또는 column3 필드에서 추출됩니다. 값은 정규 표현식을 사용하여 column2 또는 column3 필드에서 추출됩니다. 값은 정규 표현식을 사용하여 column2 또는 column3 필드에서 추출됩니다. 값은 action, column6, column7 또는 verdict 필드에서 파생되며 대문자 (ALLOW 또는 BLOCK)로 변환됩니다. _categoriesMalware가 포함된 경우 값은 NETWORK_MALICIOUS로 설정되고, _categoriesPotentially Harmful가 포함된 경우 값은 NETWORK_SUSPICIOUS로 설정됩니다.

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