Untuk versi "resmi" aplikasi ini dengan integrasi saluran tambahan, silakan kunjungi https://github.com/fortify/IWA-Java.
IWA (Aplikasi Web Tidak Aman) Pharmacy Direct adalah contoh Aplikasi Web Java/Spring untuk digunakan dalam skenario dan demonstrasi DevSecOps . Ini mencakup beberapa contoh kode yang buruk dan tidak aman - yang dapat ditemukan menggunakan alat pengujian keamanan aplikasi statis dan dinamis seperti yang disediakan oleh Micro Focus Fortify.
Salah satu tujuan utama proyek ini adalah untuk mengilustrasikan bagaimana keamanan dapat ditanamkan sejak dini (“Shift-Left”) dan terus menerus (“CI/CD”) dalam siklus hidup pengembangan. Oleh karena itu, sejumlah contoh "integrasi" ke alat pipeline CI/CD umum disediakan.
Aplikasi ini dimaksudkan untuk menyediakan fungsionalitas "apotek online" yang khas, termasuk membeli Produk (obat-obatan) dan meminta Layanan (resep, pemeriksaan kesehatan, dll). Ini memiliki front end HTML modern (dengan beberapa JavaScript) dan API berbasis Swagger.
Harap diperhatikan: aplikasi tidak boleh digunakan di lingkungan produksi!
Versi terbaru dari aplikasi yang sedang berjalan dapat ditemukan di https://iwa.onfortify.com.
Untuk menjalankan contoh skenario untuk Anda sendiri, disarankan agar Anda "membagi" salinan repositori ini ke akun GitHub Anda sendiri. Proses "forking" dijelaskan secara rinci dalam dokumentasi GitHub - Anda dapat memulai proses dengan mengklik tombol "Fork" di kanan atas.
Agar berhasil membangun dan menjalankan aplikasi, Anda harus menginstal Java JDK 11 dan sesuai jalur Anda.
Untuk membangun aplikasi menggunakan Gradle, jalankan perintah berikut dari baris perintah:
.gradlew clean build
Ada beberapa cara menjalankan aplikasi tergantung pada skenario yang ingin Anda jalankan.
Untuk menjalankan (dan menguji) secara lokal dalam mode pengembangan, jalankan perintah berikut dari baris perintah:
.gradlew bootRun
Kemudian navigasikan ke URL: http://localhost:8888. Anda dapat melakukan beberapa tindakan tanpa autentikasi, namun jika Anda ingin login, Anda dapat melakukannya sebagai berikut:
Ada juga pengguna administratif:
Catatan jika Anda login dengan user2
, Anda selanjutnya akan dimintai kode Multi-Factor Authentication (MFA). Anda dapat menemukan kode ini dengan memeriksa keluaran konsol.
Jika Anda ingin menggunakan server email pengembangan, saya sarankan menggunakan (smtp4dev)[https://github.com/rnwood/smtp4dev.git]. Pendekatan termudah adalah memulainya sebagai wadah buruh pelabuhan:
docker run --rm -it -p 5000:80 -p 2525:25 rnwood/smtp4dev
Hapus --rm -it
jika Anda ingin membiarkan smtp4dev berjalan di latar belakang, jika tidak maka smtp4dev akan berjalan sampai Anda menekan CTRL+C.
File (application-dev.yml)[./src/main/resources/application-dev.yml] sudah dikonfigurasi sebelumnya untuk menggunakan konfigurasi ini. Telusuri ke http://localhost:5000
untuk melihat email.
File JAR dapat dibuat menjadi image Docker menggunakan Dockerfile
yang disediakan dan perintah berikut:
docker build - t iwa -f Dockerfile .
atau di Windows:
docker build - t iwa -f Dockerfile.win .
Gambar ini kemudian dapat dieksekusi menggunakan perintah berikut:
docker run - d - p 8888 : 8888 iwa
Ada juga contoh file docker-compose.yml
yang mengilustrasikan cara menjalankan aplikasi dengan HTTPS/SSL menggunakan nginx dan certbot - harap diperhatikan bahwa ini hanya untuk referensi karena menggunakan nama domain "hard-coded".
Sebagian besar contoh berikut memerlukan kredensial khusus lingkungan dan pengguna. Ini diambil dari file bernama .env
di direktori root proyek. File ini tidak dibuat secara default (dan tidak boleh disimpan di kontrol sumber). Contoh dengan semua kemungkinan pengaturan untuk skenario berikut diilustrasikan di bawah ini:
# Application URL (locally)
APP_URL=http://localhost:8888
# Software Security Center
SSC_URL=http://[YOUR-SSC-SERVER]
SSC_USERNAME=admin
SSC_PASSWORD=password
SSC_AUTH_TOKEN=XXX
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
# ScanCentral SAST/DAST
SCANCENTRAL_CTRL_URL=http://[YOUR-SCANCENTRAL-SERVER]/scancentral-ctrl
SCANCENTRAL_CTRL_TOKEN=XXX
SCANCENTRAL_POOL_ID=00000000-0000-0000-0000-000000000002
[email protected]
SCANCENTRAL_DAST_API=http://[YOUR-SCANCENTRAL-DAST-SERVER]/api/
# ScanCentral FAST
FAST_EXE=C:\Program Files\Micro Focus WIRC Server\Fast.exe
FAST_PORT=8087
FAST_PROXY=127.0.0.1:8087
# Fortify on Demand
FOD_API_URL=https://api.ams.fortify.com
FOD_API_KEY=XXXX
FOD_API_SECRET=YYYY
FOD_TENANT=[YOUR-TENANT]
FOD_USER=[YOUR-USERNAME]
FOD_PAT=XXXX
Ada contoh skrip PowerShell fortify-sast.ps1 yang dapat Anda gunakan untuk menjalankan pengujian keamanan aplikasi statis melalui Fortify SCA.
.binfortify - sast.ps1 - SkipSSC
Skrip ini menjalankan terjemahan sourceanalyzer
dan memindai kode sumber proyek. Ini membuat file Fortify Project Results bernama IWA-Java.fpr
yang dapat Anda buka menggunakan alat auditworkbench
Fortify:
auditworkbench.cmd .IWA - Java.fpr
Itu juga membuat laporan PDF yang disebut IWA-Java.pdf
dan secara opsional mengunggah hasilnya ke Fortify Software Security Center (SSC).
Untuk mengunggah ke SSC Anda harus memiliki entri di .env
yang serupa dengan yang berikut:
SSC_URL=http://localhost:8080/ssc
SSC_AUTH_TOKEN=28145aad-c40d-426d-942b-f6d6aec9c56f
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
Entri SSC_AUTH_TOKEN
harus disetel ke nilai 'CIToken' yang dibuat di SSC "Administration->Token Management" .
Ada skrip PowerShell fortify-scancentral-sast.ps1 yang dapat Anda gunakan untuk mengemas proyek dan memulai pemindaian jarak jauh menggunakan Fortify ScanCentral SAST:
.binfortify - scancentral - sast.ps1
Untuk menggunakan ScanCentral SAST Anda harus memiliki entri di .env
yang serupa dengan yang berikut:
SSC_URL=http://localhost:8080/ssc
SSC_AUTH_TOKEN=6b16aa46-35d7-4ea6-98c1-8b780851fb37
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
SCANCENTRAL_CTRL_URL=http://localhost:8080/scancentral-ctrl
SCANCENTRAL_CTRL_TOKEN=96846342-1349-4e36-b94f-11ed96b9a1e3
SCANCENTRAL_POOL_ID=00000000-0000-0000-0000-000000000002
[email protected]
Entri SSC_AUTH_TOKEN
harus disetel ke nilai 'CIToken' yang dibuat di SSC "Administration->Token Management" .
Untuk menjalankan pemindaian SAST Fortify on Demand, Anda perlu mengemas dan mengunggah kode sumber ke Fortify on Demand. Untuk mengemas kode ke dalam file Zip untuk diunggah, Anda dapat menggunakan utilitas perintah scancentral
sebagai berikut:
scancentral package - bt gradle - bf build.gradle - bt " clean build -x test " -- output fod.zip
Anda kemudian dapat mengunggahnya secara manual menggunakan UI Fortify on Demand, menggunakan utilitas FoDUploader, atau melalui Fortify CLI menggunakan perintah berikut:
fcli fod session login --url http://api.ams.fortify.com -t YOUR_FOD_TENANT -u YOUR_USERNAME -p YOUR_PASSWORD
fcli fod sast-scan start --release YOUR_APP:YOUR_RELEASE -f fod.zip --store curScan
fcli fod sast-scan wait-for ::curScan::
Untuk melakukan pemindaian WebInspect, Anda harus "menjalankan" aplikasi terlebih dahulu menggunakan salah satu langkah yang dijelaskan di atas. Kemudian Anda dapat memulai pemindaian menggunakan baris perintah berikut:
" C:Program FilesFortifyFortify WebInspectWI.exe " - s " .etcIWA-UI-Dev-Settings.xml " - macro " .etcIWA-UI-Dev-Login.webmacro " - u " http://localhost:8888 " - ep " .IWA-DAST.fpr " - ps 1008
Ini akan memulai pemindaian menggunakan Pengaturan Default dan file Makro Login yang disediakan di direktori etc
. Diasumsikan aplikasi berjalan di "localhost:8888". Ini akan menjalankan pemindaian "Kritis dan Prioritas Tinggi" menggunakan kebijakan dengan id 1008. Setelah selesai, Anda dapat membuka WebInspect "Klien Desktop" dan menavigasi ke pemindaian yang dibuat untuk eksekusi ini. File FPR bernama IWA-DAST.fpr
juga akan tersedia - Anda dapat membukanya dengan auditworkbench
(atau membuat laporan PDF menggunakan ReportGenerator
). Anda juga dapat mengunggahnya ke Fortify SSC atau Fortify on Demand.
Ada contoh file skrip PowerShell fortify-webinspect.ps1 yang dapat Anda jalankan untuk menjalankan pemindaian dan mengunggah hasilnya ke SSC:
.binfortify - webinspect.ps1
Anda dapat menjalankan pemindaian dinamis Fortify on Demand menggunakan utilitas FCLI. Misalnya:
fcli sc-dast session login --ssc-url http://YOUR_SSC.DOMAIN -t YOUR_SSC_CI_TOKEN
fcli sc-dast scan -n "IWA-Java - FCLI" -s YOUR_SCAN_SETTINGS_ID --store curScan
fcli sc-dast scan wait-for ::curScan::
Fortify on Demands menyediakan dua cara untuk melakukan pemindaian DAST: DAST tradisional dan DAST Otomatis . Di bagian ini kita akan menggunakan DAST Automated karena ini lebih cocok untuk integrasi perintah dan pipeline.
Anda dapat menjalankan pemindaian Otomatis Fortify on Demand DAST menggunakan utilitas FCLI. Misalnya:
fcli fod session login --url http://api.ams.fortify.com -t YOUR_FOD_TENANT -u YOUR_USERNAME -p YOUR_PASSWORD
fcli fod dast-scan start --release YOUR_APP:YOUR_RELEASE --store curScan
fcli fod dast-scan wait-for ::curScan::
TBD: cara mengunggah makro login dan/atau alur kerja.
Aplikasi IWA menyertakan API berbasis Swagger yang terdokumentasi sepenuhnya yang dapat Anda telusuri di http://localhost:8888/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config. Anda dapat melakukan pengujian keamanan API ini menggunakan Fortify WebInspect atau ScanCentral DAST. Koleksi Tukang Pos disediakan untuk membantu dalam hal ini. Anda dapat melatih koleksinya menggunakan newman. Misalnya dari command prompt PowerShell di Windows:
newman run .etcIWA - API - Dev - Auth.postman_collection.json -- environment .etcIWA - API - Dev.postman_environment.json -- export-environment .etcIWA - API - Dev.postman_environment.json
newman run .etcIWA - API - Dev - Workflow.postman_collection.json -- environment .etcIWA - API - Dev.postman_environment.json
Untuk menggunakan koleksi ini dengan WebInspect Anda perlu memastikan newman ada di jalurnya dan kemudian Anda dapat menjalankan:
& " C:Program FilesFortifyFortify WebInspectWI.exe " - pwc .etcIWA - API - Workflow.postman_collection.json - pec .etcIWA - API - Dev.postman_environment.json - ep " .IWA-API.fpr "
Impor koleksi Tukang Pos berikut ke ScanCentral DAST:
etcIWA-API-Prod.postman_environment.json
- sebagai LingkunganetcIWA-API-Auth.postman_collection.json
- sebagai Koleksi OtentikasietcIWA-API-Workflow.postman_collection.json
- sebagai koleksi Alur KerjaAnda kemudian memerlukan pengaturan berikut untuk Pembuatan Token Dinamis
Token Respons:
"accessToken"s*:s*"(?<BearerTokenValue>[-a-zA-Z0-9._~+/]+?=*)"
Permintaan Token:
Authorization:sBearers(?<BearerTokenValue>[^rn]*)r?n
Kondisi Keluar:
[STATUSCODE]401
Pemindaian dapat dijalankan dari ScanCentral DAST UI atau dengan menyimpan pengaturan dan menggunakan perintah fcli sc-dast scan
.
Pemindaian API dapat dilakukan menggunakan koleksi Postman "gabungan" berikut:
etcIWA-API-Prod-Combined.postman_environment.json
Ini dapat digunakan dengan DAST tradisional atau DAST Otomatis .
Fortify FAST Proxy memungkinkan Anda menangkap lalu lintas dari uji coba otomatis dan kemudian menggunakan lalu lintas tersebut sebagai alur kerja untuk eksekusi ScanCentral DAST. Untuk menjalankan contoh di sini, Anda harus menginstal WebInspect secara lokal WIRCServerSetup64-ProxyOnly.msi
yang tersedia di Dynamic_Addons.zip
media instalasi ScanCentral DAST.
Ada beberapa contoh Selenium yang dapat digunakan untuk menjalankan tes fungsional sederhana dari aplikasi yang sedang berjalan. Ada juga beberapa skrip PowerShell start_fast_proxy.ps1 dan stop_fast_proxy.ps1 yang dapat digunakan untuk memulai/menghentikan FAST Proxy. Untuk menggunakan skrip ini, Anda harus memiliki entri dalam file .env
yang serupa dengan berikut ini:
APP_URL=http://localhost:8888
SSC_AUTH_TOKEN_BASE64=MmYyMTA5MzYtN2Q5Ny00NmM1LWI5NTUtYThkZWI2YmJlMDUy
SSCANCENTRAL_DAST_API=http://scancentral-dast-api.example.com/api/
SCANCENTRAL_DAST_CICD_IDENTIFIER=c3c3df60-de68-45b8-89c0-4c07b53392e7
FAST_PORT=8087
FAST_PROXY=127.0.0.1:8087
SSC_AUTH_TOKEN_BASE64
adalah token yang disandikan (pertama) yang ditampilkan di SSC, bukan token yang didekodekan (kedua). Kemudian lakukan hal berikut dari baris perintah:
python -m pip install --upgrade pipenv wheel
pipenv shell
pipenv install --dev
Pastikan aplikasi berjalan dan kemudian jalankan perintah berikut di jendela terminal:
.binstart_fast_proxy.ps1
Kemudian di jendela terminal lain jalankan perintah berikut:
pytest - v - s
Dan akhirnya:
.binstop_fast_proxy.ps1
FAST yang dapat dieksekusi dari terminal pertama harus dihentikan dan kemudian pemindaian dijalankan di lingkungan ScanCentral DAST Anda.
Jika Anda menggunakan Jenkins, Jenkinsfile
komprehensif disediakan untuk mengotomatiskan semua langkah umum dari proses Pengiriman Berkelanjutan (CD) DevSecOps. Contoh ini menggunakan Fortify ScanCentral SAST/DAST dan Sonatype Nexus IQ untuk Analisis Komposisi Perangkat Lunak.
Untuk menggunakan Jenkinsfile
buatlah Jenkins Pipeline Job baru dan di bagian Pipeline pilih Pipeline script from SCM
dan masukkan detail versi fork dari repositori GitHub ini.
Proses pertama dari pipeline harus diperlakukan sebagai langkah "penyiapan" karena ini akan membuat beberapa Parameter Pekerjaan yang kemudian dapat Anda pilih untuk menentukan fitur mana yang ingin Anda aktifkan dalam pipeline.
Anda harus menginstal dan mengkonfigurasi plugin Fortify Jenkins.
Ada banyak dokumentasi di Jenkinsfile
itu sendiri, jadi silakan periksa untuk melihat apa lagi yang perlu Anda lakukan agar pemanggilan berhasil.
Repositori ini mencakup sejumlah contoh Tindakan GitHub di .github/workflows yang mengotomatiskan pembuatan aplikasi dan memindai kode menggunakan Fortify on Demand atau Fortify ScanCentral untuk SAST.
Untuk integrasi dengan alat saluran pipa lainnya, silakan lihat https://github.com/fortify/IWA-Java.
Silakan lihat Panduan Kontribusi untuk informasi tentang cara mengembangkan dan berkontribusi.
Jika Anda mempunyai masalah, silakan lihat Masalah GitHub untuk mengetahui apakah masalah tersebut sudah dibahas.
Aplikasi ini tersedia di bawah GNU General Public License V3