ค้นหาเว็บไซต์

Docker: แก้ไขช่องโหว่ของอิมเมจด้วย Trivy และ Copa


ภาพคอนเทนเนอร์ของ Docker มักมีช่องโหว่ด้านความปลอดภัยที่สืบทอดมาจากแพ็กเกจระบบปฏิบัติการพื้นฐาน แทนที่จะสร้างภาพใหม่ตั้งแต่ต้น คุณสามารถใช้ Trivy ในการสแกนหาช่องโหว่และใช้ Copa เพื่อแก้ไขปัญหาโดยตรง บทเรียนนี้จะแสดงวิธีการระบุและแก้ไขช่องโหว่ของคอนเทนเนอร์บนระบบ Ubuntu, Debian, RHEL, CentOS และ Fedora โดยใช้เครื่องมือโอเพ่นซอร์สดีๆ เหล่านี้สองตัว

ในบทเรียนนี้คุณจะได้เรียนรู้:

  • วิธีติดตั้งเครื่องสแกนช่องโหว่ Trivy บน Ubuntu/Debian
  • วิธีการติดตั้งเครื่องมือแพตช์คอนเทนเนอร์ Copa
  • วิธีการสแกนอิมเมจ Docker เพื่อหาช่องโหว่ของระบบปฏิบัติการ
  • วิธีการติดตั้งแพตช์ช่องโหว่ของคอนเทนเนอร์โดยอัตโนมัติ
  • วิธีตรวจสอบว่าภาพที่แก้ไขแล้วปลอดภัยจากช่องโหว่

สรุปบทความ: สแกนอิมเมจ Docker เพื่อหาช่องโหว่ด้วย Trivy และแก้ไขอัตโนมัติด้วย Copa

ขั้นตอนคำสั่ง/การกระทำ
1. สแกนภาพ
sudo trivy image --vuln-type os --ignore-unfixed IMAGE_NAME
2. ส่งออกรายงาน JSON
trivy image --vuln-type os --ignore-unfixed -f json -o report.json IMAGE_NAME
3. เริ่ม 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
4. ภาพแพตช์
sudo copa patch -i IMAGE_NAME -r report.json -t patched -a tcp://0.0.0.0:8888

ขั้นตอนที่ 1: ติดตั้งโปรแกรมสแกนหาช่องโหว่ Trivy

Trivy เป็นสแกนเนอร์หาช่องโหว่แบบโอเพนซอร์สที่พัฒนาโดย Aqua Security มันสามารถตรวจจับช่องโหว่ในแพ็กเกจของระบบปฏิบัติการ, การพึ่งพาของแอปพลิเคชัน และอิมเมจคอนเทนเนอร์

อูบุนตู/เดเบียน

  1. ติดตั้ง dependencies: ติดตั้งแพ็กเกจ wget และ gnupg ซึ่งจำเป็นสำหรับการเพิ่ม repository ก่อน:

    $ sudo apt-get install wget gnupg -y
  2. เพิ่มคีย์ 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
  3. เพิ่มแหล่งเก็บ 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
  4. ติดตั้ง Trivy: อัปเดตรายการแพ็กเกจแล้วติดตั้ง Trivy:

    $ sudo apt-get update
    $ sudo apt-get install trivy -y

RHEL/CentOS/Fedora

  1. เพิ่มที่เก็บ 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
  2. ติดตั้ง Trivy: ใช้ dnf หรือ yum ในการติดตั้ง:

    # sudo dnf install trivy -y

ตรวจสอบการติดตั้งโดยตรวจสอบเวอร์ชัน:

$ trivy --version

ขั้นตอนที่ 2: ติดตั้งเครื่องมือปรับแพตช์ Copa

Copa (Copacetic) เป็นโครงการ sandbox ของ CNCF ที่ปรับแก้ภาพคอนเทนเนอร์โดยตรงโดยไม่ต้องสร้างใหม่ทั้งหมด โปรแกรมนี้ใช้รายงานความเสี่ยงจากเครื่องสแกนเช่น Trivy เพื่อนำการอัปเดตความปลอดภัยไปใช้ Copa ถูกแจกจ่ายเป็นไฟล์ไบนารีเดี่ยวที่สามารถทำงานได้บนทุกการกระจายของ Linux

  1. ดาวน์โหลดไฟล์ไบนารี Copa: รับไฟล์ไบนารีที่สร้างไว้ล่วงหน้าจากหน้าปล่อยเวอร์ชันอย่างเป็นทางการของ Copa บน GitHub:

    $ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gz
  2. คลายไฟล์เก็บถาวร: แตกไฟล์ทาร์บอลที่ดาวน์โหลดมา:

    $ tar -xzf copa_0.9.0_linux_amd64.tar.gz
  3. ติดตั้ง Copa: ย้ายไฟล์ไบนารีไปยังเส้นทางของระบบของคุณ:

    $ sudo mv copa /usr/local/bin/
  4. ตรวจสอบการติดตั้ง: ยืนยันว่า Copa ได้ติดตั้งอย่างถูกต้องแล้ว:

    $ copa --version

ขั้นตอนที่ 3: สแกนอิมเมจคอนเทนเนอร์หา ช่องโหว่

ก่อนทำการแพตช์ คุณจำเป็นต้องระบุช่องโหว่ในอิมเมจคอนเทนเนอร์ของคุณ ขั้นตอนต่อไปนี้ใช้ linuxconfig/instantprivacy เป็นตัวอย่าง – ให้เปลี่ยนเป็นชื่ออิมเมจของคุณเอง

  1. ดึงภาพคอนเทนเนอร์: ดาวน์โหลดภาพที่คุณต้องการสแกน:

    $ sudo docker pull linuxconfig/instantprivacy
  2. สแกนหาช่องโหว่: ใช้ Trivy เพื่อสแกนหาช่องโหว่ระดับระบบปฏิบัติการ โดยธง --ignore-unfixed จะยกเว้นช่องโหว่ที่ยังไม่มีวิธีแก้ไข:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy
  3. ส่งออกรายงาน JSON: Copa ต้องการผลการสแกนในรูปแบบ JSON:

    $ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy

ขั้นตอนที่ 4: แพตช์อิมเมจคอนเทนเนอร์ด้วย Copa

Copa ใช้ BuildKit ในการปรับแพตช์ให้กับอิมเมจคอนเทนเนอร์

  1. เริ่มต้นคอนเทนเนอร์ 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
  2. ตรวจสอบว่า BuildKit กำลังทำงาน: ยืนยันว่าคอนเทนเนอร์เริ่มทำงานเรียบร้อยแล้ว:

    $ sudo docker ps

  3. ปรับปรุงภาพคอนเทนเนอร์: ใช้ Copa เพื่อใช้แพตช์ความปลอดภัย ธง -t ใช้ระบุแท็กสำหรับภาพที่ถูกปรับปรุง:

    $ sudo copa patch \
      -i docker.io/linuxconfig/instantprivacy \
      -r instantprivacy.json \
      -t patched \
      -a tcp://0.0.0.0:8888

    Copa ดาวน์โหลดการอัปเดตความปลอดภัยและสร้างเลเยอร์ภาพใหม่พร้อมกับแพตช์ที่ถูกนำไปใช้ ภาพที่ถูกแพตช์แล้วจะถูกติดแท็กเป็น linuxconfig/instantprivacy:patched

ขั้นตอนที่ 5: ตรวจสอบภาพที่ได้รับการแก้ไข

  1. สแกนภาพที่ได้รับการแก้ไข: ยืนยันว่าบันทึกทุกช่องโหว่ได้รับการแก้ไขเรียบร้อยแล้ว

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patched
  2. ทดสอบภาพที่แก้ไข: ตรวจสอบว่าภาพที่แก้ไขทำงานได้ถูกต้อง

    $ 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
  3. ทำความสะอาด: หยุดคอนเทนเนอร์ BuildKit เมื่อเสร็จแล้ว:

    $ sudo docker stop buildkitd

บทสรุป

คุณได้ทำการสแกนภาพคอนเทนเนอร์ของ Docker เพื่อตรวจหาช่องโหว่ด้านความปลอดภัยโดยใช้ Trivy และแก้ไขช่องโหว่เหล่านั้นโดยอัตโนมัติด้วย Copa วิธีนี้เร็วกว่าการสร้างภาพใหม่ตั้งแต่ต้นและเพิ่มเพียงเลเยอร์แพตช์เดียว ซึ่งยังคงโครงสร้างของภาพต้นฉบับ สำหรับสภาพแวดล้อมการผลิต ให้รวมเครื่องมือเหล่านี้เข้ากับสายงาน CI/CD ของคุณเพื่อสแกนและแก้ไขภาพคอนเทนเนอร์โดยอัตโนมัตก่อนการปรับใช้งาน สำหรับข้อมูลเพิ่มเติม ให้ดูในเอกสารทางการของ Trivy และเว็บไซต์โครงการ Copa

คำถามที่พบบ่อย

  1. โคปาสามารถแก้ไขช่องโหว่ประเภทใดได้บ้าง? โคปาจะสามารถแก้ไขช่องโหว่ในระดับแพ็กเกจของระบบปฏิบัติการเท่านั้น (เช่น แพ็กเกจของ Debian, Ubuntu, Alpine หรือ RHEL) ไม่สามารถแก้ไขช่องโหว่ของการพึ่งพาระดับแอปพลิเคชัน เช่น แพ็กเกจ npm, โมดูล Python pip หรือโมดูล Go สำหรับกรณีนั้น คุณจำเป็นต้องสร้างแอปพลิเคชันใหม่โดยใช้การพึ่งพาที่อัปเดตแล้ว
  2. ทำไมฉันต้องใช้ BuildKit เพื่อรัน Copa? Copa ใช้ความสามารถในการเปรียบเทียบและรวมของ BuildKit เพื่อสร้างเลเยอร์อิมเมจใหม่ที่มีเฉพาะไฟล์ที่ถูกแก้ไข BuildKit ทำงานเป็นคอนเทนเนอร์ที่มีสิทธิพิเศษซึ่งจัดการการปรับแต่งอิมเมจในระดับลึก หากไม่มี BuildKit Copa จะไม่สามารถใช้แพตช์กับระบบไฟล์ของคอนเทนเนอร์ได้
  3. ฉันสามารถแพตช์รูปภาพจากรีจิสตรีส่วนตัวได้หรือไม่? ใช่ Copa รองรับรีจิสตรีส่วนตัว คุณต้องเข้าสู่ระบบด้วย docker login ก่อนรันคำสั่งแพตช์ Copa จะใช้ข้อมูลรับรอง Docker ของคุณเพื่อดึงอิมเมจพื้นฐานและผลักดันผลลัพธ์ที่แพตช์แล้วหากจำเป็น
  4. จะเกิดอะไรขึ้นหาก Copa ไม่สามารถแก้ไขช่องโหว่ทั้งหมดได้? ช่องโหว่บางอย่างอาจยังไม่มีวิธีแก้ไข --ignore-unfixed ใน Trivy จะไม่รวมช่องโหว่เหล่านี้ในรายงาน Copa จะแก้ไขทุกอย่างที่มีวิธีแก้ไขที่พร้อมใช้งาน รัน Trivy อีกครั้งโดยไม่ใช้ --ignore-unfixed เพื่อดูช่องโหว่ทั้งหมดรวมถึงช่องโหว่ที่รอแพทช์
  5. ฉันจะอัปเดต Copa เป็นเวอร์ชันล่าสุดได้อย่างไร? ดาวน์โหลดเวอร์ชันล่าสุดจากหน้าการปล่อยของ Copa บน GitHub และแทนที่ไฟล์ไบนารีใน /usr/local/bin/ ตรวจสอบเวอร์ชันปัจจุบันด้วย copa --version.