Skip to main content

Agentic AI framework untuk audit keamanan kode Python berbasis OWASP Top 10 (2025).

Project description

owasp-audit-agent

Framework agentic AI untuk audit keamanan kode Python berbasis OWASP Top 10 (2025). Menganalisis kode sumber, mendeteksi kerentanan di 10 kategori OWASP, menghasilkan ringkasan eksekutif dari LLM, mencoba memperbaiki secara otomatis, lalu memverifikasi ulang.

Orkestrasi dibangun di atas LangGraph; deteksi memakai checker modular yang ditemukan secara otomatis sehingga menambah aturan baru tidak menyentuh kode inti.

Instalasi

pip install -e .            # library + CLI
pip install -e ".[ui]"      # + UI Streamlit
pip install -e ".[dev]"     # + pytest

Buat file .env berisi kredensial LLM:

GROQ_API_KEY=your_key_here

Pemakaian sebagai library

from agent import audit_code

result = audit_code(open("app.py").read(), "app.py")

for f in result["findings"]:
    print(f.severity.value, f.owasp_category.value, f.title, f.line_number)

print(result["summary"])

CLI

owasp-audit app.py               # audit satu file
owasp-audit app.py --json        # keluaran JSON
owasp-audit --list-checkers      # daftar checker terdaftar

UI (Streamlit)

streamlit run app.py

Konfigurasi

Perilaku audit diatur lewat file audit.toml di root project (opsional) dan/atau environment variable. Salin audit.example.toml menjadi audit.toml lalu sesuaikan:

[llm]
provider = "groq"
model = "llama-3.1-8b-instant"
temperature = 0.0

[audit]
escalation_threshold = 3      # eskalasi jika jumlah CRITICAL > nilai ini
max_fix_iterations = 2
auto_fix = true

[checkers]
enabled = []                  # kosong = semua; mis. ["A01","A05","A07"]
disabled = ["A09"]            # kode kategori yang dimatikan

Env var menimpa file (berguna untuk CI): OWASP_LLM_MODEL, OWASP_ESCALATION_THRESHOLD, OWASP_MAX_FIX_ITERATIONS, OWASP_AUTO_FIX, OWASP_ENABLED_CHECKERS, OWASP_DISABLED_CHECKERS, OWASP_CONFIG (path file config).

Dari kode, config bisa dimuat manual:

from agent import AuditConfig
cfg = AuditConfig.load()          # audit.toml + env
print(cfg.escalation_threshold, cfg.llm_model, cfg.is_checker_enabled("A05"))

Provider LLM

Provider dipilih lewat [llm] provider di audit.toml (atau env OWASP_LLM_PROVIDER). Built-in: groq (default, sudah termasuk), openai, anthropic, google, ollama. Paket integrasi di-import lazy — install hanya yang dipakai:

pip install -e ".[openai]"      # atau .[anthropic] / .[google] / .[ollama]
[llm]
provider = "openai"
model = "gpt-4o-mini"
# base_url = "http://localhost:11434"   # untuk Ollama / endpoint OpenAI-compatible

API key dibaca dari env sesuai provider (GROQ_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, dst). Menambah provider kustom:

from agent import register_provider

@register_provider("myllm")
def _build(config):
    from my_pkg import MyChat
    return MyChat(model=config.llm_model, temperature=config.llm_temperature)

Lalu set provider = "myllm" di config.

Kategori OWASP yang dicakup

Kode Kategori
A01 Broken Access Control
A02 Security Misconfiguration
A03 Software Supply Chain Failures
A04 Cryptographic Failures
A05 Injection
A06 Insecure Design
A07 Authentication Failures
A08 Software or Data Integrity Failures
A09 Security Logging and Alerting Failures
A10 Mishandling of Exceptional Conditions

Analisis AST vs regex

Checker inti yang berurusan dengan pemanggilan fungsi & assignment (Injection, Cryptographic Failures, Supply Chain, Integrity, Authentication, Misconfiguration) memakai analisis AST — membaca struktur kode sungguhan, bukan mencocokkan teks. Hasilnya jauh lebih akurat: pola seperti os.system(...) yang muncul di dalam komentar atau string tidak lagi ditandai sebagai temuan.

Base ASTChecker (agent/ast_utils.py) otomatis jatuh kembali ke deteksi regex bila kode gagal di-parse (mode hybrid), sehingga snippet parsial tetap tertangani. Checker berbasis AST cukup meng-override check_ast(tree, code, filename) dan opsional check_regex(...) sebagai fallback.

Menulis checker baru

Buat subclass BaseChecker dan implementasi category, name, dan analyze():

# agent/tools/my_checker.py
from typing import List
from agent.base_checker import BaseChecker
from agent.models import Finding, OWASPCategory, SeverityLevel

class MyChecker(BaseChecker):
    @property
    def category(self) -> OWASPCategory:
        return OWASPCategory.A05

    @property
    def name(self) -> str:
        return "My Custom Checker"

    def analyze(self, code: str, filename: str) -> List[Finding]:
        findings = []
        # ... logika deteksi ...
        return findings

Cukup letakkan file di agent/tools/auto-discovery akan mendaftarkannya otomatis saat registry.discover() dipanggil. Tidak perlu mengubah graph.py maupun registry.py.

Plugin eksternal (paket terpisah)

Checker juga bisa didistribusikan sebagai paket pihak ketiga tanpa menyentuh repo ini. Deklarasikan entry point pada group owasp_audit_agent.checkers:

# pyproject.toml paket plugin kamu
[project.entry-points."owasp_audit_agent.checkers"]
my_checker = "my_package.my_module:MyChecker"

Setelah paket terpasang, registry.discover_entry_points() akan memuatnya otomatis.

Arsitektur

agent/
├── base_checker.py     # abstract BaseChecker (kontrak checker)
├── registry.py         # CheckerRegistry + auto-discovery + entry points
├── models.py           # Finding, OWASPCategory, SeverityLevel (Pydantic)
├── state.py            # AuditState (state LangGraph)
├── graph.py            # workflow LangGraph + audit_code()
├── rule_fixer.py       # perbaikan berbasis aturan
├── sarif_exporter.py   # ekspor hasil ke SARIF
├── dependency_scanner.py
├── history.py          # riwayat scan
├── report.py           # laporan PDF
├── cli.py              # command owasp-audit
└── tools/              # satu file per checker (auto-discovered)

Lisensi

MIT — lihat LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

owasp_audit_agent-0.2.0.tar.gz (38.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

owasp_audit_agent-0.2.0-py3-none-any.whl (42.2 kB view details)

Uploaded Python 3

File details

Details for the file owasp_audit_agent-0.2.0.tar.gz.

File metadata

  • Download URL: owasp_audit_agent-0.2.0.tar.gz
  • Upload date:
  • Size: 38.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for owasp_audit_agent-0.2.0.tar.gz
Algorithm Hash digest
SHA256 57643252a79ec335d0f6f3fcddc6f35b3833af4484428d94cfe1808865724337
MD5 554574f769b3a8cbe56749c8f48506f7
BLAKE2b-256 80b99bd37f63ca7d8746ac7f1d1f9acde4178a4f4cb543afef5f2810f29884d3

See more details on using hashes here.

File details

Details for the file owasp_audit_agent-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for owasp_audit_agent-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 586ed74b955a61be251d477435ebfb5fdbb3f62595f2b656523bd32a1b1de7e2
MD5 c70dcd45bafeff99e89189b7b7d610b8
BLAKE2b-256 7ca4784621622a0e022d6deb6e688ec9300a2e328669e450ffb1b1b0afd1582a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page