收集 DomainTools Iris Investigate 結果
本文說明如何使用 Amazon S3,將 DomainTools Iris Investigate 結果擷取至 Google Security Operations。剖析器會將 DomainTools Iris API 的原始 JSON 資料轉換為符合 Google SecOps 統一資料模型 (UDM) 的結構化格式。並擷取網域詳細資料、聯絡資訊、安全風險、SSL 憑證和其他相關屬性的資訊,然後對應至相應的 UDM 欄位,以利進行一致的分析和威脅情報。
事前準備
- Google SecOps 執行個體
- DomainTools 企業帳戶的特殊存取權 (Iris Investigate 的 API 存取權)
- AWS 的特殊存取權 (S3、IAM、Lambda、EventBridge)
取得 DomainTools API 金鑰和端點
- 登入 DomainTools API 資訊主頁 (只有 API 擁有者帳戶可以重設 API 金鑰)。
- 在「我的帳戶」部分,選取「帳戶摘要」分頁中的「查看 API 資訊主頁」連結。
- 前往「API Username」(API 使用者名稱) 部分,取得使用者名稱。
- 在同一個分頁中,找出 API 金鑰。
- 複製金鑰並妥善儲存於安全的位置。
如需新金鑰,請選取「重設 API 金鑰」。
請注意 Iris Investigate 端點:
https://api.domaintools.com/v1/iris-investigate/
。
為 Google SecOps 設定 AWS S3 值區和 IAM
- 按照本使用指南建立 Amazon S3 值區:建立值區
- 儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如
domaintools-iris
)。 - 按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「下載 CSV 檔案」,儲存「存取金鑰」和「私密存取金鑰」,以供日後使用。
- 按一下 [完成]。
- 選取 [權限] 分頁標籤。
- 在「Permissions policies」(權限政策) 區段中,按一下「Add permissions」(新增權限)。
- 選取「新增權限」。
- 選取「直接附加政策」
- 搜尋並選取 AmazonS3FullAccess 政策。
- 點選「下一步」。
- 按一下「Add permissions」。
設定 S3 上傳的身分與存取權管理政策和角色
- 在 AWS 管理控制台中,依序前往「IAM」>「Policies」>「Create policy」>「JSON」分頁標籤。
輸入下列政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutDomainToolsIrisObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::domaintools-iris/*" } ] }
- 如果您輸入的值區名稱不同,請替換
domaintools-iris
。
- 如果您輸入的值區名稱不同,請替換
依序點選「Next」>「Create policy」。
依序前往「IAM」>「Roles」>「Create role」>「AWS service」>「Lambda」。
附加新建立的政策。
為角色命名
WriteDomainToolsIrisToS3Role
,然後按一下「建立角色」。
建立 Lambda 函式
- 在 AWS 控制台中,依序前往「Lambda」>「Functions」>「Create function」。
- 按一下「從頭開始撰寫」。
請提供下列設定詳細資料:
設定 值 名稱 domaintools_iris_to_s3
執行階段 Python 3.13 架構 x86_64 執行角色 WriteDomainToolsIrisToS3Role
建立函式後,開啟「程式碼」分頁,刪除存根並輸入下列程式碼 (
domaintools_iris_to_s3.py
):#!/usr/bin/env python3 # Lambda: Pull DomainTools Iris Investigate results to S3 (no transform) import os, json, time, urllib.parse from urllib.request import Request, urlopen from urllib.error import HTTPError import boto3 # --- Environment --- S3_BUCKET = os.environ["S3_BUCKET"].strip() S3_PREFIX = os.environ.get("S3_PREFIX", "domaintools/iris/").strip() STATE_KEY = os.environ.get("STATE_KEY", "domaintools/iris/state.json").strip() DT_API_KEY = os.environ["DT_API_KEY"].strip() DT_API_SECRET= os.environ.get("DT_API_SECRET", "").strip() # optional if your account uses key-only auth USE_MODE = os.environ.get("USE_MODE", "HASH").strip().upper() # HASH | DOMAINS | QUERY SEARCH_HASHES= [h.strip() for h in os.environ.get("SEARCH_HASHES", "").split(";") if h.strip()] DOMAINS = [d.strip() for d in os.environ.get("DOMAINS", "").split(";") if d.strip()] QUERY_LIST = [q.strip() for q in os.environ.get("QUERY_LIST", "").split(";") if q.strip()] PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "500")) MAX_PAGES = int(os.environ.get("MAX_PAGES", "20")) USE_NEXT = os.environ.get("USE_NEXT", "true").lower() == "true" HTTP_TIMEOUT = int(os.environ.get("HTTP_TIMEOUT", "60")) RETRIES = int(os.environ.get("HTTP_RETRIES", "2")) BASE_URL = "https://api.domaintools.com/v1/iris-investigate/" HDRS = { "X-Api-Key": DT_API_KEY, "Accept": "application/json", } if DT_API_SECRET: HDRS["X-Api-Secret"] = DT_API_SECRET s3 = boto3.client("s3") # --- HTTP helpers --- def _http_get(url: str) -> dict: req = Request(url, method="GET") for k, v in HDRS.items(): req.add_header(k, v) attempt = 0 while True: try: with urlopen(req, timeout=HTTP_TIMEOUT) as r: return json.loads(r.read().decode("utf-8")) except HTTPError as e: if e.code in (429, 500, 502, 503, 504) and attempt < RETRIES: delay = int(e.headers.get("Retry-After", "2")) time.sleep(max(1, delay)) attempt += 1 continue raise def _build_url(params: dict) -> str: return BASE_URL + ("?" + urllib.parse.urlencode(params, doseq=True) if params else "") # --- S3 helpers --- def _write_page(obj: dict, label: str, page: int) -> str: ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime()) key = f"{S3_PREFIX.rstrip('/')}/{ts}-{label}-p{page:05d}.json" s3.put_object( Bucket=S3_BUCKET, Key=key, Body=json.dumps(obj, separators=(",", ":")).encode("utf-8"), ContentType="application/json", ) return key # --- Iris paging --- def _first_page_params() -> dict: params: dict[str, object] = {"page_size": str(PAGE_SIZE)} if USE_NEXT: params["next"] = "true" return params def _paginate(label: str, params: dict) -> tuple[int, int]: pages = 0 total = 0 url = _build_url(params) while pages < MAX_PAGES: data = _http_get(url) _write_page(data, label, pages) resp = data.get("response") or {} results = resp.get("results") or [] total += len(results) pages += 1 # Prefer `next` absolute URL if present next_url = resp.get("next") if isinstance(resp, dict) else None if next_url: url = next_url continue # Fallback: position pager when `next=true` not used/supported if resp.get("has_more_results") and resp.get("position"): base = _first_page_params() base.pop("next", None) base["position"] = resp["position"] url = _build_url(base) continue break return pages, total # --- Mode runners --- def run_hashes(hashes: list[str]) -> dict: agg_pages = agg_results = 0 for h in hashes: params = _first_page_params() params["search_hash"] = h p, r = _paginate(f"hash-{h}", params) agg_pages += p agg_results += r return {"pages": agg_pages, "results": agg_results} def run_domains(domains: list[str]) -> dict: agg_pages = agg_results = 0 for d in domains: params = _first_page_params() # DomainTools accepts `domain` as a filter in Investigate search params["domain"] = d p, r = _paginate(f"domain-{d}", params) agg_pages += p agg_results += r return {"pages": agg_pages, "results": agg_results} def run_queries(queries: list[str]) -> dict: agg_pages = agg_results = 0 for q in queries: # Merge arbitrary k=v pairs from the query string base = _first_page_params() for k, v in urllib.parse.parse_qsl(q, keep_blank_values=True): base.setdefault(k, v) p, r = _paginate(f"query-{q.replace('=','-')}", base) agg_pages += p agg_results += r return {"pages": agg_pages, "results": agg_results} # --- Entry point --- def lambda_handler(event=None, context=None): if USE_MODE == "HASH" and SEARCH_HASHES: res = run_hashes(SEARCH_HASHES) elif USE_MODE == "DOMAINS" and DOMAINS: res = run_domains(DOMAINS) elif USE_MODE == "QUERY" and QUERY_LIST: res = run_queries(QUERY_LIST) else: raise ValueError("Invalid USE_MODE or missing parameters. Set USE_MODE to HASH | DOMAINS | QUERY and provide SEARCH_HASHES | DOMAINS | QUERY_LIST accordingly.") return {"ok": True, "mode": USE_MODE, **res} if __name__ == "__main__": print(json.dumps(lambda_handler(), indent=2))
依序前往「Configuration」>「Environment variables」>「Edit」>「Add new environment variable」。
輸入下列環境變數,並將 換成您的值:
鍵 範例值 說明 S3_BUCKET
domaintools-iris
要儲存資料的 S3 值區名稱。 S3_PREFIX
domaintools/iris/
物件的選用 S3 前置字串 (子資料夾)。 STATE_KEY
domaintools/iris/state.json
選用狀態/檢查點檔案金鑰。 DT_API_KEY
DT-XXXXXXXXXXXXXXXXXXXX
DomainTools API 金鑰。 DT_API_SECRET
YYYYYYYYYYYYYYYYYYYYYYYY
DomainTools API 密鑰 (如適用)。 USE_MODE
HASH
|DOMAINS
|QUERY
選取要使用的模式 (一次只能啟用一個模式)。 SEARCH_HASHES
hash1;hash2;hash3
如果 USE_MODE=HASH
,則為必要欄位。以半形分號分隔的清單,列出 Iris UI 中儲存的搜尋雜湊。DOMAINS
example.com;domaintools.com
如果 USE_MODE=DOMAINS
,則為必要欄位。以半形分號分隔的網域清單。QUERY_LIST
ip=1.1.1.1;ip=8.8.8.8;domain=example.org
如果 USE_MODE=QUERY
,則為必要欄位。以分號分隔的查詢字串清單 (k=v&k2=v2
)。PAGE_SIZE
500
每頁列數 (預設為 500)。 MAX_PAGES
20
每項要求的頁數上限 建立函式後,請留在函式頁面 (或依序開啟「Lambda」>「Functions」>「your-function」)。
選取「設定」分頁標籤。
在「一般設定」面板中,按一下「編輯」。
將「逾時」變更為「15 分鐘 (900 秒)」,然後按一下「儲存」。
建立 EventBridge 排程
- 依序前往「Amazon EventBridge」>「Scheduler」>「Create schedule」。
- 提供下列設定詳細資料:
- 週期性時間表:費率 (
1 hour
)。 - 目標:您的 Lambda 函式。
- 名稱:
domaintools-iris-1h
。
- 週期性時間表:費率 (
- 按一下「建立時間表」。
選用:為 Google SecOps 建立唯讀 IAM 使用者和金鑰
- 在 AWS 控制台中,依序前往「IAM」>「Users」,然後按一下「Add users」。
- 提供下列設定詳細資料:
- 使用者:輸入不重複的名稱 (例如
secops-reader
) - 存取權類型:選取「存取金鑰 - 程式輔助存取」
- 按一下「建立使用者」。
- 使用者:輸入不重複的名稱 (例如
- 附加最低讀取權限政策 (自訂):依序選取「使用者」
secops-reader
「權限」「新增權限」「直接附加政策」「建立政策」 在 JSON 編輯器中輸入下列政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::<your-bucket>/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::<your-bucket>" } ] }
將名稱設為
secops-reader-policy
。依序前往「建立政策」> 搜尋/選取 >「下一步」>「新增權限」。
依序前往「安全憑證」>「存取金鑰」>「建立存取金鑰」。
下載 CSV (這些值會輸入至動態饋給)。
在 Google SecOps 中設定動態饋給,擷取 DomainTools Iris Investigate 結果
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
DomainTools Iris Investigate
)。 - 選取「Amazon S3 V2」做為「來源類型」。
- 選取「DomainTools Threat Intelligence」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- S3 URI:
s3://domaintools-iris/domaintools/iris/
- 來源刪除選項:根據偏好選取刪除選項。
- 檔案存在時間上限:預設為 180 天。
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
- 資產命名空間:
domaintools.threat_intel
- 擷取標籤:要套用至這個動態饋給事件的標籤。
- S3 URI:
- 點選「下一步」。
- 在「Finalize」畫面上檢查新的動態饋給設定,然後按一下「Submit」。
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
有效 | principal.domain.status | 直接從原始記錄中的 active 欄位對應。 |
additional_whois_email.[].value | about.labels.additional_whois_email | 從 additional_whois_email 陣列擷取,並新增為 about 物件中的標籤。 |
adsense.value | about.labels.adsense | 從 adsense.value 擷取,並新增為 about 物件中的標籤。 |
admin_contact.city.value | principal.domain.admin.office_address.city | 直接從原始記錄中的 admin_contact.city.value 欄位對應。 |
admin_contact.country.value | principal.domain.admin.office_address.country_or_region | 直接從原始記錄中的 admin_contact.country.value 欄位對應。 |
admin_contact.email.[].value | principal.domain.admin.email_addresses | 從 admin_contact.email 陣列擷取,並新增至 email_addresses 欄位。 |
admin_contact.fax.value | principal.domain.admin.attribute.labels.fax | 從 admin_contact.fax.value 擷取,並在 admin 屬性中新增為索引鍵為「fax」的標籤。 |
admin_contact.name.value | principal.domain.admin.user_display_name | 直接從原始記錄中的 admin_contact.name.value 欄位對應。 |
admin_contact.org.value | principal.domain.admin.company_name | 直接從原始記錄中的 admin_contact.org.value 欄位對應。 |
admin_contact.phone.value | principal.domain.admin.phone_numbers | 直接從原始記錄中的 admin_contact.phone.value 欄位對應。 |
admin_contact.postal.value | principal.domain.admin.attribute.labels.postal | 從 admin_contact.postal.value 擷取,並在 admin 屬性中以「postal」做為鍵新增為標籤。 |
admin_contact.state.value | principal.domain.admin.office_address.state | 直接從原始記錄中的 admin_contact.state.value 欄位對應。 |
admin_contact.street.value | principal.domain.admin.office_address.name | 直接從原始記錄中的 admin_contact.street.value 欄位對應。 |
Alexa | about.labels.alexa | 直接從原始記錄中的 alexa 欄位對應,並以標籤形式新增至 about 物件。 |
baidu_codes.[].value | about.labels.baidu_codes | 從 baidu_codes 陣列擷取,並新增為 about 物件中的標籤。 |
billing_contact.city.value | principal.domain.billing.office_address.city | 直接從原始記錄中的 billing_contact.city.value 欄位對應。 |
billing_contact.country.value | principal.domain.billing.office_address.country_or_region | 直接從原始記錄中的 billing_contact.country.value 欄位對應。 |
billing_contact.email.[].value | principal.domain.billing.email_addresses | 從 billing_contact.email 陣列擷取,並新增至 email_addresses 欄位。 |
billing_contact.fax.value | principal.domain.billing.attribute.labels.fax | 從 billing_contact.fax.value 擷取,並在 billing 屬性中新增為索引鍵為「fax」的標籤。 |
billing_contact.name.value | principal.domain.billing.user_display_name | 直接從原始記錄中的 billing_contact.name.value 欄位對應。 |
billing_contact.org.value | principal.domain.billing.company_name | 直接從原始記錄中的 billing_contact.org.value 欄位對應。 |
billing_contact.phone.value | principal.domain.billing.phone_numbers | 直接從原始記錄中的 billing_contact.phone.value 欄位對應。 |
billing_contact.postal.value | principal.domain.billing.attribute.labels.postal | 從 billing_contact.postal.value 擷取,並在 billing 屬性中以「postal」做為鍵新增為標籤。 |
billing_contact.state.value | principal.domain.billing.office_address.state | 直接從原始記錄中的 billing_contact.state.value 欄位對應。 |
billing_contact.street.value | principal.domain.billing.office_address.name | 直接從原始記錄中的 billing_contact.street.value 欄位對應。 |
create_date.value | principal.domain.creation_time | 從原始記錄的 create_date.value 欄位轉換為時間戳記格式。 |
data_updated_timestamp | principal.domain.audit_update_time | 從原始記錄的 data_updated_timestamp 欄位轉換為時間戳記格式。 |
網域 | principal.hostname | 直接從原始記錄中的 domain 欄位對應。 |
domain_risk.components.[].evidence | security_result.detection_fields.evidence | 從 domain_risk.components.[].evidence 陣列擷取,並在 security_result 物件中新增為偵測欄位,鍵為「evidence」。 |
domain_risk.components.[].name | security_result.category_details | 直接從原始記錄中的 domain_risk.components.[].name 欄位對應。 |
domain_risk.components.[].risk_score | security_result.risk_score | 直接從原始記錄中的 domain_risk.components.[].risk_score 欄位對應。 |
domain_risk.components.[].threats | security_result.threat_name | domain_risk.components.[].threats 陣列的第一個元素會對應至 security_result.threat_name 。 |
domain_risk.components.[].threats | security_result.detection_fields.threats | domain_risk.components.[].threats 陣列的其餘元素會以「threats」鍵新增為 security_result 物件中的偵測欄位。 |
domain_risk.risk_score | security_result.risk_score | 直接從原始記錄中的 domain_risk.risk_score 欄位對應。 |
email_domain.[].value | about.labels.email_domain | 從 email_domain 陣列擷取,並新增為 about 物件中的標籤。 |
expiration_date.value | principal.domain.expiration_time | 從原始記錄的 expiration_date.value 欄位轉換為時間戳記格式。 |
fb_codes.[].value | about.labels.fb_codes | 從 fb_codes 陣列擷取,並新增為 about 物件中的標籤。 |
first_seen.value | principal.domain.first_seen_time | 從原始記錄的 first_seen.value 欄位轉換為時間戳記格式。 |
ga4.[].value | about.labels.ga4 | 從 ga4 陣列擷取,並新增為 about 物件中的標籤。 |
google_analytics.value | about.labels.google_analytics | 從 google_analytics.value 擷取,並新增為 about 物件中的標籤。 |
gtm_codes.[].value | about.labels.gtm_codes | 從 gtm_codes 陣列擷取,並新增為 about 物件中的標籤。 |
hotjar_codes.[].value | about.labels.hotjar_codes | 從 hotjar_codes 陣列擷取,並新增為 about 物件中的標籤。 |
ip.[].address.value | principal.ip | ip 陣列的第一個元素會對應至 principal.ip 。 |
ip.[].address.value | about.labels.ip_address | ip 陣列的其餘元素會以「ip_address」鍵的形式,新增為 about 物件中的標籤。 |
ip.[].asn.[].value | network.asn | 第一個 ip.asn 陣列的第一個元素會對應至 network.asn 。 |
ip.[].asn.[].value | about.labels.asn | ip.asn 陣列的其餘元素會以「asn」鍵的形式,新增為 about 物件中的標籤。 |
ip.[].country_code.value | principal.location.country_or_region | ip 陣列中第一個元素的 country_code.value 會對應至 principal.location.country_or_region 。 |
ip.[].country_code.value | about.location.country_or_region | ip 陣列中其餘元素的 country_code.value 會對應至 about.location.country_or_region 。 |
ip.[].isp.value | principal.labels.isp | ip 陣列中第一個元素的 isp.value 會對應至 principal.labels.isp 。 |
ip.[].isp.value | about.labels.isp | ip 陣列中其餘元素的 isp.value 會對應至 about.labels.isp 。 |
matomo_codes.[].value | about.labels.matomo_codes | 從 matomo_codes 陣列擷取,並新增為 about 物件中的標籤。 |
monitor_domain | about.labels.monitor_domain | 直接從原始記錄中的 monitor_domain 欄位對應,並以標籤形式新增至 about 物件。 |
monitoring_domain_list_name | about.labels.monitoring_domain_list_name | 直接從原始記錄中的 monitoring_domain_list_name 欄位對應,並以標籤形式新增至 about 物件。 |
mx.[].domain.value | about.domain.name | 直接從原始記錄中的 mx.[].domain.value 欄位對應。 |
mx.[].host.value | about.hostname | 直接從原始記錄中的 mx.[].host.value 欄位對應。 |
mx.[].ip.[].value | about.ip | 從 mx.[].ip 陣列擷取,並新增至 ip 欄位。 |
mx.[].priority | about.security_result.priority_details | 直接從原始記錄中的 mx.[].priority 欄位對應。 |
name_server.[].domain.value | about.labels.name_server_domain | 從 name_server.[].domain.value 中擷取,並在 about 物件中新增為標籤,鍵為「name_server_domain」。 |
name_server.[].host.value | principal.domain.name_server | 從 name_server.[].host.value 擷取並新增至 name_server 欄位。 |
name_server.[].host.value | about.domain.name_server | 從 name_server.[].host.value 擷取並新增至 name_server 欄位。 |
name_server.[].ip.[].value | about.labels.ip | 從 name_server.[].ip 陣列擷取,並在 about 物件中以「ip」做為鍵新增為標籤。 |
popularity_rank | about.labels.popularity_rank | 直接從原始記錄中的 popularity_rank 欄位對應,並以標籤形式新增至 about 物件。 |
redirect.value | about.labels.redirect | 從 redirect.value 擷取,並新增為 about 物件中的標籤。 |
redirect_domain.value | about.labels.redirect_domain | 從 redirect_domain.value 擷取,並新增為 about 物件中的標籤。 |
registrant_contact.city.value | principal.domain.registrant.office_address.city | 直接從原始記錄中的 registrant_contact.city.value 欄位對應。 |
registrant_contact.country.value | principal.domain.registrant.office_address.country_or_region | 直接從原始記錄中的 registrant_contact.country.value 欄位對應。 |
registrant_contact.email.[].value | principal.domain.registrant.email_addresses | 從 registrant_contact.email 陣列擷取,並新增至 email_addresses 欄位。 |
registrant_contact.fax.value | principal.domain.registrant.attribute.labels.fax | 從 registrant_contact.fax.value 擷取,並在 registrant 屬性中新增為索引鍵為「fax」的標籤。 |
registrant_contact.name.value | principal.domain.registrant.user_display_name | 直接從原始記錄中的 registrant_contact.name.value 欄位對應。 |
registrant_contact.org.value | principal.domain.registrant.company_name | 直接從原始記錄中的 registrant_contact.org.value 欄位對應。 |
registrant_contact.phone.value | principal.domain.registrant.phone_numbers | 直接從原始記錄中的 registrant_contact.phone.value 欄位對應。 |
registrant_contact.postal.value | principal.domain.registrant.attribute.labels.postal | 從 registrant_contact.postal.value 擷取,並在 registrant 屬性中以「postal」做為鍵新增為標籤。 |
registrant_contact.state.value | principal.domain.registrant.office_address.state | 直接從原始記錄中的 registrant_contact.state.value 欄位對應。 |
registrant_contact.street.value | principal.domain.registrant.office_address.name | 直接從原始記錄中的 registrant_contact.street.value 欄位對應。 |
registrant_name.value | about.labels.registrant_name | 從 registrant_name.value 擷取,並新增為 about 物件中的標籤。 |
registrant_org.value | about.labels.registrant_org | 從 registrant_org.value 擷取,並新增為 about 物件中的標籤。 |
registrar.value | principal.domain.registrar | 直接從原始記錄中的 registrar.value 欄位對應。 |
registrar_status | about.labels.registrar_status | 從 registrar_status 陣列擷取,並新增為 about 物件中的標籤。 |
server_type | network.tls.client.server_name | 直接從原始記錄中的 server_type 欄位對應。 |
soa_email.[].value | principal.user.email_addresses | 從 soa_email 陣列擷取,並新增至 email_addresses 欄位。 |
spf_info | about.labels.spf_info | 直接從原始記錄中的 spf_info 欄位對應,並以標籤形式新增至 about 物件。 |
ssl_email.[].value | about.labels.ssl_email | 從 ssl_email 陣列擷取,並新增為 about 物件中的標籤。 |
ssl_info.[].alt_names.[].value | about.labels.alt_names | 從 ssl_info.[].alt_names 陣列擷取,並新增為 about 物件中的標籤。 |
ssl_info.[].common_name.value | about.labels.common_name | 從 ssl_info.[].common_name.value 擷取,並新增為 about 物件中的標籤。 |
ssl_info.[].duration.value | about.labels.duration | 從 ssl_info.[].duration.value 擷取,並新增為 about 物件中的標籤。 |
ssl_info.[].email.[].value | about.labels.ssl_info_email | 從 ssl_info.[].email 陣列擷取,並在 about 物件中新增為標籤,索引鍵為「ssl_info_email」。 |
ssl_info.[].hash.value | network.tls.server.certificate.sha1 | ssl_info 陣列中第一個元素的 hash.value 會對應至 network.tls.server.certificate.sha1 。 |
ssl_info.[].hash.value | about.labels.hash | ssl_info 陣列中其餘元素的 hash.value 會對應至 about.labels.hash 。 |
ssl_info.[].issuer_common_name.value | network.tls.server.certificate.issuer | ssl_info 陣列中第一個元素的 issuer_common_name.value 會對應至 network.tls.server.certificate.issuer 。 |
ssl_info.[].issuer_common_name.value | about.labels.issuer_common_name | ssl_info 陣列中其餘元素的 issuer_common_name.value 會對應至 about.labels.issuer_common_name 。 |
ssl_info.[].not_after.value | network.tls.server.certificate.not_after | ssl_info 陣列中第一個元素的 not_after.value 會轉換為時間戳記格式,並對應至 network.tls.server.certificate.not_after 。 |
ssl_info.[].not_after.value | about.labels.not_after | ssl_info 陣列中其餘元素的 not_after.value 會對應至 about.labels.not_after 。 |
ssl_info.[].not_before.value | network.tls.server.certificate.not_before | ssl_info 陣列中第一個元素的 not_before.value 會轉換為時間戳記格式,並對應至 network.tls.server.certificate.not_before 。 |
ssl_info.[].not_before.value | about.labels.not_before | ssl_info 陣列中其餘元素的 not_before.value 會對應至 about.labels.not_before 。 |
ssl_info.[].organization.value | network.organization_name | ssl_info 陣列中第一個元素的 organization.value 會對應至 network.organization_name 。 |
ssl_info.[].organization.value | about.labels.organization | ssl_info 陣列中其餘元素的 organization.value 會對應至 about.labels.organization 。 |
ssl_info.[].subject.value | about.labels.subject | 從 ssl_info.[].subject.value 擷取,並新增為 about 物件中的標籤。 |
statcounter_project_codes.[].value | about.labels.statcounter_project_codes | 從 statcounter_project_codes 陣列擷取,並新增為 about 物件中的標籤。 |
statcounter_security_codes.[].value | about.labels.statcounter_security_codes | 從 statcounter_security_codes 陣列擷取,並新增為 about 物件中的標籤。 |
tags.[].label | about.file.tags | 從 tags.[].label 擷取並新增至 tags 欄位。 |
tags.[].scope | security_result.detection_fields.scope | 從 tags.[].scope 擷取,並在 security_result 物件中新增為偵測欄位,鍵為「scope」。 |
tags.[].tagged_at | security_result.detection_fields.tagged_at | 從 tags.[].tagged_at 擷取,並在 security_result 物件中新增為偵測欄位,金鑰為「tagged_at」。 |
technical_contact.city.value | principal.domain.tech.office_address.city | 直接從原始記錄中的 technical_contact.city.value 欄位對應。 |
technical_contact.country.value | principal.domain.tech.office_address.country_or_region | 直接從原始記錄中的 technical_contact.country.value 欄位對應。 |
technical_contact.email.[].value | principal.domain.tech.email_addresses | 從 technical_contact.email 陣列擷取,並新增至 email_addresses 欄位。 |
technical_contact.fax.value | principal.domain.tech.attribute.labels.fax | 從 technical_contact.fax.value 擷取,並在 tech 屬性中新增為索引鍵為「fax」的標籤。 |
technical_contact.name.value | principal.domain.tech.user_display_name | 直接從原始記錄中的 technical_contact.name.value 欄位對應。 |
technical_contact.org.value | principal.domain.tech.company_name | 直接從原始記錄中的 technical_contact.org.value 欄位對應。 |
technical_contact.phone.value | principal.domain.tech.phone_numbers | 直接從原始記錄中的 technical_contact.phone.value 欄位對應。 |
technical_contact.postal.value | principal.domain.tech.attribute.labels.postal | 從 technical_contact.postal.value 擷取,並在 tech 屬性中以「postal」做為鍵新增為標籤。 |
technical_contact.state.value | principal.domain.tech.office_address.state | 直接從原始記錄中的 technical_contact.state.value 欄位對應。 |
technical_contact.street.value | principal.domain.tech.office_address.name | 直接從原始記錄中的 technical_contact.street.value 欄位對應。 |
tld | about.labels.tld | 直接從原始記錄中的 tld 欄位對應,並以標籤形式新增至 about 物件。 |
時間戳記 | about.labels.timestamp | 直接從原始記錄中的 timestamp 欄位對應,並以標籤形式新增至 about 物件。 |
website_response | principal.network.http.response_code | 直接從原始記錄中的 website_response 欄位對應。 |
website_title | about.labels.website_title | 直接從原始記錄中的 website_title 欄位對應,並以標籤形式新增至 about 物件。 |
whois_url | principal.domain.whois_server | 直接從原始記錄中的 whois_url 欄位對應。 |
yandex_codes.[].value | about.labels.yandex_codes | 從 yandex_codes 陣列擷取,並新增為 about 物件中的標籤。 |
edr.client.hostname | 設為 domain 欄位的值。 |
|
edr.client.ip_addresses | 設為 ip 陣列中第一個元素的值,也就是 ip.[0].address.value 。 |
|
edr.raw_event_name | 如果 principal.hostname 存在,請設為「STATUS_UPDATE」,否則請設為「GENERIC_EVENT」。 |
|
metadata.event_timestamp | 從原始記錄的頂層 create_time 欄位複製。 |
|
metadata.event_type | 如果 principal.hostname 存在,請設為「STATUS_UPDATE」,否則請設為「GENERIC_EVENT」。 |
|
metadata.log_type | 設為「DOMAINTOOLS_THREATINTEL」。 | |
metadata.product_name | 設為「DOMAINTOOLS」。 | |
metadata.vendor_name | 設為「DOMAINTOOLS」。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。