Back to IF4053 Keamanan Perangkat Lunak

Tools Static Analysis

Questions/Cues

  • Bagaimana arsitektur (pipeline) khas sebuah static analysis tool?
  • Apa perbedaan FindBugs dan PMD, dan kapan masing-masing dipakai?
  • Apa itu text scanner (Flawfinder/RATS/ITS4) dan keterbatasannya?
  • Apa contoh defect finder proprietary vs open source, dan apa keunggulan RIPS?
  • Tool apa yang tersedia per bahasa (PHP, JavaScript, multi-language) dan opsi open source apa yang ada?

Reference Points

  • IF4053 Keamanan Perangkat Lunak (W06 Static Analysis — bagian “Typical static analysis tool”)
  • IF4053 Keamanan Perangkat Lunak (W06 Static Analysis — bagian “FindBugs, PMD, text scanners, defect finders, RIPS”)
  • IF4053 Keamanan Perangkat Lunak (W07 Static Analysis & Secure SDLC — bagian “Choose the Right Tool & Open Source Options”)

Arsitektur Pipeline Static Analysis Tool

Sebuah static analysis tool tipikal bekerja sebagai pipeline bertahap. Inputnya dapat berupa source code, bytecode, atau executable (kadang melalui build instrumentation). Tahap pertama adalah Parser/Extractor yang menerjemahkan kode menjadi Intermediate Representation (IR) — representasi internal yang lebih mudah dianalisis. IR ini bisa spesifik terhadap tool, terhadap compiler (LLVM, gcc), terhadap bahasa (ASIS milik Ada), atau berupa standar (KDM). IR kemudian disimpan dalam Database dan diproses oleh satu atau lebih Analyzer.

Analyzer dipandu oleh beberapa jenis aturan: modeling rules (versi compiler, environment, apa yang dipercaya), user rules (aturan kustom proyek), built-in query rules, dan library/framework config. Hasil analisis dijalankan sebagai queries terhadap database, lalu disajikan melalui Results Viewer. Memahami pipeline ini menjelaskan mengapa tool yang membangun IR kaya (data/control flow) lebih akurat daripada text scanner sederhana yang melompati tahap IR.

flowchart LR
    SRC["Source / Bytecode / Executable"] --> P["Parser / Extractor"]
    RULES["Modeling rules & library config"] --> P
    P --> IR["Intermediate Representation (IR)"]
    IR --> DB["Database"]
    UR["User rules & built-in query rules"] --> AN["Analyzer (queries)"]
    DB --> AN
    AN --> RV["Results Viewer"]

Quality Scanner Java: FindBugs vs PMD

FindBugs adalah program yang menggunakan static analysis untuk mencari bug pada kode Java, relatif mudah dipasang, dengan antarmuka yang dapat memfilter kategori bug, panel review bug yang mendeskripsikan bug beserta resolusinya, dan Bug Info Panel berisi stack trace. PMD adalah static analysis tool untuk source code Java yang mengidentifikasi kemungkinan bug, dead code, kode suboptimal, cyclomatic complexity tinggi, dan kode duplikat; ia punya rule-set yang dapat diperluas, vulnerability view, serta Copy-Paste Detector (CPD) untuk menemukan kode hasil copy-paste, dan tersedia GDS PMD Secure Coding Ruleset.

Perbandingannya: keduanya fokus pada isu “quality” (bukan keamanan), open source gratis, dan beroperasi pada Java. PMD bekerja pada source code Java — contoh temuan: pelanggaran konvensi penamaan, ketiadaan kurung kurawal, null check salah tempat, konstruktor tak perlu, missing break pada switch — dan menyediakan cyclomatic complexity. FindBugs bekerja pada bytecode JVM — contoh temuan: method equals() gagal pada subtype, clone mengembalikan null, perbandingan referensi nilai Boolean, impossible cast, int 32-bit di-shift di luar rentang 0-31, koleksi yang memuat dirinya sendiri. Keduanya tidak bagus menemukan isu keamanan karena memang bukan tujuannya; untuk itu ada plugin “FindSecurityBugs” pada FindBugs.

Text Scanners dan Security Defect Finders

Security defect text scanners memindai source code memakai lexer sederhana mirip grep, biasanya “tahu” tentang komentar dan string, lalu mencari pemanggilan fungsi yang cenderung bermasalah. Contohnya Flawfinder, RATS, dan ITS4 (Flawfinder ditulis David A. Wheeler). Pro: cepat dan murah, serta dapat memproses kode parsial (termasuk yang tidak bisa dikompilasi). Kontra: minim konteks sehingga FN dan FP rate besar, dan terutama berguna untuk memperingatkan fungsi “berbahaya” saja.

Security defect finders yang lebih canggih membaca perangkat lunak dan membangun model internal, lalu mencari pola yang cenderung menghasilkan security defect (kadang sulit dibedakan dari quality scanner, bergantung ruleset). Contoh proprietary: HP/Fortify dan Coverity. Contoh OSS: splint (untuk C), LAPSE+ (untuk Java), Cppcheck (C++, juga C, fokus low false positive), dan clang static analyzer (C, C++, Objective-C) yang tidak eksplisit fokus keamanan tetapi punya analisis inter-procedural (dalam satu translation unit) untuk buffer overflow & alokasi. Khusus PHP, RIPS ditulis dalam PHP untuk menemukan kerentanan PHP, membangun program model dari source, mendeteksi fungsi rentan (sink) yang bisa dimanfaatkan input pengguna, menyediakan audit framework gaya IDE, dan mengklaim mendeteksi XSS, SQL Injection, LFI/RFI, dan RCE.

Tools per Bahasa dan Opsi Open Source

W07 menambahkan rekomendasi tool berdasarkan bahasa untuk memilih yang tepat. Untuk PHP: PHPStan, Psalm, Phan. Untuk JavaScript: ESLint, SonarQube, Retire.js. Untuk multi-language: SonarQube dan Semgrep. Untuk dependency scanning otomatis disarankan Dependabot atau Snyk. SonarLint dan ESLint cocok untuk pemakaian lokal (real-time, shift-left). Daftar tool lengkap dapat dirujuk dari OWASP, Wikipedia “List of tools for static code analysis”, dan NIST.

Tabel Open Source Options dari W07 merangkum beberapa pilihan beserta lisensi, tipe, bahasa, dan fitur:

ProductLicenseTypeBahasaFitur
LAPSE+GNU GPLEclipse PluginJavaVariable Traceback, baik untuk analisis injection & XSS
FindBugs 2.0GNU LGPLEclipse PluginJavaBug umum, antarmuka bagus, deteksi security masih under-developed
OrizonGNU GPLStandalone TextJavaReport-based, under-developed, UI kurang, sebagian deteksi security
SWAATCustomStandalone HTML ReportJava, PHP, C, JSPDeteksi report-based, tidak selalu fokus security
PMDBSDEclipse PluginJava, C#, JavaScript, XML, XSLQuality generik, UI bagus, extensible ke ruleset security
FxCopMS-PLVS Plugin.NETSecurity-specific, UI dalam Visual Studio
RIPSGPLStandalonePHPUI profesional, analisis security-specific
FlawFinderGPLStandalone TextC++Security-specific: injection, overflow, fungsi berbahaya
PreFastMS-PLVS PluginC++Static analysis umum, UI dalam Visual Studio
BrakeManMITStandalone TextRubySecurity-specific, komunitas kuat

Daftar tool lebih luas (Source/Byte/Binary code scanner) dapat ditelusuri lewat NIST SAMATE Tool Survey, OWASP Static Code Analysis, dan halaman Flawfinder.

Summary

Static analysis tool tipikal berbentuk pipeline: input (source/bytecode/executable) → Parser/ExtractorIntermediate Representation (IR)DatabaseAnalyzer (dipandu modeling/user/built-in rules) → Results Viewer. Untuk Java ada quality scanner PMD (bekerja pada source, mendeteksi style, dead code, cyclomatic complexity, CPD) dan FindBugs (bekerja pada bytecode); keduanya bukan untuk keamanan, dilengkapi plugin FindSecurityBugs. Text scanner (Flawfinder, RATS, ITS4) cepat tetapi FP/FN tinggi, sedangkan defect finder lebih dalam mencakup proprietary (Fortify, Coverity) dan OSS (splint, cppcheck, clang, LAPSE+), serta RIPS untuk PHP. W07 menambah pilihan per bahasa (PHPStan/Psalm, ESLint/SonarQube, Semgrep) dan tabel Open Source Options (LAPSE+, FindBugs, RIPS, FlawFinder, Brakeman, dll.).