Topik ini menjelaskan cara menggunakan kemampuan kueri SQL Simple Log Service (SLS) dalam platform Agentic SOC untuk membuat aturan deteksi kustom yang memantau dan menghasilkan peringatan secara real-time terhadap insiden keamanan seperti login dari akun yang tidak aktif.
Latar belakang dan tujuan
Skenario target: Mendeteksi login abnormal dari akun tidak aktif.
Metode: Gunakan kueri SQL terjadwal untuk membandingkan login terbaru dengan garis dasar historis guna mengidentifikasi pengguna yang baru saja login tetapi tidak muncul dalam catatan historis selama periode panjang.
Logika inti
SQL deteksi terdiri dari tiga bagian utama:
-
Definisikan aktivitas terbaru: Kueri semua event login yang terjadi dalam 20 menit terakhir.
-
Definisikan garis dasar historis: Kueri pengguna yang pernah login ke host dalam periode 24 jam terakhir, tetapi mengecualikan 20 menit terakhir.
-
Bandingkan set data: Lakukan join antara aktivitas terbaru dengan garis dasar historis. Jika pengguna muncul dalam aktivitas terbaru tetapi tidak memiliki catatan dalam garis dasar historis, maka login tersebut 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)
) a
-
Analisis sintaks:
-
from log: Mengkueri data dari tabellog. -
to_unixtime(current_timestamp): Mengembalikan Unix timestamp saat ini dalam satuan detik. -
cast(... as bigint): Mengonversi timestamp ke tipe databigint(bilangan bulat panjang) untuk operasi matematika dan perbandingan. -
where ...: Menentukan jendela waktu geser selama 20 menit yang berakhir pada waktu saat ini.-
>= ... - 20 * 60: Waktu mulai log (start_time) harus lebih besar atau sama dengan "waktu saat ini – 20 menit". -
< ...: Waktu mulai log harus kurang dari "waktu saat ini".
-
-
-
Analisis semantik:
-
Tujuan: Mendefinisikan set bernama
auntuk "aktivitas terbaru" guna membatasi objek analisis utama. -
Hasil: Set hasil sementara berisi pengguna yang aktif dalam 20 menit terakhir, seperti
user_iddansrc_ip. -
Poin penting: Periode "terbaru" didefinisikan secara tepat sebagai jendela waktu 20 menit yang dihitung mundur 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
) b
-
Analisis sintaks:
-
schema='HOST_LOGIN_ACTIVITY': Hanya mengkueri log aktivitas login host, sehingga garis dasar historis menjadi lebih akurat. -
where ...: Menentukan rentang waktu dari 24 jam lalu hingga 20 menit lalu.-
>= ... - 24 * 3600: Waktu mulai log harus lebih besar atau sama dengan "waktu saat ini – 24 jam". -
< ... - 20 * 60: Waktu mulai log harus kurang dari "waktu saat ini – 20 menit".
-
-
-
Analisis semantik:
-
Tujuan: Membangun set "garis dasar historis" bernama
bsebagai referensi untuk menentukan apakah suatu aktivitas bersifat abnormal. -
Hasil: Set hasil sementara berisi pengguna yang pernah login dalam sehari terakhir, mengecualikan 20 menit terakhir.
-
Poin penting: Jendela waktu ini ditetapkan dari 24 jam lalu hingga 20 menit lalu. Hal ini memastikan bahwa data garis dasar historis tidak tumpang tindih dengan data aktivitas terbaru, sehingga mencegah kesalahan logika akibat perbandingan diri sendiri.
-
Gunakan LEFT JOIN untuk perbandingan selisih
... a
left join
... b on a.username = b.username and a.uuid = b.uuid and a.user_id = b.user_id
-
Analisis sintaks:
-
LEFT JOIN: Menggunakan Tabel Kiri (a, pengguna terbaru) sebagai basis dan mencocokkan setiap record-nya dengan record 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 join. Fieldusername,uuid, danuser_iddigunakan bersama untuk mengidentifikasi entitas pengguna secara unik, memastikan pencocokan yang akurat.
-
-
Analisis semantik:
-
Tujuan: Menghubungkan "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 record dari tabel
adan record dari tabelbyang berhasil dicocokkan berdasarkan field identitas pengguna. -
Poin penting: Kueri ini memanfaatkan sifat asimetris dari
LEFT JOIN: jika pengguna dari tabelatidak ada di tabelb, semua kolom dari tabelbakan bernilaiNULLdalam hasilnya. Inilah 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 pemanfaatan karakteristikLEFT JOIN. Ketika pengguna yang baru saja login (di tabela) tidak ditemukan dalam garis dasar historis (tabelb),b.usernameakan bernilaiNULL. -
or b.username = '': Ini adalah kondisi defensif untuk menangani kasus di mana field log mungkin berupa string kosong''alih-alihNULL.
-
-
Analisis semantik:
-
Tujuan: Untuk memfilter hasil join, mengisolasi aktivitas yang muncul baru-baru ini tetapi tidak memiliki catatan historis.
-
Hasil: Setelah filter ini diterapkan, set hasil hanya berisi record yang gagal dicocokkan dalam
LEFT JOIN—yaitu event abnormal yang Anda cari. -
Poin penting:
b.username is nulladalah titik keputusan inti dari seluruh logika deteksi. NilaiNULLyang dihasilkan pada langkah sebelumnya digunakan untuk memisahkan record "ada di data terbaru, tidak ada di data historis" dari dataset yang besar.
-
SELECT DISTINCT: Output peringatan
select distinct
a.user_id,
a.src_ip,
a.username,
a.uuid
-
Analisis sintaks:
-
SELECT DISTINCT: Memilih dan mengeluarkan field yang ditentukan, serta menghapus duplikat dari hasilnya. Ini memastikan hanya satu peringatan yang dihasilkan untuk satu event abnormal.
-
-
Analisis semantik:
-
Tujuan: Untuk memformat dan mengeluarkan daftar akhir event abnormal yang dapat langsung digunakan untuk peringatan.
-
Hasil: Daftar peringatan yang bersih dan telah dihapus duplikatnya. Setiap record berisi informasi inti yang diperlukan untuk melacak event abnormal, seperti ID pengguna dan IP Sumber.
-
Poin penting: Penggunaan
DISTINCTsangat penting. Ini menghapus duplikat hasil agar 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 Purchase and enable untuk opsi pembelian. Untuk mengakses semua layanan deteksi ancaman kustom, kami merekomendasikan pembelian Log Ingestion Traffic dan Log Storage Capacity.
-
Masuk ke Konsol dan buka halaman Create Custom Rule.
-
Login 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 dan deskripsi aturan, lalu klik Next untuk menuju halaman Alert Settings.
-
Konfigurasikan aturan deteksi SQL. Lihat pengaturan parameter berikut:
Parameter
Nilai
Rule Body
SQL
Log Scope
Logon Logs - Host Logon Success Log.
SQL Query
Salin kode dari bagian Final SQL query.
Scheduling Interval
Fixed Interval - 20 minutes.
SQL Time Window
24 hours.
Start Time
When the rule is enabled.
Generation Structure
Other Alert Logs.
Alarm Metric
Abnormal Logon.
Alert Severity
Medium.
ATT&CK Tactic
Persistence - T1136 Create Account.
Entity Mapping
-
Network Address
-
is_malware: 1 -
ip:$src_ip -
net_connect_dir: in
-
-
Host
-
is_asset: 1 -
uuid:$uuid
-
-
-
-
Konfigurasikan aturan pembuatan insiden
-
Di halaman Alert Settings, setelah konfigurasi selesai, klik Next untuk menuju halaman Incident Generation Settings.
-
Konfigurasikan aturan waktu. Lihat pengaturan parameter berikut:
-
Generate Event: Yes.
-
Incident Generation Method: Aggregate by type.
-
Aggregation Window: 20 minutes.
-
-
-
Validasi aturan
Aturan baru secara default berstatus Disabled. Anda dapat mengujinya untuk mengevaluasi efektivitasnya. Selama pengujian, sistem secara otomatis melakukan kalibrasi 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, atur Enabling Status menjadi
Enabled.PentingKami merekomendasikan untuk menguji aturan sebelum mengaktifkannya.
Penilaian risiko
-
False positive: Pengguna normal yang login untuk pertama kalinya setelah liburan panjang atau perjalanan bisnis mungkin salah ditandai. Anda dapat mengurangi false positive dengan memperpanjang ambang batas
dormant_hours(misalnya, menjadi 72 jam) atau dengan mengonfigurasi daftar putih pengguna. -
False negative: Gangguan pengumpulan log atau format field yang tidak standar dapat menyebabkan kueri SQL salah menghitung interval waktu, sehingga deteksi terlewat. Pastikan integritas dan konsistensi data log Anda.
Di konsol Security Center, pilih Rule Management di panel navigasi kiri dan klik tab Custom. Di bagian atas halaman ditampilkan statistik aturan (jumlah aturan yang diaktifkan, aturan dalam pengujian, dan templat aturan). Di daftar aturan kustom, klik aturan target (misalnya, Abnormal IP Login). Panel detail akan muncul di sisi kanan, menampilkan grafik tren peringatan dan hasil pengujian, termasuk jumlah peringatan, hasil kalibrasi (benar/salah), serta waktu kejadian pertama, waktu kejadian terakhir, dan entri detail untuk setiap catatan peringatan.
Dokumentasi sintaks SQL
-
Untuk informasi lebih lanjut tentang sintaks SQL, lihat SQL analysis syntax and features.
-
Untuk mempelajari cara mengonfigurasi aturan deteksi ancaman, lihat Configure threat detection rules.