Syft adalah utilitas CLI yang menghasilkan Software Bill of Materials (SBOM) untuk gambar kontainer. SBOM adalah katalog dependensi yang digunakan oleh gambar Anda. Ini memberi Anda visibilitas ke "materi" yang membentuk sistem file gambar Anda.
Memproduksi SBOM dapat membantu Anda mengidentifikasi rantai pasokan paket yang terlalu rumit yang menempatkan Anda pada risiko serangan kebingungan ketergantungan. Mendistribusikan SBOM di samping gambar Anda memberi tahu pengguna tentang apa yang ada di bawah permukaan. Ini memberikan titik awal yang berguna saat memperketat keamanan rantai pasokan.
Syft dikembangkan oleh Anchore yang juga menawarkan mesin pemindai kontainer lengkap. Syft CLI mampu mengekstrak daftar paket dari gambar menggunakan sistem operasi populer dan bahasa pemrograman. Gambar Docker dan OCI didukung.
Menginstal Syft
Skrip penginstalan tersedia untuk mengunduh biner Syft terbaru dan menambahkannya ke jalur Anda:
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
Pengguna Mac juga bisa mendapatkan Syft dari Homebrew dengan menambahkan anchore/syft
repositori dan menginstal syft
paket.
Setelah Anda mendapatkan Syft di sistem Anda, jalankan syft
di terminal Anda untuk menampilkan perintah yang tersedia. Anda dapat membuat penyelesaian untuk shell Anda dengan menjalankan syft completion
.
Gunakan syft version
untuk menemukan versi penginstalan Anda. Periksa halaman tag GitHub secara berkala untuk menemukan rilis baru, lalu gunakan kembali skrip penginstalan untuk mengunduh setiap pembaruan.
Memindai Gambar
Fungsionalitas Syft saat ini diekspos oleh satu sub-perintah, syft packages
. Berikan tag gambar untuk menghasilkan SBOM untuk:
syft packages alpine:latest
Syft akan mengunduh gambar, memindai isinya, dan membuat katalog paket yang ditemukan. Outputnya akan ditampilkan sebagai tabel di terminal Anda. Setiap hasil menyertakan nama, versi, dan jenis paket yang terdeteksi.
Daftar paket untuk gambar ini pendek. Karena ini adalah gambar dasar Alpine, paket yang diinstal sengaja disederhanakan untuk memberikan permukaan sekecil mungkin. Gambar yang lebih besar dapat berisi ratusan atau ribuan paket dalam beberapa format berbeda. Akan sangat membantu untuk menggabungkan Syft dengan alat terminal Unix yang ada seperti grep
dan awk
untuk mengekstrak data yang Anda cari.
syft packages example-image:latest | grep example-package-to-find
Jenis Paket yang Didukung
Syft mendukung banyak format paket populer di seluruh sistem operasi dan bahasa pemrograman terkemuka. Daftar tersebut meliputi:
APK
(Alpine),DEB
(Debian), danRPM
Paket OS (Fedora).- Identifikasi distribusi Linux di Alpine, CentOS, Debian, dan RHEL.
- Buka modul
- Java di
JAR
,EAR
, danWAR
variasi - Paket NPM dan Benang
- Roda Piton dan Telur
- Paket Ruby
Meskipun tidak semua bahasa tercakup, Anda tetap mendapat manfaat dari pemindaian tingkat OS terlepas dari tumpukan pilihan aplikasi Anda.
Mengubah Format Output
Format keluaran default disebut table
. Itu membuat tabel hasil berbasis kolom di terminal Anda, membuat baris baru untuk setiap paket yang terdeteksi. Format alternatif yang dapat dibaca manusia adalah text
yang menyajikan daftar paket dengan Version
dan Type
bidang bersarang di bawah setiap bagian.
Syft juga mendukung beberapa format terprogram:
json
– Simpan data paket ke struktur JSON.cyclonedx
– Laporan CycloneDX dalam format XML.spdx
danspdx-json
– Laporan yang kompatibel dengan SPDX dalam format nilai tag atau JSON.
Menggunakan salah satu laporan ini memungkinkan Anda mengarsipkan temuan ke file untuk referensi nanti:
syft packages alpine:latest -o json > alpine-packages.json
Format CycloneDX dan SPDX standar dapat membantu mengintegrasikan pemindaian Syft ke dalam saluran CI/CD Anda. Data dapat diakses oleh alat ekosistem lain yang berfungsi dengan daftar paket dan hasil SBOM.
Syft juga terintegrasi dengan Grype, pencari kerentanan sistem file kontainer mandiri Anchore. Data dari Syft dapat dimasukkan langsung ke Grype jika Anda menggunakan format output JSON.
syft packages example-image:latest -o json > sbom.json
grype sbom:./sbom.json
Grype akan membandingkan daftar paket dengan indeks kerentanan yang diketahui. Ini akan menyoroti paket yang berisi masalah, memberi Anda titik awal langsung untuk meningkatkan postur keamanan Anda.
Menggunakan Sumber Gambar Lain
Syft dapat menggunakan gambar dari sumber lain selain registri Docker publik. Anda dapat mereferensikan gambar yang sesuai dengan OCI, baik melalui tag registri atau sebagai tar gambar yang disimpan. Jalur ke arsip gambar dapat diserahkan langsung ke Syft:
docker image save my-image:latest > my-image.tar
syft packages ./my-image.tar
Syft juga bekerja dengan registry Docker pribadi. Ini menggunakan kredensial Anda yang ada di ~/.docker/config.json
Anda berkas:
{ "auths": { "registry.example.com": { "username": "", "password": "" } } }
Meskipun Syft berfokus pada pemindaian gambar kontainer, Syft juga dapat membuat SBOM untuk jalur sistem file arbitrer. Anda dapat menggunakan Syft untuk mengindeks paket host Anda dengan memindai direktori yang biasanya berisi binari dan pustaka perangkat lunak:
syft packages dir:/usr/bin
Anda harus secara eksplisit menambahkan dir:
skema jika Anda mereferensikan jalur di luar direktori kerja Anda. Jika tidak, Syft akan mencoba menafsirkannya sebagai referensi tag gambar.
Kesimpulan
Syft mengekstrak daftar paket dari gambar wadah Anda. Data yang dihasilkan bertindak sebagai SBOM untuk gambar Anda, meningkatkan kesadaran Anda tentang panjang rantai pasokan Anda.
Syft didistribusikan sebagai biner tunggal yang menghasilkan laporan dalam beberapa format berbeda. Ini dapat dengan mudah diintegrasikan ke dalam sistem CI/CD untuk mengunggah artefak SBOM sebagai bagian dari alur pembuatan gambar Anda. Hal ini meningkatkan akuntabilitas dan membantu jejak audit dengan merekam daftar perangkat lunak lengkap setiap gambar pada saat diproduksi.
Menambahkan pemindaian Syft ke alur kerja Anda membuat Anda tetap mendapat informasi tentang paket yang Anda gunakan. Setelah Anda mendapatkan informasi ini, Anda dapat mulai menilai setiap paket untuk menentukan apakah itu benar-benar dibutuhkan. Jika Anda menemukan banyak paket yang tidak digunakan oleh beban kerja Anda, pertimbangkan untuk beralih ke gambar dasar minimal dan hanya melapisi perangkat lunak penting di atasnya.