Back to IF5161 Keamanan Data dan Perangkat Lunak

Deteksi Crypto Misuse dan Padding Oracle

Questions/Cues

  • Alat apa yang dapat mendeteksi penyalahgunaan kripto (Semgrep, Bandit, gitleaks)?
  • Bug apa yang lolos dari semua scanner pada contoh file sampel?
  • Apa batasan deteksi otomatis (design-level, cross-file, false positive)?
  • Bagaimana padding-oracle attack mendekripsi tanpa kunci?

Reference Points

  • IF5161 — W07 Crypto and Data Security, “Detecting Crypto Misuse: Tooling Landscape” s.d. “Open Challenges: Detecting Crypto Misuse” dan “Illustration: Padding-Oracle Attacks”

Membaca File Sampel

File crypto_misuse_sample.py memuat bug-bug berikut yang sengaja ditanam:

BarisBug
KEY = b"SuperSecretKey!!"Kunci hardcoded
IV = b"\x00" * 16IV statis
Cipher(algorithms.AES(KEY), modes.ECB())Mode ECB
str(random.randint(0, 10**9)) untuk reset tokenRNG lemah
hashlib.md5(pw.encode()).hexdigest()Hash password cepat

Plus satu temuan halus yang terlewat aturan pola: kunci diturunkan dari string konstan.

Menjalankan Scanner

semgrep --config p/cryptography crypto_misuse_sample.py
bandit -r crypto_misuse_sample.py
gitleaks detect --no-git -s .

Latihan: bandingkan temuan masing-masing alat; bug mana yang tak dilaporkan satu pun alat? Biasanya yang bersifat aliran data (kunci turunan dari konstanta) atau desain.

flowchart TB
    SRC["Source code &amp; repo"] --> SG["Semgrep p/cryptography<br/>(pola API)"]
    SRC --> BD["Bandit<br/>(Python AST)"]
    SRC --> GL["gitleaks / trufflehog<br/>(secret scanning)"]
    SG --> F["Temuan"]
    BD --> F
    GL --> F
    F --> R["Reviewer manusia<br/>(design flaw, data-flow)"]

Tantangan Terbuka Deteksi

  • Cacat tingkat desain (protokol salah, tanpa autentikasi) tak terlihat aturan pola.
  • Aliran data lintas file/library untuk kunci dan IV.
  • False positive yang membuat alat diabaikan developer.
  • Detektor berbasis LLM: recall menjanjikan, presisi tak andal, sulit dipercaya pada hasil negatif.

Kesimpulan: alat menemukan pola, reviewer menemukan cacat desain.

Padding-Oracle Attack

Syarat: CBC dengan padding ditambah server yang membocorkan apakah padding valid (lewat pesan error atau timing). Penyerang dapat mendekripsi ciphertext byte demi byte tanpa kunci. Kasus nyata: POODLE (2014, SSL 3.0) dan Lucky13 (2013, timing pada TLS CBC). Akar masalah: decrypt-then-check, yaitu enkripsi tanpa autentikasi; solusinya AEAD (Perbaikan Bug Kriptografi dan Praktik Terbaik).

sequenceDiagram
    participant A as Attacker
    participant S as Server (oracle)
    A->>S: Ciphertext termodifikasi
    S-->>A: "padding invalid" / "valid, MAC gagal"
    A->>A: Simpulkan 1 byte plaintext
    Note over A,S: Ulangi per byte hingga seluruh blok pulih

Summary

Semgrep (p/cryptography), Bandit, dan gitleaks mendeteksi pola misuse (ECB, IV statis, kunci hardcoded, RNG lemah, MD5), tetapi cacat desain dan aliran data lintas file lolos, dan false positive membuat alat diabaikan. Padding-oracle menunjukkan bahaya enkripsi tanpa autentikasi: server yang membocorkan validitas padding membuat ciphertext dapat didekripsi tanpa kunci.