ያገለገሉ ቤተ-መጻሕፍት የተጋላጭነት ስካነርን በመጠቀም ጥገኝነት-በ GitlabCI ውስጥ ያረጋግጡ

የተጋላጭነት አስተዳደር አስፈላጊ አካል ዘመናዊ ሲስተሞችን ያካተቱትን የሶፍትዌር አካላት አቅርቦት ሰንሰለት በሚገባ መረዳት እና ደህንነቱን ማረጋገጥ ነው። Agile እና DevOps ቡድኖች የእድገት ጊዜን እና ወጪን ለመቀነስ ክፍት ምንጭ ቤተ-መጻሕፍት እና ማዕቀፎችን በስፋት ይጠቀማሉ። ነገር ግን ይህ ሜዳልያ ደግሞ አሉታዊ ጎን አለው: የሌሎች ሰዎችን ስህተቶች እና ተጋላጭነቶች ለመውረስ እድሉ.

በግልጽ ለማየት እንደሚቻለው ቡድኑ የትኞቹ ክፍት ምንጭ ክፍሎች በአፕሊኬሽኑ ውስጥ እንደሚካተቱ ማወቅ፣ የታወቁ ታማኝ ስሪቶች ከታወቁ ታማኝ ምንጮች መወረዳቸውን እና አዲስ የተገኙ ተጋላጭነቶች ከተጣበቁ በኋላ የተዘመኑ ክፍሎችን ማውረድ ማረጋገጥ አለበት።

በዚህ ልጥፍ ላይ፣ በኮድዎ ላይ ከባድ ችግሮች ካጋጠመው ግንባታን ለማስቆም OWASP ጥገኝነት ማረጋገጫን መጠቀምን እንመለከታለን።

በ "Agile Projects ውስጥ የእድገት ደህንነት" በሚለው መጽሐፍ ውስጥ እንደሚከተለው ተገልጿል. OWASP ጥገኝነት ቼክ በአንድ መተግበሪያ ውስጥ ጥቅም ላይ የዋሉ ሁሉንም ክፍት ምንጭ አካላት ካታሎግ የሚያደርግ እና በውስጣቸው ያሉትን ተጋላጭነቶች የሚያሳይ ነፃ ስካነር ነው። ለጃቫ፣ .NET፣ Ruby (gemspec)፣ ፒኤችፒ (አቀናባሪ)፣ ኖድ.ጅስ እና ፓይዘን እንዲሁም ለአንዳንድ የC/C++ ፕሮጀክቶች ስሪቶች አሉ። ጥገኝነት ቼክ ከ Ant፣ Maven እና Gradle፣ እና እንደ ጄንኪንስ ካሉ ተከታታይ የውህደት አገልጋዮች ጋር ይዋሃዳል።

የጥገኝነት ማረጋገጫ ሁሉንም የታወቁ ተጋላጭነቶች ከNIST ብሄራዊ የተጋላጭነት ዳታቤዝ (NVD) ሪፖርት ያደርጋል እና ከNVD የዜና ምግቦች በተገኘ መረጃ ተዘምኗል።

እንደ እድል ሆኖ፣ ይህ ሁሉ እንደ OWASP ጥገኝነት ማረጋገጫ ፕሮጀክት ወይም እንደ የንግድ ፕሮግራሞች ያሉ መሳሪያዎችን በመጠቀም በራስ-ሰር ሊከናወን ይችላል። ጥቁር ዳክዬ, JFrog ኤክስሬይ, ስኒክ, Nexus Lifecycle Sonatype ወይም ምንጭ አጽዳ.

እነዚህ መሳሪያዎች ክፍት ምንጭ ጥገኝነቶችን በራስ ሰር ለመቆጠብ፣ የታወቁ ተጋላጭነቶችን የያዙ የቤተ-መጻህፍት እና የቤተ-መጻህፍት ስሪቶችን ለመለየት እና ከባድ ችግሮች ከታዩ ፅንስ ለማስወረድ በቧንቧ ግንባታ ውስጥ ሊካተቱ ይችላሉ።

OWASP ጥገኝነት ማረጋገጫ

ጥገኝነት ማረጋገጫ እንዴት እንደሚሰራ ለመፈተሽ እና ለማሳየት፣ ይህንን ማከማቻ እንጠቀማለን። ጥገኝነት - ቼክ - ምሳሌ.

የኤችቲኤምኤል ዘገባን ለማየት የ 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 ውስጥ ያረጋግጡ

አራተኛው ቅጽበታዊ ገጽ እይታ የጋራ-ፋይል ሰቀላ-1.3.2.jar ዝርዝሮች ነው። የ CVE ደረጃዎች 7.5 እና 9.8 መሆናቸውን እናያለን.

ያገለገሉ ቤተ-መጻሕፍት የተጋላጭነት ስካነርን በመጠቀም ጥገኝነት-በ GitlabCI ውስጥ ያረጋግጡ

የጊትላብ ገጾችን ለመጠቀም ከፈለጉ አይሰራም - የወደቀ ተግባር ቅርስ አይፈጥርም።

ምሳሌ እዚህ https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

ውፅዓት ይገንቡ፡ ምንም ቅርሶች የሉም፣ የኤችቲኤምኤል ዘገባውን አላየሁም። አንተ 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

በ failBuildOnCVSS መለኪያ ምላሽ መስጠት ያለብዎትን የCVE ተጋላጭነቶች ደረጃ ማስተካከል ይችላሉ።

NIST የተጋላጭነት ዳታቤዝ (NVD) ከበይነመረቡ በማውረድ ላይ

NIST ያለማቋረጥ የNIST ተጋላጭነት ዳታቤዝ (NVD) ከበይነመረቡ እንደሚያወርድ አስተውለሃል፡

ያገለገሉ ቤተ-መጻሕፍት የተጋላጭነት ስካነርን በመጠቀም ጥገኝነት-በ GitlabCI ውስጥ ያረጋግጡ

ለማውረድ፣ መገልገያውን መጠቀም ይችላሉ። የኒስት_ውሂብ_መስታወት_ጎላንግ

እንጭነው እና እንጀምረው።

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 - ደህንነቱ የተጠበቀ ልማት

ምንጭ: hab.com

አስተያየት ያክሉ