Осалдықты басқарудың маңызды бөлігі заманауи жүйелерді құрайтын бағдарламалық қамтамасыз ету компоненттерінің жеткізілім тізбегін мұқият түсіну және қорғау болып табылады. Agile және DevOps командалары әзірлеу уақыты мен құнын азайту үшін ашық бастапқы кітапханалар мен фреймворктарды кеңінен пайдаланады. Бірақ бұл медальдың кемшілігі де бар: басқа адамдардың қателері мен осалдықтарын мұраға алу мүмкіндігі.
Әлбетте, команда оның қолданбаларына қандай ашық бастапқы құрамдастардың кіретінін білуі керек, белгілі сенімді нұсқалардың белгілі сенімді көздерден жүктелуін қамтамасыз ету және жаңадан ашылған осалдықтарды түзетуден кейін компоненттердің жаңартылған нұсқаларын жүктеп алу керек.
Бұл жазбада, егер ол сіздің кодыңызда елеулі ақауларды анықтаса, құрастыруды тоқтату үшін OWASP тәуелділікті тексеруді пайдалануды қарастырамыз.
«Agile жобаларындағы даму қауіпсіздігі» кітабында ол келесідей сипатталған. OWASP Dependency Check — қолданбада пайдаланылатын барлық ашық бастапқы компоненттерді каталогтайтын және олардағы осалдықтарды көрсететін тегін сканер. Java, .NET, Ruby (gemspec), PHP (композитор), Node.js және Python, сондай-ақ кейбір C/C++ жобалары үшін нұсқалары бар. Dependency Check жалпы құрастыру құралдарымен, соның ішінде Ant, Maven және Gradle және Дженкинс сияқты үздіксіз интеграция серверлерімен біріктірілген.
Dependency Check NIST ұлттық осалдық деректер базасынан (NVD) белгілі осалдықтары бар барлық құрамдастарды хабарлайды және NVD жаңалықтар арналарының деректерімен жаңартылады.
Бақытымызға орай, мұның барлығын OWASP Dependency Check жобасы немесе коммерциялық бағдарламалар сияқты құралдар арқылы автоматты түрде жасауға болады.
Бұл құралдар ашық бастапқы тәуелділіктерді автоматты түрде түгендеу, белгілі осалдықтары бар кітапханалар мен кітапханалардың ескірген нұсқаларын анықтау және күрделі мәселелер анықталған жағдайда құрастыруды тоқтату үшін құрастыру құбырларына қосылуы мүмкін.
OWASP тәуелділігін тексеру
Тәуелділікті тексеру қалай жұмыс істейтінін тексеру және көрсету үшін біз осы репозиторийді пайдаланамыз
HTML есебін көру үшін gitlab-runner бағдарламасында nginx веб-серверін конфигурациялау қажет.
Ең аз 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 {
}
}
Жиналыстың соңында сіз мына суретті көре аласыз:
Сілтемені орындаңыз және тәуелділікті тексеру есебін қараңыз.
Бірінші скриншот қорытындымен есептің жоғарғы бөлігі болып табылады.
Екінші скриншот мәліметтері CVE-2017-5638. Мұнда біз CVE деңгейін және эксплуатацияларға сілтемелерді көреміз.
Үшінші скриншот - log4j-api-2.7.jar мәліметтері. Біз CVE деңгейлері 7.5 және 9.8 екенін көреміз.
Төртінші скриншот - commons-fileupload-1.3.2.jar мәліметтері. Біз CVE деңгейлері 7.5 және 9.8 екенін көреміз.
Егер сіз gitlab беттерін пайдаланғыңыз келсе, онда ол жұмыс істемейді - құлаған тапсырма артефакт жасамайды.
Мысал мұнда
Құрастыру нәтижесі: артефактілер жоқ, мен html есебін көрмеймін. Сіз Artifact: әрқашан қолданып көруіңіз керек
CVE осалдықтарының деңгейін реттеу
gitlab-ci.yaml файлындағы ең маңызды жол:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
failBuildOnCVSS параметрімен жауап беру қажет CVE осалдықтарының деңгейін реттеуге болады.
Интернеттен NIST осалдық дерекқорын (NVD) жүктеп алу
NIST NIST осалдық дерекқорларын (NVD) интернеттен үнемі жүктеп алатынын байқадыңыз ба:
Жүктеп алу үшін қызметтік бағдарламаны пайдалануға болады
Оны орнатып, іске қосайық.
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
Ақпарат көзі: www.habr.com