Vue CI에 구멍 검색 추가
8174 단어 toolsdevopssecurityjavascript
이 글은 CI/CD 파이프의 알려진 빈틈을 찾기 위해 OWASP Dependency-Check tool 스캐닝 항목의 의존항을 어떻게 사용하는지 보여 준다.my previous post for more detail on this tool 보기이 글은 종속성 검사를 Vue에 추가하는 방법에 대해 간략하게 설명합니다.js 프로젝트, 그리고 Jenkins을 사용하여 CI/CD를 구축하는 동안 이 도구를 사용하고 결과를 SonarQube에 발표합니다.본고에서 사용한 문서는 found in this repo이다.
설정 중
우리 팀은 Jenkins를 사용하여 CI/CD를 제작합니다.CI에 종속성 검사를 추가하는 가장 간단한 방법은 plugin for Jenkins으로 추가하는 것입니다.이것은 모든 의존 항목을 처리하고 CI의 한 단계로 추가할 수 있으며 결과를 작업 페이지에 발표할 수 있습니다.
다른 한편, 나는 Jenkins 플러그인을 좋아하지 않는다.Jenkins 서버에 문제가 있는 구축은 디버깅하기 어렵고, 플러그인은 디버깅을 더욱 어렵게 합니다.저는 로컬에서 구축 스크립트를 실행할 수 있는 것을 더 좋아합니다. 그래서 저희 팀은 셸 스크립트를 사용하여 구축을 합니다. Jenkins는 함께 구축 작업을 만드는 플러그인 집합이 아니라 작업 관리자와 정보 발표자가 되었습니다.이것은 Jenkins 플러그인에 의해 설치될 수 있는 구성 요소를 서버에 직접 설치해야 하기 때문에 약간의 복잡성을 증가시켰다.물론, 이 구성 요소들을 로컬에 설치해야 합니다.그러나 끊임없는 제출-전송-구축 주기에 빠져 서버에서 중단된 작업을 하려고 했다면 이 방법을 감상할 수 있습니다.스크립트를 로컬에서 실행하고 변경할 수 있습니다. 스크립트가 작동할 때까지, 그리고 Jenkins에서 작업을 발표하려고 시도할 수 있습니다.Jenkins에서 실패하면 스크립트가 아닌 서버 구성이 주범일 수 있습니다.Jenkins 플러그인을 사용할 때 이 두 가지 오류를 구분하기가 매우 어렵다.
OWASP 의존 항목 검사를 설치하는 방법은 my previous post for guidance을 참조하십시오.컴퓨터에서 스크립트 문제를 해결하려면 구축 서버와 로컬에 설치해야 합니다.
플러그인이 설치되어 있으면 항목 검사 스캔에 의존하는 출력을 Jenkins에 게시할 수 있습니다.결과를 SonarQube에 발표할 수도 있습니다. 이것은 훌륭한 코드 정적 분석 도구입니다.나의 예에서, 우리는 SonarQube를 사용하는데, 이것이 바로 내가 묘사한 노선이다.테스트 어플리케이션이 Vue이기 때문입니다.js 웹 응용 프로그램, 우리는 SonarQube를 위해 스캐너를 설치해야 합니다.내 항목에 다음을 추가했습니다.
npm install --save-dev sonarqube-scanner
개발 의존항이기 때문에 최종 구축 코드에 추가되지 않습니다.우리의 구축 스크립트는 SonarQube와 통신해야 하기 때문에 환경 변수를 설정하여 증거를 처리합니다.서버에 직접 설정할 수도 있고, Jenkins plugin을 사용하여 작업이나 생성 노드에 설정할 수도 있습니다.SONAR_URL=<YOUR SONAR URL>
SONAR_USER=<YOUR SONAR USERNAME>
SONAR_PASSWORD=<YOUR SONAR PASSWORD>
스크립트를 로컬에서 실행하려면 .env.local
이라는 파일을 만들고 이 파일에 상술한 값을 추가합니다.구축 스크립트는 이 파일을 선택하고 스크립트가 실행되는 동안 환경 변수를 설정합니다.프로젝트에
sonar-project.properties
파일이 하나 더 있습니다.이 파일을 사용하여 SonarQube의 기본값을 설정하고 SonarQube의 임계값을 설정하여 인식된 빈틈의 수에 따라 심각도를 보고합니다.sonar.host.url=${env.SONAR_URL}
sonar.exclusions=dist/ **/*,reports/*,coverage/** /*
sonar.login=${env.SONAR_USER}
sonar.password=${env.SONAR_PASSWORD}
sonar.dependencyCheck.jsonReportPath=reports/dependency-check-report.json
sonar.dependencyCheck.htmlReportPath=reports/dependency-check-report.html
sonar.dependencyCheck.severity.blocker=9.0
sonar.dependencyCheck.severity.critical=7.0
sonar.dependencyCheck.severity.major=4.0
sonar.dependencyCheck.severity.minor=0.0
sonar.projectKey=demo-web
SonarQube 응용 프로그램에서 응용 프로그램 관리 영역의 Marketplace 섹션에서 종속성 검사 플러그인을 활성화해야 합니다.의존 항목 검사 스캐너는 출력을 XML, JSON 및 HTML로 만들지만 생성할 형식을 선택합니다.나는 이 세 가지를 모두 출력으로 만들 것입니다. 당신의 상황에 따라 당신은 더 적게 할 수 있습니다.Jenkins 플러그인은 작업 페이지에 게시하기 위해 XML과 HTML이 필요합니다.SonarQube는 JSON과 HTML이 이 플랫폼에서 발표되기를 희망합니다.
구축 스크립트
다음은 우리의 구축 스크립트가 취할 절차입니다.
#!/bin/bash
echo 'Clean up build directory'
git clean -fdx
echo 'npm tasks'
# Install dependencies
npm install
# Run unit tests
npm run test:unit
npm run build
# Create a Docker image
echo 'Docker tasks'
imageName="demo-web:1.0."
if [-z ${BUILD_NUMBER+x}];
then
echo "var is unset"
imageName="${imageName}1"
echo "build set to one";
else
echo "var is set to '$var'"
imageName="${imageName}${BUILD_NUMBER}"
repoName="${repoName}${BUILD_NUMBER}"
fi
docker build -t "${imageName}" .
# Remove running instances
echo 'Stop running container'
docker stop demo_web || true
echo 'Remove existing container'
docker rm demo_web || true
echo 'Start a new container'
# Start a container with this image
docker run --name demo_web --restart=always -v /data/log/demo-web:/var/log/nginx/log:rw -p 80:80 -p 443:443 -d "${imageName}"
# Clean up unused images
echo 'Remove old images'
# docker image prune -f
# Scan with dependency-check
echo 'Scan dependencies'
mkdir reports || true
dependency-check --scan ./ -f JSON -f HTML -f XML -o reports
# Set environment variables for Sonar credentials (local only)
set -a
. ./.env.local
echo 'SonarQube analysis'
# Run SonarQube scanner
./node_modules/sonarqube-scanner/dist/bin/sonar-scanner
현재, 당신은 create a job in Jenkins과 스크립트를 사용하여 우리의 코드를 구축, 배치, 분석할 수 있습니다.이 점을 테스트하기 위해 명령줄에서 구축 스크립트를 로컬로 실행할 수도 있습니다.만약 Jenkins를 사용하려고 한다면, 이 구축 스크립트를 Jenkins 파일로 쉽게 다시 만들 수 있지만, 로컬에서 테스트할 수 없습니다.결과
의존항 검사가 실행될 때, 결과는 생성 스크립트에 지정된reports 디렉터리에 나타납니다.
sonar-project.properties
파일에서, 우리는 수나 스캐너가 어디에서 이 파일들을 찾을 수 있는지 알려 준다.스캐너가 SonarQube에 업로드하여 결과 뷰에 통합합니다.스캔 결과 세 개의 빈틈이 발견되었고 우리에게 불합격한 D급을 주었으며, 응용 프로그램이 SonarQube에 설치된 품질 문을 통과하는 것을 막았다.세부 정보를 보려면 구멍 수량 링크를 클릭합니다.
확실한 세 개의 라이브러리는 우리가 직접 npm에 추가한 라이브러리가 아니다.이 예에서 발견된 세 개의 공격받기 쉬운 라이브러리는 다음과 같다.
npm list <libraryname>
을 실행하여 답을 찾을 수 있습니다.나는 yargs 해상도에서 그것을 시험적으로 사용했다. 이것은 의존성 검사 보고서의 두 가지 빈틈에 열거되어 있다.yargs 해상도 라이브러리는 실제로 세 가지 의존 항목에 존재하는데 모두 다른 버전을 사용하는데 그 중 두 개(버전 10.1.0과 13.1.2)에 빈틈이 있다.다행히도, 이것들은 모두 우리의 개발 의존에서 발생하기 때문에, 구축된 응용 프로그램에 포함되지 않았다.결국 배포의 종속성이 되면 다음과 같은 조치를 취해야 합니다.
npm install
을 다시 실행하고 응용 프로그램을 테스트합니다.만약 우리가 보고서의 링크를 따른다면, 우리는 13.1.2, 15.0.1, 18.1.1 이상의 버전이 공격을 받기 어렵다는 것을 발견할 수 있을 것이다.그러나 더 높은 버전이 의존하는 라이브러리를 파괴하지 않을 것이라고 보장할 수는 없다.YMMV.Reference
이 문제에 관하여(Vue CI에 구멍 검색 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/davetrux/add-vulnerability-scanning-to-your-vue-ci-4nle텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)