Kenapa Security Logging Penting?
Tanpa logging yang memadai, kamu tidak akan tahu bahwa sistem sedang diserang sampai sudah terlambat. OWASP menempatkan "Security Logging Failures" sebagai salah satu risiko Top 10 karena banyak organisasi yang tidak memiliki visibility terhadap serangan.
Apa yang Harus Di-log
- Authentication events — Login berhasil, gagal, logout, password reset
- Authorization failures — Akses ke resource yang tidak diizinkan
- Input validation failures — Request dengan data yang mencurigakan
- Application errors — Exception dan error yang tidak terduga
- Admin actions — Perubahan konfigurasi, user management
- Rate limit hits — Client yang terkena rate limiting
Structured Logging
// BURUK: log tidak terstruktur
console.log("Login failed for user admin from 192.168.1.1");
// BAIK: structured logging (JSON)
const logger = require("pino")();
logger.warn({
event: "auth.login_failed",
username: "admin",
ip: "192.168.1.1",
userAgent: req.headers["user-agent"],
timestamp: new Date().toISOString(),
reason: "invalid_password",
attemptCount: 3
});
Laravel Logging
// Logging security events di Laravel
use Illuminate\Support\Facades\Log;
// Login gagal
Log::channel("security")->warning("Login failed", [
"email" => $request->email,
"ip" => $request->ip(),
"user_agent" => $request->userAgent(),
]);
// Unauthorized access attempt
Log::channel("security")->alert("Unauthorized access attempt", [
"user_id" => auth()->id(),
"resource" => $request->path(),
"method" => $request->method(),
]);
// config/logging.php — tambah channel security
"security" => [
"driver" => "daily",
"path" => storage_path("logs/security.log"),
"level" => "warning",
"days" => 90,
],
Apa yang TIDAK Boleh Di-log
// JANGAN log data sensitif
Log::info("Login", [
"email" => $email,
"password" => $password, // JANGAN!
"credit_card" => $cardNumber, // JANGAN!
"session_token" => $token, // JANGAN!
]);
// BAIK: redact data sensitif
Log::info("Login", [
"email" => $email,
"password" => "[REDACTED]",
"credit_card" => "****" . substr($cardNumber, -4),
]);
Monitoring dan Alerting
- Brute force detection — Alert jika ada banyak login gagal dari IP yang sama
- Anomaly detection — Traffic spike yang tidak normal
- Error rate monitoring — Lonjakan error bisa indikasi serangan
- Geo-anomaly — Login dari lokasi yang tidak biasa
SIEM (Security Information and Event Management)
SIEM adalah sistem yang mengumpulkan, menganalisis, dan mengkorelasikan log dari berbagai sumber (server, firewall, aplikasi) untuk mendeteksi ancaman keamanan secara real-time. Contoh SIEM: Splunk, IBM QRadar, dan Elastic SIEM.
Tools Monitoring
- ELK Stack (Elasticsearch, Logstash, Kibana) — Log aggregation dan visualization
- Grafana + Loki — Monitoring dan alerting
- Sentry — Error tracking dengan context
- Datadog / New Relic — APM dengan security monitoring
Best Practices
- Log semua security events dengan detail yang cukup
- Gunakan structured logging (JSON format)
- Jangan log data sensitif (password, tokens, credit cards)
- Set up alerts untuk anomali
- Simpan logs minimal 90 hari
- Protect logs dari tampering (append-only, separate server)