Menjalankan Static Application Security Testing (SAST) Terhadap Terraform AWS Code Menggunakan tfsec di GitHub Actions

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:

topology

Langkah Konfigurasi

  1. 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.

  2. 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
  1. Alasan kenapa saya menyiapkan beberapa file yaml karena saya ingin memisahkan SAST untuk tiap environment/resource.

  2. 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 syntax name
  • Di dalam syntax on, saya deklarasikan agar workflow hanya akan berjalan ketika ada perubahan di branch master dan hanya di path directory environment-name/iam/ dan berjalan untuk semua perubahan terraform file **.tf. Saya juga deklarasikan syntax workflow_dispatch jika sewaktu waktu workflow ini dapat dijalankan secara manual
  • Kemudian pada syntax jobs, saya buat sebuah job dengan nama sast-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 input soft_fail: true. Dan untuk mencegah rate limit, saya gunakan masukan input github_token dengan referensi dari secret
  1. 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 }}
  1. 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.

list-gha-workflows

  1. 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.

workflow-example

  1. 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 dengan MEDIUM severity. tfsec juga memberikan informasi di bagian kode mana yang terdampak dan deskripsi dari temuan tersebut beserta referensi dokumen terkait

medium-severity-example

  1. 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 severity LOW dan di workflow security-check-lightsail yang tidak menemukan potensi masalah.

low-severity-example

no-problems-example

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!

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: