การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

ส่วนสำคัญของการจัดการช่องโหว่คือการทำความเข้าใจและรักษาความปลอดภัยของห่วงโซ่อุปทานของส่วนประกอบซอฟต์แวร์ที่ประกอบขึ้นเป็นระบบที่ทันสมัยอย่างถี่ถ้วน ทีม Agile และ DevOps ใช้ประโยชน์จากไลบรารีและเฟรมเวิร์กโอเพ่นซอร์สอย่างกว้างขวาง เพื่อลดเวลาและต้นทุนในการพัฒนา แต่เหรียญรางวัลนี้ก็มีข้อเสียเช่นกัน นั่นคือโอกาสที่จะสืบทอดความผิดพลาดและความเปราะบางของผู้อื่น

แน่นอนว่าทีมงานควรแน่ใจว่าทราบว่าส่วนประกอบโอเพ่นซอร์สใดบ้างที่รวมอยู่ในแอปพลิเคชัน ตรวจสอบให้แน่ใจว่าเวอร์ชันที่เชื่อถือได้ที่รู้จักนั้นถูกดาวน์โหลดจากแหล่งที่เชื่อถือได้ที่รู้จัก และดาวน์โหลดส่วนประกอบเวอร์ชันอัปเดตหลังจากช่องโหว่ที่ค้นพบใหม่ได้รับการแก้ไข

ในโพสต์นี้ เราจะดูที่การใช้ OWASP Dependency Check เพื่อยกเลิกบิลด์ หากตรวจพบปัญหาร้ายแรงกับโค้ดของคุณ

ในหนังสือ “Development Security in Agile Projects” มีอธิบายไว้ดังนี้ OWASP Dependency Check เป็นสแกนเนอร์ฟรีที่รวบรวมส่วนประกอบโอเพ่นซอร์สทั้งหมดที่ใช้ในแอปพลิเคชันและแสดงช่องโหว่ที่มีอยู่ มีเวอร์ชันสำหรับ Java, .NET, Ruby (gemspec), PHP (ผู้แต่ง), Node.js และ Python รวมถึงโปรเจ็กต์ C/C++ บางโปรเจ็กต์ การตรวจสอบการพึ่งพาจะทำงานร่วมกับเครื่องมือสร้างทั่วไป รวมถึง Ant, Maven และ Gradle และเซิร์ฟเวอร์การรวมอย่างต่อเนื่อง เช่น Jenkins

การตรวจสอบการพึ่งพาจะรายงานองค์ประกอบทั้งหมดที่มีช่องโหว่ที่ทราบจากฐานข้อมูลช่องโหว่แห่งชาติ (NVD) ของ NIST และอัปเดตด้วยข้อมูลจากฟีดข่าว NVD

โชคดีที่ทั้งหมดนี้สามารถทำได้โดยอัตโนมัติโดยใช้เครื่องมือ เช่น โปรเจ็กต์ OWASP Dependency Check หรือโปรแกรมเชิงพาณิชย์ เช่น เป็ดดำ, เจฟร็อก เอ็กซ์เรย์, สนุ๊ก, วงจรชีวิตของ Nexus โซนาไทป์หรือ ที่มาเคลียร์.

เครื่องมือเหล่านี้สามารถรวมไว้ในไปป์ไลน์บิวด์เพื่อจัดทำรายการการพึ่งพาโอเพ่นซอร์สโดยอัตโนมัติ ระบุเวอร์ชันที่ล้าสมัยของไลบรารีและไลบรารีที่มีช่องโหว่ที่ทราบ และล้มเลิกบิวด์หากตรวจพบปัญหาร้ายแรง

การตรวจสอบการพึ่งพา OWASP

เพื่อทดสอบและสาธิตวิธีการทำงานของการตรวจสอบการพึ่งพา เราใช้พื้นที่เก็บข้อมูลนี้ ตัวอย่างการตรวจสอบการพึ่งพา.

หากต้องการดูรายงาน HTML คุณต้องกำหนดค่าเว็บเซิร์ฟเวอร์ nginx บน gitlab-runner ของคุณ

ตัวอย่างการกำหนดค่า nginx ขั้นต่ำ:

server {
    listen       9999;
    listen       [::]:9999;
    server_name  _;
    root         /home/gitlab-runner/builds;

    location / {
        autoindex on;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

ในตอนท้ายของการชุมนุมคุณจะเห็นภาพนี้:

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

ไปที่ลิงก์และดูรายงานการตรวจสอบการพึ่งพา

ภาพหน้าจอแรกคือส่วนบนสุดของรายงานพร้อมข้อมูลสรุป

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

รายละเอียดภาพหน้าจอที่สอง CVE-2017-5638 ที่นี่เราเห็นระดับ CVE และลิงก์ไปยังการหาประโยชน์

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

ภาพหน้าจอที่สามคือรายละเอียดของ log4j-api-2.7.jar เราจะเห็นว่าระดับ CVE อยู่ที่ 7.5 และ 9.8

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

ภาพหน้าจอที่สี่คือรายละเอียดของ commons-fileupload-1.3.2.jar เราจะเห็นว่าระดับ CVE อยู่ที่ 7.5 และ 9.8

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

หากคุณต้องการใช้หน้า gitlab มันจะไม่ทำงาน - งานที่ล้มเหลวจะไม่สร้างสิ่งประดิษฐ์

ตัวอย่างที่นี่ https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

สร้างเอาต์พุต: ไม่มีสิ่งประดิษฐ์ ฉันไม่เห็นรายงาน html คุณควรลอง Artifact: เสมอ

https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages/-/jobs/400004246

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

การควบคุมระดับช่องโหว่ของ CVE

บรรทัดที่สำคัญที่สุดในไฟล์ gitlab-ci.yaml:

mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

ด้วยพารามิเตอร์ failedBuildOnCVSS คุณสามารถปรับระดับช่องโหว่ของ CVE ที่คุณต้องการตอบสนองได้

ดาวน์โหลดฐานข้อมูลช่องโหว่ NIST (NVD) จากอินเทอร์เน็ต

คุณสังเกตไหมว่า NIST ดาวน์โหลดฐานข้อมูลช่องโหว่ NIST (NVD) จากอินเทอร์เน็ตอย่างต่อเนื่อง:

การใช้เครื่องสแกนช่องโหว่สำหรับไลบรารีที่ใช้แล้ว - ตรวจสอบการพึ่งพาใน GitlabCI

หากต้องการดาวน์โหลด คุณสามารถใช้ยูทิลิตีนี้ได้ nist_data_mirror_golang

มาติดตั้งและเปิดใช้งานกัน

yum -y install yum-plugin-copr
yum copr enable antonpatsev/nist_data_mirror_golang
yum -y install nist-data-mirror
systemctl start nist-data-mirror

Nist-data-mirror อัปโหลด NIST JSON CVE ไปที่ /var/www/repos/nist-data-mirror/ เมื่อเริ่มต้นระบบ และอัปเดตข้อมูลทุกๆ 24 ชั่วโมง

หากต้องการดาวน์โหลด CVE JSON NIST คุณต้องกำหนดค่าเว็บเซิร์ฟเวอร์ nginx (เช่น บน gitlab-runner ของคุณ)

ตัวอย่างการกำหนดค่า nginx ขั้นต่ำ:

server {
    listen       12345;
    listen       [::]:12345;
    server_name  _;
    root         /var/www/repos/nist-data-mirror/;

    location / {
        autoindex on;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

เพื่อไม่ให้เส้นยาวที่เรียกใช้ mvn เราจะย้ายพารามิเตอร์ไปยังตัวแปร DEPENDENCY_OPTS ที่แยกจากกัน

การกำหนดค่าขั้นต่ำขั้นสุดท้าย .gitlab-ci.yml จะมีลักษณะดังนี้:

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  DEPENDENCY_OPTS: "-DfailBuildOnCVSS=7 -DcveUrlModified=http://localhost:12345/nvdcve-1.1-modified.json.gz -DcveUrlBase=http://localhost:12345/nvdcve-1.1-%d.json.gz"

cache:
  paths:
    - .m2/repository

verify:
  stage: test
  script:
    - set +e
    - mvn $MAVEN_CLI_OPTS install org.owasp:dependency-check-maven:check $DEPENDENCY_OPTS || EXIT_CODE=$?
    - export PATH_WITHOUT_HOME=$(pwd | sed -e "s//home/gitlab-runner/builds//g")
    - echo "************************* URL Dependency-check-report.html *************************"
    - echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
    - set -e
    - exit ${EXIT_CODE}
  tags:
    - shell

โทรเลขแชทเกี่ยวกับ DevOps และความปลอดภัย
ช่องสัญญาณโทรเลข DevSecOps / SSDLC - การพัฒนาที่ปลอดภัย

ที่มา: will.com

เพิ่มความคิดเห็น