This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Application Security Testing

- Application Security Testing

Komponent do analizy pod kątem bezpiecezństwa (Application Security Testing).

1 - 🛠 Job template: 💪 SonarQube Scanner (SAST)

💪 SonarQube Scanner (SAST)

Job SonarQube Scanner (SAST) umożliwia analizę jakości kodu źródłowego oraz wykrywanie błędów z wykorzystaniem platformy SonarQube/SonarCloud. Szablon należy uruchamiać w etapie sast, aby mieć pewność, że jakość kodu spełnia wymagania organizacji.


Wymagania wstępne

  • SonarQube Scanner – dostępny w obrazie Dockera ustawianym przez inputs.docker_image.
  • Skonfigurowane konto w SonarCloud lub własnej instancji SonarQube (parametry: sonar_host_url, sonar_token, sonar_project_key).

⚙️ Parametry wejściowe (inputs)

Nazwa Typ Domyślna wartość Opis
docker_image string registry.gitlab.com/pl.rachuna-net/containers/sonar-scanner:2.0.0 Obraz Dockera zawierający SonarQube Scanner
logo_url string https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads Adres URL logo wyświetlanego w logach
sonar_user_home string ${CI_PROJECT_DIR}/.sonar Lokalny katalog roboczy SonarQube
sonar_host_url string https://sonarcloud.io Adres instancji SonarQube lub SonarCloud
sonar_organization string pl-rachuna-net Nazwa organizacji w SonarCloud
sonar_project_name string (puste) Nazwa projektu analizowanego w SonarQube
sonar_project_key string (puste) Klucz projektu w SonarQube (unikalny identyfikator)
sonar_token string (puste) Token uwierzytelniający do SonarQube
sonar_project_description string (puste) Opis projektu w SonarQube
sonar_project_version string 1.0.0 Wersja analizowanego projektu
sonar_sources string . Ścieżka do katalogu ze źródłami do analizy

🧬 Zmienne środowiskowe ustawiane w jobie

  • CONTAINER_IMAGE_SONAR_SCANNER – obraz Dockera SonarQube Scanner (na podstawie inputs.docker_image)
  • SONAR_USER_HOME – katalog roboczy SonarQube
  • SONAR_HOST_URL – adres instancji SonarQube/SonarCloud
  • SONAR_ORGANIZATION – nazwa organizacji
  • SONAR_PROJECT_KEY – klucz projektu w SonarQube
  • SONAR_PROJECT_NAME – nazwa projektu
  • SONAR_PROJECT_DESCRIPTION – opis projektu
  • SONAR_PROJECT_VERSION – wersja projektu
  • SONAR_SOURCES – ścieżki źródeł do analizy
  • SONAR_TOKEN – token uwierzytelniający do SonarQube

📤 Output

Job wykonuje następujące kroki:

  1. Wyświetlenie zmiennych wejściowych i konfiguracji SonarQube.

  2. Uruchomienie SonarQube Scanner z zadeklarowanymi parametrami:

    • analiza kodu z podanych źródeł (SONAR_SOURCES),
    • przesłanie wyników do wskazanej instancji (SONAR_HOST_URL).

Pipeline zakończy się niepowodzeniem, jeśli analiza SonarQube wykryje błędy jakościowe powodujące blokadę (quality gate failure).


🧪 Dostępny job

💪 sonarqube scanner (sast)

Analizuje kod źródłowy i przesyła wyniki do SonarQube/SonarCloud:

💪 sonarqube scanner:
  stage: sast
  image: $CONTAINER_IMAGE_SONAR_SCANNER
  before_script:
    - git config --global --add safe.directory ${CI_PROJECT_DIR}
    - [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
    - !reference [.ast:_function_print_row]
    - !reference [.ast:sonarqube_input_variables]
    - !reference [.ast:sonarqube-init]
  script:
    - |
      sonar-scanner \
        -Dsonar.projectKey="${SONAR_PROJECT_KEY}" \
        -Dsonar.organization="${SONAR_ORGANIZATION}" \
        -Dsonar.projectName="${SONAR_PROJECT_NAME}" \
        -Dsonar.projectDescription="${CI_PROJECT_DESCRIPTION}" \
        -Dsonar.projectVersion="${SONAR_PROJECT_VERSION}" \
        -Dsonar.sources="${SONAR_SOURCES}" \
        -Dsonar.sourceEncoding=UTF-8 \
        -Dsonar.token="${SONAR_TOKEN}"
  rules:
    - when: on_success

🧪 Przykład użycia w pipeline

include:
  - component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/ast/sonarqube@$COMPONENT_VERSION_SONARQUBE

💪 sonarqube scanner:
  variables:
    SONAR_PROJECT_KEY: $CI_PROJECT_NAME
    SONAR_PROJECT_NAME: "Project $CI_PROJECT_NAME"
    SONAR_TOKEN: $SONAR_TOKEN
  rules:
    - when: on_success

2 - 🛠 Job template: 🔬 Trivy image scan (DAST)

🔬 Trivy image scan (DAST)

Job Trivy image scan (DAST) umożliwia automatyczne skanowanie obrazów kontenerów pod kątem luk bezpieczeństwa przy użyciu narzędzia Trivy. Szablon można uruchamiać w etapie integration-test, aby upewnić się, że obraz nie zawiera znanych podatności o poziomie HIGH lub CRITICAL.


Wymagania wstępne

  • Trivy – wbudowany w używany obraz Dockera (ustawiany przez inputs.docker_image).
  • Obraz kontenera, który ma zostać przeskanowany (ustawiany przez inputs.container_to_analyze).

⚙️ Parametry wejściowe (inputs)

Nazwa Typ Domyślna wartość Opis
docker_image string registry.gitlab.com/pl.rachuna-net/containers/buildah:1.0.0 Obraz Dockera zawierający narzędzie Trivy
logo_url string https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads Adres URL logo wyświetlanego w logach
container_to_analyze string (puste) Pełna nazwa obrazu, który ma być skanowany

🧬 Zmienne środowiskowe ustawiane w jobie

  • CONTAINER_IMAGE_TRIVY – obraz Dockera Trivy (na podstawie inputs.docker_image)
  • CONTAINER_TO_ANALYZE – nazwa obrazu kontenera do przeskanowania (na podstawie inputs.container_to_analyze)
  • TRIVY_NO_PROGRESS – wyłącza pasek postępu w logach (domyślnie true)
  • TRIVY_CACHE_DIR – lokalny katalog cache Trivy (domyślnie .trivycache/)

📤 Output

Job wykonuje następujące kroki:

  1. Uruchomienie skanowania obrazu kontenera (CONTAINER_TO_ANALYZE) z użyciem Trivy:

    • Najpierw wyszukiwanie luk o poziomie HIGH – raport ostrzegawczy (--exit-code 0).
    • Następnie wyszukiwanie luk o poziomie CRITICAL – pipeline zakończy się niepowodzeniem, jeśli takie wystąpią (--exit-code 1).
  2. Wykorzystanie cache Trivy w katalogu .trivycache/ w celu przyspieszenia kolejnych skanów.


🧪 Dostępny job

🔬 trivy (dast)

Skanuje wskazany obraz kontenera i kończy pipeline, jeśli znajdzie luki o poziomie CRITICAL:

🔬 trivy (dast):
  image: $CONTAINER_IMAGE_TRIVY
  stage: integration-test
  services:
    - name: $CONTAINER_IMAGE_TRIVY
      alias: buildah-dind
  allow_failure: true
  before_script:
    - git config --global --add safe.directory ${CI_PROJECT_DIR}
    - [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
    - !reference [.ast:trivy_input_variables]
  script:
    - trivy image --exit-code 0 --severity HIGH $CONTAINER_TO_ANALYZE
    - trivy image --exit-code 1 --severity CRITICAL $CONTAINER_TO_ANALYZE
  cache:
    paths:
      - .trivycache/

🧪 Przykład użycia w pipeline

include:
  - component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/ast/trivy@$COMPONENT_VERSION_TRIVY

🔬 trivy (dast):
  allow_failure: true
  variables:
    CONTAINER_TO_ANALYZE: $CI_REGISTRY_IMAGE:$RELEASE_CANDIDATE_VERSION
  rules:
    - when: on_success