CVE 스캐너 GitHub 작업

내 워크플로



바이너리 패키지에서 CVE( Common Vulnerabilities and Exposures )를 스캔하는 GitHub 작업을 만들었습니다. 내 작업은 cve-bin-tool을 사용하여 바이너리 패키지에서 CVE를 스캔하고 자세한 보고서를 생성하고 언제든지 다운로드할 수 있는 artifact으로 업로드합니다. 또한 작업의 런타임을 줄이기 위해 actions/cache을 사용하고 있습니다.

바이너리 패키지와 라이브러리를 개발하는 개발자라면 이 작업을 CI 파이프라인의 일부로 통합하여 사용 중인 라이브러리에서 발견되는 일반적인 취약점을 파악하고 이를 완화하기 위한 조치를 취하는 것이 좋습니다.

주어진 CVE를 수정하는 가장 권장되는 방법은 패키지를 취약하지 않은 버전으로 업그레이드하는 것입니다. 이상적으로는 CVE가 항상 그런 것은 아니지만 수정 사항을 사용할 수 있는 후에만 공개됩니다. 어떤 이유로 이것이 가능하지 않은 경우 CVE 번호를 검색하여 다른 버전으로 백포트할 수 있는 가능한 해결 방법 및 패치에 대한 정보를 얻으십시오. 이 도구는 해결 방법이나 백포트된 수정 사항을 감지할 수 없으므로 바이너리가 이제 안전하게 완화되어 가양성 결과가 나오더라도 계속 취약한 것으로 표시됩니다. 이 문제를 방지하려면 CVE를 완화됨으로 분류하는 것이 좋습니다. 자세한 내용은 User Manual of the cve-bin-tool을 참조하십시오.

제출 카테고리:



유지 보수 필수품

Yaml 파일 또는 코드 링크



name: CVE scanner
on:
#    You can customize this according to your need.
  - push
  - pull_request
jobs:
  build_and_scan:
    runs-on: ubuntu-latest
    steps:
    # Get date utility for caching database.
      - name: Get Date
        id: get-date
        run: |
          echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")"
        shell: bash
    #  Let's first download dependencies for this action.
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.8
    #  This second step is unnecessary but highly recommended because
    #  it will cache database and saves time redownloading it
    #  if database isn't stale.
      - name: get cached python packages
        uses: actions/cache@v2
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-
      - name: get cached database
        uses: actions/cache@v2
        with:
          path: ~/.cache/cve-bin-tool
          key: ${{ runner.os }}-cve-bin-tool-${{ steps.get-date.outputs.date }}
      - name: Install CVE Binary Tool
#          We are using the latest development version of cve-bin-tool
#          because current PyPI version don't have features like
#          config file support, generating an HTML report, etc.
        run: pip install git+https://github.com/intel/cve-bin-tool@master
#          In case you prefer current PyPI version, 
#          you need to hard code CLI options
#          for cve-bin-tool in the action itself and 
#          have to use CSV or JSON as output format.
      - name: build package
#          Here, we are building a Python wheel for this example.
#          You need to replace this with your build process.
        run: |
          pip install wheel
          python setup.py bdist_wheel
      - name: Scan built package
#          Now, we will scan the built wheel 
#          which is situated in "/dist" directory
#          Python stores built packages in /dist directory.
#          You need to replace it with the directory
#          where you have stored built package
        run: cve-bin-tool dist -f html -o cve-bin-tool-report.html -x
#          Alternatively if you have written config file
#          for cve-bin-tool you can use the following command
#          cve-bin-tool -C path/to/cve_bin_tool_config.toml
        continue-on-error: true
#          You need to set continue_on_error: true because 
#          CVE Binary Tool sets the number of product with CVEs
#          as exit code. And GitHub terminate the action 
#          when the process produces nonzero exit code status.
      - name: Upload report as an artifact
#        This will upload the generated report as 
#        a GitHub artifact which you can download later.
        uses: actions/upload-artifact@v2
        with:
          name: cve_report
          path: 'cve-bin-tool-report.html'

추가 리소스/정보



나는 또한 이 작업을 cve-bin-tool에 기여했습니다. 공식 cve-bin-tool 저장소의 how-to-guides 디렉토리에서도 찾을 수 있습니다.

이 작업here 및 관련 문제에 대한 토론here에 대한 cve-bin-tool에 대한 내 pull-request를 볼 수도 있습니다.

또한 다른 프로젝트에서 이 작업을 테스트했으며 제대로 작동합니다. 작업here의 실행 예를 볼 수 있습니다.

좋은 웹페이지 즐겨찾기