Static Application Security Testing (SAST), dikutip dari artikel oleh Aqua Security adalah metode security testing yang bertujuan untuk menganalisa source code dan mengindentifikasi apakah ditemukan adanya kerentanan (vulnerabilities) terhadap code.
Selayaknya source code untuk aplikasi pada umumnya, kode infrastruktur atau yang sering dikenal dengan istilah Infrastructure as Code juga dapat diaplikasikan penggunaan SAST untuk memastikan apakah terdapat potensi celah security di dalam source code.
Pada artikel kali ini saya akan mencoba untuk mendiskusikan bagaimana cara menjalankan SAST terhadap IaC khususnya Terraform menggunakan tool dari Aqua Security yang bernama tfsec. SAST tfsec akan dijalankan via CI/CD pipeline menggunakan GitHub Actions dan source code Terraform dalam contoh di artikel adalah code untuk pembuatan atau provisioning resource di Amazon Web Services (AWS) cloud. Untuk provision resource AWS saya menggunakan Terraform Cloud namun tidak saya jelaskan hal tersebut lebih detail di dalam blogpost ini. Jika digambarkan topologinya sebagai berikut:
Langkah Konfigurasi
-
Sebagai langkah awal, saya menyiapkan directory dan file yang digunakan oleh GitHub Actions workflow yang nantinya akan menjalankan job SAST. Lebih detail terkait GitHub Actions silahkan cek di dokumentasi berikut ini. Sesuai dokumentasi, kita memerlukan directory
.github/workflows
agar dapat menjalankan GitHub Actions workflow. -
Di dalam directory
.github/workflows
saya sudah menyiapkan beberapa yaml file yang berisi job workflow. Sebagai contoh di blogpost ini, saya menyiapkan tiga file yaml seperti berikut:
.
└── .github/workflows/
├── security-check-iam.yml
├── security-check-lighstail.yml
└── security-check-secrets-manager.yml
-
Alasan kenapa saya menyiapkan beberapa file yaml karena saya ingin memisahkan SAST untuk tiap environment/resource.
-
Agar tergambar lebih jelas, saya berikan contoh dari file
security-check-iam.yml
berikut:
name: security-check-iam
on:
push:
branches:
- master
paths:
- environment-name/iam/**.tf
workflow_dispatch:
jobs:
sast-tftsec-iam:
name: sast-tftsec-iam
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@master
- name: tfsec
uses: aquasecurity/tfsec-action@v1.0.3
with:
working_directory: ./environment-name/iam
additional_args: --concise-output
soft_fail: true
github_token: ${{ secrets.GHA_TOKEN }}
- Workflow ini saya berikan nama
security-check-iam
seperti dideklarasikan di dalam syntaxname
- Di dalam syntax
on
, saya deklarasikan agar workflow hanya akan berjalan ketika ada perubahan di branch master dan hanya di path directoryenvironment-name/iam/
dan berjalan untuk semua perubahan terraform file**.tf
. Saya juga deklarasikan syntaxworkflow_dispatch
jika sewaktu waktu workflow ini dapat dijalankan secara manual - Kemudian pada syntax
jobs
, saya buat sebuah job dengan namasast-tfsec-iam
. Jobs ini berdasarkan tfsec-actions yang ada di GitHub marketplace. Saya menambahkan beberapa input yang didukung seperti dijelaskan pada dokumentasi tfsec-action. Sebagai contoh, saya hanya akan menjalankan tfsec di working_directory yang sudah ditentukan. Kemudian saya hanya akan menampikan output secara singkat (–concise-output). Dan saya konfigurasi agar workflow ini tidak akan menggagalkan build CI/CD pipeline dengan inputsoft_fail: true
. Dan untuk mencegah rate limit, saya gunakan masukan inputgithub_token
dengan referensi dari secret
- Sebagai contoh perbandingan, di dalam file
security-check-secrets-manager.yml
, path yang digunakan oleh workflow dan job hanya berjalan di directory secrets-manager.
name: security-check-secrets-manager
on:
push:
branches:
- master
paths:
- environment-name/secrets-manager/region-name/**.tf
workflow_dispatch:
jobs:
sast-tftsec-secrets-manager:
name: sast-tftsec-secrets-manager
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@master
- name: tfsec
uses: aquasecurity/tfsec-action@v1.0.3
with:
working_directory: ./environment-name/secrets-manager/region-name
additional_args: --concise-output
soft_fail: true
github_token: ${{ secrets.GHA_TOKEN }}
- Setelah konfigurasi selesai, selanjutnya kita dapat memastikan GitHub Actions workflow dapat berjalan apabila ada perubahan di directory yang ditentukan atau sebagai contoh kita dapat menjalankan secara manual. Masuk ke menu
Actions
, disini kita dapat melihat semua workflow yang sudah dikonfigurasi.
- Kemudian kita masuk ke halaman detail workflow, sebagai contoh
security-check-iam
. Di halaman ini kita dapat melihat detail dari job dan steps yang dijalankan.
- Untuk melihat hasil SAST dari tfsec, kita dapat membuka tray step tfsec untuk melihat lebih detail output yang dihasilkan. Misalkan pada contoh workflow
security-check-iam
, tfsec memberikan hasil test denganMEDIUM
severity. tfsec juga memberikan informasi di bagian kode mana yang terdampak dan deskripsi dari temuan tersebut beserta referensi dokumen terkait
- Hasil dari test dapat beragam, apakah severity dari temuan cukup critical atau bahkan tidak ditemukan potensi masalah sama sekali. Seperti contoh dari test di workflow
security-check-secrets-manager
yang hanya menampilkan hasil dengan severityLOW
dan di workflowsecurity-check-lightsail
yang tidak menemukan potensi masalah.
Kesimpulan
- Static Application Security Testing (SAST) juga dapat diaplikasikan Infrastructure as Code (IaC) khususnya Terraform.
- Dalam contoh dalam blogpost ini, SAST dilakukan hanya sebagai verifikasi awal apakah ditemukan masalah dalam kode Terraform namun tidak menjadikan build failed dan terraform worfklow (plan) tetap dapat berjalan.
- Saya tidak menjalankan SAST dan terraform workflow (plan dan apply) di dalam platform yang sama. Sehingga diperlukan usaha untuk berpindah atau back and forth antara tools yang berjalan.
- Dalam beberapa artikel sering kita temukan bahwa SAST dapat memberikan hasil false positive namun SAST tetap dapat kita gunakan untuk verifikasi awal apakah ada kerentanan atau vulnerabilities dalam code kita.
Silahkan kunjungi GitHub repository saya untuk melihat contoh source code konfigurasi yang digunakan dalam blogpost ini pada url berikut
Sekian artikel kali ini. Jika ada saran, kritik, atau masukan silahkan tinggalkan di kolom komentar.
Terima kasih!
Tinggalkan Balasan