Skip to content

Commit

Permalink
Security scan pipeline update (#4177)
Browse files Browse the repository at this point in the history
* codeql settings update

* codeql fix

* update trivy

* update bandit

* trivy fix

* trivy fix

* trivy fix

* json output

* trivy fix

* trivy spdx

* codeql added

* bandit update

* remove bandit B320

* remove bandit B410

* remove workflow_dispatch

* revert trivy yaml

* fix format
  • Loading branch information
AlexanderBarabanov authored Jan 16, 2025
1 parent 528141d commit a6d5795
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 36 deletions.
6 changes: 3 additions & 3 deletions .ci/ipas_default.config
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
# B317 : xml_bad_sax
# B318 : xml_bad_minidom
# B319 : xml_bad_pulldom
# B320 : xml_bad_etree
# B320 : xml_bad_etree - removed https://github.com/PyCQA/bandit/commit/e4da0b351f89a82b5de8dd791cbdd963476b5a11
# B321 : ftplib
# B323 : unverified_context
# B324 : hashlib_new_insecure_functions
Expand All @@ -53,7 +53,7 @@
# B407 : import_xml_expat
# B408 : import_xml_minidom
# B409 : import_xml_pulldom
# B410 : import_lxml
# B410 : import_lxml - removed https://github.com/PyCQA/bandit/commit/e4da0b351f89a82b5de8dd791cbdd963476b5a11
# B411 : import_xmlrpclib
# B412 : import_httpoxy
# B413 : import_pycrypto
Expand Down Expand Up @@ -83,7 +83,7 @@
# IPAS Required Checkers. Do not disable these
# Additional checkers may be added if desired
tests:
[ 'B301', 'B302', 'B303', 'B304', 'B305', 'B306', 'B308', 'B310', 'B311', 'B312', 'B313', 'B314', 'B315', 'B316', 'B317', 'B318', 'B319', 'B320', 'B321', 'B323', 'B324', 'B401', 'B402', 'B403', 'B404', 'B405', 'B406', 'B407', 'B408', 'B409', 'B410', 'B411', 'B412', 'B413']
[ 'B301', 'B302', 'B303', 'B304', 'B305', 'B306', 'B308', 'B310', 'B311', 'B312', 'B313', 'B314', 'B315', 'B316', 'B317', 'B318', 'B319', 'B321', 'B323', 'B324', 'B401', 'B402', 'B403', 'B404', 'B405', 'B406', 'B407', 'B408', 'B409', 'B411', 'B412', 'B413']

# (optional) list skipped test IDs here, eg '[B101, B406]':
# The following checkers are not required but be added to tests list if desired
Expand Down
134 changes: 119 additions & 15 deletions .github/workflows/code_scan.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ on:
# every UTC 6PM from Mon to Fri
- cron: "0 18 * * 1-5"

# Declare default permissions as read only.
permissions: read-all
permissions: {}

jobs:
Trivy-scan:
runs-on: ubuntu-latest
Trivy:
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Expand All @@ -27,27 +26,52 @@ jobs:
run: python -m pip install --require-hashes --no-deps -r .ci/requirements.txt
- name: Freeze dependencies
run: pip-compile --extra=docs,base,mmlab,anomaly -o requirements.txt pyproject.toml
- name: Trivy Scanning (spdx.json)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # 0.29.0

- name: Run Trivy Scan (vuln)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # v0.29.0
with:
trivy-config: ".ci/trivy-json.yaml"
scan-type: "fs"
scan-type: fs
scan-ref: requirements.txt
scanners: vuln
output: trivy-results-vuln.txt

- name: Run Trivy Scan (dockerfile and secrets)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # v0.29.0
with:
scan-type: fs
scan-ref: .
- name: Trivy Scanning
scanners: misconfig,secret
output: trivy-results-misconfig.txt
skip-setup-trivy: true

- name: Trivy Scanning (spdx)
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # 0.29.0
with:
trivy-config: ".ci/trivy.yaml"
scan-type: "fs"
scan-type: fs
scan-ref: .
format: spdx-json
output: trivy-results-spdx.json
skip-setup-trivy: true

- name: Upload Trivy results artifact
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: trivy-results
path: "${{ github.workspace }}/trivy-results.*"
path: "${{ github.workspace }}/trivy-results-*"
retention-days: 7
# Use always() to always run this step to publish scan results when there are test failures
if: ${{ always() }}

- name: Upload deps list
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
if: always()
with:
name: python-deps-list
path: "${{ github.workspace }}/requirements.txt"
retention-days: 7

Bandit:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Expand All @@ -66,7 +90,87 @@ jobs:
- name: Upload Bandit artifact
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: bandit-report
path: .tox/bandit-report.txt
name: bandit-results
path: .tox/bandit-results.txt
retention-days: 7
# Use always() to always run this step to publish scan results when there are test failures
if: ${{ always() }}

CodeQL:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-22.04
permissions:
# required for all workflows
security-events: write

strategy:
fail-fast: false
matrix:
include:
- language: python
build-mode: none
- language: actions # to scan workflows
build-mode: none
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
with:
category: "/language:${{matrix.language}}"

- name: Generate CodeQL Report
uses: rsdmike/github-security-report-action@a149b24539044c92786ec39af8ba38c93496495d # v3.0.4
with:
token: ${{ secrets.GITHUB_TOKEN }}
template: report
outputDir: codeql-${{ matrix.language }}

- name: Rename Report
shell: bash
continue-on-error: true
run: |
cd codeql-${{ matrix.language }}
mv "report.pdf" "codeql-${{ matrix.language }}.pdf"
- name: Upload Report
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: codeql-${{ matrix.language }}-results
path: codeql-${{ matrix.language }}/*.pdf
retention-days: 7

Summarize:
needs: [Trivy, Bandit, CodeQL]
if: always()
runs-on: ubuntu-22.04
steps:
# Create directory first
- name: Create results directory
run: mkdir -p all-results

# Download artifacts with error handling
- name: Download all results
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
continue-on-error: true # Don't fail if some tools didn't generate results
with:
pattern: "*-results"
merge-multiple: true
path: all-results

# Only upload if there are files
- name: Upload combined results
if: hashFiles('all-results/**/*') != ''
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: security-scan-results
path: all-results
retention-days: 7
37 changes: 20 additions & 17 deletions .github/workflows/codeql.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,11 @@
name: "CodeQL"

on:
push:
branches:
- develop
- releases/**
pull_request:
types:
- opened
- reopened
- synchronize
schedule:
- cron: "0 0 * * 0"

permissions:
contents: read

jobs:
analyze:
Expand All @@ -35,20 +26,20 @@ jobs:
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 60
permissions:
# required for all workflows
security-events: write

# only required for workflows in private repositories
actions: read
contents: read

strategy:
fail-fast: false
matrix:
language: ["python"]
include:
- language: python
build-mode: none
- language: actions # to scan workflows
build-mode: none
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
Expand All @@ -63,6 +54,7 @@ jobs:
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
Expand All @@ -74,13 +66,24 @@ jobs:
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
with:
category: "/language:${{matrix.language}}"

- name: Generate Security Report
uses: rsdmike/github-security-report-action@a149b24539044c92786ec39af8ba38c93496495d # v3.0.4
with:
template: report
token: ${{ secrets.GITHUB_TOKEN }}
outputDir: codeql-${{ matrix.language }}

- name: Rename Report
shell: bash
continue-on-error: true
run: |
cd codeql-${{ matrix.language }}
mv "report.pdf" "codeql-${{ matrix.language }}.pdf"
- name: GitHub Upload Release Artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: codeql-report
path: "./report.pdf"
name: codeql-${{ matrix.language }}-results
path: codeql-${{ matrix.language }}/*.pdf
retention-days: 7
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ deps =
allowlist_externals =
bandit
commands =
- bandit -r -c .ci/ipas_default.config {toxinidir}/ -f txt -o {toxworkdir}/bandit-report.txt
- bandit -r -c .ci/ipas_default.config -f txt -o {toxworkdir}/bandit-results.txt .


[testenv:fuzzing]
Expand Down

0 comments on commit a6d5795

Please sign in to comment.