Back to IF5161 Keamanan Data dan Perangkat Lunak

Heartbleed dan Alat Analisis Memori

Questions/Cues

  • Apa yang terjadi pada Heartbleed (CVE-2014-0160)?
  • Mengapa satu bounds check yang hilang menjadi insiden global?
  • Bagaimana AddressSanitizer mendeteksi overflow?
  • Alat apa untuk analisis dan eksploitasi memori?
  • Apa tantangan terbuka dalam vulnerability management?

Reference Points

  • IF5161 — W06 Bugs, Vulnerability, Program Analysis, and Testing, “Case Study: Heartbleed” s.d. “Open Challenges: Vulnerability Management”

Studi Kasus Heartbleed (CVE-2014-0160)

Kerentanan pada ekstensi heartbeat TLS di OpenSSL (2014). Klien mengirim payload beserta panjang yang diklaim; server tidak memeriksa bahwa panjang itu sesuai payload sebenarnya, lalu memcpy menyalin sebanyak klaim. Akibatnya server membalas dengan memori heap di sekitarnya, membocorkan kunci privat, password, dan data sesi.

sequenceDiagram
    participant A as Attacker
    participant S as Server OpenSSL
    A->>S: Heartbeat: payload "hat" (3 byte), klaim panjang 64 KB
    S->>S: memcpy(bp, pl, payload) tanpa cek
    S-->>A: "hat" + 64 KB memori heap tetangga
    Note over A,S: Kunci, password, session data bocor

Perbaikan: tambahkan pemeriksaan batas — jika 1 + 2 + payload + padding > s->s3->rrec.length, buang paket secara diam-diam (return 0) sebelum memcpy. Satu baris validasi, tetapi dampaknya global.

Mendeteksi dengan AddressSanitizer

Program mainan toy_overflow.c menyalin input ke char buf[64] dengan strcpy tanpa batas. Dikompilasi dengan gcc -fsanitize=address -g, ASan melaporkan lokasi overflow, ukuran buffer, dan call stack; tanpa ASan hasilnya hanya korupsi diam-diam. Tanpa proteksi program ini dapat dieksploitasi; dengan ASLR+DEP+canary eksploitasi jauh lebih sulit, tetapi tidak mustahil.

Alat Analisis Memori

AlatTujuanLisensi
AddressSanitizerDeteksi error memori saat runtimeOpen source (built-in kompiler)
ValgrindDeteksi error/leak memoriOpen source
gdbDebugging / analisis eksploitOpen source
pwntoolsPengembangan eksploitOpen source

Tantangan Terbuka

  • Codebase C/C++ legacy terlalu besar untuk ditulis ulang ke bahasa memory-safe.
  • Business-logic flaw tidak tertangkap alat otomatis.
  • Kerentanan transitif pada rantai pasok yang bersarang (Software Supply Chain Security dan SBOM).

Pesan: mitigasi menaikkan bar tetapi tidak menghapus kelas bug; satu bounds check yang hilang dapat menjadi insiden global.

Summary

Heartbleed adalah buffer over-read pada heartbeat OpenSSL akibat panjang yang tidak divalidasi, membocorkan memori heap berisi kunci dan password. AddressSanitizer mengubah korupsi diam-diam menjadi laporan jelas. Alat seperti Valgrind, gdb, pwntools melengkapi analisis dan eksploitasi, sementara legacy code dan business-logic flaw tetap menjadi tantangan.