Scan Keamanan dan Penulisan Kode dengan SonarQube


SonarQube adalah alat yang berguna untuk melakukan pengecekan sebuah sumber kode program. Ketika membuat kode program untuk sebuah aplikasi, kita bisa menggunakan SonarQube untuk memeriksa kualitasnya. Dalam pengembangan sebuah aplikasi, kebanyakan hanya memperhatikan fungsionalitas dari sebuah fitur tanpa memperhatikan aspek lainnya. Hal tersebut terjadi karena kode program sebuah aplikasi pastinya rumit jika hendak dilakukan pemeriksaan lebih lanjut.

SonarQube memungkinkan kita untuk melakukan pemeriksaan kode program dengan lebih mudah. Alat ini bisa memeriksa struktur dari sebuah kode program, apakah kode yang ditulis bersih atau tidak. Selain itu, SonarQube juga menekankan sebuah kriteria kode yang ditulis harus tanpa duplikasi, mudah dipahami, dan tanpa potensi cacat atau bug.

SonarQube bisa digunakan untuk menganalisis kode program yang berada di server lain. Untuk melakukan analisis dibutuhkan Sonar Scanner yang menjadi agen pada server yang memuat kode program tersebut. Sonar Scanner ini berfungsi untuk melakukan pemeriksaan dan analisis kode program sekaligus mengirimkan hasilnya ke SonarQube server. Dengan begitu, SonarQube dapat menampilkan hasil analisis kode program dari scanner.

Requirement

Sebelum menggunakan SonarQube, diperlukan beberapa hal yang perlu disiapkan, yaitu:

Spesifikasi Server

  • OS Ubuntu 20.04-live server
  • 8 GB RAM
  • 50 GB Disk
  • 4 Core CPU

Dependencies SonarQube Server

  • Java OpenJDK versi 17
  • PostgreSQL versi 15
  • Sonarqube versi 9.9

Dependencies Sonar Scanner

  • Sonarscanner versi 5.0.1

Adapun data server yang akan digunakan pada artikel ini yaitu sebagai berikut:

  • SonarQube Server: 10.23.2.252
  • Sonar Scanner: 10.23.2.248

SonarQube Server

Langkah 1. Instalasi Java

Pertama-tama perbarui manajemen paket instalasi dengan perintah:

apt update

Setelah itu instal java openjdk versi 17:

apt install openjdk-17-jdk openjdk-17-jre -y

Kemudian jalankan perintah untuk memeriksa daftar java yang tersedia:

update-alternatives --config java

Jika hanya terdapat satu versi java maka akan tampil pesan seperti di bawah ini:

Untuk memeriksa versi java yang aktif gunakan perintah:

java --version

Langkah 2. Instalasi Database PostgreSQL

SonarQube memerlukan sebuah database untuk menyimpan data untuk beroperasi. Salah satu pilihan database yang dapat digunakan untuk SonarQube adalah PostgreSQL. Untuk melakukan instalasi PostgreSQL atur manajemen paket penginstalan postgresql:

sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Kemudian import repo signing key yang digunakan untuk mengakses paket penginstalan:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Setelah itu perbarui manajemen paket penginstalan dan instal PostgreSQL:

apt update apt install postgresql -y

Langkah 3. Tuning Konfigurasi

Agar SonarQube dapat berjalan dengan baik, diperlukan pengoptimalan konfigurasi. Pertama-tama buat file konfigurasi pada sysctl:

vim /etc/sysctl.d/99-sonarqube.conf

Kemudian isi file tersebut dengan parameter di bawah ini:

vm.max_map_count=524288
fs.file-max=131072

Setelah itu gunakan perintah di bawah ini agar user sonarqube memiliki batasan yang sesuai untuk mengakses file dan proses:

ulimit -n 131072
ulimit -u 8192

Kemudian buat file konfigurasi juga pada direktori keamanan:

vim /etc/security/limits.d/99-sonarqube.conf

Dan isi file tersebut dengan parameter di bawah ini:

sonarqube   -   nofile   131072
sonarqube   -   nproc    8192

Setelah dikonfigurasi jalankan perintah di bawah ini:

sysctl --system

Langkah 4. Setup Database

Setelah sebelumnya melakukan instalasi PostgreSQL, lakukan pengaturan database yang nantinya digunakan SonarQube:

# masuk dengan user postgres
su - postgres

# buat user sonar
createuser sonar

# masuk ke dalam baris perintah postgresql
psql

# buat user sonar
alter user sonar with encrypted password 'sonar';

# buat database untuk sonar
create database sonarqube owner sonar;

# beri hak akses pada user sonar
grant all privileges on DATABASE sonarqube to sonar;

Setelah itu periksa hasilnya:

/l
/du

Setelah user dan database berhasil dibuat, untuk keluar dari baris perintah PostgreSQL jalankan perintah:

\q

Dan keluat dari user postgres:

exit

Langkah 5. Setup User

Setelah itu atur user sistem untuk sonarqube:

groupadd sonar
useradd -s /bin/bash -d /opt/sonarqube -g sonar sonar

Langkah 6. Instal dan Konfigurasi SonarQube

Untuk melakukan instalasi SonarQube, download paket penginstalannya terlebih dahulu:

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.1.69595.zip

Kemudian ekstrak paket penginstalannya:

unzip sonarqube-9.9.1.69595.zip

Setelah itu pindah paket penginstalan yang telah diekstrak ke dalam direktori opt:

mv sonarqube-9.9.1.69595 /opt/sonarqube

Ubah kepemilikannya menjadi milik user sonar:

chown -R sonar:sonar /opt/sonarqube

Kemudian buat link file sonar.sh yang berada di dalam paket penginstalan ke dalam direktori /usr/bin agar dapat mengoperasikan service sonarqube:

ln -s vim /opt/sonarqube/bin/linux-x86-64/sonar.sh /usr/bin/

Setelah itu buka konfigurasi SonarQube:

vim /opt/sonarqube/conf/sonar.properties

Konfigurasi parameter di bawah ini sesuai dengan :

sonar.jdbc.username=sonar
sonar.jdbc.password=pwsonar123

sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

Kemudian buka file sonar.sh :

vim /opt/sonarqube/bin/linux-x86-64/sonar.sh

Tambahkan konfigurasi di bawah ini agar sonarqube berjalan dengan user sonar:

RUN_AS_USER=sonar

Kemudian masuk dengan user sonar untuk melakukan uji coba:

sudo su sonar

Masuk ke direktori bin pada paket penginstalan:

cd /opt/sonarqube/bin/linux-x86-64/

Kemudian coba lakukan operasi di bawah ini untuk mengoperasikan service sonarqube:

./sonar.sh start
./sonar.sh status
./sonar.sh stop

Lakukan pengecekan log:

tail -f /opt/sonarqube/logs/sonar.log

Jika operasi sudah berhasil, keluar dari user sonar untuk kembali menggunakan user root:

exit

Kemudian buat file service pada sistem:

vim /etc/systemd/system/sonar.service

Isi file tersebut dengan parameter di bawah ini:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

User=sonar
Group=sonar
Restart=always

LimitNOFILE=65536
LimitNOPROC=4096

[Install]
WantedBy=multi-user.target

Setelah service di buat pada sistem, kita dapat mengoperasikan service sonar dengan systemctl:

systemctl start sonar
systemctl enable sonar
systemctl status sonar

Langkah 7. Akses SonarQube

Setelah instalasi dan konfigurasi selesai, gunakan web browser untuk mengakses SonarQube:

http://ip-atau-domain-server:9000

Secara default user dan password yang digunakan adalah admin:

Setelah berhasil masuk untuk pertama kalinya maka akan diminta untuk memperbarui password:

Setelah masuk, maka akan menampilkan seperti di bawah ini:

Sonar Scanner

Agar SonarQube dapat menganalisis kode program, diperlukan scanner yang bekerja sebagai agen. Sonar Scanner diinstal pada server dimana kode program yang hendak dianalisis berada. Sonar scanner dapat diinstal di server yang sama dengan SonarQube, di server lain, atau di komputer klien yang memuat kode program yang hendak dianalisis.

Langkah 1. Instalasi dan Konfigurasi Sonar Scanner

Pertama-tama download paket penginstalan sonar scanner:

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip

Kemudian ekstrak paket yang telah diunduh menggunakan unzip:

unzip sonar-scanner-cli-5.0.1.3006-linux.zip

Pindah paket penginstalan yang telah diekstrak ke dalam direktori opt:

mv sonar-scanner-5.0.1.3006-linux/ /opt/sonar-scanner

Setelah itu buat user untuk sonar scanner:

groupadd sonar
useradd -s /bin/bash -d /opt/sonarqube -g sonar sonar

Ubah kepemilikan direktori menjadi milik user dan group sonar:

chown -R sonar:sonar /opt/sonar-scanner

Setelah itu buat link file bin yang berguna untuk menjalankan perintah sonar scanner:

ln -s /opt/sonar-scanner/bin/sonar-scanner /usr/bin/

Menganalisis Sumber Kode

Setelah SonarQube dan Sonar Scanner berhasil diinstal dan dikonfigurasi maka saatnya kita untuk menganalisis kode program. Untuk menganalisis kode program, diperlukan file sonar-project.properties di dalam projek kode program:

sonar-project.properties

Kemudian isi file tersebut dengan parameter di bawah ini:

sonar.projectKey=key-project
sonar.projectName=nama-project
sonar.projectVersion=versiproject

sonar.sources=.
sonar.sourceEncoding=UTF-8

Isi dari parameter projectkey dan projectname tersebut berdasarkan projek yang dibuat pada SonarQube seperti di bawah ini:

Kemudian untuk memulai proses analisis, buka projek pada Sonarqube, kemudian klik Locally:

Setelah itu buat project token baru yang nantinya digunakan untuk menjalankan sonar-scanner. Klik kanan pada user account dan buka link pada tab baru:

Beri nama dan pilih project yang hendak digunakan, kemudian klik Generate:

Setelah berhasil di generate, salin token yang muncul pada layar, dan simpan dengan baik, karena token tersebut hanya akan muncul sekali:

Setelah itu klik Continue:

Setelah itu, pilih opsi Other dengan OS Linux. Akan ada command atau perintah yang digunakan untuk melakukan scanning menggunakan sonar-scanner. Perintah tersebut bisa langsung dijalankan pada server yang telah terinstal sonar scanner untuk melakukan scanning code:

Jika hendak dimasukkan ke dalam pipeline CI/CI, pada contoh ini menggunakan Gitlab CI, buat file dengan nama sonar-project.properties pada source code projek dan isi seperti di bawah ini dengan value sesuai dengan project yang dibuat pada Sonarqube:

Untuk menambahkan ke dalam pipeline, tambahkan stages baru dengan script seperti di bawah ini:

Setelah selesai diedit, commit dan push ke dalam Gitlab:

Secara otomatis, Gitlab akan menjalankan pipeline sesuai dengan apa yang tertulis di dalam file gitlab-ci.yml:

Jika terjadi error atau pipeline tidak berjalan, pastikan project runners menyala atau menyalakannya dengan masuk ke menu Settings > CI/CD dan klik Enable for this project pada Project runners:

Setelah berhasil, maka jobs CI/CD sudah berhasil dijalankan:

Kita bisa membuka Sonarqube, dan akan ada hasil pemindaian yang dilakukan:

Kesimpulan

Melakukan pengetesan pada sebuah sumber kode merupakan hal penting, dan memiliki pengaruh besar pada kelanjutan development. Agar orang lain dapat memahami sumber kode dengan mudah, Sonarqube dapat memberikan laporan. Apakah kode yang dibuat sudah baik secara penulisan, hingga tingkat keamanan kode tersebut. Pekerjaan developer untuk melakukan pemeriksaan kode, tentunya sangat terbantu dengan baik.

Tertarik mengikuti training di ID-Networkers? Kami menyediakan berbagai pilihan training yang bisa kamu ikuti, klik disini untuk info lengkapnya?

Penulis : Bazigan Tsamara Sukamto