TDCTF Academy Logo TDCTF ACADEMY

DAST - Dynamic Application Security Testing

Pendahuluan

Dynamic Application Security Testing (DAST) adalah teknik pengujian keamanan yang menganalisis aplikasi dari luar saat aplikasi sedang berjalan - pendekatan black-box testing di mana penguji tidak memiliki akses ke kode sumber. DAST bekerja dengan cara mengirimkan payload berbahaya ke aplikasi dan mengamati responsnya untuk mendeteksi kerentanan.

Berbeda dengan SAST yang memeriksa kode secara statis, DAST menguji aplikasi dalam kondisi runtime yang sebenarnya. Ini memungkinkan DAST mendeteksi kerentanan yang hanya muncul saat aplikasi berjalan - seperti masalah konfigurasi server, kerentanan autentikasi sesi, dan business logic flaws yang tidak terlihat di kode sumber.

DAST sangat cocok untuk:

  • Aplikasi web dan API yang sudah berjalan di staging atau production.
  • Aplikasi third-party atau legacy yang kode sumbernya tidak tersedia.
  • Pengujian keamanan sebagai bagian dari acceptance testing sebelum rilis.
  • Validasi bahwa fix dari hasil SAST benar-benar efektif.

Tools DAST Populer

OWASP ZAP (Zed Attack Proxy)

OWASP ZAP adalah tool DAST open-source paling populer untuk pengujian keamanan aplikasi web. ZAP dikelola oleh OWASP dan mendukung berbagai mode pengujian:

  • Spider: Merayapi (crawl) aplikasi untuk menemukan semua halaman dan endpoint.
  • Active Scan: Mengirimkan payload berbahaya untuk menguji kerentanan.
  • Passive Scan: Menganalisis lalu lintas HTTP yang lewat tanpa memodifikasi request.
  • Fuzzer: Menguji input dengan data acak atau malformed.
  • AJAX Spider: Merayapi aplikasi JavaScript berat (single-page application).

ZAP menyediakan antarmuka desktop, mode headless untuk CI/CD, dan API REST untuk integasi.

Burp Suite

Burp Suite oleh PortSwigger adalah tool DAST de facto di industri keamanan. Tersedia dalam tiga edisi: Community (gratis), Professional (berbayar), dan Enterprise (otomatis untuk CI/CD).

Fitur utama Burp Suite:

  • Proxy Interceptor: Menangkap dan memodifikasi request/respons HTTP.
  • Repeater: Mengirim ulang request yang sudah dimodifikasi.
  • Intruder: Otomatis mengirim payload ke parameter yang ditentukan.
  • Scanner (Professional/Enterprise): Pemindaian otomatis untuk SQL Injection, XSS, SSRF, CSRF, dan lainnya.
  • Extensions: Ekosistem plugin yang kaya via BApp Store.

Acunetix

Acunetix (sekarang bagian dari Invicti) adalah scanner DAST komersial yang dikenal dengan akurasi tinggi dan low false positive rate. Acunetix mendukung pengujian untuk lebih dari 7000 kerentanan termasuk OWASP Top 10.

Netsparker

Netsparker (sekarang Invicti) membedakan diri dengan teknologi Proof-Based Scanning - alat ini secara otomatis memverifikasi temuan dengan mengeksploitasi kerentanan dan menghasilkan proof of concept, sehingga hampir tidak ada false positive.

Arsitektur DAST di Pipeline CI/CD

Untuk mengintegrasikan DAST ke dalam pipeline CI/CD, aplikasi harus di-deploy terlebih dahulu ke lingkungan yang dapat diuji. Ini berarti DAST dijalankan setelah tahap deploy - berbeda dengan SAST yang berjalan sebelum build.

Menggunakan OWASP ZAP di CI/CD

OWASP ZAP menyediakan skrip Python untuk integasi CI/CD:

zap-full-scan.py - Pemindaian menyeluruh yang mencakup crawling aktif dan active scanning. Waktu eksekusi lebih lama (15-60 menit tergantung ukuran aplikasi).

zap-api-scan.py - Khusus untuk API (OpenAPI/Swagger, SOAP, GraphQL). Lebih cepat karena tidak perlu crawling.

zap-baseline-scan.py - Quick scan pasif tanpa active scanning. Cocok untuk regression check cepat.

Contoh: Integrasi ZAP di GitHub Actions

name: DAST Scan
on:
deployment_status:

jobs:
dast:
if: github.event.deployment_status.state == 'success'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup ZAP
run: |
docker pull softwaresecurityproject/zap-stable
echo "ZAP ready"

- name: ZAP Full Scan
run: |
docker run -v $(pwd):/zap/wrk/:rw \
-t softwaresecurityproject/zap-stable \
zap-full-scan.py \
-t ${{ secrets.TARGET_URL }} \
-g gen.conf \
-r testreport.html \
-x report.xml \
-w report.md \
-J report.json \
--hook=/zap/wrk/zap-hook.py
continue-on-error: true

- name: Upload ZAP Report
uses: actions/upload-artifact@v4
with:
name: zap-report
path: |
testreport.html
report.xml
report.md
report.json

- name: Check for High/Critical Alerts
run: |
HIGH=$(jq '.site[0].alerts[] | select(.riskcode >= "2") | .riskcode' report.json | wc -l)
if [ "$HIGH" -gt 0 ]; then
echo "::warning::Ditemukan $HIGH kerentanan HIGH/CRITICAL!"
exit 1
fi

Contoh: Integrasi ZAP API Scan untuk REST API

name: API DAST Scan
on:
pull_request:
paths:
- 'api/**'
- 'openapi.yaml'

jobs:
api-scan:
runs-on: ubuntu-latest
services:
app:
image: myapp:ci-${{ github.sha }}
ports:
- 3000:3000
steps:
- uses: actions/checkout@v4

- name: Wait for app to be ready
run: |
for i in $(seq 1 30); do
curl -sf http://localhost:3000/health && break
sleep 2
done

- name: ZAP API Scan
run: |
docker run -v $(pwd):/zap/wrk/:rw \
softwaresecurityproject/zap-stable \
zap-api-scan.py \
-t http://localhost:3000/openapi.yaml \
-f openapi \
-r api-report.html \
-c api-rules.tsv
continue-on-error: true

- name: Comment PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const report = fs.readFileSync('api-report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '## ZAP API Scan Report\n' + report
});

Baseline Scanning

Baseline scanning adalah pemindaian cepat yang menggunakan passive scanning saja - tanpa active attack. Ini berguna untuk:

  • Deteksi perubahan konfigurasi: Apakah ada header keamanan yang hilang? Apakah sertifikat TLS berubah?
  • Regresi keamanan cepat: Menemukan masalah yang muncul setelah deploy.
  • Monitoring berkelanjutan: Dijalankan secara periodik (misalnya setiap jam) di lingkungan produksi.

Menjalankan ZAP Baseline Scan:

docker run -t softwaresecurityproject/zap-stable \
zap-baseline-scan.py \
-t https://staging.example.com \
-r baseline-report.html \
-I # ignore fail, tetap lanjutkan

Authentication Handling

Salah satu tantangan terbesar DAST adalah aplikasi yang memerlukan autentikasi. Tanpa session management yang tepat, scanner hanya akan menguji halaman login - tidak menjangkau fitur di balik autentikasi.

Strategi Autentikasi di ZAP

Metode 1: Pre-configured Session

Login manual melalui proxy ZAP, simpan sesi, dan gunakan kembali.

  1. Setel ZAP sebagai browser proxy.
  2. Login ke aplikasi secara manual.
  3. Simpan sesi: Context - Export Context.
  4. Muat sesi di mode command line:
zap-full-scan.py \
-t https://staging.example.com \
-n context_file.context \
-U "username" \
-P "password"

Metode 2: Scripted Authentication

Gunakan script Python/Hook untuk otomatisasi login:

# zap-hook.py
from zapv2 import ZAPv2

def zapStarted(zap, target):
print('Logging in...')
# POST ke endpoint login
response = zap.core.send_request(
request='POST https://staging.example.com/login HTTP/1.1\n'
'Content-Type: application/x-www-form-urlencoded\n\n'
'username=admin&password=secret123'
)
print('Login response:', response)

Metode 3: Authentication via API Key

Untuk API, cukup set header autentikasi:

zap-api-scan.py \
-t https://api.example.com/swagger.yaml \
-f openapi \
-O "Authorization=Bearer eyJhbGciOi..."

Perbandingan SAST vs DAST

Aspek SAST DAST
Pendekatan White-box (kode sumber) Black-box (aplikasi berjalan)
Kapan dijalankan Sebelum build Setelah deploy
Cakupan Semua jalur kode Jalur yang bisa dijangkau scanner
False positive Cukup tinggi Relatif lebih rendah
False negative Lebih rendah (kode bisa path coverage) Lebih tinggi (tergantung crawl coverage)
Kerentanan runtime Tidak terdeteksi Terdeteksi (config, auth, session)
Kebutuhan kompilasi Tidak selalu Ya (aplikasi harus berjalan)
Kecepatan Cepat (menit) Lambat (10-60 menit)
Biaya tool Gratis hingga enterprise Gratis hingga enterprise
Integrasi CI/CD Sebelum build Setelah deploy
Kerentanan khas SQLI, XSS, buffer overflow Config issues, auth bypass, business logic

Kapan Menggunakan SAST, DAST, atau Keduanya?

  • Gunakan SAST ketika: Developer sedang menulis kode baru, pull request dibuat, atau audit kepatuhan membutuhkan code coverage penuh.
  • Gunakan DAST ketika: Aplikasi sudah di-deploy ke staging, ada perubahan konfigurasi infrastruktur, atau ingin memvalidasi fix dari SAST.
  • Gunakan keduanya untuk: Production release besar, aplikasi yang menangani data sensitif (finansial, kesehatan), atau compliance standar seperti PCI DSS yang mewajibkan code review dan penetration testing.

Studi Kasus: Integrasi DAST dengan Burp Suite Enterprise

Burp Suite Enterprise menyediakan automated scanning yang terpusat untuk tim keamanan. Alur kerjanya:

  1. Schedule: Jadwalkan scan otomatis setiap malam untuk semua aplikasi.
  2. Scan: Burp Enterprise menjalankan crawl dan audit terhadap target.
  3. Findings: Temuan dikelompokkan berdasarkan jenis, severity, dan endpoint.
  4. Ticketing: Secara otomatis membuat tiket di Jira untuk setiap temuan HIGH/CRITICAL.
  5. Retest: Setelah developer memperbaiki, Burp Enterprise menjalankan retest otomatis.

Deploy Burp Enterprise dengan Docker:

# docker-compose.yml
version: '3.8'
services:
burp-enterprise:
image: portswigger/burp-enterprise:latest
ports:
- "8080:8080"
volumes:
- burp-data:/data
environment:
- BURP_LICENSE_KEY=${LICENSE_KEY}
- JAVA_OPTS=-Xmx4g

volumes:
burp-data:

Praktik Terbaik DAST

  1. Crawl coverage: Pastikan scanner dapat menjangkau semua halaman penting termasuk fungsionalitas yang membutuhkan autentikasi. Gunakan context ZAP atau session handling di Burp.
  2. Rate limiting: Aktifkan rate limiting di scanner untuk menghindari blocking oleh WAF atau application firewall.
  3. Safe mode: Di lingkungan produksi, hanya gunakan passive scanning atau baseline scan. Active scanning cukup di staging.
  4. Exclude logout endpoints: Pastikan scanner tidak mengirim payload ke endpoint logout yang bisa mengakhiri sesi.
  5. Piggyback SAST results: Gunakan temuan SAST sebagai masukan untuk DAST - jika SAST menemukan potensi SQL Injection di endpoint tertentu, arahkan DAST untuk fokus menguji endpoint tersebut.
  6. Periodic scanning: DAST sebaiknya dijalankan secara periodik (harian/mingguan) di lingkungan staging, dan baseline scan di produksi.
  7. Combine with API testing: Untuk arsitektur modern dengan frontend JS terpisah dan REST API, uji endpoint API terlebih dahulu dengan zap-api-scan.py, baru kemudian uji frontend.

Kesimpulan

DAST adalah komponen penting dalam strategi application security yang komprehensif. DAST melengkapi SAST dengan menguji aplikasi dari perspektif eksternal - persis seperti yang akan dilakukan attacker sungguhan.

Meskipun DAST memiliki coverage yang lebih terbatas dibanding SAST (karena hanya menguji jalur yang bisa di-crawl), DAST unggul dalam mendeteksi kerentanan runtime dan masalah konfigurasi yang tidak terlihat di kode sumber. Kombinasi SAST + DAST memberikan perlindungan yang paling efektif - temukan masalah di kode dengan SAST, validasi di runtime dengan DAST.

Mulailah dengan baseline scan menggunakan OWASP ZAP di pipeline CI/CD untuk pull request, lalu perluas dengan full scan atau api scan untuk rilis ke staging. Seiring waktu, tambahkan autentikasi yang tepat, integrasikan dengan sistem ticketing, dan tetapkan security gate yang realistis berdasarkan konteks risiko aplikasi.

PADA HALAMAN INI