การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ
ตรวจสอบแหล่งที่มาด้วย SLSA และ Sigstore
การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดแหล่งที่มาจึงสำคัญ
SBOM บอกคุณว่าอาร์ติแฟกต์มี อะไร อยู่ภายใน ส่วนแหล่งที่มาจะบอกว่าอาร์ติแฟกต์นั้น มาจากที่ใดและถูกสร้างขึ้นอย่างไร การลงลายมือชื่อจะผูกอาร์ติแฟกต์เข้ากับต้นทางที่ตรวจสอบได้ ทำให้ผู้ใช้งานปฏิเสธสิ่งใดก็ตามที่ไม่ได้ถูกสร้างโดยกระบวนการทำงานที่คุณเชื่อถือได้
หากไม่มีข้อมูลแหล่งที่มา ผู้โจมตีที่สับเปลี่ยนไฟล์ tarball ในรีจิสทรีของคุณจะไม่ต่างจากรุ่นเผยแพร่ที่ถูกต้องตามปกติ
ไดเจสต์ ไม่ใช่แท็ก
รากฐานของความถูกต้องครบถ้วนคือการระบุเนื้อหา แฮชเข้ารหัสลับ (ไดเจสต์) ของอาร์ติแฟกต์จะระบุชุดไบต์นั้นโดยเฉพาะอย่างไม่ซ้ำกัน แท็กที่เปลี่ยนแปลงได้ เช่น latest สามารถถูกชี้ไปยังตำแหน่งใหม่ได้ แต่ไดเจสต์ทำเช่นนั้นไม่ได้
# pull by immutable digest, not a tag
docker pull my-app@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f
# compute a file digest
sha256sum release-1.4.0.tar.gzพื้นฐานลายมือชื่อดิจิทัล
ลายมือชื่อดิจิทัลใช้กุญแจส่วนตัวเพื่อลงลายมือชื่อบนแฮชของอาร์ติแฟกต์ ผู้ใดก็ตามที่มีกุญแจสาธารณะที่ตรงกันก็สามารถตรวจสอบได้ สิ่งนี้ให้หลักประกันสองประการ:
- ความถูกต้องครบถ้วน — อาร์ติแฟกต์ไม่ได้ถูกแก้ไขหลังจากลงลายมือชื่อ
- ความเป็นของแท้ — อาร์ติแฟกต์ถูกลงลายมือชื่อโดยผู้ครอบครองกุญแจส่วนตัว
ส่วนที่ยากไม่ใช่คณิตศาสตร์ แต่คือการจัดการกุญแจและการกระจายความไว้วางใจ: ผู้ตรวจสอบจะทราบได้อย่างไรว่าควรเชื่อถือกุญแจสาธารณะใด
การลงลายมือชื่อแบบไร้กุญแจด้วย Sigstore
การลงลายมือชื่อแบบดั้งเดิมบังคับให้ทีมต้องปกป้องกุญแจส่วนตัวที่มีอายุการใช้งานยาวนาน ซึ่งอาจรั่วไหลได้ Sigstore นำเสนอการลงลายมือชื่อแบบไร้กุญแจ: ระบบออกใบรับรองอายุสั้นที่ผูกกับตัวตน OIDC (เช่น งาน CI หรืออีเมลของนักพัฒนา) จากนั้นจึงลงลายมือชื่อและบันทึกเหตุการณ์ไว้ในบันทึกความโปร่งใสสาธารณะที่ชื่อว่า Rekor
ไม่มีกุญแจอายุการใช้งานยาวนานให้ขโมย และทุกลายมือชื่อสามารถตรวจสอบได้โดยสาธารณะ
การลงลายมือชื่อด้วย Cosign
Cosign คือเครื่องมือของ Sigstore สำหรับลงลายมือชื่อให้อิมเมจคอนเทนเนอร์และอาร์ติแฟกต์อื่น ๆ ในโหมดไร้กุญแจ เครื่องมือนี้จะใช้โทเค็น OIDC ของกระบวนการทำงาน จึงไม่มีไฟล์กุญแจอยู่บนดิสก์
# keyless sign in CI (uses ambient OIDC identity)
COSIGN_EXPERIMENTAL=1 cosign sign my-registry/my-app@sha256:1d5283...
# verify, asserting the expected signer identity
cosign verify my-registry/my-app@sha256:1d5283... \
--certificate-identity-regexp '.*@my-org\.com' \
--certificate-oidc-issuer https://accounts.google.comบันทึกความโปร่งใส
Sigstore บันทึกเหตุการณ์การลงลายมือชื่อแต่ละครั้งไว้ใน Rekor ซึ่งเป็นบันทึกสาธารณะที่เพิ่มข้อมูลได้อย่างเดียวและแสดงหลักฐานการแก้ไขได้ นี่คือมาตรการควบคุมเชิงตรวจจับที่มีประสิทธิภาพ:
- คุณสามารถพิสูจน์ได้ว่าเซ็นชื่อเมื่อใด
- ผู้โจมตีที่ขโมยตัวตนไปจะไม่สามารถลงลายมือชื่อได้อย่างลับ ๆ — เหตุการณ์ดังกล่าวจะถูกบันทึกไว้เป็นสาธารณะ
- ลายมือชื่อที่ผิดปกติ (ตัวตนที่ไม่คาดหมาย นอกเวลาทำการ) จะสามารถตรวจพบได้
ความโปร่งใสเปลี่ยนการถูกเจาะระบบอย่างเงียบ ๆ ให้กลายเป็นหลักฐานที่สังเกตเห็นได้
SLSA: ระดับความถูกต้องครบถ้วนของการสร้าง
SLSA (ระดับความปลอดภัยของห่วงโซ่อุปทานสำหรับอาร์ติแฟกต์ซอฟต์แวร์) คือกรอบงานที่ให้ระดับความน่าเชื่อถือของกระบวนการสร้างของคุณ ระดับที่สูงขึ้นต้องการหลักประกันที่เข้มแข็งขึ้นเพื่อป้องกันการแก้ไขโดยมิชอบ
- L1 — มีข้อมูลแหล่งที่มาและจัดทำเอกสารไว้
- L2 — ข้อมูลแหล่งที่มาที่ลงลายมือชื่อโดยบริการสร้างที่โฮสต์ไว้
- L3 — การสร้างที่เสริมความปลอดภัยและแยกออกจากกัน ข้อมูลแหล่งที่มาจะปลอมแปลงไม่ได้แม้โดยผู้มีสิทธิ์ภายในกระบวนการทำงาน
SLSA คือแผนที่นำทาง: เลือกระดับเป้าหมายและปิดช่องว่างที่มีอยู่
หลักฐานรับรองแหล่งที่มาของการสร้าง
หลักฐานรับรองแหล่งที่มาคือข้อความที่ลงลายมือชื่อซึ่งอธิบายว่าอาร์ติแฟกต์ถูกสร้างขึ้นอย่างไร ได้แก่ คอมมิตต้นทาง ตัวตนของผู้สร้าง พารามิเตอร์การสร้าง และข้อมูลนำเข้า รูปแบบ in-toto ทำให้ข้อมูลนี้เป็นมาตรฐานเดียวกัน
# generate and attach SLSA provenance for an image
cosign attest --type slsaprovenance \
--predicate provenance.json \
my-registry/my-app@sha256:1d5283...
# verify provenance matches expected source repo
cosign verify-attestation --type slsaprovenance my-registry/my-app@sha256:1d5283...การบังคับใช้ลายมือชื่อเมื่ออนุญาตให้ทำงาน
การลงลายมือชื่อจะมีประโยชน์ก็ต่อเมื่อมีสิ่งที่ปฏิเสธอาร์ติแฟกต์ที่ไม่มีลายมือชื่อ ใน Kubernetes ตัวควบคุมการอนุญาตสามารถบล็อกอิมเมจใดก็ตามที่ไม่มีลายมือชื่อและข้อมูลแหล่งที่มาที่ถูกต้องจากตัวตนที่คุณเชื่อถือ
- ตัวควบคุมนโยบายจะตรวจสอบลายมือชื่อของ cosign ก่อนที่พ็อดจะเริ่มทำงาน
- ปฏิเสธอิมเมจที่ลงลายมือชื่อโดยตัวตนที่ไม่คาดหมาย
- กำหนดให้ข้อมูลแหล่งที่มาอ้างอิงไปยังที่เก็บต้นฉบับที่ได้รับอนุมัติ
การดำเนินการนี้ทำให้กระบวนการสมบูรณ์: อาร์ติแฟกต์ที่ไม่น่าเชื่อถือจะไม่ทำงานเลย
การลงลายมือชื่อให้ส่วนพึ่งพาต้นทาง
ข้อมูลแหล่งที่มามีค่ามากที่สุดเมื่อครอบคลุมสิ่งที่คุณนำมาใช้งาน ไม่ใช่เฉพาะสิ่งที่คุณส่งมอบเท่านั้น ระบบนิเวศต่าง ๆ กำลังเพิ่มการลงลายมือชื่อและข้อมูลแหล่งที่มาแบบมีมาให้ในตัว:
- ข้อมูลแหล่งที่มาของ npmเชื่อมโยงแพ็กเกจที่เผยแพร่กับคอมมิตต้นทางและการทำงานของ CI
- อิมเมจพื้นฐานของคอนเทนเนอร์มีลายมือชื่อของ cosign ให้ใช้งานมากขึ้นเรื่อย ๆ
- รีจิสทรีภาษากำลังทดลองการตรวจสอบที่รองรับโดย Sigstore
ควรเลือกส่วนพึ่งพาที่เผยแพร่ข้อมูลแหล่งที่มาซึ่งตรวจสอบได้ และตรวจสอบข้อมูลดังกล่าวระหว่างการติดตั้งเมื่อระบบรองรับ
ให้ความสำคัญกับการตรวจสอบก่อน
กลยุทธ์การลงลายมือชื่อที่ใช้งานได้จริงควรมีหลายชั้นและตรวจสอบได้ตั้งแต่ต้นจนจบ:
- ตรึงข้อมูลนำเข้าด้วยไดเจสต์
- ลงลายมือชื่อแบบไร้กุญแจให้อาร์ติแฟกต์ และแนบ SBOM พร้อมหลักฐานรับรองแหล่งที่มา
- บันทึกทุกอย่างไว้ในบันทึกความโปร่งใส
- บังคับใช้การตรวจสอบขณะนำไปใช้งานด้วยนโยบายการอนุญาต
ห่วงโซ่จะแข็งแกร่งได้เท่ากับจุดเชื่อมโยงที่ไม่ได้รับการตรวจสอบซึ่งอ่อนแอที่สุดเท่านั้น ดังนั้นจึงควรตรวจสอบทุกจุดที่มีการนำไปใช้งาน
ตรวจสอบความเข้าใจอย่างรวดเร็ว: การลงลายมือชื่อแบบไร้กุญแจ
วิเคราะห์ว่าเหตุใดการลงลายมือชื่อแบบไร้กุญแจจึงช่วยเพิ่มความปลอดภัยให้ห่วงโซ่อุปทาน
สรุป: การลงลายมือชื่อส่วนพึ่งพาและอาร์ติแฟกต์
คุณได้เรียนรู้วิธีพิสูจน์แหล่งที่มาและบังคับใช้ข้อมูลดังกล่าว
- ตรึงด้วยไดเจสต์ ไม่ใช่แท็กที่เปลี่ยนแปลงได้
- ลายมือชื่อดิจิทัลให้ความถูกต้องครบถ้วนและความเป็นของแท้ ความท้าทายคือการจัดการกุญแจ
- Sigstore + cosignช่วยให้ลงลายมือชื่อแบบไร้กุญแจได้ พร้อมบันทึกความโปร่งใสสาธารณะของ Rekor
- SLSAให้ระดับความถูกต้องครบถ้วนของการสร้าง ส่วนหลักฐานรับรองแหล่งที่มาจะบันทึกว่าอาร์ติแฟกต์ถูกสร้างขึ้นอย่างไร
- นโยบายการอนุญาตจะปฏิเสธสิ่งที่ไม่มีลายมือชื่อหรือไม่น่าเชื่อถือขณะนำไปใช้งาน
ถัดไป: การเสริมความปลอดภัยให้กระบวนการ CI/CD ที่สร้างอาร์ติแฟกต์เหล่านี้
คำถามที่พบบ่อย
บทเรียน “การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ”
ตรวจสอบแหล่งที่มาด้วย SLSA และ Sigstore คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ภัยคุกคามต่อห่วงโซ่อุปทาน
- บัญชีรายการวัสดุซอฟต์แวร์ (SBOM)
- การลงลายมือชื่อการพึ่งพาและสิ่งส่งมอบ
- การรักษาความปลอดภัยไปป์ไลน์ CI/CD