Topik ini menjelaskan cara memanfaatkan kemampuan kueri SQL dari Simple Log Service (SLS) dalam platform Agentic SOC untuk membangun aturan deteksi kustom yang memantau dan menghasilkan peringatan secara real-time terhadap insiden keamanan, seperti login dari akun dorman.
Latar Belakang
Tujuan: Mendeteksi login dari akun yang tidak aktif.
Metode: Gunakan kueri SQL terjadwal untuk membandingkan login terbaru dengan garis dasar historis. Ini mengidentifikasi pengguna yang telah login baru-baru ini tetapi tidak muncul dalam catatan historis untuk periode yang lama.
Logika inti
Logika deteksi memiliki tiga bagian utama:
Definisikan aktivitas terbaru: Kueri semua peristiwa login yang terjadi dalam 20 menit terakhir.
Definisikan garis dasar historis: Kueri untuk pengguna yang telah login ke host dalam periode yang lebih lama, yaitu 24 jam terakhir, tetapi tidak termasuk 20 menit terakhir.
Bandingkan set data: Gabungkan aktivitas terbaru dengan garis dasar historis. Jika seorang pengguna muncul dalam aktivitas terbaru tetapi tidak memiliki catatan dalam garis dasar historis, login dianggap abnormal.
Definisikan aktivitas terbaru
(
select
user_id,
src_ip,
username,
uuid,
start_time
from
log
where
cast(start_time as bigint) >= cast(to_unixtime (current_timestamp) as bigint) - 20 * 60
and cast(start_time as bigint) < cast(to_unixtime (current_timestamp) as bigint)
) aAnalisis Sintaks:
from log: Mengkueri data dari tabellog.to_unixtime(current_timestamp): Mengembalikan timestamp Unix saat ini dalam detik.cast(... as bigint): Mengonversi timestamp ke tipe databigint(integer panjang) untuk operasi matematika dan perbandingan.where ...: Mendefinisikan jendela waktu geser 20 menit yang berakhir pada waktu saat ini.>= ... - 20 * 60: Waktu mulai log (start_time) harus lebih besar dari atau sama dengan "waktu saat ini - 20 menit".< ...: Waktu mulai log harus kurang dari "waktu saat ini".
Analisis Logika:
Tujuan: Mendefinisikan set bernama
auntuk "aktivitas terbaru" guna membatasi objek utama analisis.Hasil: Set hasil sementara dari pengguna yang aktif dalam 20 menit terakhir, seperti
user_iddansrc_ip.Poin Penting: Periode "terbaru" didefinisikan secara tepat sebagai jendela waktu 20 menit yang dimulai dari waktu saat ini.
Definisikan garis dasar historis
(
select
user_id,
username,
uuid
from
log
where
schema='HOST_LOGIN_ACTIVITY' and
cast(start_time as bigint) >= cast(to_unixtime (current_timestamp) as bigint) - 24 * 3600
and cast(start_time as bigint) < cast(to_unixtime (current_timestamp) as bigint) - 20 * 60
) bAnalisis Sintaks:
schema='HOST_LOGIN_ACTIVITY': Mengkueri hanya log aktivitas login host, yang membuat garis dasar historis lebih akurat.where ...: Mendefinisikan rentang waktu dari 24 jam yang lalu hingga 20 menit yang lalu.>= ... - 24 * 3600: Waktu mulai log harus lebih besar dari atau sama dengan "waktu saat ini - 24 jam".< ... - 20 * 60: Waktu mulai log harus kurang dari "waktu saat ini - 20 menit".
Analisis Logika:
Tujuan: Membangun set "garis dasar historis" bernama
bsebagai referensi untuk menentukan apakah suatu aktivitas abnormal.Hasil: Set hasil sementara yang berisi pengguna yang telah login dalam sehari terakhir, tidak termasuk 20 menit terakhir.
Poin Penting: Jendela waktu ini disetel dari 24 jam yang lalu hingga 20 menit yang lalu. Ini memastikan bahwa data garis dasar historis tidak tumpang tindih dengan data aktivitas terbaru, mencegah kesalahan logis dari perbandingan diri sendiri.
Gunakan LEFT JOIN untuk perbandingan perbedaan
... a
left join
... b on a.username = b.username and a.uuid = b.uuid and a.user_id = b.user_idSyntax Analysis:
LEFT JOIN: Menggunakan Tabel Kiri (a, pengguna terbaru) sebagai dasar dan mencocokkan setiap rekornya dengan rekaman di Tabel Kanan (b, pengguna historis).on a.username = b.username and a.uuid = b.uuid and a.user_id=b.user_id: Menentukan kondisi gabungan. Bidangusername,uuid, danuser_iddigunakan bersama untuk mengidentifikasi entitas pengguna secara unik, memastikan pencocokan yang akurat.
Analisis Logika:
Tujuan: Mengkorelasikan "aktivitas terbaru" (
a) dengan "garis dasar historis" (b) untuk menemukan catatan login historis yang sesuai untuk setiap aktivitas pengguna terbaru.Hasil: Menghasilkan set hasil gabungan yang mencakup semua rekaman dari tabel
adan rekaman dari tabelbyang berhasil dicocokkan berdasarkan bidang identitas pengguna.Poin Penting: Kueri ini memanfaatkan sifat asimetris dari
LEFT JOIN: jika pengguna dari tabelatidak ada di tabelb, semua kolom dari tabelbakan menjadiNULLdalam hasil. Ini adalah mekanisme inti untuk mengidentifikasi aktivitas baru.
Filter hasil akhir
where
(
b.username is null
or b.username = ''
)Analisis Sintaks:
b.username is null: Ini adalah kunci untuk memanfaatkan karakteristikLEFT JOIN. Ketika pengguna yang baru saja login (di tabela) tidak dapat ditemukan dalam garis dasar historis (tabelb),b.usernameakan menjadiNULL.or b.username = '': Ini adalah kondisi defensif untuk menangani kasus di mana bidang log mungkin berupa string kosong''bukanNULL.
Analisis Logika:
Tujuan: Untuk menyaring hasil gabungan, mengisolasi aktivitas yang muncul baru-baru ini tetapi tidak memiliki catatan historis.
Hasil: Setelah filter ini diterapkan, set hasil hanya berisi rekaman yang gagal cocok dalam
LEFT JOIN—peristiwa abnormal yang Anda cari.Poin Penting:
b.username is nulladalah titik keputusan inti dari seluruh logika deteksi. Ini menggunakan nilaiNULLyang dihasilkan pada langkah sebelumnya untuk memisahkan rekaman "ada di terbaru, tidak ada di historis" dari dataset besar.
Gunakan SELECT DISTINCT untuk mengeluarkan peringatan
select distinct
a.user_id,
a.src_ip,
a.username,
a.uuidAnalisis Sintaks:
SELECT DISTINCT: Memilih dan mengeluarkan bidang yang ditentukan, serta menghapus duplikat dari hasil. Ini memastikan hanya satu peringatan yang dihasilkan untuk satu peristiwa abnormal.
Analisis Logika:
Tujuan: Untuk memformat dan mengeluarkan daftar akhir peristiwa abnormal yang dapat digunakan langsung untuk peringatan.
Hasil: Daftar peringatan yang bersih dan tanpa duplikat. Setiap rekaman berisi informasi inti yang diperlukan untuk melacak peristiwa abnormal, seperti ID pengguna dan IP Sumber.
Poin Penting: Penggunaan
DISTINCTsangat penting. Ini menghapus duplikat hasil untuk memastikan bahwa perilaku abnormal yang sama dari pengguna yang sama dalam jendela deteksi (20 menit) hanya memicu satu peringatan.
Solusi lengkap
Kueri SQL akhir
*|set session mode=scan;
select distinct
a.user_id,
a.src_ip,
a.username,
a.uuid
from
(
select
user_id,
src_ip,
username,
uuid,
start_time
from
log
where
cast(start_time as bigint) >= cast(to_unixtime (current_timestamp) as bigint) -20 * 60
and cast(start_time as bigint) < cast(to_unixtime (current_timestamp) as bigint)
) a
left join (
select
user_id,
username,
uuid
from
log
where
schema='HOST_LOGIN_ACTIVITY' and
cast(start_time as bigint) >= cast(to_unixtime (current_timestamp) as bigint) - 24 * 3600
and cast(start_time as bigint) < cast(to_unixtime (current_timestamp) as bigint) -20 * 60
) b on a.username = b.username
and a.uuid = b.uuid
and a.user_id=b.user_id
where
(
b.username is null
or b.username = ''
)Konfigurasikan aturan di Agentic SOC
Beli dan aktifkan Agentic SOC
Lihat Beli dan aktifkan untuk opsi pembelian. Untuk mengakses semua layanan deteksi ancaman kustom, kami merekomendasikan pembelian Log Ingestion Traffic dan Log Storage Capacity.
Masuk ke Konsol dan Navigasikan ke Halaman Create Custom Rule
Masuk ke .
Di panel navigasi kiri, pilih . Di pojok kiri atas Konsol, pilih Wilayah tempat aset Anda berada: Chinese Mainland atau Outside Chinese Mainland.
Di tab Custom, klik Create Custom Rule.
Konfigurasikan Aturan Pembuatan Peringatan
Di panel Create Custom Rule, pada tab Basic Information, masukkan nama aturan dan deskripsi, lalu klik Next.
Konfigurasikan aturan deteksi SQL. Lihat parameter berikut untuk pengaturan:
Parameter
Nilai
Tubuh Aturan
SQL
Ruang Lingkup Log
Log Login - Log Keberhasilan Login Host.
Kueri SQL
Salin kode dari bagian Kueri SQL Akhir.
Interval Penjadwalan
Interval Tetap - 20 menit.
Jendela Waktu SQL
24 jam.
Waktu Mulai
Saat aturan diaktifkan.
Struktur Generasi
Log Peringatan Lainnya.
Metrik Alarm
Login Abnormal.
Tingkat Keparahan Peringatan
Sedang.
Taktik ATT&CK
Persistensi - T1136 Buat Akun.
Pemetaan Entitas
Alamat Jaringan
is_malware: 1ip:$src_ipnet_connect_dir: in
Host
is_asset: 1uuid:$uuid
Konfigurasikan Aturan Pembuatan Insiden
Pada halaman Alert Settings, setelah konfigurasi selesai, klik Next.
Konfigurasikan aturan peristiwa. Lihat parameter berikut untuk pengaturan:
Generate Event: Yes.
Incident Generation Method: Agregasi berdasarkan jenis.
Aggregation Window: 20 minutes.
Validasi Aturan
Aturan baru secara default dalam status Disabled. Anda dapat mengujinya untuk mengevaluasi efektivitasnya. Selama pengujian, sistem secara otomatis melakukan kalibrasi terhadap field peringatan. Gunakan saran kalibrasi yang dihasilkan untuk mengoptimalkan SQL atau playbook aturan guna memastikan akurasi dan standarisasi peringatan setelah aturan diaktifkan.
Ubah Enabling Status aturan target menjadi Testing.
Di kolom aksi untuk aturan target, klik View Alert Test Result.
Di halaman detail hasil uji, lihat grafik tren peringatan dan daftar peringatan yang dihasilkan.
Di kolom Aksi untuk suatu peringatan, klik Details untuk melihat hasil kalibrasinya.
Aktifkan Aturan Kustom
Setelah aturan lolos pengujian, ubah Enabling Status menjadi
Enabled.PentingKami merekomendasikan untuk menguji aturan sebelum Anda mengaktifkannya.
Penilaian risiko
Positif Palsu: Pengguna normal yang login untuk pertama kali setelah liburan panjang atau perjalanan bisnis mungkin ditandai secara salah. Anda dapat mengurangi positif palsu dengan memperpanjang periode tinjauan historis (misalnya, dari 24 jam menjadi 72 jam) atau dengan mengonfigurasi Daftar Putih pengguna.
Negatif Palsu: Gangguan pengumpulan log atau format bidang non-standar dapat menyebabkan kueri SQL salah menghitung interval waktu, yang mengarah pada deteksi yang terlewat. Pastikan integritas dan konsistensi data log Anda.
Dokumentasi sintaks SQL
Untuk informasi lebih lanjut tentang sintaks SQL, lihat Sintaks Analisis SQL dan Fitur.
Untuk mempelajari cara mengonfigurasi aturan deteksi ancaman, lihat Konfigurasikan Aturan Deteksi Ancaman.