Pemindai kerentanan untuk gambar kontainer dan sistem file. Instal biner dengan mudah untuk mencobanya. Bekerja dengan Syft, alat SBOM (software bill of material) yang kuat untuk gambar kontainer dan sistem file.
Kalender: https://calendar.google.com/calendar/u/0/r?cid=Y182OTM4dGt0MjRtajI0NnNzOThiaGtnM29qNEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t
Agenda: https://docs.google.com/document/d/1ZtSAa6fj2a6KRWviTn3WoJm09edvrNUp4Iz_dOjjyY8/edit?usp=sharing (gabung dengan grup ini untuk akses tulis)
Semuanya dipersilakan!
Untuk opsi dukungan komersial dengan Syft atau Grype, silakan hubungi Anchore
Pindai konten gambar kontainer atau sistem file untuk menemukan kerentanan yang diketahui.
Temukan kerentanan untuk paket sistem operasi utama:
Alpen
AmazonLinux
Kotak Sibuk
CentOS
CBL-Mariner
Debian
Tanpa Distro
OracleLinux
Topi Merah (RHEL)
Ubuntu
Serigala
Temukan kerentanan untuk paket khusus bahasa:
Ruby (Permata)
Java (JAR, PERANG, TELINGA, JPI, HPI)
JavaScript (NPM, Benang)
Python (file Telur, Roda, Puisi, persyaratan.txt/setup.py)
Dotnet (deps.json)
Golang (go.mod)
PHP (Komposer)
Karat (Kargo)
Mendukung format gambar Docker, OCI dan Singularity.
Dukungan OpenVEX untuk memfilter dan menambah hasil pemindaian.
Jika Anda mengalami masalah, beri tahu kami menggunakan pelacak masalah.
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
Instal opsi skrip:
-b
: Tentukan direktori instalasi khusus (defaultnya adalah ./bin
)
-d
: Lebih banyak level logging verbose ( -d
untuk debug, -dd
untuk pelacakan)
-v
: Verifikasi tanda tangan artefak yang diunduh sebelum instalasi (memerlukan instalasi cosign
)
Distribusi coklat grype dikelola oleh komunitas dan tidak didistribusikan oleh tim jangkar.
coklat instal grype -y
seduh tap jangkar/grype pembuatan bir instal gripe
Di macOS, Grype juga dapat diinstal dari port yang dikelola komunitas melalui MacPorts:
sudo port instal grype
Catatan : Saat ini, Grype hanya dibuat untuk macOS dan Linux.
Lihat DEVELOPING.md untuk instruksi membangun dan menjalankan dari sumber.
Jika Anda menggunakan Tindakan GitHub, Anda dapat menggunakan tindakan berbasis Grype kami untuk menjalankan pemindaian kerentanan pada kode atau gambar kontainer selama alur kerja CI Anda.
Checksum diterapkan ke semua artefak, dan file checksum yang dihasilkan ditandatangani menggunakan cosign.
Anda memerlukan alat berikut untuk memverifikasi tanda tangan:
tanda tangan
Langkah-langkah verifikasinya adalah sebagai berikut:
Unduh file yang Anda inginkan, serta file checksums.txt, checksums.txt.pem, dan checksums.txt.sig dari halaman rilis:
Verifikasi tanda tangan:
cosign verifikasi-gumpalan--sertifikat --tanda tangan --certificate-identity-regexp 'https://github.com/anchore/grype/.github/workflows/.+' --certificate-oidc-issuer "https://token.actions.githubusercontent.com"
Setelah tanda tangan dipastikan valid, Anda dapat melanjutkan untuk memvalidasi bahwa jumlah SHA256 selaras dengan artefak yang diunduh:
sha256sum --abaikan-hilang -c checksums.txt
Instal biner, dan pastikan grype
tersedia di jalur Anda. Untuk memindai kerentanan pada gambar:
grype
Perintah di atas memindai kerentanan yang terlihat di container (yaitu representasi gambar yang tergencet). Untuk menyertakan perangkat lunak dari semua lapisan gambar dalam pemindaian kerentanan, terlepas dari keberadaannya di gambar akhir, berikan --scope all-layers
:
grype--scope all-layers
Untuk menjalankan grype dari container Docker sehingga dapat memindai container yang sedang berjalan, gunakan perintah berikut:
docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock --name Grype jangkar/grype:terbaru $(ImageName):$(ImageTag)
Grype dapat memindai berbagai sumber selain yang ditemukan di Docker.
# scan a container image archive (from the result of `docker image save ...`, `podman save ...`, or `skopeo copy` commands) grype path/to/image.tar # scan a Singularity Image Format (SIF) container grype path/to/image.sif # scan a directory grype dir:path/to/dir
Sumber dapat diberikan secara eksplisit dengan skema:
podman:yourrepo/yourimage:tag use images from the Podman daemon docker:yourrepo/yourimage:tag use images from the Docker daemon docker-archive:path/to/yourimage.tar use a tarball from disk for archives created from "docker save" oci-archive:path/to/yourimage.tar use a tarball from disk for OCI archives (from Skopeo or otherwise) oci-dir:path/to/yourimage read directly from a path on disk for OCI layout directories (from Skopeo or otherwise) singularity:path/to/yourimage.sif read directly from a Singularity Image Format (SIF) container on disk dir:path/to/yourproject read directly from a path on disk (any directory) file:path/to/yourfile read directly from a file on disk sbom:path/to/syft.json read Syft JSON from path on disk registry:yourrepo/yourimage:tag pull image directly from a registry (no container runtime required)
Jika sumber gambar tidak disediakan dan tidak dapat dideteksi dari referensi yang diberikan, maka diasumsikan gambar tersebut harus diambil dari daemon Docker. Jika buruh pelabuhan tidak ada, maka daemon Podman akan dicoba berikutnya, diikuti dengan menghubungi langsung registri image terakhir.
Perilaku default ini dapat diganti dengan opsi konfigurasi default-image-pull-source
(Lihat Konfigurasi untuk detail selengkapnya).
Gunakan SBOM untuk pemindaian kerentanan yang lebih cepat di Grype:
# Then scan for new vulnerabilities as frequently as needed grype sbom:./sbom.json # (You can also pipe the SBOM into Grype) cat ./sbom.json | grype
Grype mendukung input format Syft, SPDX, dan CycloneDX SBOM. Jika Syft telah menghasilkan salah satu jenis file ini, mereka harus memiliki informasi yang sesuai agar dapat berfungsi dengan baik dengan Grype. Dimungkinkan juga untuk menggunakan SBOM yang dihasilkan oleh alat lain dengan tingkat keberhasilan yang berbeda-beda. Dua hal yang membuat pencocokan Grype lebih berhasil adalah dimasukkannya informasi distribusi CPE dan Linux. Jika SBOM tidak menyertakan informasi CPE apa pun, informasi CPE dapat dibuat berdasarkan informasi paket menggunakan flag --add-cpes-if-none
. Untuk menentukan distribusi, gunakan tanda --distro
. Contoh lengkapnya adalah:
grype --add-cpes-if-none --distro alpine:3.10 sbom:some-alpine-3.10.spdx.json
Versi Grype apa pun sebelum v0.40.1 tidak didukung. Rilis yang tidak didukung tidak akan menerima pembaruan perangkat lunak atau pembaruan basis data kerentanan apa pun. Anda masih dapat membangun database kerentanan untuk rilis Grype yang tidak didukung dengan menggunakan rilis vunnel sebelumnya untuk mengumpulkan data upstream dan grype-db untuk membangun database untuk skema yang tidak didukung.
Grype mendukung pemindaian SBOM sebagai input melalui stdin. Pengguna dapat menggunakan cosign untuk memverifikasi pengesahan dengan SBOM sebagai kontennya untuk memindai kerentanan pada gambar:
COSIGN_EXPERIMENTAL=1 cosign verify-attestation caphill4/java-spdx-tools:latest | jq -r .payload | base64 --decode | jq -r .predicate.Data | grype
{ "kerentanan": { ... }, "Kerentanan terkait": [ ... ], "Detail Pertandingan": [ ... ], "artefak": { ... } }
Kerentanan : Semua informasi tentang kerentanan spesifik yang dicocokkan secara langsung (misalnya ID, tingkat keparahan, skor CVSS, informasi perbaikan, tautan untuk informasi lebih lanjut)
Kerentanan Terkait : Informasi mengenai kerentanan yang ditemukan terkait dengan kerentanan utama yang dilaporkan. Mungkin kerentanan yang kami cocokkan adalah GitHub Security Advisory, yang memiliki CVE upstream (dalam database kerentanan nasional resmi). Dalam kasus ini kami mencantumkan kerentanan upstream di sini.
MatchDetails : Bagian ini mencoba menjelaskan apa yang kami cari saat mencari kecocokan dan detail apa pada paket dan kerentanan yang mengarah pada kecocokan.
Artefak : Ini adalah bagian dari informasi yang kami ketahui tentang paket tersebut (jika dibandingkan dengan keluaran Syft json, kami merangkum bagian metadata). Ini memiliki informasi tentang di mana dalam gambar atau direktori kontainer kami menemukan paket tersebut, jenis paketnya, info lisensi, pURL, CPE, dll.
Grype dapat mengecualikan file dan jalur agar tidak dipindai dalam sumber dengan menggunakan ekspresi glob dengan satu atau lebih parameter --exclude
:
grype
Catatan: dalam kasus pemindaian gambar , karena seluruh sistem file dipindai, dimungkinkan untuk menggunakan jalur absolut seperti /etc
atau /usr/**/*.txt
sedangkan pemindaian direktori mengecualikan file yang berhubungan dengan direktori yang ditentukan . Misalnya: memindai /usr/foo
dengan --exclude ./package.json
akan mengecualikan /usr/foo/package.json
dan --exclude '**/package.json'
akan mengecualikan semua file package.json
di bawah /usr/foo
. Untuk pemindaian direktori , diperlukan untuk memulai ekspresi jalur dengan ./
, */
, atau **/
, yang semuanya akan diselesaikan relatif terhadap direktori pemindaian yang ditentukan . Perlu diingat, shell Anda mungkin mencoba memperluas wildcard, jadi masukkan parameter tersebut dalam tanda kutip tunggal, seperti: '**/*.json'
.
Grype dapat dikonfigurasi untuk menggabungkan sumber data eksternal untuk menambah ketepatan dalam pencocokan kerentanan. Fitur ini saat ini dinonaktifkan secara default. Untuk mengaktifkan fitur ini tambahkan yang berikut ini ke konfigurasi grype:
sumber eksternal: aktifkan: pakar sejati: pencarian-upstream-by-sha1: url dasar sejati: https://repo1.maven.org/maven2
Anda juga dapat mengonfigurasi url dasar jika Anda menggunakan registri lain sebagai titik akhir maven Anda.
Format keluaran untuk Grype juga dapat dikonfigurasi:
grype-o
Dimana format yang tersedia adalah:
table
: Ringkasan kolom (default).
cyclonedx
: Laporan XML yang sesuai dengan spesifikasi CycloneDX 1.6.
cyclonedx-json
: Laporan JSON yang sesuai dengan spesifikasi CycloneDX 1.6.
json
: Gunakan ini untuk mendapatkan informasi sebanyak mungkin dari Grype!
sarif
: Gunakan opsi ini untuk mendapatkan laporan SARIF (Format Pertukaran Hasil Analisis Statis)
template
: Memungkinkan pengguna menentukan format output. Lihat "Menggunakan templat" di bawah.
Grype memungkinkan Anda menentukan format keluaran khusus, menggunakan templat Go. Begini cara kerjanya:
Tentukan format Anda sebagai template Go, dan simpan template ini sebagai file.
Atur format keluaran ke "template" ( -o template
).
Tentukan jalur ke file templat ( -t ./path/to/custom.template
).
Pemrosesan templat Grype menggunakan model data yang sama dengan format keluaran json
— jadi jika Anda bertanya-tanya data apa yang tersedia saat Anda membuat templat, Anda dapat menggunakan keluaran dari grype
sebagai referensi.
Harap diperhatikan: Templat dapat mengakses informasi tentang sistem yang dijalankannya, seperti variabel lingkungan. Anda tidak boleh menjalankan templat yang tidak tepercaya.
Ada beberapa contoh templat di direktori templat di sumber Grype yang dapat berfungsi sebagai titik awal untuk format keluaran khusus. Misalnya, csv.tmpl menghasilkan laporan kerentanan dalam format CSV (nilai dipisahkan koma):
"Package","Version Installed","Vulnerability ID","Severity"
"coreutils","8.30-3ubuntu2","CVE-2016-2781","Low"
"libc-bin","2.31-0ubuntu9","CVE-2016-10228","Negligible"
"libc-bin","2.31-0ubuntu9","CVE-2020-6096","Low"
...
Anda juga dapat menemukan templat untuk format keluaran "tabel" default di tempat yang sama.
Grype juga menyertakan beragam fungsi templating utilitas dari sprig selain dari teks/templat golang default untuk memungkinkan pengguna menyesuaikan keluaran dari Grype.
Anda dapat membuat Grype keluar dengan kesalahan jika ada kerentanan yang dilaporkan pada atau di atas tingkat keparahan yang ditentukan. Ini berguna saat menggunakan Grype dalam skrip atau saluran CI. Untuk melakukannya, gunakan tanda CLI --fail-on
.
Misalnya, inilah cara Anda dapat memicu kegagalan pipeline CI jika ada kerentanan yang ditemukan di gambar ubuntu:latest
dengan tingkat keparahan "sedang" atau lebih tinggi:
grype ubuntu:latest --fail-on medium
Jika Anda melihat Grype melaporkan positif palsu atau kecocokan kerentanan lainnya yang tidak ingin Anda lihat, Anda dapat meminta Grype untuk mengabaikan kecocokan dengan menentukan satu atau lebih "abaikan aturan" di file konfigurasi Grype Anda (mis. ~/.grype.yaml
). Hal ini menyebabkan Grype tidak melaporkan kecocokan kerentanan apa pun yang memenuhi kriteria yang ditentukan oleh aturan pengabaian Anda.
Setiap aturan dapat menentukan kombinasi kriteria berikut:
ID kerentanan (misalnya "CVE-2008-4318"
)
namespace (misalnya "nvd"
)
status perbaikan (nilai yang diperbolehkan: "fixed"
, "not-fixed"
, "wont-fix"
, atau "unknown"
)
nama paket (misalnya "libcurl"
)
versi paket (misalnya "1.5.1"
)
bahasa paket (misalnya "python"
; nilai-nilai ini didefinisikan di sini)
jenis paket (misalnya "npm"
; nilai-nilai ini ditentukan di sini)
lokasi paket (misalnya "/usr/local/lib/node_modules/**"
; mendukung pola glob)
Berikut ini contoh ~/.grype.yaml
yang menunjukkan format yang diharapkan untuk aturan pengabaian:
abaikan: # Ini adalah kumpulan lengkap kolom aturan yang didukung: - kerentanan: CVE-2008-4318 kondisi perbaikan: tidak diketahui # Bidang VEX berlaku ketika Grype membaca data vex: status vex: tidak terpengaruh pembenaran vex: rentan_code_not_present paket: nama: libcurl versi: 1.5.1 ketik: npm lokasi: "/ usr/local/lib/node_modules/**" # Kita dapat membuat aturan yang cocok hanya dengan ID kerentanan: - kerentanan: CVE-2014-54321 # ...atau hanya dengan satu bidang paket: - paket: jenis: permata
Pertandingan kerentanan akan diabaikan jika ada aturan yang berlaku pada pertandingan tersebut. Suatu aturan dianggap berlaku pada kecocokan kerentanan tertentu hanya jika semua bidang yang ditentukan dalam aturan berlaku pada kecocokan kerentanan.
Saat Anda menjalankan Grype sambil menentukan aturan abaikan, hal berikut ini terjadi pada kecocokan kerentanan yang "diabaikan":
Kecocokan yang diabaikan sepenuhnya disembunyikan dari keluaran Grype, kecuali saat menggunakan format keluaran json
atau template
; namun, dalam dua format ini, kecocokan yang diabaikan akan dihapus dari bidang larik matches
yang ada, dan ditempatkan di bidang larik ignoredMatches
yang baru. Setiap kecocokan yang diabaikan yang tercantum juga memiliki bidang tambahan, appliedIgnoreRules
, yang merupakan larik aturan apa pun yang menyebabkan Grype mengabaikan kecocokan kerentanan ini.
Kecocokan yang diabaikan tidak menjadi faktor dalam keputusan status keluar Grype saat menggunakan --fail-on
. Misalnya, jika pengguna menentukan --fail-on critical
, dan semua kecocokan kerentanan yang ditemukan dengan tingkat keparahan "kritis" telah diabaikan , Grype akan keluar dari nol.
Catatan: Silakan terus laporkan setiap positif palsu yang Anda lihat! Bahkan jika Anda dapat memfilter positif palsu menggunakan aturan abaikan, akan sangat membantu komunitas Grype jika kita memiliki pengetahuan sebanyak mungkin tentang positif palsu Grype. Ini membantu kami terus meningkatkan Grype!
Jika Anda hanya ingin Grype melaporkan kerentanan yang telah diperbaiki , Anda dapat menggunakan tanda --only-fixed
. (Ini secara otomatis menambahkan aturan pengabaian ke dalam konfigurasi Grype, sehingga kerentanan yang tidak diperbaiki akan diabaikan.)
Misalnya, berikut scan Alpine 3.10:
NAME INSTALLED FIXED-IN VULNERABILITY SEVERITY apk-tools 2.10.6-r0 2.10.7-r0 CVE-2021-36159 Critical libcrypto1.1 1.1.1k-r0 CVE-2021-3711 Critical libcrypto1.1 1.1.1k-r0 CVE-2021-3712 High libssl1.1 1.1.1k-r0 CVE-2021-3712 High libssl1.1 1.1.1k-r0 CVE-2021-3711 Critical
...dan ini pemindaian yang sama, tetapi menambahkan tanda --only-fixed
:
NAME INSTALLED FIXED-IN VULNERABILITY SEVERITY apk-tools 2.10.6-r0 2.10.7-r0 CVE-2021-36159 Critical
Jika Anda ingin Grype hanya melaporkan kerentanan yang perbaikannya belum dikonfirmasi , Anda dapat menggunakan tanda --only-notfixed
. Alternatifnya, Anda dapat menggunakan tanda --ignore-states
untuk memfilter hasil kerentanan dengan status tertentu seperti wont-fix
(lihat --help
untuk daftar status perbaikan yang valid). Flag ini secara otomatis menambahkan aturan pengabaian ke dalam konfigurasi Grype, sehingga kerentanan yang telah diperbaiki, atau tidak akan diperbaiki, akan diabaikan.
Grype dapat menggunakan data VEX (Vulnerability Exploitability Exchange) untuk memfilter positif palsu atau memberikan konteks tambahan, sehingga menambah kecocokan. Saat memindai gambar kontainer, Anda dapat menggunakan tanda --vex
untuk menunjuk ke satu atau lebih dokumen OpenVEX.
Pernyataan VEX menghubungkan produk (gambar kontainer), kerentanan, dan status VEX untuk menyatakan pernyataan dampak kerentanan. Ada empat status VEX: not_affected
, affected
, fixed
dan under_investigation
.
Berikut adalah contoh dokumen OpenVEX sederhana. (tip: gunakan vexctl
untuk membuat dokumen Anda sendiri).
{ "@context": "https://openvex.dev/ns/v0.2.0", "@id": "https://openvex.dev/docs/public/vex-d4e9020b6d0d26f131d535e055902dd6ccf3e2088bce3079a8cd3588a4b14c78", "penulis": " Seorang Gripe Pengguna", "cap waktu": "2023-07-17T18:28:47.696004345-06:00", "versi": 1, "pernyataan": [ { "kerentanan": { "nama": "CVE-2023-1255" }, "produk": [ { "@id": "pkg:oci/alpine@sha256%3A124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126", "subkomponen": [ { "@id": "pkg:apk/alpine/[email protected]" }, { "@id": "pkg:apk/alpine/[email protected]" } ] } ], "status": "diperbaiki" } ] }
Secara default, Grype akan menggunakan pernyataan apa pun dalam dokumen VEX tertentu dengan status not_affected
atau fixed
untuk memindahkan kecocokan ke set abaikan.
Setiap kecocokan yang diabaikan akibat pernyataan VEX ditandai saat menggunakan --show-suppressed
:
libcrypto3 3.0.8-r3 3.0.8-r4 apk CVE-2023-1255 Medium (suppressed by VEX)
Pernyataan dengan status affected
atau under_investigation
hanya akan dianggap untuk menambah kumpulan hasil bila diminta secara khusus menggunakan variabel lingkungan GRYPE_VEX_ADD
atau dalam file konfigurasi.
Aturan abaikan dapat ditulis untuk mengontrol bagaimana Grype menghormati pernyataan VEX. Misalnya, untuk mengonfigurasi Grype agar hanya bertindak berdasarkan pernyataan VEX ketika justifikasinya vulnerable_code_not_present
, Anda dapat menulis aturan seperti ini:
---mengabaikan: - status vex: tidak_terkena pembenaran vex: rentan_code_not_present
Lihat daftar pembenaran untuk detailnya. Anda dapat menggabungkan vex-status
dan vex-justification
dengan parameter aturan abaikan lainnya.
Saat Grype melakukan pemindaian kerentanan, ia melakukannya menggunakan database kerentanan yang disimpan di sistem file lokal Anda, yang dibuat dengan mengambil data dari berbagai sumber data kerentanan yang tersedia untuk umum. Sumber-sumber ini meliputi:
SecDB Alpine Linux: https://secdb.alpinelinux.org/
Amazon Linux ALAS: https://alas.aws.amazon.com/AL2/alas.rss
Chainguard SecDB: https://packages.cgr.dev/chainguard/security.json
Pelacak CVE Debian Linux: https://security-tracker.debian.org/tracker/data/json
Penasihat Keamanan GitHub (GHSA): https://github.com/advisories
Basis Data Kerentanan Nasional (NVD): https://nvd.nist.gov/vuln/data-feeds
Oracle Linux OVAL: https://linux.Oracle.com/security/oval/
Data Keamanan RedHat Linux: https://access.redhat.com/hydra/rest/securitydata/
RedHat RHSA: https://www.redhat.com/security/data/oval/
SUSE Linux OVAL: https://ftp.suse.com/pub/projects/security/oval/
Keamanan Linux Ubuntu: https://people.canonical.com/~ubuntu-security/
Wolfi SecDB: https://packages.wolfi.dev/os/security.json
Secara default, Grype secara otomatis mengelola database ini untuk Anda. Grype memeriksa pembaruan baru pada basis data kerentanan untuk memastikan bahwa setiap pemindaian menggunakan informasi kerentanan terkini. Perilaku ini dapat dikonfigurasi. Untuk informasi selengkapnya, lihat bagian Mengelola database Grype.
Basis data kerentanan Grype adalah file SQLite, bernama vulnerability.db
. Pembaruan pada basis data bersifat atomik: seluruh basis data diganti dan kemudian diperlakukan sebagai "hanya baca" oleh Grype.
Langkah pertama Grype dalam pembaruan basis data adalah menemukan basis data yang tersedia untuk diambil. Grype melakukan ini dengan meminta "file daftar" dari titik akhir publik:
https://toolbox-data.anchore.io/grype/databases/listing.json
File daftar berisi entri untuk setiap database yang tersedia untuk diunduh.
Berikut ini contoh entri dalam file daftar:
{ "dibangun": "21-10-2021T08:13:41Z", "versi": 3, "url": "https://toolbox-data.anchore.io/grype/databases/vulnerability-db_v3_2021-10- 21T08:13:41Z.tar.gz", "checksum": "sha256:8c99fb4e516f10b304f026267c2a73a474e2df878a59bf688cfb0f094bfe7a91"}
Dengan informasi ini, Grype dapat memilih database yang benar (database terbaru yang dibuat dengan versi skema saat ini), mendownload database, dan memverifikasi integritas database menggunakan nilai checksum
yang terdaftar.
Catatan: Selama penggunaan normal, pengguna tidak perlu mengelola database Grype! Grype mengelola databasenya di belakang layar. Namun, bagi pengguna yang membutuhkan kontrol lebih, Grype menyediakan opsi untuk mengelola database secara lebih eksplisit.
Secara default, database di-cache pada sistem file lokal di direktori $XDG_CACHE_HOME/grype/db/
. Misalnya, di macOS, database akan disimpan di ~/Library/Caches/grype/db/3/
. (Untuk informasi selengkapnya tentang jalur XDG, lihat Spesifikasi Direktori Dasar XDG.)
Anda dapat mengatur jalur direktori cache menggunakan variabel lingkungan GRYPE_DB_CACHE_DIR
. Jika pengaturan variabel tersebut saja tidak berhasil, maka variabel lingkungan TMPDIR
mungkin juga perlu diatur.
Grype membutuhkan informasi kerentanan terkini untuk memberikan kecocokan yang akurat. Secara default, eksekusi akan gagal jika database lokal tidak dibuat dalam 5 hari terakhir. Pemeriksaan kebasian data dapat dikonfigurasi melalui variabel lingkungan GRYPE_DB_MAX_ALLOWED_BUILT_AGE
dan GRYPE_DB_VALIDATE_AGE
atau bidang max-allowed-built-age
dan validate-age
, di bawah db
. Ini menggunakan sintaks durasi waktu golang. Setel GRYPE_DB_VALIDATE_AGE
atau validate-age
ke false
untuk menonaktifkan pemeriksaan kebasian.
Secara default, Grype memeriksa database baru setiap kali dijalankan, dengan membuat panggilan jaringan melalui Internet. Anda dapat memberitahu Grype untuk tidak melakukan pemeriksaan ini dengan mengatur variabel lingkungan GRYPE_DB_AUTO_UPDATE
ke false
.
Selama Anda menempatkan file vulnerability.db
dan metadata.json
Grype di direktori cache untuk versi skema yang diharapkan, Grype tidak perlu mengakses jaringan. Selain itu, Anda bisa mendapatkan daftar arsip database yang tersedia untuk diunduh dari perintah grype db list
di lingkungan online, mengunduh arsip database, mentransfernya ke lingkungan offline Anda, dan menggunakan grype db import
untuk gunakan database yang diberikan dalam kapasitas offline.
Jika Anda ingin mendistribusikan database Grype Anda sendiri secara internal tanpa perlu menggunakan db import
secara manual, Anda dapat memanfaatkan mekanisme pembaruan DB Grype. Untuk melakukan ini, Anda dapat membuat file listing.json
Anda sendiri yang serupa dengan yang ditemukan secara publik (lihat grype db list -o raw
untuk contoh file listing.json
publik kami) dan ubah URL unduhan agar mengarah ke titik akhir internal (misalnya bucket S3 pribadi, server file internal, dll). Setiap instalasi internal Grype dapat menerima pembaruan basis data secara otomatis dengan mengonfigurasi db.update-url
(sama seperti variabel lingkungan GRYPE_DB_UPDATE_URL
) untuk menunjuk ke file listing.json
yang dihosting yang telah Anda buat.
Grype menyediakan perintah CLI khusus database untuk pengguna yang ingin mengontrol database dari baris perintah. Berikut adalah beberapa perintah berguna yang disediakan:
grype db status
— melaporkan status database Grype saat ini (seperti lokasinya, tanggal pembuatan, dan checksum)
grype db check
— melihat apakah pembaruan tersedia untuk database
grype db update
— memastikan database terbaru telah diunduh ke direktori cache (Grype melakukan operasi ini di awal setiap pemindaian secara default)
grype db list
— unduh file daftar yang dikonfigurasi di db.update-url
dan tampilkan database yang tersedia untuk diunduh
grype db import
— menyediakan arsip database kepada grype untuk digunakan secara eksplisit (berguna untuk pembaruan DB offline)
grype db providers
- menyediakan daftar rinci penyedia basis data
Temukan informasi lengkap tentang perintah database Grype dengan menjalankan grype db --help
.
Grype memasok penyelesaian shell melalui implementasi CLI-nya (cobra). Hasilkan kode penyelesaian untuk shell Anda dengan menjalankan salah satu perintah berikut:
grype completion
go run ./cmd/grype completion
Ini akan menampilkan skrip shell ke STDOUT, yang kemudian dapat digunakan sebagai skrip penyelesaian untuk Grype. Menjalankan salah satu perintah di atas dengan flag -h
atau --help
akan memberikan instruksi tentang cara melakukannya untuk shell pilihan Anda.
Ketika runtime container tidak ada, grype masih dapat menggunakan kredensial yang dikonfigurasi di sumber kredensial umum (seperti ~/.docker/config.json
). Ini akan menarik gambar dari registri pribadi menggunakan kredensial ini. File konfigurasi adalah tempat kredensial Anda disimpan saat mengautentikasi dengan registri pribadi melalui beberapa perintah seperti docker login
. Untuk informasi lebih lanjut lihat dokumentasi go-containerregistry
.
Contoh config.json
terlihat seperti ini:
// config.json { "auths": { "registry.example.com": { "username": "AzureDiamond", "password": "hunter2" } } }
Anda dapat menjalankan perintah berikut sebagai contoh. Ini merinci konfigurasi pemasangan/lingkungan yang diperlukan kontainer untuk mengakses registri pribadi:
docker run -v ./config.json:/config/config.json -e "DOCKER_CONFIG=/config" anchore/grype:latest
Bagian di bawah ini menunjukkan alur kerja sederhana tentang cara memasang file konfigurasi ini sebagai rahasia ke dalam container di kubernetes.
Buat sebuah rahasia. Nilai config.json
itu penting. Ini mengacu pada spesifikasi yang dirinci di sini. Di bawah bagian ini adalah file secret.yaml
yang akan digunakan oleh konfigurasi pod sebagai volume. Kuncinya config.json
penting. Ini akan menjadi nama file ketika dipasang ke dalam pod.
apiVersion: v1
kind: Secret
metadata:
name: registry-config
namespace: grype
data:
config.json:
```
`kubectl apply -f secret.yaml`
Buat pod Anda yang menjalankan grype. Env DOCKER_CONFIG
penting karena mengiklankan di mana mencari file kredensial. Dalam contoh di bawah, pengaturan DOCKER_CONFIG=/config
memberi tahu grype bahwa kredensial dapat ditemukan di /config/config.json
. Inilah sebabnya kami menggunakan config.json
sebagai kunci rahasia kami. Saat dipasang ke dalam container, kunci rahasia digunakan sebagai nama file. Bagian volumeMounts
memasang rahasia kita ke /config
. Bagian volumes
memberi nama volume kita dan memanfaatkan rahasia yang kita buat pada langkah pertama.
apiVersion: v1
kind: Pod
spec:
containers:
- image: anchore/grype:latest
name: grype-private-registry-demo
env:
- name: DOCKER_CONFIG
value: /config
volumeMounts:
- mountPath: /config
name: registry-config
readOnly: true
args:
-
volumes:
- name: registry-config
secret:
secretName: registry-config
```
`kubectl apply -f pod.yaml`
Pengguna sekarang dapat menjalankan kubectl logs grype-private-registry-demo
. Log harus menunjukkan analisis grype untuk
yang disediakan dalam konfigurasi pod.
Dengan menggunakan informasi di atas, pengguna seharusnya dapat mengonfigurasi akses registri pribadi tanpa harus melakukannya di file konfigurasi grype
atau syft
. Mereka juga tidak akan bergantung pada daemon buruh pelabuhan, (atau perangkat lunak runtime lainnya) untuk konfigurasi dan akses registri.
Jalur pencarian konfigurasi default (lihat semua dengan grype config locations
):
.grype.yaml
.grype/config.yaml
~/.grype.yaml
Gunakan grype config
untuk mencetak contoh file konfigurasi ke stdout. Gunakan grype config --load
untuk mencetak konfigurasi saat ini setelah memuat semua nilai ke stdout.
Anda dapat menentukan file secara langsung menggunakan flag --config
/ -c
untuk menyediakan file/jalur konfigurasi Anda sendiri:
grype-c /path/to/config.yaml
Opsi konfigurasi (nilai contoh adalah default):
# aktifkan/nonaktifkan pemeriksaan pembaruan aplikasi saat startup# sama seperti GRYPE_CHECK_FOR_APP_UPDATE env varcheck-for-app-update: true# memungkinkan pengguna menentukan sumber gambar mana yang harus digunakan untuk menghasilkan sbom# nilai yang valid adalah: registry, docker, podman# sama seperti GRYPE_DEFAULT_IMAGE_PULL_SOURCE env vardefault-image-pull-source: ""# sama dengan --name; tetapkan nama target yang sedang dianalisisnama: ""# saat pemindaian, jika tingkat keparahan ditemukan pada atau di atas tingkat keparahan yang diberikan maka kode yang dikembalikan akan menjadi 1# default tidak disetel yang akan melewati validasi ini (opsi: dapat diabaikan, rendah, sedang , tinggi, kritis)# sama dengan --fail-on ; GRYPE_FAIL_ON_SEVERITY env varfail-on-severity: ""# format keluaran laporan kerentanan (opsi: tabel, templat, json, cyclonedx)# saat menggunakan templat sebagai tipe keluaran, Anda juga harus memberikan nilai untuk 'output-template- file'# sama dengan -o ; GRYPE_OUTPUT env varoutput: "table"# jika menggunakan keluaran templat, Anda harus menyediakan path ke file templat Go# lihat https://github.com/anchore/grype#using-templates untuk informasi lebih lanjut tentang keluaran templat# jalur default ke file template adalah direktori kerja saat ini# file template keluaran: .grype/html.tmpl# tulis laporan keluaran ke file (standarnya adalah menulis ke stdout)# sama seperti --berkas; GRYPE_FILE env varfile: ""# daftar gumpalan yang akan dikecualikan dari pemindaian, misalnya:# kecualikan:# - '/etc/**'# - './out/**/*.json'# sama dengan -- mengecualikan ; GRYPE_EXCLUDE env varexclude: []# sertakan kecocokan pada paket header-kernel yang cocok dengan paket kernel upstream# jika 'salah' setiap kecocokan tersebut ditandai sebagai diabaikan-cocok-upstream-kernel-header: false# os dan/atau arsitektur yang akan digunakan ketika mereferensikan gambar container (misalnya "windows/armv6" atau "arm64")# sama dengan --platform; GRYPE_PLATFORM env varplatform: ""# Jika menggunakan input SBOM, buat CPE secara otomatis ketika paket tidak memiliki noneadd-cpes-if-none: false# Secara eksplisit tentukan distribusi linux yang akan digunakan sebagai: seperti alpine:3.10distro:external -sumber: aktifkan: pakar palsu: pencarian-upstream-by-sha1: url dasar sebenarnya: https://repo1.maven.org/maven2db: # periksa pembaruan basis data saat eksekusi # sama seperti GRYPE_DB_AUTO_UPDATE env var pembaruan otomatis: benar # lokasi untuk menulis cache basis data kerentanan; defaultnya adalah $XDG_CACHE_HOME/grype/db # sama seperti GRYPE_DB_CACHE_DIR env var cache-dir: "" # URL database kerentanan # sama seperti GRYPE_DB_UPDATE_URL env var update-url: "https://toolbox-data.anchore.io/grype /databases/listing.json" # memastikan db build tidak lebih tua dari max-allowed-built-age # disetel ke false untuk menonaktifkan pemeriksaan validasi-age: true # Usia maksimum yang diizinkan untuk basis data kerentanan, # usia adalah waktu sejak database dibuat # Usia maksimum default adalah 120 jam (atau lima hari) maksimum yang diizinkan -usia bawaan: "120 jam" # Batas waktu untuk mengunduh GRYPE_DB_UPDATE_URL untuk melihat apakah database perlu diunduh # File ini berukuran ~156KiB pada 17-04-2024, jadi unduhannya harus cepat; sesuaikan sesuai kebutuhan batas waktu tunggu yang tersedia: "30 detik" # Batas waktu untuk mengunduh kerentanan aktual DB # DB berukuran ~156MB pada 17-04-2024 sehingga koneksi yang lebih lambat mungkin melebihi batas waktu default; sesuaikan seperlunya update-download-timeout: "120s"search: # ruang pencarian untuk mencari paket (pilihan: semua lapisan, tergencet) # sama seperti -s ; GRYPE_SEARCH_SCOPE env var scope: "squashed" # pencarian di dalam arsip yang berisi indeks file yang akan dicari (zip) # catatan: untuk saat ini hanya berlaku untuk katalog paket java # sama seperti GRYPE_PACKAGE_SEARCH_INDEXED_ARCHIVES env var indexed-archives: true # pencarian dalam arsip yang tidak berisi indeks file yang akan dicari (tar, tar.gz, tar.bz2, dll) # catatan: mengaktifkan ini dapat mengakibatkan dampak kinerja karena semua tar terkompresi yang ditemukan akan didekompresi # catatan: untuk saat ini hanya berlaku untuk katalog paket java # sama seperti GRYPE_PACKAGE_SEARCH_UNINDEXED_ARCHIVES env var unindexed-archives: false# opsi saat menarik secara langsung dari registri melalui skema "registri:": # lewati verifikasi TLS saat berkomunikasi dengan registri # sama seperti GRYPE_REGISTRY_INSECURE_SKIP_TLS_VERIFY env var insecure-skip-tls-verify: false # gunakan http alih-alih https saat menghubungkan ke registri # sama seperti GRYPE_REGISTRY_INSECURE_USE_HTTP env var insecure-use-http: false # jalur file ke sertifikat CA (atau direktori yang berisi *.crt, *.cert, *.pem) digunakan untuk menghasilkan sertifikat klien # GRYPE_REGISTRY_CA_CERT env var ca-cert: "" # kredensial untuk autentikasi registri tertentu: # URL ke registri (misalnya "docker.io", "localhost:5000", dll.) # GRYPE_REGISTRY_AUTH_AUTHORITY env var - otoritas: "" # GRYPE_REGISTRY_AUTH_USERNAME env var nama pengguna: "" # GRYPE_REGISTRY_AUTH_PASSWORD env var kata sandi: "" # catatan: token dan nama pengguna/kata sandi saling eksklusif # GRYPE_REGISTRY_AUTH_TOKEN env var token: "" # jalur file ke sertifikat klien yang digunakan untuk otentikasi TLS ke registri # GRYPE_REGISTRY_AUTH_TLS_CERT env var tls-cert: "" # jalur file ke kunci klien yang digunakan untuk otentikasi TLS ke registri # GRYPE_REGISTRY_AUTH_TLS_KEY env var tls-key: "" # - ... # catatan, lebih banyak kredensial dapat diberikan melalui file konfigurasi saja ( bukan env vars)log: # menekan semua output (kecuali daftar kerentanan) # sama seperti -q ; GRYPE_LOG_QUIET env var silent: false # meningkatkan verbositas # sama seperti GRYPE_LOG_VERBOSITY env var verbositas: 0 # level log; catatan: logging terperinci menekan ETUI # sama seperti GRYPE_LOG_LEVEL env var # Menggunakan level logging logrus: https://github.com/sirupsen/logrus#level-logging level: "error" # lokasi untuk menulis file log (defaultnya bukan untuk memiliki file log) # sama seperti GRYPE_LOG_FILE file env var: ""cocok: # menyetel pencocokan di bawah ini untuk menggunakan cpes ketika mencoba menemukan # kecocokan kerentanan. Pencocokan stok adalah # default ketika tidak ada pencocokan utama yang dapat diidentifikasi. java: menggunakan-cpes: false python: menggunakan-cpes: false javascript: menggunakan-cpes: false ruby: menggunakan-cpes: false dotnet: menggunakan-cpes: false golang: menggunakan-cpes: false # meskipun pencocokan CPE dinonaktifkan, buat pengecualian saat memindai "stdlib". selalu-gunakan-cpe-untuk-stdlib: benar # izinkan versi semu modul utama, yang mungkin hanya "ditebak" oleh Syft, untuk digunakan dalam pencocokan kerentanan izinkan-modul-utama-perbandingan-versi-semu: stok palsu : menggunakan-cpes: benar
Bidang-bidang pengembangan potensial berikut ini sedang diselidiki:
Dukungan untuk daftar yang diizinkan, pemetaan paket