- Mempertimbangkan keamanan saat menulis kode Go merupakan pekerjaan yang kompleks
- Dengan menyajikan beberapa praktik konkret dan menerapkannya secara konsisten, hal ini membantu menulis kode yang tangguh, aman, dan berkinerja tinggi
Menjaga versi Go tetap terbaru
- Versi Go yang digunakan dalam proyek harus dijaga tetap terbaru
- Meskipun tidak menggunakan fitur bahasa terbaru, menaikkan versi Go tetap memungkinkan Anda menerima semua patch keamanan untuk kerentanan yang telah ditemukan
- Versi Go yang baru juga menjamin kompatibilitas dengan dependensi terbaru
- Di situs riwayat rilis Go, Anda dapat memeriksa isu keamanan dan CVE apa yang diperbaiki di setiap rilis Go, lalu memperbarui ke versi terbaru di file
go.mod proyek
- Setelah meng-upgrade versi Go, Anda harus memastikan tidak ada masalah kompatibilitas maupun dependensi
- Anda dapat menggunakan penganalisis kode statis untuk mengevaluasi kualitas dan keamanan kode
vet
- Kode Go dapat dianalisis dengan perintah bawaan Go,
go vet
- Jika dijalankan tanpa argumen, perintah
go vet akan berjalan dengan semua opsi yang diizinkan secara default
- Alat ini memindai source code dan melaporkan potensi masalah
- Masalah yang paling umum meliputi kesalahan goroutine, variabel yang tidak digunakan, dan area kode yang tidak dapat dijangkau
staticcheck
- Staticcheck, linter pihak ketiga, dapat menemukan bug, mendeteksi masalah performa, dan juga menerapkan gaya bahasa Go
- Alat ini menjelaskan masalah yang ditemukan dan menyarankan perbaikan beserta contoh
- Selain dijalankan di pipeline CI, alat ini juga dapat diinstal sebagai executable mandiri untuk memindai kode secara lokal
- Periksa versi yang terpasang dan pastikan siap menjalankan pemindaian
- Jika dijalankan tanpa argumen, secara default alat ini akan memanggil semua penganalisis kode
- Lihat contoh apa yang dapat ditemukan di repositori GitHub NGINX Agent
- Hasil pemindaian dapat diklasifikasikan menjadi tiga jenis: package/metode/fungsi deprecated, variabel/field yang tidak digunakan, dan masalah terkait kualitas kode
golangci-lint
golangci-lint dapat diinstal dengan perintah go install
- Periksa versinya untuk memastikan instalasi berhasil
- Jika dipanggil tanpa argumen, semua linter akan dijalankan
- Periksa peringatan dan saran apa yang ditampilkan pada repositori
agent yang telah di-clone sebelumnya
- Linter akan menunjuk file dan baris yang tepat
- Evaluasi dan ubah kode, lalu jalankan kembali linter dan seluruh unit test
- Jika test lolos, commit kode yang telah diperbarui lalu push ke remote
Mendeteksi race condition
- Race condition dapat terjadi ketika beberapa goroutine mencoba mengakses resource secara bersamaan
- Kondisi ini terdeteksi ketika setidaknya satu goroutine mencoba mengubah resource
- Go secara bawaan mendukung pengujian kondisi ini dengan menggunakan alat
test bersama argumen -race
- Race detector hanya mengevaluasi kode yang benar-benar dijalankan dan mengabaikan jalur kode yang tidak dieksekusi, jadi sebaiknya jalankan penganalisis kode statis terlebih dahulu untuk memastikan tidak ada dead code
- Menjalankan test secara paralel meningkatkan kemungkinan mendeteksi masalah konkurensi
Memindai source code untuk kerentanan
govulncheck
- Alat untuk memindai code base terhadap kerentanan yang telah diketahui dan terdaftar di database CVEs
- Dikembangkan oleh tim Go, dan database khusus kerentanan Go menyediakan informasi untuk scanner ini
- Setelah memasang versi terbaru, coba fungsi dasarnya
- Clone repositori habit lalu jalankan alat dari direktori root
- Tidak ditemukan kerentanan
- Jika memindai file biner, kerentanan lain mungkin dapat ditemukan
- Upgrade versi Go ke yang terbaru, ambil dependensi, lalu periksa apakah software dan dependensinya bebas dari CVE
gosec
- Penganalisis kode statis yang membantu menemukan konfigurasi kode yang tidak aman
- Dapat dijalankan di sistem lokal maupun di pipeline CI sebagai GitHub Action
- Tersedia berbagai opsi dan daftar aturan untuk konfigurasi pemindaian
- Clone repositori GitHub yang berisi kode Go yang akan dipindai, lalu mulai pemindaian dari direktori root
- Pada laporan pemindaian, Anda dapat melihat daftar potensi masalah yang diurutkan berdasarkan tingkat keparahan dan tingkat kepercayaan
- Periksa CWE yang dilaporkan dan pelajari detail lebih lanjut tentang kelemahan yang tercantum
Fuzzing
- Metode terakhir untuk memeriksa kualitas kode dan menemukan kerentanan
- Pengujian khusus otomatis yang memanipulasi data input yang dihasilkan secara acak dengan memanfaatkan cakupan test kode
- Sangat berguna untuk menemukan potensi cacat keamanan seperti buffer overflow, SQL injection, serangan DoS, dan serangan XSS
- Karena banyak kombinasi input dibuat secara otomatis, developer tidak perlu memikirkan sendiri ratusan atau ribuan kombinasi data input
1 komentar
Opini Hacker News
go vetdango test -racegosec