Belajar Security Analyst - Hunting Advanced & Baselining
Episode 24 of 28

Belajar Security Analyst - Hunting Advanced & Baselining

Mempelajari KQL untuk hunting, YARA untuk identifikasi, data science techniques, dan advanced baselining untuk threat hunting tingkat lanjut

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 23 kita mempelajari LLM & AI security operations, pada episode ini kita dalami hunting advanced & baselining — teknik hunting tingkat lanjut yang menggunakan KQL, YARA, dan data science. Ini adalah level di mana analyst menjadi true hunter: tidak hanya mencari yang sudah diketahui, tapi menemukan yang belum pernah terlihat.

Mengapa hunting advanced penting? Karena attacker yang sophisticated tidak meninggalkan IOC yang bisa dideteksi rules. Mereka bersembunyi di data volume tinggi, menggunakan teknik yang meniru perilaku normal. Hunting advanced menemukan mereka.

KQL (Kusto Query Language)

KQL adalah query language untuk Microsoft Sentinel, Microsoft Defender, dan Azure Data Explorer.

KQL untuk Hunting

Hunting: Unsigned EXE execution dari user folder
DeviceProcessEvents
| where Timestamp > ago(7d)
| where FolderPath startswith "C:\\Users\\"
| where ProcessVersionInfoCompanyName == ""
| project Timestamp, DeviceName, InitiatingProcessFileName, 
  FileName, FolderPath, SHA256
| sort by Timestamp desc
Hunting: DNS queries ke newly registered domains
DeviceNetworkEvents
| where Timestamp > ago(1d)
| where RemoteUrl != ""
| extend Domain = tostring(parse_url(RemoteUrl).Host)
| where Domain has_any (".top", ".xyz", ".tk", ".ml")
| summarize count() by Domain, DeviceName
| where count_ > 10
| sort by count_ desc
Hunting: Lateral movement via WMI
DeviceProcessEvents
| where Timestamp > ago(7d)
| where FileName =~ "wmic.exe"
| where ProcessCommandLine has "remote"
| project Timestamp, DeviceName, AccountName, 
  InitiatingProcessFileName, ProcessCommandLine

KQL Advanced Patterns

PatternKQL Technique
Time-series analysismake-series operator
Session analysisserialize + prev()
Geolocationgeo_point_to_h3cell()
Entity graphgraph-match operator

Tip

Mulai dengan KQL sederhana: filter, summarize, sort. KQL powerful tapi learning curve-nya curam. Microsoft Learn punya interactive KQL playground yang bagus untuk latihan.

YARA Advanced

YARA untuk Hunting

YARA rule: Fileless malware pattern
rule Fileless_PowerShell_Attack {
    meta:
        description = "Deteksi fileless malware via PowerShell"
        author = "SOC Analyst"
        date = "2026/08/16"
    strings:
        $ps1 = "powershell" nocase
        $enc = "-enc" nocase
        $b64 = "FromBase64String"
        $iex = "IEX" nocase
        $download = "DownloadString"
    condition:
        $ps1 and $enc and $b64 and ($iex or $download)
}
YARA rule: Obfuscated script
rule Obfuscated_Script {
    strings:
        $s1 = "eval(" nocase
        $s2 = "String.fromCharCode"
        $s3 = "unescape("
        $s4 = "%u"
    condition:
        2 of them
}

YARA + VT Intelligence

LinuxHunting dengan YARA via VirusTotal
# Upload YARA rule ke VT
curl --request POST \
  --url "https://www.virustotal.com/api/v3/intelligence/hunting_rules" \
  --header "x-apikey: YOUR_KEY" \
  --header "Content-Type: application/json" \
  --data '{"rule": "rule test { strings: $a = \"malware\" condition: $a }", "name": "test_rule"}'

Data Science untuk Hunting

Statistical Analysis

Analisis statistik login patterns
import pandas as pd
import numpy as np
 
# Load login data
df = pd.read_csv('auth.log.csv')
 
# Hitung login per jam
hourly = df.groupby(df['timestamp'].dt.hour).size()
 
# Z-score untuk anomali
mean = hourly.mean()
std = hourly.std()
anomalies = hourly[(hourly - mean).abs() > 2 * std]

Clustering untuk Pattern Discovery

Clustering untuk menemukan pola serangan
from sklearn.cluster import DBSCAN
 
# Features: src_ip, dst_port, protocol, bytes
features = df[['src_ip_encoded', 'dst_port', 'proto', 'bytes']]
 
# DBSCAN clustering
clustering = DBSCAN(eps=0.5, min_samples=5)
df['cluster'] = clustering.fit_predict(features)
 
# Cluster -1 = outliers = potensi anomali
outliers = df[df['cluster'] == -1]

Advanced Baselining

Statistical Baselining

LinuxMembangun baseline statistical
# Baseline: login per hari per user
cat auth.log | grep "Accepted" | awk '{print $1, $2, $3, $9}' | \
  sort | uniq -c | sort -rn > login-baseline.txt
 
# Z-score calculation
mean=$(awk '{sum+=$1} END {print sum/NR}' login-baseline.txt)
std=$(awk -v mean="$mean" '{sum+=($1-mean)^2} END {print sqrt(sum/NR)}' login-baseline.txt)

Behavioral Baselining

MetricBaselineAnomaly Threshold
Login hours08:00-18:00Login outside ±2 std
Data transfer< 100MB/dayTransfer > 10x baseline
Process creation< 50 new/hour> 5x baseline
DNS queries< 1000/hour> 5x baseline

Note

Advanced hunting membutuhkan pemahaman statistik yang kuat. Jika kalian belum familiar dengan z-score, standard deviation, dan clustering, mulailah belajar dasar data science — ini adalah skill yang membedakan hunter dari analyst biasa.

Penutup

Inti yang harus dibawa pulang:

  • KQL adalah hunting language yang powerful untuk Microsoft ecosystem.
  • YARA memungkinkan identifikasi pola malware secara fleksibel.
  • Data science (clustering, statistical analysis) membantu menemukan pola tersembunyi.
  • Advanced baselining menggunakan statistik, bukan sekadar threshold tetap.

Di episode 25 selanjutnya kita akan membahas detection engineering advanced — tuning, detection validation, dan purple team collaboration untuk membangun deteksi yang benar-benar andal.

Belajar Security Analyst - Hunting Advanced & Baselining | Belajar Security Analyst