사용자 지정 OWASP 종속성 검사 보고서를 작성하는 GitHub 작업
18259 단어 javascriptgithubtutorialsecurity
본고에서 우리는 작업 흐름을 정의하고GitHub 시장에서 이미 만들어진 조작을 이용하며 사용자 정의 조작을 호출함으로써GitHub 작업과 작업 흐름을 이해할 것이다.
예제 항목
우리는 자바 프로젝트의 일부 내용을 이해할 것이다. 우리는 이러한 내용을 의존성 검사의 주제로 사용할 것이다.https://github.com/perpk/a-vulnerable-project에서 구입 가능합니다.
이 안내서의 아래 부분을 따르기 위해서는 포크를 사용하는 것이 좋다.
이 프로젝트는 Gradle을 구축 도구로 사용합니다.그것의 구축 파일은 구 버전 Spring Framework에 대한 의존을 포함하고 있는데, 이 버전은 공교롭게도 약간의 빈틈이 있다.
프로젝트의 구축 파일을 보여 줍니다.
plugins {
id 'java'
id 'org.owasp.dependencycheck' version '6.0.5'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencyCheck {
format = "JSON"
failBuildOnCVSS = 7
}
plugins
블록은 프로젝트에 대한 의존 항목 검사에 사용할 플러그인을 포함합니다 (gradle 플러그인에 대한 자세한 정보는 here에서 찾을 수 있고 플러그인에 대한 문서는 here에서 찾을 수 있습니다.)dependencyCheck
블록에는 플러그인의 일부 구성이 포함되어 있습니다.여기서 출력 형식만 설정하고 싶습니다. GitHub 작업에서 구축이 실패할 때 출력 형식을 분석할 것입니다.이런 상황을 일으킨 원인은 어떤 높은 등급과 더 높은 등급(관건)의 빈틈도 검출되었는지 여부다.OWASP에서 나온 점수는 기술적으로 빈틈의 심각성을 정의했다.이제
build.gradle
블록을 하단에 추가하여 분기를 만들고 dependencies
파일을 편집할 수 있습니다.dependencies {
runtime group: 'org.springframework', name: 'spring-core', version: '2.0'
}
이 때 프로젝트의 루트 디렉터리에서 다음 명령을 통해 테스트를 하고 로컬에서 dependencyCheckAnalyze
작업을 실행할 수 있습니다../gradlew dependencyCheckAnalyze
failBuildOnCVSS
파일에서 build.gradle
에 설정한 값과 같거나 높은 점수가 존재하기 때문에 구축에 실패할 것입니다.이제 GitHub 워크플로우도 이와 같이 작동하는지 확인해 보겠습니다.새로 만든 분기를 밀어넣고 끌어오기 요청을 만듭니다.
드래그 요청을 만들면 작업 흐름이 바로 시작되고 몇 분 후에 검사 결과가 도착합니다. 예상한 대로 실패했습니다.
세부 정보 링크를 클릭하면 워크플로우 실행에 대한 세부 개요가 표시됩니다.
오류를 사용하여 단계를 확장할 때 표시되는 로그의 오류는 로컬에서 해당 단계를 실행할 때 발생한 오류와 같아야 합니다.
워크플로우 분석
현재 예시 항목의 하이라이트, 작업 흐름 파일입니다.이것은yaml 파일로
.github/workflows/dependencyCheckReport.yml
에서 찾을 수 있습니다.다음은 내용과 세부 사항입니다.name: Java CI with Gradle
on:
pull_request:
branches: [ main ]
jobs:
depCheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- uses: eskatos/gradle-command-action@v1
with:
arguments: dependencyCheckAnalyze
깔끔하지 않아요?위에서 아래로 검사합시다!jobs
블록은 현재 워크플로우의 모든 작업 설명을 포함합니다.현재, 우리는 단지 하나의 임무가 있는데, 그것은 전체 임무를 집행한다.dependencyCheckAnalyze
을 실행해야 합니다.습관적인 동작
현재 의존성 분석의 출력은 stdout에 저장됩니다.공격받기 쉬운 모든 의존항과 빈틈과 심각성을 인쇄할 수 있는 형식으로, 최대 심각도 하락순으로 배열한 간결한 보고서를 원한다면 어떻게 해야 합니까?
만약 이것이 우리가 원하는 것이라면, 우리는 스스로 뭔가를 실현하고, 우리의 업무 절차에서 그것을 호출해야 할 것이다.
여기서 당신도 https://github.com/perpk/owasp-report-custom-render 환매 협의를 구매할 수 있습니다
이미 이런 행동을 실시한 상황에서
동작 분석
이 작업의 핵심은
action.yml
파일입니다. 이 파일은 이 작업의 프로젝트 루트 디렉터리에 있습니다.name: "Owasp Report Custom Renderer"
description: "Render OWASP Report with few informations as an overview in pdf"
inputs:
owasp-json-report:
description: "The owasp report with the dependencies and their vulnerabilities in the JSON format"
required: true
runs:
using: "node12"
main: "index.js"
이름과 일반 설명 다음에 작업의 입력을 정의합니다.이 입력들은 명명된 매개 변수입니다. 이 매개 변수는 작업의 원본 코드에서 작업 흐름에서 전달된 매개 변수를 검색하는 데 사용됩니다.runs
블록은 우리 행동의 집행자를 정의했다.여기 Node.JS작전이 있습니다.main
키워드는 실행할 파일을 정의합니다.이제
index.js
을 살펴보겠습니다. 그것이 우리의 입구점을 실현했습니다.const core = require("@actions/core");
// ... some more imports
const work = async (owaspReportJsonFile, dumpHtmlToFS = false) => {
try {
const owaspReportData = await owaspJsonReportReader(owaspReportJsonFile);
const html = createHtmlOverview(owaspReportData, dumpHtmlToFS);
writePdfReport(html);
} catch (e) {
core.setFailed(e);
}
};
work(core.getInput("owasp-json-report"), true);
@actions/core
패키지의 가져오기는 액션스에 핵심 기능을 제공합니다.위 코드에서는 마지막 줄과 같이 오류 처리와 입력 읽기에 사용됩니다.여기서 읽을 입력은 작업 흐름이 실행되는 dependencyCheckAnalyze
Gradle 작업에 의해 생성된 json 보고서입니다.우리의 작업은 json 보고서를 색인이 있는 디렉터리에서 사용할 수 있기를 바랍니다.js 네.이 작업 자체는 먼저 HTML 형식으로 보고서를 작성한 다음 PDF 형식으로 변환합니다.일부 라이브러리는 PDF를 직접 생성할 수 있지만, 다시 사용할 수 있는 중간 형식의 HTML을 만드는 것이 더 편리하다는 것을 알았다.나는 또 이렇게 하는 것이 PDF 라이브러리의 API를 처리하는 것보다 더 쉽다는 것을 발견했다.
워크플로에서 작업 호출
현재, 우리는 우리의 조작을 호출하여 작업 흐름을 바꾸고, 매개 변수를 전달하며, 그 결과에 접근할 것이다.
우선, 우리는
dependencyCheckAnalyze
에 생성된 json 보고서를 가지고 있어야 한다. 왜냐하면 우리는 그것을 매개 변수로 우리의 작업에 전달하기를 원하기 때문이다.GitHub에서 제공하는 스토리지에 다음 작업에서 사용할 수 있도록 해야 합니다.이를 위해 GitHub 시장에서 actions/upload-artifact
을 사용합니다. - name: Backup JSON Report
uses: actions/upload-artifact@v2
with:
name: dependency-check-report.json
path: ./build/reports/dependency-check-report.json
이 코드 세그먼트를 워크플로우 파일의 아래쪽에 추가하면 지정된 경로에서 보고서를 가져오고 지정된 이름으로 저장하는 upload-artifact
작업이 호출됩니다.그리고 우리는 첫 번째 작업이 끝난 후에 실행할 다른 작업을 정의해야 한다.계속해서 PDF로 변환하려면 json 보고서가 필요하기 때문에 기다려야 합니다.
owasp_report:
needs: [depCheck]
runs-on: ubuntu-20.04
name: Create a report with an overview of the vulnerabilities per dependency
시장에서 사용할 수 없기 때문에, 새로 만든 작업의 첫 번째 단계에서 저장소에서 확인해야 합니다.서명 후 두 번째 단계로, 이전에 업로드한 json 보고서를 가져와야 합니다.경로는 파일을 다운로드할 위치를 정의합니다.우리의 예에서, 현재 디렉터리에서 이렇게 하면 충분하고, 현재 디렉터리도 마침 작업 원본을 검출하는 디렉터리이다.steps:
- uses: actions/checkout@v2
with:
repository: perpk/owasp-report-custom-render
- uses: actions/download-artifact@v2
with:
name: dependency-check-report.json
path: ./
우리는 지금 실제 조작을 호출할 수 있다.이것은uses 키워드를 통해 이루어진 것입니다.action.yml
파일이 있는 디렉토리를 참조해야 합니다.우리의 예에서, 그것은 현재 디렉터리입니다. - name: Run Report Creation
uses: ./
with:
owasp-json-report: dependency-check-report.json
마지막으로 이 작업이 생성한 PDF 보고서를 가져와 업로드하여 추가 배포가 가능하도록 합니다. - name: Upload overview report
uses: actions/upload-artifact@v2
with:
name: Owasp Overview Report
path: owasp-report-overview.pdf
이제 우리는 업무 흐름 파일에 대한 변경 사항을 제출/전송하고 다른 인출 요청을 만들고 긴장을 풀고 자동화의 기적을 누릴 수 있습니다!(약간 오버)😛)아이구!우리는 빈틈 평점을 바탕으로 구축에 실패한 조건이 있기 때문에 보고서 생성 작업은 전혀 실행되지 않았다.
이 문제를 해결하는 방법은 상당히 간단하다.작업 집행은 조건과 결합할 수 있다.우리의 예에서, 무슨 일이 발생하든지 간에, 우리는 보고서를 실행하여 생성하기를 바란다.이렇게 하려면 워크플로의
needs
키워드 바로 아래에 다른 행을 삽입합니다. owasp_report:
needs: [depCheck]
if: "${{ always() }}"
dependencyCheckAnalyze
단계가 실패하여 다음 단계가 모두 수행되지 않습니다.따라서 실패한 첫 번째 단계 이후의 첫 번째 단계에 조건을 추가합니다. - name: Backup JSON Report
if: "${{ always() }}"
uses: actions/upload-artifact@v2
with:
name: dependency-check-report.json
path: ./build/reports/dependency-check-report.json
이것은 할 수 있을 것이다. 작업 절차는 반드시 성공할 것이다.항목 Owasp 개요 보고서에는 결과 PDF를 포함하는 zip이 있습니다.
GitHub 작업 및 워크플로우에 대한 간략한 개요입니다.반갑습니다. 피드백을 받았습니다. D 읽어주셔서 감사합니다!
Reference
이 문제에 관하여(사용자 지정 OWASP 종속성 검사 보고서를 작성하는 GitHub 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/perpk/github-action-for-creating-a-custom-owasp-dependency-check-report-5p3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)