เครื่องสแกนช่องโหว่สำหรับคอนเทนเนอร์อิมเมจและระบบไฟล์ ติดตั้งไบนารีได้อย่างง่ายดายเพื่อทดลองใช้ ทำงานร่วมกับ Syft ซึ่งเป็นเครื่องมือ SBOM (รายการวัสดุซอฟต์แวร์) อันทรงพลังสำหรับอิมเมจคอนเทนเนอร์และระบบไฟล์
ปฏิทิน: https://calendar.google.com/calendar/u/0/r?cid=Y182OTM4dGt0MjRtajI0NnNzOThiaGtnM29qNEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t
วาระการประชุม: https://docs.google.com/document/d/1ZtSAa6fj2a6KRWviTn3WoJm09edvrNUp4Iz_dOjjyY8/edit?usp=sharing (เข้าร่วมกลุ่มนี้เพื่อเข้าถึงการเขียน)
ยินดีต้อนรับทุกท่าน!
สำหรับตัวเลือกการสนับสนุนเชิงพาณิชย์กับ Syft หรือ Grype โปรดติดต่อ Anchore
สแกนเนื้อหาของคอนเทนเนอร์อิมเมจหรือระบบไฟล์เพื่อค้นหาช่องโหว่ที่ทราบ
ค้นหาช่องโหว่สำหรับแพ็คเกจระบบปฏิบัติการหลัก:
อัลไพน์
อเมซอน ลินุกซ์
BusyBox
CentOS
CBL-นาวิกโยธิน
เดเบียน
ไม่ทำลายล้าง
ออราเคิล ลินุกซ์
หมวกแดง (RHEL)
อูบุนตู
วูล์ฟฟี่
ค้นหาช่องโหว่สำหรับแพ็คเกจเฉพาะภาษา:
ทับทิม (อัญมณี)
ชวา (JAR, สงคราม, EAR, JPI, HPI)
จาวาสคริปต์ (NPM, เส้นด้าย)
Python (ไฟล์ Egg, Wheel, Poetry, Requirements.txt/setup.py)
ดอทเน็ต (deps.json)
โกลัง (go.mod)
PHP (ผู้แต่ง)
สนิม (สินค้า)
รองรับรูปแบบภาพ Docker, OCI และ Singularity
รองรับ OpenVEX สำหรับการกรองและเพิ่มผลการสแกน
หากคุณพบปัญหา โปรดแจ้งให้เราทราบโดยใช้เครื่องมือติดตามปัญหา
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | ช -s -- -b /usr/local/bin
ติดตั้งตัวเลือกสคริปต์:
-b
: ระบุไดเร็กทอรีการติดตั้งแบบกำหนดเอง (ค่าเริ่มต้นเป็น ./bin
bin )
-d
: ระดับการบันทึกโดยละเอียดเพิ่มเติม ( -d
สำหรับการดีบัก -dd
สำหรับการติดตาม)
-v
: ตรวจสอบลายเซ็นของสิ่งประดิษฐ์ที่ดาวน์โหลดก่อนการติดตั้ง (ต้องติดตั้ง cosign
)
การจำหน่าย grype แบบช็อกโกแลตนั้นได้รับการดูแลจากชุมชนและไม่ได้จัดจำหน่ายโดยทีมงานผู้ประกาศข่าว
choco ติดตั้ง grype -y
ชงก๊อกพุก / grype ชงติดตั้ง grype
บน macOS สามารถติดตั้ง Grype เพิ่มเติมได้จากพอร์ตที่ดูแลโดยชุมชนผ่าน MacPorts:
พอร์ต sudo ติดตั้ง grype
หมายเหตุ : ปัจจุบัน Grype สร้างขึ้นสำหรับ macOS และ Linux เท่านั้น
ดู DEVELOPING.md สำหรับคำแนะนำในการสร้างและเรียกใช้จากแหล่งที่มา
หากคุณใช้ GitHub Actions คุณสามารถใช้การดำเนินการแบบ Grype เพื่อสแกนช่องโหว่ในโค้ดหรืออิมเมจคอนเทนเนอร์ของคุณในระหว่างเวิร์กโฟลว์ CI ของคุณ
เช็คซัมจะถูกนำไปใช้กับอาร์ติแฟกต์ทั้งหมด และไฟล์เช็คซัมที่เป็นผลลัพธ์จะถูกเซ็นชื่อโดยใช้ cosign
คุณต้องมีเครื่องมือต่อไปนี้เพื่อตรวจสอบลายเซ็น:
โคซิก
ขั้นตอนการตรวจสอบมีดังนี้:
ดาวน์โหลดไฟล์ที่คุณต้องการ และไฟล์ checksums.txt, checksums.txt.pem และ checksums.txt.sig จากหน้าเผยแพร่:
ตรวจสอบลายเซ็น:
cosign ยืนยันหยด <เส้นทางไปยัง checksum.txt> --certificate <เส้นทางไปยัง checksums.txt.pem> --signature <เส้นทางไปยัง checksums.txt.sig> --certificate-identity-regexp 'https://github.com/anchore/grype/.github/workflows/.+' --certificate-oidc-ผู้ออก "https://token.actions.githubusercontent.com"
เมื่อลายเซ็นได้รับการยืนยันว่าถูกต้อง คุณสามารถดำเนินการต่อเพื่อตรวจสอบว่าผลรวม SHA256 สอดคล้องกับอาร์ติแฟกต์ที่ดาวน์โหลด:
sha256sum --ละเว้น-หายไป -c checksums.txt
ติดตั้งไบนารีและตรวจสอบให้แน่ใจว่า grype
พร้อมใช้งานในเส้นทางของคุณ วิธีสแกนหาช่องโหว่ในรูปภาพ:
grype <image>
คำสั่งดังกล่าวจะสแกนหาช่องโหว่ที่มองเห็นได้ในคอนเทนเนอร์ (เช่น การแสดงรูปภาพที่ถูกบีบอัด) หากต้องการรวมซอฟต์แวร์จากเลเยอร์ภาพทั้งหมดไว้ในการสแกนช่องโหว่ โดยไม่คำนึงถึงการแสดงตนในภาพสุดท้าย ให้ระบุ --scope all-layers
:
grype <image> --scope all-layers
หากต้องการเรียกใช้ grype จากคอนเทนเนอร์ Docker เพื่อให้สามารถสแกนคอนเทนเนอร์ที่ทำงานอยู่ได้ ให้ใช้คำสั่งต่อไปนี้:
นักเทียบท่า run --rm --volume /var/run/docker.sock:/var/run/docker.sock --name Grype Anchore/grype:latest $(ImageName):$(ImageTag)
Grype สามารถสแกนแหล่งที่มาต่างๆ นอกเหนือจากที่พบใน 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
แหล่งที่มาสามารถระบุได้อย่างชัดเจนด้วยโครงการ:
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)
หากไม่มีการระบุแหล่งที่มาของรูปภาพและไม่สามารถตรวจพบได้จากการอ้างอิงที่ให้มา จะถือว่ารูปภาพนั้นควรถูกดึงจาก Docker daemon หากไม่มีนักเทียบท่าอยู่ ระบบจะพยายาม Podman daemon ต่อไป ตามด้วยการติดต่อโดยตรงไปยังรีจีสทรีอิมเมจเป็นครั้งสุดท้าย
ลักษณะการทำงานเริ่มต้นนี้สามารถแทนที่ได้ด้วยตัวเลือกการกำหนดค่า default-image-pull-source
(ดูการกำหนดค่าสำหรับรายละเอียดเพิ่มเติม)
ใช้ SBOM เพื่อการสแกนช่องโหว่ที่รวดเร็วยิ่งขึ้นใน 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 รองรับอินพุตของรูปแบบ Syft, SPDX และ CycloneDX SBOM หาก Syft ได้สร้างไฟล์ประเภทใดประเภทหนึ่งเหล่านี้ ก็ควรมีข้อมูลที่เหมาะสมเพื่อให้ทำงานกับ Grype ได้อย่างถูกต้อง นอกจากนี้ยังเป็นไปได้ที่จะใช้ SBOM ที่สร้างโดยเครื่องมืออื่นๆ ที่มีระดับความสำเร็จที่แตกต่างกัน สองสิ่งที่ทำให้การจับคู่ Grype ประสบความสำเร็จมากขึ้นคือการรวมข้อมูลการแจกจ่าย CPE และ Linux หาก SBOM ไม่มีข้อมูล CPE ใดๆ ก็เป็นไปได้ที่จะสร้างข้อมูลเหล่านี้ตามข้อมูลแพ็กเกจโดยใช้แฟล็ก --add-cpes-if-none
หากต้องการระบุการแจกแจง ให้ใช้แฟล็ก --distro <distro>:<version>
ตัวอย่างแบบเต็มคือ:
grype --add-cpes-if-none --distro alpine:3.10 sbom:some-alpine-3.10.spdx.json
ไม่รองรับ Grype เวอร์ชันก่อน v0.40.1 ใดๆ รุ่นที่ไม่รองรับจะไม่ได้รับการอัพเดตซอฟต์แวร์หรืออัพเดตฐานข้อมูลช่องโหว่ คุณยังคงสามารถสร้างฐานข้อมูลช่องโหว่สำหรับ Grype รุ่นที่ไม่รองรับได้โดยใช้ vunnel รุ่นก่อนหน้าเพื่อรวบรวมข้อมูลอัปสตรีมและ grype-db เพื่อสร้างฐานข้อมูลสำหรับสคีมาที่ไม่รองรับ
Grype รองรับการสแกน SBOM เป็นอินพุตผ่าน stdin ผู้ใช้สามารถใช้ cosign เพื่อตรวจสอบการรับรองด้วย SBOM เป็นเนื้อหาเพื่อสแกนรูปภาพเพื่อหาช่องโหว่:
COSIGN_EXPERIMENTAL=1 cosign verify-attestation caphill4/java-spdx-tools:latest | jq -r .payload | base64 --decode | jq -r .predicate.Data | grype
{ "ช่องโหว่": { ... }, "ช่องโหว่ที่เกี่ยวข้อง": [ ... ], "รายละเอียดการจับคู่": [ ... ], "สิ่งประดิษฐ์": { ... - -
ช่องโหว่ : ข้อมูลทั้งหมดเกี่ยวกับช่องโหว่เฉพาะที่ได้รับการจับคู่โดยตรง (เช่น ID, ความรุนแรง, คะแนน CVSS, ข้อมูลการแก้ไข, ลิงก์สำหรับข้อมูลเพิ่มเติม)
RelatedVulnerabilities : ข้อมูลที่เกี่ยวข้องกับช่องโหว่ที่พบว่าเกี่ยวข้องกับช่องโหว่หลักที่รายงาน บางทีช่องโหว่ที่เราจับคู่อาจเป็น GitHub Security Advisory ซึ่งมี CVE ขั้นต้น (ในฐานข้อมูลช่องโหว่ระดับประเทศที่เชื่อถือได้) ในกรณีเหล่านี้ เราจะแสดงรายการช่องโหว่อัปสตรีมไว้ที่นี่
MatchDetails : ส่วนนี้พยายามอธิบายสิ่งที่เราค้นหาในขณะที่ค้นหาคู่ที่ตรงกัน รวมถึงรายละเอียดเกี่ยวกับแพ็คเกจและช่องโหว่ที่นำไปสู่การจับคู่
สิ่งประดิษฐ์ : นี่เป็นชุดย่อยของข้อมูลที่เรารู้เกี่ยวกับแพ็คเกจ (เมื่อเปรียบเทียบกับเอาต์พุต Syft json เราจะสรุปส่วนข้อมูลเมตา) ข้อมูลนี้มีข้อมูลเกี่ยวกับตำแหน่งภายในอิมเมจคอนเทนเนอร์หรือไดเร็กทอรีที่เราพบแพ็คเกจ ประเภทของแพ็คเกจ ข้อมูลใบอนุญาต pURLs CPE ฯลฯ
Grype สามารถแยกไฟล์และเส้นทางไม่ให้ถูกสแกนภายในแหล่งที่มาได้โดยใช้นิพจน์ glob ที่มีพารามิเตอร์ --exclude
อย่างน้อยหนึ่งพารามิเตอร์:
grype <source> --exclude './out/**/*.json' --exclude /etc
หมายเหตุ: ในกรณีของ การสแกนรูปภาพ เนื่องจากระบบไฟล์ทั้งหมดถูกสแกน จึงเป็นไปได้ที่จะใช้เส้นทางที่แน่นอน เช่น /etc
หรือ /usr/**/*.txt
ในขณะที่ การสแกนไดเรกทอรี จะแยกไฟล์ ที่เกี่ยวข้องกับไดเรกทอรีที่ระบุ ตัวอย่างเช่น: การสแกน /usr/foo
ด้วย --exclude ./package.json
จะยกเว้น /usr/foo/package.json
และ --exclude '**/package.json'
จะยกเว้นไฟล์ package.json
ทั้งหมดภายใต้ /usr/foo
สำหรับ การสแกนไดเร็กทอรี จำเป็นต้องเริ่มต้นนิพจน์พาธด้วย ./
, */
หรือ **/
ซึ่งทั้งหมดนี้จะถูกแก้ไข โดยสัมพันธ์กับไดเร็กทอรีการสแกนที่ระบุ โปรดทราบว่าเชลล์ของคุณอาจพยายามขยายไวด์การ์ด ดังนั้นให้ใส่พารามิเตอร์เหล่านั้นไว้ในเครื่องหมายคำพูดเดี่ยว เช่น: '**/*.json'
Grype สามารถกำหนดค่าให้รวมแหล่งข้อมูลภายนอกเพื่อเพิ่มความเที่ยงตรงในการจับคู่ช่องโหว่ ขณะนี้คุณลักษณะนี้ปิดใช้งานตามค่าเริ่มต้น หากต้องการเปิดใช้งานคุณสมบัตินี้ให้เพิ่มสิ่งต่อไปนี้ในการกำหนดค่า grype:
แหล่งที่มาภายนอก: เปิดใช้งาน: maven จริง: search-upstream-by-sha1: true base-url: https://repo1.maven.org/maven2
คุณยังสามารถกำหนดค่า base-url ได้หากคุณใช้รีจิสตรีอื่นเป็นจุดสิ้นสุด Maven ของคุณ
รูปแบบเอาต์พุตสำหรับ Grype สามารถกำหนดค่าได้เช่นกัน:
grype <image> -o <format>
ในกรณีที่มีรูปแบบให้เลือก:
table
: สรุปเรียงเป็นแนว (ค่าเริ่มต้น)
cyclonedx
: รายงาน XML ที่สอดคล้องกับข้อกำหนด CycloneDX 1.6
cyclonedx-json
: รายงาน JSON ที่สอดคล้องกับข้อกำหนด CycloneDX 1.6
json
: ใช้สิ่งนี้เพื่อรับข้อมูลจาก Grype ให้ได้มากที่สุด!
sarif
: ใช้ตัวเลือกนี้เพื่อรับรายงาน SARIF (รูปแบบการแลกเปลี่ยนผลลัพธ์การวิเคราะห์แบบคงที่)
template
: อนุญาตให้ผู้ใช้ระบุรูปแบบเอาต์พุต ดู "การใช้เทมเพลต" ด้านล่าง
Grype ให้คุณกำหนดรูปแบบเอาต์พุตแบบกำหนดเองได้โดยใช้เทมเพลต Go นี่คือวิธีการทำงาน:
กำหนดรูปแบบของคุณเป็นเทมเพลต Go และบันทึกเทมเพลตนี้เป็นไฟล์
ตั้งค่ารูปแบบเอาต์พุตเป็น "template" ( -o template
)
ระบุพาธไปยังไฟล์เทมเพลต ( -t ./path/to/custom.template
)
การประมวลผลเทมเพลตของ Grype ใช้โมเดลข้อมูลเดียวกันกับรูปแบบเอาต์พุต json
ดังนั้นหากคุณสงสัยว่ามีข้อมูลใดบ้างเมื่อคุณสร้างเทมเพลต คุณสามารถใช้เอาต์พุตจาก grype <image> -o json
เป็นข้อมูลอ้างอิงได้
โปรดทราบ: เทมเพลตสามารถเข้าถึงข้อมูลเกี่ยวกับระบบที่พวกเขากำลังใช้งานอยู่ เช่น ตัวแปรสภาพแวดล้อม คุณไม่ควรเรียกใช้เทมเพลตที่ไม่น่าเชื่อถือ
มีเทมเพลตตัวอย่างหลายรายการในไดเร็กทอรีเทมเพลตในซอร์ส Grype ซึ่งสามารถใช้เป็นจุดเริ่มต้นสำหรับรูปแบบเอาต์พุตแบบกำหนดเองได้ ตัวอย่างเช่น csv.tmpl จะสร้างรายงานช่องโหว่ในรูปแบบ CSV (ค่าที่คั่นด้วยเครื่องหมายจุลภาค)
"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"
...
คุณยังค้นหาเทมเพลตสำหรับรูปแบบเอาต์พุต "ตาราง" เริ่มต้นได้จากที่เดียวกัน
Grype ยังมีฟังก์ชันการสร้างเทมเพลตยูทิลิตี้มากมายจาก sprig นอกเหนือจากข้อความ/เทมเพลต golang เริ่มต้น เพื่อให้ผู้ใช้ปรับแต่งเอาต์พุตจาก Grype ได้
คุณสามารถให้ Grype ออกโดยมีข้อผิดพลาดได้ หากมีการรายงานช่องโหว่ใดๆ ที่หรือสูงกว่าระดับความรุนแรงที่ระบุ สิ่งนี้มีประโยชน์เมื่อใช้ Grype ภายในสคริปต์หรือไปป์ไลน์ CI เมื่อต้องการทำเช่นนี้ ให้ใช้แฟล็ก --fail-on <severity>
CLI
ตัวอย่างเช่น ต่อไปนี้คือวิธีที่คุณสามารถกระตุ้นให้เกิดความล้มเหลวไปป์ไลน์ CI หากพบช่องโหว่ใน ubuntu:latest
ที่มีระดับความรุนแรง "ปานกลาง" หรือสูงกว่า:
grype ubuntu:latest --fail-on medium
หากคุณเห็น Grype รายงาน ผลบวกลวง หรือการจับคู่ช่องโหว่อื่นๆ ที่คุณไม่ต้องการเห็น คุณสามารถบอกให้ Grype เพิกเฉยต่อ การจับ คู่ได้โดยการระบุ "ละเว้นกฎ" อย่างน้อยหนึ่งกฎในไฟล์การกำหนดค่า Grype ของคุณ (เช่น ~/.grype.yaml
) ซึ่งจะทำให้ Grype ไม่ต้องรายงานช่องโหว่ที่ตรงกับเกณฑ์ที่ระบุโดยกฎการเพิกเฉยใดๆ ของคุณ
แต่ละกฎสามารถระบุเกณฑ์ต่อไปนี้รวมกันได้:
รหัสช่องโหว่ (เช่น "CVE-2008-4318"
)
เนมสเปซ (เช่น "nvd"
)
สถานะการแก้ไข (ค่าที่อนุญาต: "fixed"
, "not-fixed"
, "wont-fix"
หรือ "unknown"
)
ชื่อแพ็คเกจ (เช่น "libcurl"
)
เวอร์ชันแพ็คเกจ (เช่น "1.5.1"
)
ภาษาแพ็คเกจ (เช่น "python"
ค่าเหล่านี้ถูกกำหนดไว้ที่นี่)
ประเภทแพ็คเกจ (เช่น "npm"
ค่าเหล่านี้ถูกกำหนดไว้ที่นี่)
ตำแหน่งแพ็คเกจ (เช่น "/usr/local/lib/node_modules/**"
; รองรับรูปแบบ glob)
ต่อไปนี้เป็นตัวอย่าง ~/.grype.yaml
ที่แสดงรูปแบบที่ต้องการสำหรับกฎการละเว้น:
ละเว้น: # นี่คือชุดฟิลด์กฎที่รองรับทั้งหมด: - ช่องโหว่: CVE-2008-4318 แก้ไขสถานะ: ไม่ทราบ # ฟิลด์ VEX จะถูกนำไปใช้เมื่อ Grype อ่านข้อมูล vex: vex-status: not_affected vex-justification: allowance_code_not_present แพ็คเกจ: ชื่อ: libcurl เวอร์ชัน: 1.5.1 ประเภท: ตำแหน่ง npm: "/ usr/local/lib/node_modules/**" # เราสามารถสร้างกฎให้ตรงกันได้ รหัสช่องโหว่: - ช่องโหว่: CVE-2014-54321 # ...หรือเพียงฟิลด์แพ็คเกจเดียว: - แพ็คเกจ : ชนิด : อัญมณี
การแข่งขันที่มีช่องโหว่จะถูกละเว้นหากมีกฎ ใดๆ ที่มีผลกับการแข่งขัน กฎจะถือว่านำไปใช้กับการจับคู่ช่องโหว่ที่ระบุเฉพาะเมื่อฟิลด์ ทั้งหมด ที่ระบุในกฎใช้กับการจับคู่ช่องโหว่เท่านั้น
เมื่อคุณเรียกใช้ Grype ในขณะที่ระบุกฎการละเว้น สิ่งต่อไปนี้จะเกิดขึ้นกับการจับคู่ช่องโหว่ที่ถูก "ละเว้น":
การแข่งขันที่ละเว้นจะถูก ซ่อนไว้อย่างสมบูรณ์ จากเอาต์พุตของ Grype ยกเว้นเมื่อใช้รูปแบบเอาต์พุต json
หรือ template
อย่างไรก็ตาม ในทั้งสองรูปแบบนี้ รายการที่ตรงกันที่ถูกละเว้นจะ ถูกลบออก จากฟิลด์อาร์เรย์ matches
ที่มีอยู่ และจะถูกวางไว้ในฟิลด์อาร์เรย์ ignoredMatches
ใหม่ การจับคู่ที่ถูกละเว้นแต่ละรายการยังมีช่องเพิ่มเติม appliedIgnoreRules
ซึ่งเป็นอาร์เรย์ของกฎใดๆ ที่ทำให้ Grype เพิกเฉยต่อการจับคู่ช่องโหว่นี้
การจับคู่ที่ถูกละเว้น จะไม่ คำนึงถึงการตัดสินใจสถานะการออกของ Grype เมื่อใช้ --fail-on <severity>
ตัวอย่างเช่น หากผู้ใช้ระบุ --fail-on critical
และการจับคู่ช่องโหว่ทั้งหมดที่พบกับความรุนแรง "วิกฤติ" ถูก ละเว้น Grype จะออกจากศูนย์
หมายเหตุ: โปรด รายงาน ผลบวกลวงที่คุณเห็นต่อไป! แม้ว่าคุณจะสามารถกรองผลบวกลวงออกได้อย่างน่าเชื่อถือโดยใช้กฎการเพิกเฉย แต่ก็มีประโยชน์มากสำหรับชุมชน Grype ถ้าเรามีความรู้เกี่ยวกับผลบวกลวงของ Grype มากที่สุดเท่าที่จะเป็นไปได้ สิ่งนี้ช่วยให้เราปรับปรุง Grype อย่างต่อเนื่อง!
หากคุณต้องการให้ Grype รายงานช่องโหว่ ที่มีการแก้ไขที่ได้รับการยืนยัน แล้ว คุณสามารถใช้แฟล็ก --only-fixed
(ซึ่งจะเพิ่มกฎการเพิกเฉยลงในการกำหนดค่าของ Grype โดยอัตโนมัติ โดยที่ช่องโหว่ที่ไม่ได้รับการแก้ไขจะถูกละเว้น)
ตัวอย่างเช่น นี่คือการสแกน 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
...และนี่คือการสแกนแบบเดียวกัน แต่เพิ่มการตั้งค่าสถานะ --only-fixed
:
NAME INSTALLED FIXED-IN VULNERABILITY SEVERITY apk-tools 2.10.6-r0 2.10.7-r0 CVE-2021-36159 Critical
หากคุณต้องการให้ Grype รายงานเฉพาะช่องโหว่ ที่ไม่มีการแก้ไขที่ได้รับการยืนยัน คุณสามารถใช้แฟล็ก --only-notfixed
หรือคุณสามารถใช้แฟล็ก --ignore-states
เพื่อกรองผลลัพธ์สำหรับช่องโหว่ที่มีสถานะเฉพาะ เช่น wont-fix
(ดู --help
สำหรับรายการสถานะการแก้ไขที่ถูกต้อง) การตั้งค่าสถานะเหล่านี้จะเพิ่มกฎการเพิกเฉยลงในการกำหนดค่าของ Grype โดยอัตโนมัติ โดยที่ช่องโหว่ที่ได้รับการแก้ไขแล้วหรือจะไม่ได้รับการแก้ไขจะถูกเพิกเฉย
Grype สามารถใช้ข้อมูล VEX (Vulnerability Exploitability Exchange) เพื่อกรองผลบวกลวงหรือให้บริบทเพิ่มเติม เพื่อเพิ่มการจับคู่ เมื่อสแกนอิมเมจคอนเทนเนอร์ คุณสามารถใช้แฟล็ก --vex
เพื่อชี้ไปที่เอกสาร OpenVEX อย่างน้อย 1 รายการ
คำสั่ง VEX เกี่ยวข้องกับผลิตภัณฑ์ (อิมเมจคอนเทนเนอร์) ช่องโหว่ และสถานะ VEX เพื่อแสดงการยืนยันถึงผลกระทบของช่องโหว่ มีสถานะ VEX สี่สถานะ: not_affected
, affected
, fixed
และ under_investigation
นี่คือตัวอย่างเอกสาร OpenVEX แบบธรรมดา (เคล็ดลับ: ใช้ vexctl
เพื่อสร้างเอกสารของคุณเอง)
{ "@context": "https://openvex.dev/ns/v0.2.0", "@id": "https://openvex.dev/docs/public/vex-d4e9020b6d0d26f131d535e055902dd6ccf3e2088bce3079a8cd3588a4b14c78", "ผู้เขียน": " ก ผู้ใช้ Grype <[email protected]>", "timestamp": "2023-07-17T18:28:47.696004345-06:00", "version": 1, "statements": [ { "ช่องโหว่": { "ชื่อ": "CVE-2023-1255" }, "สินค้า": [ { "@id": "pkg:oci/alpine@sha256%3A124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126", "ส่วนประกอบย่อย": [ { "@id": "pkg:apk/alpine/[email protected]" }, { "@id": "pkg:apk/alpine/[email protected]" } - - ], "สถานะ": "แก้ไขแล้ว" - - -
ตามค่าเริ่มต้น Grype จะใช้คำสั่งใดๆ ในเอกสาร VEX ที่ระบุซึ่งมีสถานะ not_affected
หรือ fixed
เพื่อย้ายรายการที่ตรงกันไปยังชุดละเว้น
การจับคู่ใด ๆ ที่ถูกละเว้นอันเป็นผลมาจากคำสั่ง VEX จะถูกตั้งค่าสถานะเมื่อใช้ --show-suppressed
:
libcrypto3 3.0.8-r3 3.0.8-r4 apk CVE-2023-1255 Medium (suppressed by VEX)
ข้อความที่มีสถานะ affected
หรือ under_investigation
จะได้รับการพิจารณาเพื่อเพิ่มชุดผลลัพธ์เมื่อมีการร้องขอโดยเฉพาะโดยใช้ตัวแปรสภาพแวดล้อม GRYPE_VEX_ADD
หรือในไฟล์การกำหนดค่า
สามารถเขียนกฎการเพิกเฉยเพื่อควบคุมวิธีที่ Grype ให้เกียรติคำสั่ง VEX ตัวอย่างเช่น ในการกำหนดค่า Grype ให้ดำเนินการเฉพาะกับคำสั่ง VEX เมื่อเหตุผลเป็นช่อง vulnerable_code_not_present
คุณสามารถเขียนกฎดังนี้:
---ไม่สนใจ: - สถานะ vex: not_affected vex-justification:เปราะบาง_code_not_present
ดูรายการเหตุผลเพื่อดูรายละเอียด คุณสามารถผสม vex-status
และ vex-justification
กับพารามิเตอร์กฎการละเว้นอื่นๆ ได้
เมื่อ Grype ทำการสแกนหาช่องโหว่ Grype จะดำเนินการดังกล่าวโดยใช้ฐานข้อมูลช่องโหว่ที่จัดเก็บไว้ในระบบไฟล์ในเครื่องของคุณ ซึ่งสร้างขึ้นโดยการดึงข้อมูลจากแหล่งข้อมูลช่องโหว่ต่างๆ ที่เปิดเผยต่อสาธารณะ แหล่งที่มาเหล่านี้ได้แก่:
อัลไพน์ Linux SecDB: https://secdb.alpinelinux.org/
Amazon Linux ALAS: https://alas.aws.amazon.com/AL2/alas.rss
Chainguard SecDB: https://packages.cgr.dev/chainguard/security.json
ตัวติดตาม Debian Linux CVE: https://security-tracker.debian.org/tracker/data/json
คำแนะนำด้านความปลอดภัย GitHub (GHSA): https://github.com/advisories
ฐานข้อมูลช่องโหว่แห่งชาติ (NVD): https://nvd.nist.gov/vuln/data-feeds
ออราเคิล ลินุกซ์ OVAL: https://linux.oracle.com/security/oval/
ข้อมูลความปลอดภัยของ 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/
ความปลอดภัยของ Ubuntu Linux: https://people.canonical.com/~ubuntu-security/
Wolfi SecDB: https://packages.wolfi.dev/os/security.json
ตามค่าเริ่มต้น Grype จะจัดการฐานข้อมูลนี้ให้คุณโดยอัตโนมัติ Grype ตรวจสอบการอัปเดตใหม่ในฐานข้อมูลช่องโหว่เพื่อให้แน่ใจว่าการสแกนทุกครั้งใช้ข้อมูลช่องโหว่ที่ทันสมัย ลักษณะการทำงานนี้สามารถกำหนดค่าได้ สำหรับข้อมูลเพิ่มเติม โปรดดูส่วนการจัดการฐานข้อมูลของ Grype
ฐานข้อมูลช่องโหว่ของ Grype เป็นไฟล์ SQLite ชื่อ vulnerability.db
การอัปเดตฐานข้อมูลเป็นแบบอะตอมมิก: Grype แทนที่ฐานข้อมูลทั้งหมดแล้วถือว่าเป็น "อ่านอย่างเดียว"
ขั้นตอนแรกของ Grype ในการอัพเดตฐานข้อมูลคือการค้นหาฐานข้อมูลที่พร้อมสำหรับการเรียกค้น Grype ทำสิ่งนี้โดยขอ "ไฟล์รายการ" จากจุดสิ้นสุดสาธารณะ:
https://toolbox-data.anchore.io/grype/databases/listing.json
ไฟล์รายการประกอบด้วยรายการสำหรับทุกฐานข้อมูลที่พร้อมให้ดาวน์โหลด
ต่อไปนี้เป็นตัวอย่างของรายการในไฟล์รายการ:
{ "สร้าง": "2021-10-21T08:13:41Z", "เวอร์ชัน": 3, "url": "https://toolbox-data.anchore.io/grype/databases/vulnerability-db_v3_2021-10- 21T08:13:41Z.tar.gz", "เช็คซัม": "sha256:8c99fb4e516f10b304f026267c2a73a474e2df878a59bf688cfb0f094bfe7a91"}
ด้วยข้อมูลนี้ Grype สามารถเลือกฐานข้อมูลที่ถูกต้อง (ฐานข้อมูลที่สร้างขึ้นล่าสุดด้วยเวอร์ชันสคีมาปัจจุบัน) ดาวน์โหลดฐานข้อมูล และตรวจสอบความสมบูรณ์ของฐานข้อมูลโดยใช้ค่า checksum
ที่ระบุไว้
หมายเหตุ: ในระหว่างการใช้งานปกติ ผู้ใช้ไม่จำเป็นต้องจัดการฐานข้อมูลของ Grype! Grype จัดการฐานข้อมูลเบื้องหลัง อย่างไรก็ตาม สำหรับผู้ใช้ที่ต้องการการควบคุมที่มากขึ้น Grype มีตัวเลือกในการจัดการฐานข้อมูลให้ชัดเจนยิ่งขึ้น
ตามค่าเริ่มต้น ฐานข้อมูลจะถูกแคชไว้บนระบบไฟล์ในเครื่องในไดเร็กทอรี $XDG_CACHE_HOME/grype/db/<SCHEMA-VERSION>/
ตัวอย่างเช่น บน macOS ฐานข้อมูลจะถูกจัดเก็บไว้ใน ~/Library/Caches/grype/db/3/
(สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพาธ XDG โปรดดูข้อกำหนดเฉพาะของไดเร็กทอรีฐาน XDG)
คุณสามารถตั้งค่าเส้นทางไดเรกทอรีแคชได้โดยใช้ตัวแปรสภาพแวดล้อม GRYPE_DB_CACHE_DIR
หากการตั้งค่าตัวแปรนั้นเพียงอย่างเดียวไม่ได้ผล อาจจำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อม TMPDIR
ด้วย
Grype ต้องการข้อมูลช่องโหว่ที่เป็นปัจจุบันเพื่อให้การจับคู่ที่แม่นยำ ตามค่าเริ่มต้น การดำเนินการจะล้มเหลวหากไม่มีการสร้างฐานข้อมูลภายในเครื่องในช่วง 5 วันที่ผ่านมา การตรวจสอบความเก่าของข้อมูลสามารถกำหนดค่าได้ผ่านตัวแปรสภาพแวดล้อม GRYPE_DB_MAX_ALLOWED_BUILT_AGE
และ GRYPE_DB_VALIDATE_AGE
หรือฟิลด์ max-allowed-built-age
และ validate-age
ภายใต้ db
มันใช้ไวยากรณ์ระยะเวลาของ golang ตั้งค่า GRYPE_DB_VALIDATE_AGE
หรือ validate-age
เป็น false
เพื่อปิดใช้งานการตรวจสอบความล้าสมัย
ตามค่าเริ่มต้น Grype จะตรวจสอบฐานข้อมูลใหม่ทุกครั้งที่ใช้งาน โดยการโทรผ่านเครือข่ายผ่านอินเทอร์เน็ต คุณสามารถบอก Grype ได้ว่าอย่าทำการตรวจสอบนี้โดยการตั้งค่าตัวแปรสภาพแวดล้อม GRYPE_DB_AUTO_UPDATE
เป็น false
ตราบใดที่คุณวางไฟล์ vulnerability.db
และ metadata.json
ของ Grype ในไดเร็กทอรีแคชสำหรับเวอร์ชันสคีมาที่คาดไว้ Grype ก็ไม่จำเป็นต้องเข้าถึงเครือข่าย นอกจากนี้ คุณยังสามารถรับรายการไฟล์เก็บถาวรฐานข้อมูลที่พร้อมให้ดาวน์โหลดได้จากคำสั่ง grype db list
ในสภาพแวดล้อมออนไลน์ ดาวน์โหลดไฟล์เก็บถาวรฐานข้อมูล ถ่ายโอนไปยังสภาพแวดล้อมออฟไลน์ของคุณ และใช้ grype db import <db-archive-path>
เพื่อ ใช้ฐานข้อมูลที่กำหนดในความจุออฟไลน์
หากคุณต้องการกระจายฐานข้อมูล Grype ของคุณเองเป็นการภายในโดยไม่จำเป็นต้องใช้ db import
ด้วยตนเอง คุณสามารถใช้ประโยชน์จากกลไกการอัปเดต DB ของ Grype ได้ ในการดำเนินการนี้ คุณสามารถสร้างไฟล์ listing.json
ของคุณเองได้คล้ายกับไฟล์ที่พบในสาธารณะ (ดู grype db list -o raw
สำหรับตัวอย่างไฟล์ listing.json
ของเรา) และเปลี่ยน URL ดาวน์โหลดให้ชี้ไปยังจุดสิ้นสุดภายใน (เช่น บัคเก็ต S3 ส่วนตัว, เซิร์ฟเวอร์ไฟล์ภายใน ฯลฯ) การติดตั้ง Grype ภายในใดๆ สามารถรับการอัปเดตฐานข้อมูลได้โดยอัตโนมัติโดยการกำหนดค่า db.update-url
(เหมือนกับตัวแปรสภาพแวดล้อม GRYPE_DB_UPDATE_URL
) ให้ชี้ไปที่ไฟล์ listing.json
ที่โฮสต์ที่คุณสร้างขึ้น
Grype มีคำสั่ง CLI เฉพาะฐานข้อมูลสำหรับผู้ใช้ที่ต้องการควบคุมฐานข้อมูลจากบรรทัดคำสั่ง ต่อไปนี้คือคำสั่งที่มีประโยชน์บางส่วนที่มีให้:
grype db status
— รายงานสถานะปัจจุบันของฐานข้อมูลของ Grype (เช่น ตำแหน่ง วันที่สร้าง และผลรวมตรวจสอบ)
grype db check
— ดูว่ามีการอัพเดตสำหรับฐานข้อมูลหรือไม่
grype db update
— ตรวจสอบให้แน่ใจว่าได้ดาวน์โหลดฐานข้อมูลล่าสุดไปยังไดเร็กทอรีแคชแล้ว (Grype ดำเนินการนี้เมื่อเริ่มต้นการสแกนทุกครั้งตามค่าเริ่มต้น)
grype db list
— ดาวน์โหลดไฟล์รายชื่อที่กำหนดค่าไว้ที่ db.update-url
และแสดงฐานข้อมูลที่พร้อมให้ดาวน์โหลด
grype db import
— ให้ grype พร้อมไฟล์เก็บถาวรฐานข้อมูลเพื่อใช้งานอย่างชัดเจน (มีประโยชน์สำหรับการอัพเดตฐานข้อมูลออฟไลน์)
grype db providers
- จัดทำรายชื่อผู้ให้บริการฐานข้อมูลโดยละเอียด
ค้นหาข้อมูลที่สมบูรณ์เกี่ยวกับคำสั่งฐานข้อมูลของ Grype โดยการเรียกใช้ grype db --help
Grype จัดหากระบวนการสร้างเชลล์ให้สมบูรณ์ด้วยการใช้ CLI (งูเห่า) สร้างโค้ดการเสร็จสิ้นสำหรับเชลล์ของคุณโดยการรันคำสั่งใดคำสั่งหนึ่งต่อไปนี้:
grype completion <bash|zsh|fish>
go run ./cmd/grype completion <bash|zsh|fish>
สิ่งนี้จะส่งออกเชลล์สคริปต์ไปที่ STDOUT ซึ่งสามารถใช้เป็นสคริปต์การเสร็จสิ้นสำหรับ Grype ได้ การรันคำสั่งใดคำสั่งหนึ่งข้างต้นด้วยแฟล็ก -h
หรือ --help
จะให้คำแนะนำเกี่ยวกับวิธีการดำเนินการดังกล่าวสำหรับเชลล์ที่คุณเลือก
เมื่อไม่มีคอนเทนเนอร์รันไทม์ grype ยังคงสามารถใช้ข้อมูลรับรองที่กำหนดค่าไว้ในแหล่งข้อมูลรับรองทั่วไป (เช่น ~/.docker/config.json
) มันจะดึงรูปภาพจากการลงทะเบียนส่วนตัวโดยใช้ข้อมูลรับรองเหล่านี้ ไฟล์กำหนดค่าเป็นที่เก็บข้อมูลรับรองของคุณเมื่อตรวจสอบสิทธิ์กับรีจิสทรีส่วนตัวผ่านคำสั่งบางอย่างเช่น docker login
สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบ go-containerregistry
ตัวอย่าง config.json
มีลักษณะดังนี้:
// config.json { "auths": { "registry.example.com": { "username": "AzureDiamond", "password": "hunter2" } } }
คุณสามารถรันคำสั่งต่อไปนี้เป็นตัวอย่าง โดยให้รายละเอียดเกี่ยวกับการกำหนดค่าการเมานท์/สภาพแวดล้อมที่คอนเทนเนอร์จำเป็นต้องเข้าถึงรีจิสทรีส่วนตัว:
docker run -v ./config.json:/config/config.json -e "DOCKER_CONFIG=/config" anchore/grype:latest <private_image>
ส่วนด้านล่างแสดงขั้นตอนการทำงานง่ายๆ เกี่ยวกับวิธีเมานต์ไฟล์กำหนดค่านี้เป็นความลับในคอนเทนเนอร์บน Kubernetes
สร้างความลับ ค่าของ config.json
มีความสำคัญ มันอ้างถึงข้อกำหนดที่มีรายละเอียดอยู่ที่นี่ ด้านล่างส่วนนี้คือไฟล์ secret.yaml
ที่การกำหนดค่าพ็อดจะใช้เป็นโวลุ่ม คีย์ config.json
มีความสำคัญ มันจะกลายเป็นชื่อของไฟล์เมื่อเมานท์ลงในพ็อด
apiVersion: v1
kind: Secret
metadata:
name: registry-config
namespace: grype
data:
config.json: <base64 encoded config.json>
```
`kubectl apply -f secret.yaml`
สร้างพ็อดของคุณที่กำลังรัน grype env DOCKER_CONFIG
มีความสำคัญเนื่องจากจะโฆษณาตำแหน่งที่จะค้นหาไฟล์ข้อมูลประจำตัว ในตัวอย่างด้านล่าง การตั้งค่า DOCKER_CONFIG=/config
จะแจ้งให้ grype ทราบว่าข้อมูลประจำตัวสามารถพบได้ที่ /config/config.json
นี่คือสาเหตุที่เราใช้ config.json
เป็นกุญแจไขความลับของเรา เมื่อติดตั้งในคอนเทนเนอร์ รหัสลับจะถูกใช้เป็นชื่อไฟล์ ส่วน volumeMounts
จะยึดความลับของเราไปที่ /config
ส่วน volumes
จะตั้งชื่อวอลุ่มของเราและใช้ประโยชน์จากความลับที่เราสร้างขึ้นในขั้นตอนที่หนึ่ง
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:
- <private_image>
volumes:
- name: registry-config
secret:
secretName: registry-config
```
`kubectl apply -f pod.yaml`
ขณะนี้ผู้ใช้สามารถเรียกใช้ kubectl logs grype-private-registry-demo
บันทึกควรแสดงการวิเคราะห์ grype สำหรับ <private_image>
ที่ให้ไว้ในการกำหนดค่าพ็อด
เมื่อใช้ข้อมูลข้างต้น ผู้ใช้ควรจะสามารถกำหนดค่าการเข้าถึงรีจิสทรีส่วนตัวได้โดยไม่ต้องดำเนินการดังกล่าวในไฟล์การกำหนดค่า grype
หรือ syft
นอกจากนี้ยังจะไม่ขึ้นอยู่กับ docker daemon (หรือซอฟต์แวร์รันไทม์อื่นๆ) สำหรับการกำหนดค่าและการเข้าถึงรีจิสทรี
เส้นทางการค้นหาการกำหนดค่าเริ่มต้น (ดูทั้งหมดด้วย grype config locations
):
.grype.yaml
.grype/config.yaml
~/.grype.yaml
<XDG_CONFIG_HOME>/grype/config.yaml
ใช้ grype config
เพื่อพิมพ์ไฟล์ปรับแต่งตัวอย่างไปยัง stdout ใช้ grype config --load
เพื่อพิมพ์การกำหนดค่าปัจจุบันหลังจากโหลดค่าทั้งหมดไปที่ stdout
คุณสามารถระบุไฟล์ได้โดยตรงโดยใช้แฟล็ก --config
/ -c
เพื่อจัดเตรียมไฟล์/พาธการกำหนดค่าของคุณเอง:
grype <image> -c /path/to/config.yaml
ตัวเลือกการกำหนดค่า (ค่าตัวอย่างเป็นค่าเริ่มต้น):
# เปิด/ปิดการตรวจสอบการอัปเดตแอปพลิเคชันเมื่อเริ่มต้น# เช่นเดียวกับ GRYPE_CHECK_FOR_APP_UPDATE env varcheck-for-app-update: true# อนุญาตให้ผู้ใช้ระบุแหล่งที่มาของรูปภาพที่ควรใช้เพื่อสร้าง sbom# ค่าที่ถูกต้องคือ: รีจิสทรี, นักเทียบท่า, podman# เช่นเดียวกับ GRYPE_DEFAULT_IMAGE_PULL_SOURCE env vardefault-image-pull-source: ""# เหมือนกับ --name; ตั้งชื่อของเป้าหมายที่กำลังวิเคราะห์ชื่อ: ""# เมื่อสแกน หากพบความรุนแรงที่หรือสูงกว่าความรุนแรงที่กำหนด รหัสส่งคืนจะเป็น 1# ค่าเริ่มต้นจะไม่ได้ตั้งค่า ซึ่งจะข้ามการตรวจสอบนี้ (ตัวเลือก: เล็กน้อย ต่ำ ปานกลาง , สูง, สำคัญ)# เช่นเดียวกับ --fail-on ; GRYPE_FAIL_ON_SEVERITY env varfail-on-severity: ""# รูปแบบเอาต์พุตของรายงานช่องโหว่ (ตัวเลือก: ตาราง, เทมเพลต, json, cyclonedx)# เมื่อใช้เทมเพลตเป็นประเภทเอาต์พุต คุณต้องระบุค่าสำหรับ 'output-template- file'# เช่นเดียวกับ -o ; GRYPE_OUTPUT env varoutput: "table"# หากใช้เอาต์พุตเทมเพลต คุณต้องระบุเส้นทางไปยังไฟล์เทมเพลต Go# ดู https://github.com/anchore/grype#using-templates สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเอาต์พุตเทมเพลต# เส้นทางเริ่มต้น ไปยังไฟล์เทมเพลตคือไดเร็กทอรีการทำงานปัจจุบัน # output-template-file: .grype/html.tmpl# เขียนรายงานเอาต์พุตไปยังไฟล์ (ค่าเริ่มต้นคือการเขียนไปยัง stdout)# เช่นเดียวกับ --file; GRYPE_FILE env varfile: ""# รายการ globs ที่จะแยกออกจากการสแกน เช่น:# ไม่รวม:# - '/etc/**'# - './out/**/*.json'# เช่นเดียวกับ -- ไม่รวม; GRYPE_EXCLUDE env varexclude: []# รวมการจับคู่ในแพ็คเกจเคอร์เนลส่วนหัวที่จับคู่กับแพ็คเกจเคอร์เนลอัปสตรีม # หาก 'เท็จ' การจับคู่ใด ๆ ดังกล่าวถูกทำเครื่องหมายเป็น ignedmatch-upstream-kernel-headers: false# os และ/หรือสถาปัตยกรรมที่จะใช้เมื่อ อ้างอิงอิมเมจคอนเทนเนอร์ (เช่น "windows/armv6" หรือ "arm64")# เช่นเดียวกับ --platform; GRYPE_PLATFORM env varplatform: ""# หากใช้อินพุต SBOM จะสร้าง CPE โดยอัตโนมัติเมื่อแพ็คเกจมี noneadd-cpes-if-none: false# ระบุการกระจาย linux อย่างชัดเจนเพื่อใช้เป็น <distro>:<version> เช่น อัลไพน์:3.10distro:external - แหล่งที่มา: เปิดใช้งาน: false maven: search-upstream-by-sha1: true base-url: https://repo1.maven.org/maven2db: # ตรวจสอบการอัปเดตฐานข้อมูลในการดำเนินการ # เช่นเดียวกับ GRYPE_DB_AUTO_UPDATE env var การอัปเดตอัตโนมัติ: จริง # ตำแหน่งเพื่อเขียนแคชฐานข้อมูลช่องโหว่; ค่าเริ่มต้นเป็น $XDG_CACHE_HOME/grype/db # เหมือนกับ GRYPE_DB_CACHE_DIR env var cache-dir: "" # URL ของฐานข้อมูลช่องโหว่ # เหมือนกับ GRYPE_DB_UPDATE_URL env var update-url: "https://toolbox-data.anchore.io/grype /databases/listing.json" # ช่วยให้มั่นใจได้ว่า db build จะไม่เก่ากว่า อายุสูงสุดที่อนุญาต # ตั้งค่าเป็นเท็จเพื่อปิดใช้งานการตรวจสอบอายุการตรวจสอบ: จริง # อายุสูงสุดที่อนุญาตสำหรับฐานข้อมูลช่องโหว่ # อายุเป็นเวลานับตั้งแต่ถูกสร้างขึ้น # อายุสูงสุดเริ่มต้นคือ 120h (หรือห้าวัน) สูงสุดที่อนุญาต - อายุที่สร้างขึ้น: "120h" # หมดเวลาสำหรับการดาวน์โหลด GRYPE_DB_UPDATE_URL เพื่อดูว่าจำเป็นต้องดาวน์โหลดฐานข้อมูลหรือไม่ # ไฟล์นี้มีขนาด ~ 156KiB ณ วันที่ 17-04-2024 ดังนั้นการดาวน์โหลดควรจะรวดเร็ว ปรับตามต้องการ การอัปเดต-พร้อมใช้งาน-หมดเวลา: "30 วินาที" # หมดเวลาสำหรับการดาวน์โหลดฐานข้อมูลช่องโหว่จริง # ฐานข้อมูลคือ ~156MB ณ วันที่ 2024-04-17 ดังนั้นการเชื่อมต่อที่ช้ากว่าอาจเกินการหมดเวลาเริ่มต้น ปรับตามต้องการ อัปเดต - ดาวน์โหลด - หมดเวลา: "120s" ค้นหา: # พื้นที่ค้นหาเพื่อค้นหาแพ็คเกจ (ตัวเลือก: ทุกเลเยอร์, แบน) # เหมือนกับ -s ; GRYPE_SEARCH_SCOPE env ขอบเขต var: "squashed" # ค้นหาภายในไฟล์เก็บถาวรที่มีดัชนีไฟล์เพื่อค้นหา (zip) # หมายเหตุ: สำหรับตอนนี้ใช้ได้กับแค็ตตาล็อกแพ็คเกจ java เท่านั้น # เช่นเดียวกับ GRYPE_PACKAGE_SEARCH_INDEXED_ARCHIVES env var indexed-archives: true # search ภายในไฟล์เก็บถาวรที่ไม่มีดัชนีไฟล์สำหรับค้นหา (tar, tar.gz, tar.bz2 ฯลฯ) # หมายเหตุ: การเปิดใช้งานนี้อาจส่งผลให้เกิดผลกระทบต่อประสิทธิภาพ เนื่องจาก tars ที่ถูกบีบอัดที่ค้นพบทั้งหมดจะถูกขยายขนาด # หมายเหตุ: สำหรับตอนนี้ใช้ได้เฉพาะกับแค็ตตาล็อกแพ็คเกจ java เท่านั้น # เช่นเดียวกับ GRYPE_PACKAGE_SEARCH_UNINDEXED_ARCHIVES env var unindexed-archives: false# ตัวเลือกเมื่อดึงโดยตรงจากรีจิสทรีผ่าน "รีจิสทรี:" รีจิสทรี: # ข้ามการตรวจสอบ TLS เมื่อทำการสื่อสาร ด้วยรีจิสทรี # เหมือนกับ GRYPE_REGISTRY_INSECURE_SKIP_TLS_VERIFY env var insecure-skip-tls-verify: false # ใช้ http แทน https เมื่อเชื่อมต่อกับรีจิสทรี # เช่นเดียวกับ GRYPE_REGISTRY_INSECURE_USE_HTTP env var insecure-use-http: false # filepath ไปยังใบรับรอง CA (หรือ ไดเร็กทอรีที่มี *.crt, *.cert, *.pem) ที่ใช้ สร้างใบรับรองไคลเอ็นต์ # GRYPE_REGISTRY_CA_CERT env var ca-cert: "" # ข้อมูลรับรองสำหรับการลงทะเบียนที่เฉพาะเจาะจง auth: # URL ไปยังรีจิสทรี (เช่น "docker.io", "localhost:5000" ฯลฯ) # GRYPE_REGISTRY_AUTH_AUTHORITY env var - ผู้มีอำนาจ: "" # GRYPE_REGISTRY_AUTH_USERNAME ชื่อผู้ใช้ env var: "" # GRYPE_REGISTRY_AUTH_PASSWORD รหัสผ่าน env var: "" # หมายเหตุ: โทเค็นและชื่อผู้ใช้/รหัสผ่านไม่เกิดร่วมกัน # GRYPE_REGISTRY_AUTH_TOKEN โทเค็น env var: "" # พาธไฟล์ไปยังใบรับรองไคลเอ็นต์ที่ใช้สำหรับการตรวจสอบสิทธิ์ TLS ไปที่ทะเบียน # GRYPE_REGISTRY_AUTH_TLS_CERT env var tls-cert: "" # filepath ไปยังคีย์ไคลเอ็นต์ที่ใช้สำหรับการตรวจสอบสิทธิ์ TLS ไปยังรีจิสทรี # GRYPE_REGISTRY_AUTH_TLS_KEY env var tls-key: "" # - ... # หมายเหตุ สามารถระบุข้อมูลรับรองเพิ่มเติมได้ผ่านไฟล์กำหนดค่าเท่านั้น ( ไม่ใช่ env vars)log: # ระงับเอาต์พุตทั้งหมด (ยกเว้นรายการช่องโหว่) # เช่นเดียวกับ -q ; GRYPE_LOG_QUIET env var quiet: false # เพิ่มรายละเอียด # เช่นเดียวกับ GRYPE_LOG_VERBOSITY env var verbosity: 0 # ระดับการบันทึก; หมายเหตุ: การบันทึกโดยละเอียดระงับ ETUI # เช่นเดียวกับ GRYPE_LOG_LEVEL env var # ใช้ระดับการบันทึก logrus: https://github.com/sirupsen/logrus#level-logging ระดับ: "ข้อผิดพลาด" # ตำแหน่งที่จะเขียนไฟล์บันทึก (ค่าเริ่มต้นไม่ใช่ ที่จะมีไฟล์บันทึก) # เหมือนกับไฟล์ env var ของ GRYPE_LOG_FILE: "" การจับคู่: # ตั้งค่าตัวจับคู่ด้านล่างเพื่อใช้ cpes เมื่อพยายามค้นหา # รายการที่ตรงกันที่มีช่องโหว่ ตัวจับคู่หุ้นเป็นค่าเริ่มต้น # เมื่อไม่สามารถระบุตัวจับคู่หลักได้ java: การใช้-cpes: หลามเท็จ: การใช้-cpes: จาวาสคริปต์เท็จ: การใช้-cpes: ทับทิมเท็จ: การใช้-cpes: เท็จ dotnet: การใช้-cpes: เท็จ golang: การใช้-cpes: false # แม้ว่าการจับคู่ CPE จะถูกปิดใช้งาน สร้างข้อยกเว้นเมื่อสแกนหา "stdlib" Always-use-cpe-for-stdlib: true # อนุญาตเวอร์ชันหลอกของโมดูลหลัก ซึ่งอาจ "คาดเดาได้" โดย Syft เท่านั้น เพื่อใช้ในการจับคู่ช่องโหว่ Allow-main-module-pseudo-version-comparison: false stock : การใช้-cpes: จริง
ปัจจุบันมีการตรวจสอบการพัฒนาศักยภาพด้านต่อไปนี้:
รองรับรายการที่อนุญาต การแมปแพ็คเกจ