Mengumpulkan log 1Password

Didukung di:

Dokumen ini menjelaskan cara menyerap log 1Password ke Google Security Operations menggunakan Bindplane. Parser mengubah data log berformat JSON mentah menjadi format terstruktur yang sesuai dengan Model Data Terpadu (UDM) Google SecOps. Fitur ini secara khusus berfokus pada menormalisasi dan memperkaya peristiwa yang terkait dengan upaya login pengguna, mengekstrak detail tentang pengguna, lokasi, informasi klien, dan hasil upaya tersebut.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Windows 2016 atau yang lebih baru atau host Linux dengan systemd
  • Jika dijalankan di belakang proxy, port firewall terbuka
  • Akses istimewa ke 1Password

Mendapatkan file autentikasi penyerapan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Download File Autentikasi Penyerapan. Simpan file dengan aman di sistem tempat BindPlane akan diinstal.

Mendapatkan ID pelanggan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Profil.
  3. Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.

Menginstal agen Bindplane

Penginstalan Windows

  1. Buka Command Prompt atau PowerShell sebagai administrator.
  2. Jalankan perintah berikut:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Penginstalan Linux

  1. Buka terminal dengan hak istimewa root atau sudo.
  2. Jalankan perintah berikut:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Referensi penginstalan tambahan

Untuk opsi penginstalan tambahan, lihat panduan penginstalan.

Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps

  1. Akses file konfigurasi:
    • Cari file config.yaml. Biasanya, file ini berada di direktori /etc/bindplane-agent/ di Linux atau di direktori penginstalan di Windows.
    • Buka file menggunakan editor teks (misalnya, nano, vi, atau Notepad).
  2. Edit file config.yaml sebagai berikut:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'ONEPASSWORD'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.

  4. Ganti <customer_id> dengan ID pelanggan yang sebenarnya.

  5. Perbarui /path/to/ingestion-authentication-file.json ke jalur tempat file autentikasi disimpan di bagian Dapatkan file autentikasi penyerapan Google SecOps.

Mulai ulang agen BindPlane untuk menerapkan perubahan

  • Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:

    sudo systemctl restart bindplane-agent
    
  • Untuk memulai ulang agen Bindplane di Windows, Anda dapat menggunakan konsol Services atau memasukkan perintah berikut:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Mendapatkan token API 1Password

  1. Login ke UI web 1Password.
  2. Buka Integrations.
  3. Klik Direktori di bagian atas halaman.
  4. Masukkan nama untuk token dan tetapkan masa berlaku token.
  5. Di Pelaporan Peristiwa, klik Lainnya.
  6. Pilih Jenis Peristiwa yang sesuai.
  7. Klik Issue Token untuk membuat kunci token akses.
  8. Klik Save in 1Password dan pilih brankas tempat Anda ingin menyimpan token.
  9. Klik Lihat Detail Integrasi untuk melihat token.

Konfigurasi host Linux untuk menjalankan perintah berikut

  • Jalankan perintah berikut:

      import datetime
      import requests
      import os
      import socket
      import json
    
    # For more information, check out the support page: https://support.1password.com/events-reporting
    
      api_token = os.environ.get('EVENTS_API_TOKEN')
      url = "https://events.1password.com"
      if not api_token:
          print("Please set the EVENTS_API_TOKEN environment variable.")
          exit(1)
      start_time = datetime.datetime.now() - datetime.timedelta(hours=24)
    
    # Define the bindplane agent details
    
      syslog_server_ip = <ip-address> # Replace with your Bindplane IP
      syslog_server_port = <port-number> # Replace with your Bindplane port
      headers = {
          "Content-Type": "application/json",
          "Authorization": f"Bearer {api_token}"
      payload = {
          "limit": 20,
          "start_time": start_time.astimezone().replace(microsecond=0).isoformat()
    
    # Alternatively, use the cursor returned from previous responses to get any new events
      # payload = { "cursor": cursor }
      try:
          r = requests.post(f"{url}/api/v1/signinattempts", headers=headers, json=payload)
          r.raise_for_status()  # Raise an exception if the request fails
          if r.status_code == requests.codes.ok:
    
    # Send the response to the bindplane server
              syslog_message = f"{json.dumps(r.json())}"
              with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
                  sock.connect((syslog_server_ip, syslog_server_port))
                  sock.sendall(f"{syslog_message}\n".encode())
          else:
              print(f"Error getting sign-in attempts: status code {r.status_code}")
      except requests.exceptions.RequestException as e:
          print(f"Request error: {e}")
      except Exception as e:
          print(f"Error during syslog logging: {e}")
    

Tabel pemetaan UDM

Kolom log Pemetaan UDM Logika
category security_result.category_details Nilai diambil dari kolom category dalam log mentah.
client.app_name principal.application Nilai diambil dari kolom client.app_name dalam log mentah.
client.app_version metadata.product_version Nilai diambil dari kolom client.app_version dalam log mentah.
client.ip_address principal.ip Nilai diambil dari kolom client.ip_address dalam log mentah.
client.os_name principal.platform Nilai diambil dari kolom client.os_name dalam log mentah dan dipetakan ke nilai platform UDM yang sesuai (LINUX, WINDOWS, MAC).
client.os_version principal.platform_version Nilai diambil dari kolom client.os_version dalam log mentah.
client.platform_name principal.resource.attribute.labels.key: platform_name, principal.resource.attribute.labels.value: Chrome Nilai diambil dari kolom client.platform_name dalam log mentah.
client.platform_version principal.asset.platform_software.platform_version Nilai diambil dari kolom client.platform_version dalam log mentah.
country principal.location.country_or_region Nilai diambil dari kolom country dalam log mentah jika location.country tidak ada.
item_uuid security_result.about.resource.attribute.labels.key: item_uuid, security_result.about.resource.attribute.labels.value: nx4f2lhmafhhfkvgid6ff2fyh4 Nilai diambil dari kolom item_uuid dalam log mentah.
location.city principal.location.city Nilai diambil dari kolom location.city dalam log mentah.
location.country principal.location.country_or_region Nilai diambil dari kolom location.country dalam log mentah.
location.latitude principal.location.region_latitude Nilai diambil dari kolom location.latitude dalam log mentah.
location.longitude principal.location.region_longitude Nilai diambil dari kolom location.longitude dalam log mentah.
location.region principal.location.name Nilai diambil dari kolom location.region dalam log mentah.
session.ip principal.ip Nilai diambil dari kolom session.ip dalam log mentah.
session_uuid network.session_id Nilai diambil dari kolom session_uuid dalam log mentah.
target_user.email target.user.email_addresses Nilai diambil dari kolom target_user.email dalam log mentah.
target_user.uuid target.user.userid Nilai diambil dari kolom target_user.uuid dalam log mentah.
timestamp metadata.event_timestamp.seconds, metadata.event_timestamp.nanos Nilai diambil dari kolom timestamp dalam log mentah dan dikonversi menjadi detik dan nanodetik.
jenis additional.fields.key: type, additional.fields.value.string_value: mfa_ok Nilai diambil dari kolom type dalam log mentah.
user.email principal.user.email_addresses Nilai diambil dari kolom user.email dalam log mentah.
user.name principal.user.user_display_name Nilai diambil dari kolom user.name dalam log mentah.
used_version additional.fields.key: used_version, additional.fields.value.string_value: 1 Nilai diambil dari kolom used_version dalam log mentah.
uuid principal.resource.attribute.labels.key: uuid, principal.resource.attribute.labels.value: EPNGUJLHFVHCXMJL5LJQGXTENA Nilai diambil dari kolom uuid dalam log mentah.
vault_uuid security_result.about.resource.attribute.labels.key: vault_uuid, security_result.about.resource.attribute.labels.value: lddjidoxtrxteclqhubbo3pkyq Nilai diambil dari kolom vault_uuid dalam log mentah.
T/A extensions.auth Objek kosong dibuat untuk kolom ini.
T/A metadata.event_type Nilai disetel ke USER_LOGIN jika category adalah success atau firewall_reported_success, STATUS_UPDATE jika tidak ada informasi pengguna, dan USER_UNCATEGORIZED jika tidak.
T/A metadata.log_type Nilai ditetapkan ke ONEPASSWORD.
T/A metadata.product_name Nilai ditetapkan ke ONEPASSWORD.
T/A metadata.vendor_name Nilai ditetapkan ke ONEPASSWORD.
T/A security_result.action Nilai ditetapkan ke ALLOW jika category adalah success atau firewall_reported_success, BLOCK jika category adalah credentials_failed, mfa_failed, modern_version_failed, atau firewall_failed, dan dibiarkan kosong jika tidak.

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