Mengumpulkan log Azure WAF

Didukung di:

Dokumen ini menjelaskan cara mengekspor log Azure Web Application Firewall (WAF) ke Google Security Operations menggunakan Akun Penyimpanan Azure. Parser menangani log dalam format JSON, yang mengubahnya menjadi UDM. Fungsi ini memproses log yang berisi array records dengan melakukan iterasi pada setiap data dan memetakan kolom tertentu ke properti UDM. Jika array records tidak ada, parser akan menangani log sebagai satu peristiwa, mengekstrak, dan memetakan kolom sebagaimana mestinya.

Sebelum memulai

  • Pastikan Anda memiliki instance Google Chronicle.
  • Pastikan Anda memiliki tenant Azure yang aktif.
  • Pastikan Anda memiliki akses dengan hak istimewa ke Azure.

Mengonfigurasi Akun Azure Storage

  1. Di konsol Azure, telusuri Storage accounts.
  2. Klik Buat.
  3. Tentukan nilai untuk parameter input berikut:
    • Langganan: pilih langganan.
    • Resource Group: pilih grup resource.
    • Region: pilih region.
    • Performa: pilih performa (Standar direkomendasikan).
    • Redundansi: pilih redundansi (GRS atau LRS direkomendasikan).
    • Nama akun penyimpanan: masukkan nama untuk akun penyimpanan baru.
  4. Klik Review + create.
  5. Tinjau ringkasan akun, lalu klik Buat.
  6. Dari halaman Ringkasan Akun Penyimpanan, pilih submenu Kunci akses di Keamanan + jaringan.
  7. Klik Tampilkan di samping kunci1 atau kunci2.
  8. Klik Salin ke papan klip untuk menyalin kunci.
  9. Simpan kunci di lokasi yang aman untuk digunakan nanti.
  10. Dari halaman Ringkasan Akun Penyimpanan, pilih submenu Endpoint di Setelan.
  11. Klik Salin ke papan klip untuk menyalin URL endpoint Layanan blob; misalnya, https://<storageaccountname>.blob.core.windows.net.
  12. Simpan URL endpoint di lokasi yang aman untuk digunakan nanti.

Mengonfigurasi Ekspor Log untuk Log Azure WAF

  1. Login ke Portal Azure menggunakan akun dengan hak istimewa Anda.
  2. Buka Aturan Firewall Aplikasi Web (WAF), lalu pilih WAF yang akan dipantau.
  3. Pilih Monitoring > Diagnostic Settings.
  4. Klik + Tambahkan setelan diagnostik.
    • Masukkan nama deskriptif untuk setelan diagnostik.
  5. Pilih allLogs.
  6. Pilih kotak centang Arsipkan ke akun penyimpanan sebagai tujuan.
    • Tentukan Langganan dan Akun Penyimpanan.
  7. Klik Simpan.

Mengonfigurasi feed di Google SecOps untuk menyerap log Azure WAF

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Feed name, masukkan nama untuk feed; misalnya, Azure WAF Logs.
  4. Pilih Microsoft Azure Blob Storage sebagai Jenis sumber.
  5. Pilih Azure WAF sebagai Jenis log.
  6. Klik Berikutnya.
  7. Tentukan nilai untuk parameter input berikut:

    • URI Azure: URL endpoint blob.
      • ENDPOINT_URL/BLOB_NAME
        • Ganti kode berikut:
          • ENDPOINT_URL: URL endpoint blob (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: nama blob (seperti, <logname>-logs)
    • 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.

    • Kunci bersama: kunci akses ke Azure Blob Storage.

    • Namespace aset: namespace aset.

    • Label penyerapan: label yang akan diterapkan ke peristiwa dari feed ini.

  8. Klik Berikutnya.

  9. Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value Nilai diambil dari kolom backendPoolName dalam log mentah.
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value Nilai diambil dari kolom backendSettingName dalam log mentah.
category metadata.product_event_type Nilai diambil dari kolom category dalam log mentah.
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value Nilai diambil dari kolom EventEnqueuedUtcTime dalam log mentah jika kolom records ada.
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value Nilai diambil dari kolom EventProcessedUtcTime dalam log mentah jika kolom records ada.
operationName additional.fields[?key=='operationName'].value.string_value Nilai diambil dari kolom operationName dalam log mentah.
properties.action additional.fields[?key=='action'].value.string_value Nilai diambil dari kolom properties.action dalam log mentah jika kolom records ada.
properties.action security_result.action_details Nilai diambil dari kolom properties.action dalam log mentah jika kolom records tidak ada.
properties.clientIP, properties.clientIp principal.asset.ip, principal.ip Nilai diambil dari kolom properties.clientIP atau properties.clientIp dalam log mentah, dengan memprioritaskan clientIP.
properties.clientPort principal.port Nilai diambil dari kolom properties.clientPort dalam log mentah.
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value Nilai diambil dari kolom properties.clientResponseTime dalam log mentah jika kolom records tidak ada.
properties.details.data additional.fields[?key=='Properties data'].value.string_value Nilai diambil dari kolom properties.details.data dalam log mentah jika kolom records ada.
properties.details.file principal.process.file.full_path Nilai diambil dari kolom properties.details.file dalam log mentah jika kolom records tidak ada.
properties.details.matches[].matchVariableName, properties.details.matches[].matchVariableValue additional.fields[?key.startsWith('%{idx} ')].value.string_value Nilai diambil dari array properties.details.matches dalam log mentah. key di UDM dibuat menggunakan indeks (idx) dan matchVariableName. value diambil dari matchVariableValue.
properties.details.message metadata.description Nilai diambil dari kolom properties.details.message dalam log mentah setelah menghapus garis miring terbalik dan tanda kutip.
properties.details.msg metadata.description Nilai diambil dari kolom properties.details.msg dalam log mentah jika kolom records ada.
properties.httpMethod network.http.method Nilai diambil dari kolom properties.httpMethod dalam log mentah.
properties.httpStatus network.http.response_code Nilai diambil dari kolom properties.httpStatus dalam log mentah.
properties.httpVersion network.application_protocol Jika kolom properties.httpVersion berisi HTTP, nilai HTTP akan ditetapkan.
properties.host, properties.hostname, properties.originalHost principal.asset.hostname, principal.hostname Nilai diambil dari salah satu properties.originalHost, properties.host, atau properties.hostname, dengan memprioritaskannya dalam urutan tersebut.
properties.policyId security_result.detection_fields[?key=='policyId'].value Nilai diambil dari kolom properties.policyId dalam log mentah.
properties.policyMode security_result.detection_fields[?key=='policyMode'].value Nilai diambil dari kolom properties.policyMode dalam log mentah jika kolom records ada.
properties.policy additional.fields[?key=='Properties policy'].value.string_value Nilai diambil dari kolom properties.policy dalam log mentah jika kolom records ada.
properties.receivedBytes network.received_bytes Nilai diambil dari kolom properties.receivedBytes dalam log mentah.
properties.requestUri target.url Nilai diambil dari kolom properties.requestUri dalam log mentah.
properties.ruleId security_result.rule_id Nilai diambil dari kolom properties.ruleId dalam log mentah.
properties.ruleName security_result.rule_name Nilai diambil dari kolom properties.ruleName dalam log mentah jika kolom records ada.
properties.ruleName, ruleSetType security_result.rule_name Nilai diambil dari kolom properties.ruleName, atau jika kosong, dari kolom ruleSetType dalam log mentah jika kolom records tidak ada.
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value Nilai diambil dari kolom properties.ruleSetVersion dalam log mentah.
properties.sentBytes network.sent_bytes Nilai diambil dari kolom properties.sentBytes dalam log mentah.
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value Nilai diambil dari kolom properties.serverResponseLatency dalam log mentah jika kolom records tidak ada.
properties.serverRouted target.asset.ip, target.ip, target.port IP dan port diekstrak dari kolom properties.serverRouted.
properties.sslCipher network.tls.cipher Nilai diambil dari kolom properties.sslCipher dalam log mentah.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Nilai diambil dari kolom properties.sslClientCertificateIssuerName dalam log mentah.
properties.sslProtocol network.tls.version Nilai diambil dari kolom properties.sslProtocol dalam log mentah.
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value Nilai diambil dari kolom properties.timeTaken dalam log mentah jika kolom records tidak ada.
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value Nilai diambil dari kolom properties.trackingReference dalam log mentah jika kolom records ada.
properties.transactionId network.session_id Nilai diambil dari kolom properties.transactionId dalam log mentah.
properties.userAgent network.http.user_agent Nilai diambil dari kolom properties.userAgent dalam log mentah.
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value Nilai diambil dari kolom properties.WAFEvaluationTime dalam log mentah jika kolom records tidak ada.
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value Nilai diambil dari kolom properties.WAFMode dalam log mentah jika kolom records tidak ada.
rec.category metadata.product_event_type Nilai diambil dari kolom rec.category dalam log mentah jika kolom records ada.
rec.operationName additional.fields[?key=='operationName'].value.string_value Nilai diambil dari kolom rec.operationName dalam log mentah jika kolom records ada.
rec.properties.clientIP, rec.properties.clientIp principal.asset.ip, principal.ip Nilai diambil dari kolom rec.properties.clientIP atau rec.properties.clientIp dalam log mentah, dengan memprioritaskan clientIP jika kolom records ada.
rec.properties.clientPort principal.port Nilai diambil dari kolom rec.properties.clientPort dalam log mentah jika kolom records ada.
rec.properties.host principal.asset.hostname, principal.hostname Nilai diambil dari kolom rec.properties.host dalam log mentah jika kolom records ada.
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value Nilai diambil dari kolom rec.properties.policy dalam log mentah jika kolom records ada.
rec.properties.requestUri target.url Nilai diambil dari kolom rec.properties.requestUri dalam log mentah jika kolom records ada.
rec.properties.ruleName security_result.rule_name Nilai diambil dari kolom rec.properties.ruleName dalam log mentah jika kolom records ada.
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value Nilai diambil dari kolom rec.properties.trackingReference dalam log mentah jika kolom records ada.
rec.resourceId target.resource.id Nilai diambil dari kolom rec.resourceId dalam log mentah jika kolom records ada.
rec.time metadata.event_timestamp Nilai diambil dari kolom rec.time dalam log mentah jika kolom records ada.
resourceId target.resource.id Nilai diambil dari kolom resourceId dalam log mentah jika kolom records tidak ada.
timeStamp metadata.event_timestamp Nilai diambil dari kolom timeStamp dalam log mentah jika kolom records tidak ada.
T/A metadata.event_type Nilai ditetapkan ke NETWORK_CONNECTION jika akun utama (nama host atau IP klien) dan IP tujuan ada. Nilai ini ditetapkan ke STATUS_UPDATE jika akun utama ada, tetapi IP tujuan tidak ada. Jika tidak, nilai defaultnya adalah GENERIC_EVENT atau nilai kolom event_type.
T/A metadata.log_type Nilai di-hardcode menjadi AZURE_WAF.
T/A metadata.product_name Nilai di-hardcode menjadi Azure WAF Logs.
T/A metadata.vendor_name Nilai di-hardcode menjadi Microsoft.
T/A security_result.action Nilai ditetapkan ke ALLOW jika properties.action adalah Matched, BLOCK jika properties.action adalah Block.

Perubahan

2024-04-07

Peningkatan:

  • Memetakan rec.properties.clientIp ke principal.ip.
  • Menentukan rec_properties_trackingReference, rec_properties_host, rec_properties_policyMode, rec_properties_ruleName, rec_properties_policy, rec_properties_details_msg, rec_properties_clientIP, dan rec_time dalam data status.

2023-07-14

Peningkatan:

  • Menambahkan loop for untuk menangani log JSON.

2023-02-28

Peningkatan:

  • Memetakan properties.ruleName ke security_result.rule_name.
  • Memetakan properties.action ke security_result.action.
  • Menambahkan pemeriksaan on_error untuk properties.clientPort, properties.httpStatus, properties.receivedBytes, properties.sentBytes, properties.clientResponseTime, properties.timeTaken.

2022-10-22

  • Parser yang baru dibuat

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.