Mengumpulkan log Akamai WAF
Ringkasan
Parser ini menangani log Firewall Aplikasi Web (WAF) Akamai, yang mendukung format syslog dan CEF. Alat ini mengekstrak kolom seperti alamat IP, URL, metode HTTP, kode respons, agen pengguna, dan informasi aturan keamanan, serta memetakan kolom tersebut ke UDM untuk representasi yang konsisten. Parser juga menangani kolom Akamai tertentu seperti attackData
dan clientReputation
, melakukan transformasi data yang diperlukan, dan memperkaya output UDM.
Sebelum memulai
- Pastikan Anda memiliki instance Google Chronicle.
- Pastikan Anda memiliki akses dengan hak istimewa ke AWS IAM dan S3.
- Pastikan Anda memiliki akses dengan hak istimewa ke Akamai.
Mengonfigurasi bucket Amazon S3
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
- Simpan Nama dan Region bucket untuk referensi di masa mendatang.
- Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
- Pilih Pengguna yang dibuat.
- Pilih tab Kredensial keamanan.
- Klik Create Access Key di bagian Access Keys.
- Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
- Klik Berikutnya.
- Opsional: Tambahkan tag deskripsi.
- Klik Create access key.
- Klik Download file .csv. (Simpan Access Key dan Secret Access Key untuk referensi di masa mendatang).
- Klik Done.
- Pilih tab Izin.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Telusuri kebijakan AmazonS3FullAccess.
- Pilih kebijakan.
- Klik Berikutnya.
- Klik Tambahkan izin.
Mengonfigurasi Akamai WAF untuk mengirim log ke Amazon S3
- Login ke Akamai Control Center.
- Buka bagian Keamanan.
- Pilih Logs.
Konfigurasikan Pengiriman Log baru:
- Sumber Log: Pilih konfigurasi WAF Anda.
- Delivery Target: Pilih Amazon S3.
- S3 Bucket: Tentukan nama bucket S3 yang Anda buat.
- Region: Pilih region AWS tempat bucket S3 Anda berada.
- Access Key ID dan Secret Access Key: Berikan kredensial yang Anda buat.
- Format Log: Pilih format log yang relevan (misalnya, JSON).
- Frekuensi Pengiriman: Pilih frekuensi yang sesuai untuk pengiriman log (misalnya, setiap 5 menit).
Verifikasi pengiriman log:
- Setelah mengonfigurasi LDS, pantau bucket S3 untuk file log yang masuk.
Mengonfigurasi feed di Google SecOps untuk menyerap log Akamai WAF
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya, Akamai WAF Logs).
- Pilih Amazon S3 sebagai Source type.
- Pilih Akamai WAF sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- Region: region tempat bucket Amazon S3 berada.
- S3 URI: URI bucket.
s3:/BUCKET_NAME
Ganti kode berikut:BUCKET_NAME
: nama bucket.
- URI adalah: pilih JENIS URI sesuai dengan konfigurasi aliran log: File tunggal | Direktori | Direktori yang menyertakan subdirektori.
- Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
- Access Key ID: Kunci akses pengguna dengan akses ke bucket s3.
- Kunci Akses Rahasia: kunci rahasia Pengguna dengan akses ke bucket s3.
- Namespace aset: namespace aset.
- Label penyerapan: label yang akan diterapkan ke peristiwa dari feed ini.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.
Tabel Pemetaan UDM
Kolom Log (Menaik) | Pemetaan UDM | Logika |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Alamat IP klien yang memulai permintaan. Diekstrak dari kolom attackData.clientIP di log akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID konfigurasi keamanan. Diekstrak dari kolom attackData.configId di log akamai_siem. Juga ditambahkan sebagai detection_field dalam objek security_result. |
attackData.policyId |
T/A | Digunakan dalam logika parser untuk mengisi security_result.summary dengan nilai "PolicyId:[value]". |
attackData.ruleActions |
security_result.action , security_result.action_details |
Tindakan yang diambil berdasarkan aturan yang dipicu. Diekstrak dari kolom attackData.ruleActions di log akamai_siem. "deny" dipetakan ke BLOCK, nilai lain ("alert", "monitor", "allow", "tarpit") dipetakan ke ALLOW. Nilai asli juga disimpan di action_details . |
attackData.ruleData |
security_result.detection_fields |
Data yang terkait dengan aturan yang dipicu. Diekstrak dari kolom attackData.ruleData di log akamai_siem. Ditambahkan ke security_result.detection_fields dengan kunci "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Pesan yang terkait dengan aturan yang dipicu. Diekstrak dari kolom attackData.ruleMessages di log akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Pemilih yang terkait dengan aturan yang dipicu. Diekstrak dari kolom attackData.ruleSelectors di log akamai_siem. Ditambahkan ke security_result.detection_fields dengan kunci "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Tag yang terkait dengan aturan yang dipicu. Diekstrak dari kolom attackData.ruleTags di log akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versi aturan yang dipicu. Diekstrak dari kolom attackData.ruleVersions di log akamai_siem. Ditambahkan ke security_result.detection_fields dengan kunci "Rule Version". |
clientReputation |
principal.labels |
Informasi reputasi klien. Diekstrak dari kolom clientReputation di log akamai_siem. Ditambahkan sebagai label ke akun utama dengan kunci "reputasi". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Alamat IP klien. Diekstrak dari cliIP atau cli_ip atau principal_ip , bergantung pada format log. |
cp |
additional.fields |
Kode CP. Diekstrak dari kolom cp . Ditambahkan ke additional.fields dengan kunci "cp". |
eventId |
metadata.product_log_id |
ID Peristiwa. Diekstrak dari kolom eventId . |
eventTime , log_date |
metadata.event_timestamp |
Stempel waktu peristiwa. Diekstrak dari eventTime atau diuraikan dari log_date bergantung pada format log. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
ID definisi peristiwa. Diekstrak dari eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Deskripsi peristiwa. Diekstrak dari eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nama peristiwa. Diekstrak dari eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
ID jenis peristiwa. Diekstrak dari eventType.eventTypeId . Ditambahkan ke additional.fields dengan kunci "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Nama jenis peristiwa. Diekstrak dari eventType.eventTypeName . Ditambahkan ke additional.fields dengan kunci "eventTypeName". |
format |
T/A | Digunakan oleh parser untuk menentukan format log. |
geo.asn |
principal.location.name |
Autonomous System Number (ASN). Diekstrak dari geo.asn atau AkamaiSiemASN bergantung pada format log. Nilai diawali dengan "ASN ". |
geo.city |
principal.location.city |
Kota. Diekstrak dari geo.city atau AkamaiSiemCity bergantung pada format log. |
geo.country |
principal.location.country_or_region |
Negara. Diekstrak dari geo.country atau AkamaiSiemContinent bergantung pada format log. |
httpMessage.bytes |
network.sent_bytes |
Byte yang dikirim dalam pesan HTTP. Diekstrak dari httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nama host. Diekstrak dari httpMessage.host atau reqHost bergantung pada format log. |
httpMessage.method |
network.http.method |
Metode HTTP. Diekstrak dari httpMessage.method atau network_http_method atau reqMethod , bergantung pada format log. Dikonversi ke huruf besar. |
httpMessage.path |
target.url |
Jalur permintaan. Diekstrak dari httpMessage.path atau target_url atau reqPath , bergantung pada format log. Jika ada, httpMessage.query akan ditambahkan ke jalur dengan pemisah "?". |
httpMessage.port |
target.port |
Port. Diekstrak dari httpMessage.port atau reqPort bergantung pada format log. |
httpMessage.protocol |
T/A | Digunakan oleh parser untuk menentukan protokol. |
httpMessage.query |
T/A | Digunakan dalam logika parser untuk ditambahkan ke httpMessage.path jika ada. |
httpMessage.requestId |
network.session_id |
ID Permintaan. Diekstrak dari httpMessage.requestId atau reqId bergantung pada format log. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Header permintaan. Diekstrak dari httpMessage.requestHeaders atau AkamaiSiemRequestHeaders bergantung pada format log. Ditambahkan ke additional.fields dengan kunci "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
Header respons. Diekstrak dari httpMessage.responseHeaders atau AkamaiSiemResponseHeaders bergantung pada format log. Ditambahkan ke additional.fields dengan kunci "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Kode respons HTTP. Diekstrak dari httpMessage.status atau AkamaiSiemResponseStatus atau network_http_response_code atau statusCode , bergantung pada format log. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Versi TLS. Diekstrak dari httpMessage.tls atau AkamaiSiemTLSVersion atau tlsVersion , bergantung pada format log. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
Agen pengguna. Diekstrak dari httpMessage.useragent atau network_http_user_agent atau UA atau useragent , bergantung pada format log. |
log_description |
metadata.description |
Deskripsi log. Diekstrak dari log_description . |
log_rule |
security_result.rule_name |
Aturan log. Diekstrak dari log_rule . |
message |
T/A | Pesan log mentah. Digunakan oleh parser untuk berbagai ekstraksi. |
network_http_referral_url |
network.http.referral_url |
URL rujukan HTTP. Diekstrak dari network_http_referral_url . |
proto |
T/A | Digunakan dalam logika parser untuk mengisi security_result.summary jika attackData.policyId tidak ada. |
reqHost |
target.hostname , target.asset.hostname |
Minta host. Diekstrak dari reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID Permintaan. Diekstrak dari reqId . |
reqMethod |
network.http.method |
Metode permintaan. Diekstrak dari reqMethod . |
reqPath |
target.url |
Jalur permintaan. Diekstrak dari reqPath . |
reqPort |
target.port |
Minta port. Diekstrak dari reqPort . |
rspContentType |
target.file.mime_type |
Jenis konten respons. Diekstrak dari rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Aturan keamanan. Diekstrak dari securityRules . Bagian pertama dipetakan ke rule_name , dan sisanya ditambahkan sebagai label dengan kunci "non_deny_rules" dan "deny_rule_format". |
statusCode |
network.http.response_code |
Kode status. Diekstrak dari statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Status. Diekstrak dari state . |
tlsVersion |
network.tls.version |
Versi TLS. Diekstrak dari tlsVersion . |
type |
metadata.product_event_type |
Jenis peristiwa. Diekstrak dari type . |
UA |
network.http.user_agent |
Agen pengguna. Diekstrak dari UA . |
version |
metadata.product_version , principal.asset.software.version |
Versi. Diekstrak dari version . |
T/A | metadata.event_timestamp |
Stempel waktu peristiwa berasal dari kolom _ts dalam log akamai_lds, kolom httpMessage.start dalam log akamai_siem, atau kolom log_date dalam format lain. |
T/A | metadata.vendor_name |
Di-hardcode ke "Akamai". |
T/A | metadata.product_name |
Di-hardcode ke "Kona". |
T/A | metadata.log_type |
Di-hardcode ke "AKAMAI_WAF". |
T/A | network.application_protocol |
Tetapkan ke "HTTP" untuk log akamai_siem dan akamai_lds, atau "DNS" untuk format lainnya. |
T/A | security_result.severity |
Tetapkan ke MEDIUM untuk tindakan "alert", CRITICAL untuk tindakan "deny", dan HIGH untuk tindakan lainnya. |
T/A | event.idm.read_only_udm.metadata.event_type |
Tetapkan ke "NETWORK_HTTP" untuk sebagian besar format log, "GENERIC_EVENT" untuk peristiwa dengan kolom eventId atau eventData , atau "STATUS_UPDATE" untuk peristiwa dengan cli_ip atau p_ip , tetapi tidak ada reqHost . |
Perubahan
2024-05-21
- Penyempurnaan
- Memetakan "rules.data" ke "security_result.detection_fields".
- Memetakan "rules.action", "rules.selector", dan "rules.version" ke "security_result.action_details".
- Memetakan "rules.id" ke "security_result.rule_id",
- Memetakan "rules.tag" ke "security_result.category_details".
- Memetakan "rules.message" ke "security_result.threat_name".
2024-03-01
- Penyempurnaan
- Memetakan "attackData.configId" ke "metadata.product_log_id" dan "security_result.detection_fields".
2023-10-27
- Penyempurnaan
- Memetakan "rule.id" ke "security_result.rule_id".
- Jika "httpMessage.host" tidak ada, ubah nilai yang ditetapkan di "metadata.event_type" dari "NETWORK_HTTP" menjadi "GENERIC_EVENT".
- Menambahkan dukungan untuk mengurai "attackData" saat "attackData.rules" adalah array.
2023-04-24
- Penyempurnaan
- Log yang diuraikan dan diserap dalam format CEF.
2023-04-04
- Penyempurnaan
- Memetakan 'reqHost' ke 'target.hostname'.
- Memetakan 'reqPort' ke 'target.port'.
- Memetakan 'reqPath' ke 'target.url'.
- Memetakan 'reqId' ke 'network.session_id'.
- Memetakan 'statusCode' ke 'network.http.response_code'.
- Memetakan 'reqMethod' ke 'network.http.method'.
- Memetakan 'UA' ke 'network.http.user_agent'.
- Memetakan 'byte' ke 'network.sent_bytes'.
- Memetakan 'reqMethod' ke 'network.http.method'.
- Log yang gagal diuraikan dalam format syslog.
- Menambahkan pemeriksaan kondisi untuk 'attackData.rules' untuk penguraian yang tepat.
- Mengubah 'metadata.event_type' menjadi 'NETWORK_HTTP' dari 'STATUS_UPDATE' jika memungkinkan.
2022-08-12
- Penyempurnaan
- Memetakan "security_policy_id" ke security_result.rule_name.
- Memetakan "non_deny_rules" ke security_result.about.resource.attribute.labels.
- Memetakan "deny_rule_format" ke security_result.about.resource.attribute.labels.
2022-11-07
- Penyempurnaan
- memperbarui SecurityRules untuk memeriksa ["-"] juga dalam data.
2022-06-14
- Penyempurnaan
- Memetakan security_rules ke security_result.rule_name.
- Kota yang dipetakan ke principal.location.city.
- Negara yang dipetakan ke principal.location.country_or_region.
- Memetakan cli_ip ke principal.ip.
- Status yang dipetakan ke target.user.personal_address.state.
- Versi yang dipetakan ke metadata.product_version.
- Memetakan useragent ke network.http.user_agent.
2022-06-14
- Enhancement-
- Memetakan proto ke security_result.summary.
- Memetakan securityRules ke security_result.rule_name.
- Kota yang dipetakan ke principal.location.city.
- Negara yang dipetakan ke principal.location.country_or_region.
- Memetakan cliIP ke principal.ip.
- Memetakan cp ke event.idm.read_only_udm.additional.fields.
- Memetakan reqId ke metadata.product_log_id.
- Memetakan rspContentType ke target.file.mime_type.
- Status yang dipetakan ke target.user.personal_address.state.
- Versi yang dipetakan ke principal.asset.software.version.
2022-03-23
- Perbaikan bug-Perbaikan untuk kegagalan menguraikan data dengan semua pola pencocokan.
- Menambahkan pemetaan untuk kolom baru.
- eventId dipetakan ke metadata.product_log_id.
- eventDefinitionId dipetakan ke target.resource.product_object_id.
- eventDescription dipetakan ke metadata.description.
- eventName dipetakan ke metadata.product_event_type.
- eventTypeName dipetakan ke additional.fields.
- eventTypeId dipetakan ke additional.fields.
- eventData dipetakan ke additional.fields.