Docker: แก้ไขช่องโหว่ของอิมเมจด้วย Trivy และ Copa
ภาพคอนเทนเนอร์ของ Docker มักมีช่องโหว่ด้านความปลอดภัยที่สืบทอดมาจากแพ็กเกจระบบปฏิบัติการพื้นฐาน แทนที่จะสร้างภาพใหม่ตั้งแต่ต้น คุณสามารถใช้ Trivy ในการสแกนหาช่องโหว่และใช้ Copa เพื่อแก้ไขปัญหาโดยตรง บทเรียนนี้จะแสดงวิธีการระบุและแก้ไขช่องโหว่ของคอนเทนเนอร์บนระบบ Ubuntu, Debian, RHEL, CentOS และ Fedora โดยใช้เครื่องมือโอเพ่นซอร์สดีๆ เหล่านี้สองตัว
ในบทเรียนนี้คุณจะได้เรียนรู้:
- วิธีติดตั้งเครื่องสแกนช่องโหว่ Trivy บน Ubuntu/Debian
- วิธีการติดตั้งเครื่องมือแพตช์คอนเทนเนอร์ Copa
- วิธีการสแกนอิมเมจ Docker เพื่อหาช่องโหว่ของระบบปฏิบัติการ
- วิธีการติดตั้งแพตช์ช่องโหว่ของคอนเทนเนอร์โดยอัตโนมัติ
- วิธีตรวจสอบว่าภาพที่แก้ไขแล้วปลอดภัยจากช่องโหว่
สรุปบทความ: สแกนอิมเมจ Docker เพื่อหาช่องโหว่ด้วย Trivy และแก้ไขอัตโนมัติด้วย Copa
| ขั้นตอน | คำสั่ง/การกระทำ |
|---|---|
| 1. สแกนภาพ | |
| 2. ส่งออกรายงาน JSON | |
| 3. เริ่ม BuildKit | |
| 4. ภาพแพตช์ | |
ขั้นตอนที่ 1: ติดตั้งโปรแกรมสแกนหาช่องโหว่ Trivy
Trivy เป็นสแกนเนอร์หาช่องโหว่แบบโอเพนซอร์สที่พัฒนาโดย Aqua Security มันสามารถตรวจจับช่องโหว่ในแพ็กเกจของระบบปฏิบัติการ, การพึ่งพาของแอปพลิเคชัน และอิมเมจคอนเทนเนอร์
อูบุนตู/เดเบียน
-
ติดตั้ง dependencies: ติดตั้งแพ็กเกจ wget และ gnupg ซึ่งจำเป็นสำหรับการเพิ่ม repository ก่อน:
$ sudo apt-get install wget gnupg -y เพิ่มคีย์ GPG ของ Trivy: ดาวน์โหลดและเพิ่มคีย์เซ็นของคลังข้อมูล Trivy:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullเพิ่มแหล่งเก็บ Trivy: เพิ่มแหล่งเก็บอย่างเป็นทางการของ Trivy ลงในรายการซอร์สของคุณ:
$ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.listติดตั้ง Trivy: อัปเดตรายการแพ็กเกจแล้วติดตั้ง Trivy:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
เพิ่มที่เก็บ Trivy: สร้างไฟล์ที่เก็บ Trivy:
# sudo tee /etc/yum.repos.d/trivy.repo << 'EOF' [trivy] name=Trivy repository baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key EOFติดตั้ง Trivy: ใช้ dnf หรือ yum ในการติดตั้ง:
# sudo dnf install trivy -y
ตรวจสอบการติดตั้งโดยตรวจสอบเวอร์ชัน:
$ trivy --versionขั้นตอนที่ 2: ติดตั้งเครื่องมือปรับแพตช์ Copa
Copa (Copacetic) เป็นโครงการ sandbox ของ CNCF ที่ปรับแก้ภาพคอนเทนเนอร์โดยตรงโดยไม่ต้องสร้างใหม่ทั้งหมด โปรแกรมนี้ใช้รายงานความเสี่ยงจากเครื่องสแกนเช่น Trivy เพื่อนำการอัปเดตความปลอดภัยไปใช้ Copa ถูกแจกจ่ายเป็นไฟล์ไบนารีเดี่ยวที่สามารถทำงานได้บนทุกการกระจายของ Linux
ดาวน์โหลดไฟล์ไบนารี Copa: รับไฟล์ไบนารีที่สร้างไว้ล่วงหน้าจากหน้าปล่อยเวอร์ชันอย่างเป็นทางการของ Copa บน GitHub:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzคลายไฟล์เก็บถาวร: แตกไฟล์ทาร์บอลที่ดาวน์โหลดมา:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
ติดตั้ง Copa: ย้ายไฟล์ไบนารีไปยังเส้นทางของระบบของคุณ:
$ sudo mv copa /usr/local/bin/ ตรวจสอบการติดตั้ง: ยืนยันว่า Copa ได้ติดตั้งอย่างถูกต้องแล้ว:
$ copa --version
ขั้นตอนที่ 3: สแกนอิมเมจคอนเทนเนอร์หา ช่องโหว่
ก่อนทำการแพตช์ คุณจำเป็นต้องระบุช่องโหว่ในอิมเมจคอนเทนเนอร์ของคุณ ขั้นตอนต่อไปนี้ใช้ linuxconfig/instantprivacy เป็นตัวอย่าง – ให้เปลี่ยนเป็นชื่ออิมเมจของคุณเอง
ดึงภาพคอนเทนเนอร์: ดาวน์โหลดภาพที่คุณต้องการสแกน:
$ sudo docker pull linuxconfig/instantprivacyสแกนหาช่องโหว่: ใช้ Trivy เพื่อสแกนหาช่องโหว่ระดับระบบปฏิบัติการ โดยธง
--ignore-unfixedจะยกเว้นช่องโหว่ที่ยังไม่มีวิธีแก้ไข:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyส่งออกรายงาน JSON: Copa ต้องการผลการสแกนในรูปแบบ JSON:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
ขั้นตอนที่ 4: แพตช์อิมเมจคอนเทนเนอร์ด้วย Copa
Copa ใช้ BuildKit ในการปรับแพตช์ให้กับอิมเมจคอนเทนเนอร์
เริ่มต้นคอนเทนเนอร์ BuildKit: เปิดใช้งาน BuildKit ในฐานะคอนเทนเนอร์ที่มีสิทธิ์เต็ม
$ sudo docker run --detach --rm --privileged \ -p 127.0.0.1:8888:8888/tcp \ --name buildkitd \ --entrypoint buildkitd \ moby/buildkit:v0.11.4 \ --addr tcp://0.0.0.0:8888-
ตรวจสอบว่า BuildKit กำลังทำงาน: ยืนยันว่าคอนเทนเนอร์เริ่มทำงานเรียบร้อยแล้ว:
$ sudo docker ps ปรับปรุงภาพคอนเทนเนอร์: ใช้ Copa เพื่อใช้แพตช์ความปลอดภัย ธง
-tใช้ระบุแท็กสำหรับภาพที่ถูกปรับปรุง:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa ดาวน์โหลดการอัปเดตความปลอดภัยและสร้างเลเยอร์ภาพใหม่พร้อมกับแพตช์ที่ถูกนำไปใช้ ภาพที่ถูกแพตช์แล้วจะถูกติดแท็กเป็น
linuxconfig/instantprivacy:patched
ขั้นตอนที่ 5: ตรวจสอบภาพที่ได้รับการแก้ไข
สแกนภาพที่ได้รับการแก้ไข: ยืนยันว่าบันทึกทุกช่องโหว่ได้รับการแก้ไขเรียบร้อยแล้ว
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedทดสอบภาพที่แก้ไข: ตรวจสอบว่าภาพที่แก้ไขทำงานได้ถูกต้อง
$ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched $ export http_proxy="http://localhost:8118" $ curl api.ipify.org 45.84.107.174ทำความสะอาด: หยุดคอนเทนเนอร์ BuildKit เมื่อเสร็จแล้ว:
$ sudo docker stop buildkitd
บทสรุป
คุณได้ทำการสแกนภาพคอนเทนเนอร์ของ Docker เพื่อตรวจหาช่องโหว่ด้านความปลอดภัยโดยใช้ Trivy และแก้ไขช่องโหว่เหล่านั้นโดยอัตโนมัติด้วย Copa วิธีนี้เร็วกว่าการสร้างภาพใหม่ตั้งแต่ต้นและเพิ่มเพียงเลเยอร์แพตช์เดียว ซึ่งยังคงโครงสร้างของภาพต้นฉบับ สำหรับสภาพแวดล้อมการผลิต ให้รวมเครื่องมือเหล่านี้เข้ากับสายงาน CI/CD ของคุณเพื่อสแกนและแก้ไขภาพคอนเทนเนอร์โดยอัตโนมัตก่อนการปรับใช้งาน สำหรับข้อมูลเพิ่มเติม ให้ดูในเอกสารทางการของ Trivy และเว็บไซต์โครงการ Copa
คำถามที่พบบ่อย
- โคปาสามารถแก้ไขช่องโหว่ประเภทใดได้บ้าง? โคปาจะสามารถแก้ไขช่องโหว่ในระดับแพ็กเกจของระบบปฏิบัติการเท่านั้น (เช่น แพ็กเกจของ Debian, Ubuntu, Alpine หรือ RHEL) ไม่สามารถแก้ไขช่องโหว่ของการพึ่งพาระดับแอปพลิเคชัน เช่น แพ็กเกจ npm, โมดูล Python pip หรือโมดูล Go สำหรับกรณีนั้น คุณจำเป็นต้องสร้างแอปพลิเคชันใหม่โดยใช้การพึ่งพาที่อัปเดตแล้ว
- ทำไมฉันต้องใช้ BuildKit เพื่อรัน Copa? Copa ใช้ความสามารถในการเปรียบเทียบและรวมของ BuildKit เพื่อสร้างเลเยอร์อิมเมจใหม่ที่มีเฉพาะไฟล์ที่ถูกแก้ไข BuildKit ทำงานเป็นคอนเทนเนอร์ที่มีสิทธิพิเศษซึ่งจัดการการปรับแต่งอิมเมจในระดับลึก หากไม่มี BuildKit Copa จะไม่สามารถใช้แพตช์กับระบบไฟล์ของคอนเทนเนอร์ได้
- ฉันสามารถแพตช์รูปภาพจากรีจิสตรีส่วนตัวได้หรือไม่? ใช่ Copa รองรับรีจิสตรีส่วนตัว คุณต้องเข้าสู่ระบบด้วย
docker loginก่อนรันคำสั่งแพตช์ Copa จะใช้ข้อมูลรับรอง Docker ของคุณเพื่อดึงอิมเมจพื้นฐานและผลักดันผลลัพธ์ที่แพตช์แล้วหากจำเป็น - จะเกิดอะไรขึ้นหาก Copa ไม่สามารถแก้ไขช่องโหว่ทั้งหมดได้? ช่องโหว่บางอย่างอาจยังไม่มีวิธีแก้ไข
--ignore-unfixedใน Trivy จะไม่รวมช่องโหว่เหล่านี้ในรายงาน Copa จะแก้ไขทุกอย่างที่มีวิธีแก้ไขที่พร้อมใช้งาน รัน Trivy อีกครั้งโดยไม่ใช้--ignore-unfixedเพื่อดูช่องโหว่ทั้งหมดรวมถึงช่องโหว่ที่รอแพทช์ - ฉันจะอัปเดต Copa เป็นเวอร์ชันล่าสุดได้อย่างไร? ดาวน์โหลดเวอร์ชันล่าสุดจากหน้าการปล่อยของ Copa บน GitHub และแทนที่ไฟล์ไบนารีใน
/usr/local/bin/ตรวจสอบเวอร์ชันปัจจุบันด้วยcopa --version.





