GitLab Advanced SAST
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab Advanced SAST는 교차 함수 및 교차 파일 오염 분석을 사용하여 기존 SAST보다 적은 거짓 양성으로 복잡한 취약점을 탐지하는 정적 애플리케이션 보안 테스트(SAST) 분석기입니다. GitLab Advanced SAST는 옵트인 기능입니다.
히스토리
GitLab Advanced SAST는 교차 함수 및 교차 파일 오염 분석을 사용하여 기존 SAST보다 적은 거짓 양성으로 복잡한 취약점을 탐지하는 정적 애플리케이션 보안 테스트(SAST) 분석기입니다.
GitLab Advanced SAST는 옵트인 기능입니다. 활성화되면 GitLab Advanced SAST는 사전 정의된 규칙셋을 사용하여 지원되는 모든 언어 파일을 스캔하며, SAST 분석기는 다른 파일을 계속 스캔합니다. 두 분석기는 병렬로 실행될 수 있습니다. SAST와 GitLab Advanced SAST는 완전한 동등성이 없으며, 각 분석기는 다른 분석기가 감지하지 못하는 일부 취약점을 탐지합니다. 두 분석기가 동일한 취약점을 탐지하면 자동화된 전환 프로세스가 발견 항목을 중복 제거합니다.
GitLab Advanced SAST는 표준 Semgrep 기반 SAST 분석기보다 더 깊은 분석을 수행합니다. 이 포괄적인 접근 방식은 정확도를 향상시키고 거짓 양성을 줄일 수 있지만, 더 많은 컴퓨팅 리소스와 긴 스캔 시간이 필요합니다.
개요는 GitLab Advanced SAST: Accelerating Vulnerability Resolution을 참조하세요.
제품 투어는 GitLab Advanced SAST 제품 투어를 참조하세요.
기능#
| 기능 | SAST | Advanced SAST |
|---|---|---|
| 분석 깊이 | 복잡한 취약점을 탐지하는 능력이 제한적입니다. 분석은 단일 파일 및 (제한적인 예외를 제외하고) 단일 함수로 제한됩니다. | 교차 파일, 교차 함수 오염 분석을 사용하여 복잡한 취약점을 탐지합니다. |
| 정확도 | 제한된 컨텍스트로 인해 거짓 양성 결과를 생성할 가능성이 더 높습니다. | 교차 파일, 교차 함수 오염 분석을 사용하여 실제로 악용 가능한 취약점에 집중함으로써 거짓 양성 결과를 줄입니다. |
| 수정 가이드 | 취약점 발견 항목은 줄 번호로 식별됩니다. | 상세한 코드 흐름 보기는 취약점이 프로그램을 통해 흐르는 방식을 보여주어 빠른 수정을 가능하게 합니다. |
| GitLab Duo 취약점 설명 및 취약점 해결 지원 | 예. | 예. |
| 언어 커버리지 | 더 광범위. | 더 제한적. |
GitLab Advanced SAST 켜기#
프로젝트에서 GitLab Advanced SAST를 켜려면 다음 단계를 따르세요.
사전 요구 사항:
- 프로젝트에 대한 Maintainer 또는 Owner 권한.
- 표준 SAST 분석기를 켜야 합니다. 자세한 내용은 SAST 사전 요구 사항을 참조하세요.
- GitLab Self-Managed의 경우, 지원되는 GitLab 버전을 사용합니다:
- 최소 버전: GitLab 17.1 이상
- 권장 버전: GitLab 17.4 이상 (코드 흐름 보기, 취약점 중복 제거, 업데이트된 템플릿 포함)
- 템플릿 호환성:
- 안정적인 템플릿: GitLab 17.3 이상
- 최신 템플릿: GitLab 17.2 이상
- 동일한 프로젝트에서 안정적인 템플릿과 최신 템플릿을 혼합하지 마세요.
GitLab Advanced SAST 켜기:
-
상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
Build > Pipeline 편집기로 이동합니다.
-
.gitlab-ci.yml파일을 만들거나 편집합니다. -
Advanced SAST를 활성화하기 위한 적절한 변수를 추가합니다:
-
C/C++를 제외한 모든 지원 언어의 경우:
GITLAB_ADVANCED_SAST_ENABLED: 'true' -
C/C++의 경우:
GITLAB_ADVANCED_SAST_CPP_ENABLED: 'true'
-
-
Validate 탭을 선택한 다음 Validate pipeline을 선택합니다.
Simulation completed successfully 메시지가 파일이 유효하다는 것을 확인합니다.
-
Edit 탭을 선택합니다.
-
필드를 완성합니다.
-
Start a new merge request with these changes 확인란을 선택한 다음 Commit changes를 선택합니다.
-
표준 워크플로에 따라 필드를 완성한 다음 Create merge request를 선택합니다.
-
표준 워크플로에 따라 머지 리퀘스트를 검토하고 편집한 다음 Merge를 선택합니다.
이 시점에서 GitLab Advanced SAST가 파이프라인에서 활성화됩니다. 파이프라인이 실행되면 지원되는 소스 코드에서 취약점이 스캔됩니다. 해당 작업은 파이프라인의 test Stage에 표시됩니다.
이 단계를 완료한 후 다음을 수행할 수 있습니다:
- 취약점 결과 평가 방법에 대해 자세히 알아봅니다.
- 스캔 성능 개선 팁을 검토합니다.
- 더 많은 프로젝트로 롤아웃을 계획합니다.
취약점 결과#
GitLab Advanced SAST 취약점에는 보안 이슈를 평가하고 수정하는 데 도움이 되는 상세 정보가 포함됩니다. 각 취약점은 다음을 보여줍니다:
- 설명: 취약점의 원인, 잠재적 영향 및 권장 수정 단계를 설명합니다.
- 상태: 취약점이 심사되거나 해결되었는지 여부를 나타냅니다.
- 심각도: 영향에 따라 6개 수준으로 분류됩니다. 심각도 수준에 대해 자세히 알아보기.
- 위치: 이슈가 발견된 파일명과 줄 번호를 표시합니다. 파일 경로를 선택하면 코드 보기에서 해당 줄이 열립니다.
- 코드 흐름: 사용자 입력(소스)에서 취약한 코드 줄까지 데이터가 이동하는 경로.
- 스캐너: 취약점을 탐지한 분석기를 식별합니다.
- 식별자: CWE 식별자 및 탐지한 규칙의 ID와 같이 취약점을 분류하는 데 사용되는 참조 목록.
SAST 취약점은 발견된 취약점의 기본 공통 취약점 열거(CWE) 식별자에 따라 명명됩니다. SAST 커버리지에 대한 자세한 내용은 SAST 규칙을 참조하세요.
결과 보기#
사전 요구 사항:
- 프로젝트에 대한 Security Manager, Developer, Maintainer 또는 Owner 권한.
파이프라인에서 취약점을 보려면:
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Build > Pipelines를 선택합니다.
- 파이프라인을 선택합니다.
- Security 탭을 선택합니다.
- 결과를 다운로드하거나 취약점을 선택하여 세부 정보를 봅니다(Ultimate만 해당).
코드 흐름#
히스토리
- GitLab 17.3에서 여러 플래그와 함께 도입되었습니다. 기본적으로 활성화됩니다.
- GitLab 17.7에서 GitLab Self-Managed 및 GitLab Dedicated에서 활성화되었습니다.
- GitLab 17.7에서 일반 공개되었습니다. 모든 기능 플래그가 제거되었습니다.
특정 유형의 취약점에 대해 GitLab Advanced SAST는 코드 흐름 정보를 제공합니다. 취약점의 코드 흐름은 사용자 입력(소스)에서 취약한 코드 줄(싱크)까지 모든 할당, 조작 및 세정을 거쳐 데이터가 이동하는 경로입니다. 이 정보는 취약점의 맥락, 영향 및 위험을 이해하고 평가하는 데 도움이 됩니다. 코드 흐름 정보는 소스에서 싱크까지 입력을 추적하여 탐지된 취약점에 사용할 수 있으며 다음을 포함합니다:
- SQL 인젝션
- 명령 인젝션
- 교차 사이트 스크립팅(XSS)
- 경로 순회
코드 흐름 정보는 Code flow 탭에 표시되며 다음을 포함합니다:
- 소스에서 싱크까지의 단계.
- 코드 스니펫을 포함한 관련 파일.

최적화#
GitLab Advanced SAST를 최적화하려면 다음 방법 중 하나를 사용하세요:
- 경로 제외
- 멀티 코어 스캔
- 차등 스캔
- 미검증 취약점 보고
- 증분 스캔
스캔이 여전히 예상보다 오래 실행되는 경우 문제 해결을 참조하세요.
경로 제외#
관련 리포지터리 콘텐츠에만 집중함으로써 성능을 최적화하기 위해 경로를 제외할 수 있습니다.
사전 요구 사항:
- 프로젝트에 대한 Maintainer 또는 Owner 권한.
경로를 제외하려면:
SAST_EXCLUDED_PATHSCI/CD 변수에 제외된 경로를 나열합니다.
경로를 제외할 때 취약점을 숨기지 않도록 선택적으로 하세요. 제외하기에 적합한 일반적인 후보는 다음과 같습니다:
- 데이터베이스 마이그레이션
- 단위 테스트
node_modules/와 같은 종속성 디렉토리- 빌드 디렉토리
멀티 코어 스캔 사용#
멀티 코어 스캔은 GitLab Advanced SAST(분석기 버전 v1.1.10 이상)에서 기본적으로 활성화됩니다.
러너 크기를 늘려 스캔에 사용할 수 있는 리소스를 늘릴 수 있습니다. 셀프 매니지드
러너의 경우 보안 스캐너 구성에서 --multi-core 플래그를 사용자 정의해야 합니다.
차등 스캔#
히스토리
- GitLab 18.5에서
vulnerability_partial_scans라는 플래그와 함께 도입되었습니다. 기본적으로 비활성화됩니다. - GitLab 18.5에서 GitLab.com, GitLab Self-Managed 및 GitLab Dedicated에서 활성화되었습니다.
- GitLab 18.6에서 일반 공개되었습니다. 기능 플래그
vulnerability_partial_scans가 제거되었습니다.
차등 스캔은 머지 리퀘스트에서 수정된 파일과 종속 파일만 분석합니다. 이 타겟형 접근 방식은 스캔 시간을 줄이고 개발 중 더 빠른 피드백을 제공합니다.
완전한 커버리지를 보장하기 위해 머지 리퀘스트가 머지된 후 기본 브랜치에서 전체 스캔이 실행됩니다.
차등 스캔은 다음 조건에서 머지 리퀘스트 파이프라인과 브랜치 파이프라인 모두를 지원합니다:
- 머지 리퀘스트 파이프라인: GitLab Advanced SAST가 머지 리퀘스트 파이프라인에서 실행되도록 구성된 경우 차등 스캔이 발생합니다.
- 브랜치 파이프라인: 브랜치와 관련된 열린 머지 리퀘스트가 정확히 하나 있을 때 차등 스캔이 발생합니다. 없거나 두 개 이상인 경우, 브랜치를 어떤 커밋에 대해 차분해야 하는지 결정할 수 없기 때문에 전체 스캔으로 대체됩니다.
차등 스캔이 활성화된 경우:
- 머지 리퀘스트에서 수정되거나 추가된 파일과 종속 파일만 스캔됩니다.
- 작업 로그에는
Running differential scan출력이 포함됩니다. (비활성화된 경우Running full scan을 출력합니다.) - 머지 리퀘스트 보안 위젯에서 전용 Diff-based 탭이 관련 스캔 결과를 보여줍니다.
- 파이프라인 보안 탭에서 Partial SAST report 레이블이 붙은 경고가 부분 결과만 포함되어 있음을 나타냅니다.
차등 스캔에는 다음과 같은 알려진 이슈가 있습니다:
- 거짓 음성과 거짓 양성: 차등 스캔은 스캔된 파일의 전체 호출 그래프를 캡처하지 못할 수 있으며, 이로 인해 놓친 취약점(거짓 음성) 또는 해결된 취약점의 재등장(거짓 양성)이 발생할 수 있습니다. 이 트레이드오프는 스캔 시간을 줄이고 개발 중 더 빠른 피드백을 제공합니다. 포괄적인 커버리지를 위해 기본 브랜치에서는 항상 전체 스캔이 실행됩니다.
- C/C++ 헤더 파일 커버리지: 차등 스캔은 C/C++ 헤더 파일을 완전히 지원하지 않습니다. 헤더 파일과 소스 파일 모두에 걸친 취약점은 탐지될 수 있지만, 헤더 파일에만 있는 취약점은 탐지되지 않을 수 있습니다.
- 수정된 취약점이 보고되지 않음: 오해를 줄이는 결과를 피하기 위해, 차등 스캔에서는 수정된 취약점이 제외됩니다. 파일의 하위 집합만 분석되기 때문에 완전한 호출 그래프를 사용할 수 없어 취약점이 수정되었는지 확인할 수 없습니다. 전체 스캔은 머지 후 기본 브랜치에서 항상 실행되며, 수정된 취약점이 보고됩니다. 따라서 차등 스캔의 잠재적인 공백은 기본 브랜치에 대한 머지 시 자동으로 실행되는 전체 스캔으로 보완되어 포괄적인 커버리지를 보장합니다. 이 계층적 접근 방식은 개발 중 빠른 피드백 루프와 코드가 프로덕션에 도달하기 전의 철저한 보안 분석 사이에서 균형을 맞춥니다.
차등 스캔 켜기#
머지 리퀘스트의 변경 사항에만 집중하여 성능을 최적화하기 위해 차등 스캔을 켤 수 있습니다.
사전 요구 사항:
- 프로젝트에 대한 Maintainer 또는 Owner 권한.
머지 리퀘스트 파이프라인에서 차등 스캔을 켜려면:
- 프로젝트의
.gitlab-ci.yml파일에서ADVANCED_SAST_PARTIAL_SCANCI/CD 변수를differential로 설정합니다.
종속 파일#
수정된 파일 외부의 교차 파일 취약점을 놓치지 않도록 차등 스캔에는 즉시 종속 파일이 포함됩니다. 이는 빠른 스캔을 유지하면서 거짓 음성을 줄이지만 더 깊은 종속성 체인에서는 부정확한 결과를 생성할 수 있습니다.
다음 파일이 스캔에 포함됩니다:
- 수정된 파일(머지 리퀘스트에서 변경되거나 추가된 파일)
- 종속 파일(수정된 파일을 가져오는 파일)
이 설계는 수정된 함수에서 이를 가져오는 호출자로 이동하는 오염된 데이터와 같은 교차 파일 데이터 흐름을 탐지하는 데 도움이 됩니다.
수정된 파일에서 가져온 파일은 일반적으로 수정된 코드의 동작이나 데이터 흐름에 영향을 주지 않기 때문에 스캔되지 않습니다.
예를 들어, 파일 B를 수정하는 머지 리퀘스트를 고려해보세요:
- 파일 A가 파일 B를 가져오는 경우, 파일 A와 B가 스캔됩니다.
- 파일 B가 파일 C를 가져오는 경우, 파일 B만 스캔됩니다.
미검증 취약점 보고#
GitLab Advanced SAST는 신뢰할 수 없는 소스에서 취약한 싱크까지 데이터 흐름을 추적하는 오염 분석을 사용합니다. 기본적으로 분석기는 완전한 경로를 추적할 수 있을 때만 취약점을 보고하며, 이는 커버리지보다 정확도를 우선시합니다. 더 많은 잠재적 데이터 흐름을 탐지하려면 미검증 취약점을 활성화할 수 있습니다. 이 기능은 완전한 데이터 흐름 경로를 확인할 수 없는 경우에도 발견 항목을 보고하여 커버리지를 높이지만 거짓 양성의 수도 증가할 수 있습니다.
미검증 취약점 보고를 활성화하면 분석기는 소스에서 싱크까지 완전히 검증되지 않은 부분적 오염 흐름이 탐지된 발견 항목도 보고합니다. 이러한 근접 발견 항목은 악용 가능해지기 전에 위험한 코드를 식별하고 선제적으로 수정하는 데 도움이 됩니다. 미검증 발견 항목은 Medium 이상의 보안 심각도를 가진 규칙에 대해서만 보고됩니다.
미검증 발견 항목은 완전히 검증된 취약점과 다음과 같이 명확하게 구분됩니다:
- 파이프라인 Security 탭에서 취약점 설명은 (Unverified) 접두사로 시작합니다.
- 취약점 보고서에서도 미검증 발견 항목에 동일한 접두사가 붙습니다.
- 코드 흐름 보기에서 미검증 취약점에는 소스 노드가 없습니다. 흐름의 첫 번째 노드는 Trace Entry Point로, 부분 추적이 시작되는 위치를 나타냅니다.
미검증 취약점 보고 켜기#
스캔 결과에 미검증 발견 항목을 포함하려면 .gitlab-ci.yml 파일에서 REPORT_UNVERIFIED_VULNS CI/CD 변수를 참 값으로 설정하세요:
gitlab-advanced-sast:
variables:
REPORT_UNVERIFIED_VULNS: "true"
미검증 취약점 보고를 활성화하면 분석기가 생성하는 발견 항목 수가 크게 증가할 수 있습니다. 이러한 발견 항목은 취약점 데이터베이스에 저장되며 분류 노력 및 보고를 포함한 취약점 관리 워크플로우에 영향을 미칠 수 있습니다.
증분 스캔#
히스토리
- GitLab 18.11에서 도입되었습니다.
증분 스캔은 파이프라인 실행 간 오염 서명 분석 결과를 캐시합니다. 후속 스캔에서 변경되지 않은 코드는 재분석 없이 캐시된 서명을 재사용하고, 변경되거나 새로운 코드는 완전히 분석됩니다. 이를 통해 커밋 간 대부분의 파일이 변경되지 않는 대규모 코드베이스의 스캔 시간을 줄입니다.
증분 스캔은 다음과 같이 작동합니다:
- 첫 번째 스캔(콜드 실행): 분석기가 전체 분석을 수행하고 오염 서명 캐시를 생성합니다. 캐시는 CI 아티팩트(
ts-cache.sqlite.gz)로 저장됩니다. - 후속 스캔(웜 실행): 분석기가 캐시 아티팩트를 포함하는 성공한 파이프라인을 이전 커밋에서 검색합니다. 발견되면 캐시를 가져와 변경되지 않은 결과를 재사용합니다. 스캔이 완료된 후 업데이트된 캐시가 새 아티팩트로 저장됩니다.
캐시 무효화#
정확도를 보장하면서 재사용을 최대화하기 위해 캐시가 무효화됩니다:
부분 무효화: 영향받은 항목만 재계산되고 나머지 캐시는 재사용됩니다:
- 새 파일 또는 변경된 파일: 파일이 추가, 수정, 삭제 또는 이름이 변경되면 해당 캐시된 서명이 무효화되어 다음 스캔에서 재계산됩니다.
- 새 규칙 또는 변경된 규칙: 탐지 규칙이 추가되거나 수정되면 해당 특정 규칙만 코드베이스에 대해 재계산됩니다.
전체 무효화: 전체 캐시가 재구축됩니다:
- 엔진 변경: 엔진 수준의 변경으로 기존 캐시가 호환되지 않을 때 전체 스캔에서 새 캐시가 자동으로 생성됩니다.
증분 스캔 켜기#
사전 요구 사항:
- 프로젝트에 대한 Maintainer 또는 Owner 권한.
증분 스캔을 켜려면:
- 프로젝트의
.gitlab-ci.yml파일에서GITLAB_ADV_SAST_INCR_SCANCI/CD 변수를true로 설정합니다:
gitlab-advanced-sast:
variables:
GITLAB_ADV_SAST_INCR_SCAN: "true"
캐시 보존 구성#
SAST CI/CD 템플릿은 기본 만료 기간 3일로 캐시 아티팩트를 저장합니다. GITLAB_ADV_SAST_INCR_SCAN_SEARCH_PERIOD 변수는 분석기가 캐시 아티팩트를 검색하는 기간을 제어합니다(기본값: 3 days).
이 두 값은 일치해야 합니다. 검색 기간이 아티팩트 만료 기간을 초과하면 분석기가 이미 만료된 아티팩트를 검색할 수 있습니다.
두 값을 모두 사용자 정의하려면 artifacts:expire_in을 재정의하고 검색 기간 변수를 설정하세요:
gitlab-advanced-sast:
variables:
GITLAB_ADV_SAST_INCR_SCAN: "true"
GITLAB_ADV_SAST_INCR_SCAN_SEARCH_PERIOD: "7 days"
artifacts:
paths:
- gl-sast-report.json
- ts-cache.sqlite.gz
expire_in: 7 days
검색 기간은 숫자 뒤에 d, day 또는 days를 지원합니다(예: 7 days, 14d).
사용자 정의 작업 이름 구성#
분석기는 CI/CD 작업 이름을 사용하여 어떤 작업의 아티팩트에 캐시가 포함되어 있는지 식별합니다. gitlab-advanced-sast 작업의 이름을 바꾸는 경우 캐시 조회가 올바른 작업을 찾을 수 있도록 GITLAB_ADV_SAST_INCR_SCAN_CUSTOM_JOB_NAME을 사용자 정의 이름으로 설정하세요:
my-custom-sast-job:
variables:
GITLAB_ADV_SAST_INCR_SCAN: "true"
GITLAB_ADV_SAST_INCR_SCAN_CUSTOM_JOB_NAME: "my-custom-sast-job"
캐시 크기 제한#
캐시는 압축된 CI/CD 아티팩트로 저장됩니다. 아티팩트 크기 제한이 적용됩니다:
- GitLab.com: 최대 아티팩트 크기 1 GB.
- GitLab Self-Managed: 기본 최대 아티팩트 크기 100 MB. 관리자는 CI/CD 설정에서 이 제한을 조정할 수 있습니다.
롤아웃#
한 프로젝트에서 GitLab Advanced SAST 결과에 확신이 생기면 추가 프로젝트와 그룹으로 확장합니다. GitLab Advanced SAST를 포함하는 공유 CI/CD 구성을 만들고 원하는 그룹과 프로젝트에 적용해야 합니다.
자세한 내용은 보안 구성을 참조하세요.
취약점 탐지 기준#
GitLab Advanced SAST는 오염 분석을 통한 교차 파일, 교차 함수 스캔을 사용하여 프로그램으로 유입되는 사용자 입력의 흐름을 추적합니다. 이를 통해 SQL 인젝션 및 교차 사이트 스크립팅(XSS)과 같은 인젝션 취약점이 여러 함수와 파일에 걸쳐 있더라도 탐지됩니다.
분석기는 신뢰할 수 없는 사용자 입력이 소스에서 신뢰할 수 없는 데이터가 보안 취약점을 유발할 수 있는 지점으로 가져오는 검증 가능한 흐름이 있는 경우에만 오염 기반 취약점을 보고합니다. 이 접근 방식은 더 적은 검증으로 취약점을 보고할 수 있는 다른 제품과 비교하여 노이즈를 최소화합니다.
탐지는 HTTP 요청에서 소스된 값과 같이 신뢰 경계를 넘는 입력을 강조하지만, 명령줄 인수, 환경 변수 또는 프로그램을 운영하는 사용자가 일반적으로 제공하는 기타 입력은 제외합니다.
GitLab Advanced SAST가 탐지하는 취약점 유형에 대한 자세한 내용은 GitLab Advanced SAST CWE 커버리지를 참조하세요.
Semgrep에서 GitLab Advanced SAST로 전환#
Semgrep에서 GitLab Advanced SAST로 마이그레이션하면 자동화된 전환 프로세스가 취약점을 중복 제거합니다. 이 프로세스는 이전에 탐지된 Semgrep 취약점을 해당 GitLab Advanced SAST 발견 항목과 연결하고, 일치하는 항목이 발견되면 이를 대체합니다.
기본 브랜치에서 Advanced SAST 스캔을 활성화한 후 스캔이 실행되어 취약점이 탐지되면, 다음 조건에 따라 기존 Semgrep 취약점을 대체해야 하는지 확인합니다.
중복 제거 조건#
-
일치하는 식별자:
- GitLab Advanced SAST 취약점의 식별자 중 적어도 하나(CWE 및 OWASP 제외)가 기존 Semgrep 취약점의 기본 식별자와 일치해야 합니다.
- 기본 식별자는 SAST 보고서의 취약점 식별자 배열의 첫 번째 식별자입니다.
- 예를 들어, GitLab Advanced SAST 취약점에
bandit.B506을 포함한 식별자가 있고 Semgrep 취약점의 기본 식별자도bandit.B506인 경우 이 조건이 충족됩니다.
-
일치하는 위치:
- 취약점은 코드의 동일한 위치와 연관되어야 합니다. 이는 SAST 보고서의 취약점에 있는 다음 필드 중 하나를 사용하여 결정됩니다:
- Tracking 필드(있는 경우)
- Location 필드(Tracking 필드가 없는 경우)
- 취약점은 코드의 동일한 위치와 연관되어야 합니다. 이는 SAST 보고서의 취약점에 있는 다음 필드 중 하나를 사용하여 결정됩니다:
취약점 변경 사항#
조건이 충족되면 기존 Semgrep 취약점이 GitLab Advanced SAST 취약점으로 변환됩니다. 이 업데이트된 취약점은 다음 변경 사항과 함께 취약점 보고서에 나타납니다:
- 스캐너 유형이 Semgrep에서 GitLab Advanced SAST로 업데이트됩니다.
- GitLab Advanced SAST 취약점에 있는 추가 식별자가 기존 취약점에 추가됩니다.
- 취약점의 다른 모든 세부 정보는 변경되지 않습니다.
중복 취약점 해결#
경우에 따라 중복 제거 조건이 충족되지 않으면 Semgrep 취약점이 여전히 중복으로 나타날 수 있습니다. 취약점 보고서에서 이를 해결하려면:
- Advanced SAST 스캐너로 취약점 필터링하고 결과를 CSV 형식으로 내보내기.
- Semgrep 스캐너로 취약점 필터링. 이것들이 중복 제거되지 않은 취약점일 가능성이 높습니다.
- 각 Semgrep 취약점에 대해 내보낸 Advanced SAST 결과에 해당 일치 항목이 있는지 확인합니다.
- 중복이 존재하면 Semgrep 취약점을 적절하게 해결합니다.
코드 커버리지#
기본적으로 GitLab Advanced SAST는 지원되는 언어의 모든 소스 코드를 분석합니다. 차등 스캔이 활성화된 경우 머지 리퀘스트의 변경 사항만 스캔됩니다.
기본 GitLab Advanced SAST 규칙을 비활성화하거나 메타데이터를 편집할 수 있습니다. 자세한 내용은 규칙셋 사용자 정의를 참조하세요.
지원되는 언어#
히스토리
- GitLab 18.6에서 C# 버전 지원이 10.0에서 13.0으로 증가되었습니다.
GitLab Advanced SAST는 다음 언어를 지원합니다:
- C# (13.0까지 포함)
- C/C++
- Go
- Java, Java Server Pages(JSP) 포함
- JavaScript, TypeScript
- PHP
- Python
- Ruby
GitLab Advanced SAST CPP는 GitLab Advanced SAST와 함께 사용하려면 추가 구성(컴파일 데이터베이스 등)이 필요합니다. 자세한 내용은 C/C++ 구성을 참조하세요. GitLab Advanced SAST CPP는 C/C++ 프로젝트에서 Semgrep을 제외하지 않습니다. 두 분석기는 다른 규칙셋으로 병렬로 실행됩니다.
PHP 알려진 이슈#
PHP 코드를 분석할 때 GitLab Advanced SAST에는 다음과 같은 알려진 이슈가 있습니다:
- 동적 파일 포함: 파일 경로에 변수를 사용하는 동적 파일 포함 구문(
include,include_once,require,require_once)은 이 릴리스에서 지원되지 않습니다. 교차 파일 분석에는 정적 파일 포함 경로만 지원됩니다. 이슈 527341을 참조하세요. - 대소문자 구분: 함수 이름, 클래스 이름 및 메서드 이름에 대한 PHP의 대소문자 구분 없는 특성은 교차 파일 분석에서 완전히 지원되지 않습니다. 이슈 526528을 참조하세요.
구성#
다음 변수를 사용하여 GitLab Advanced SAST 동작을 조정할 수 있습니다:
| CI/CD 변수 | 기본값 | 설명 |
|---|---|---|
GITLAB_ADVANCED_SAST_ENABLED |
false |
C 및 C++를 제외한 모든 지원 언어에 대해 GitLab Advanced SAST 스캔을 활성화합니다. |
GITLAB_ADVANCED_SAST_CPP_ENABLED |
false |
C 및 C++ 프로젝트 전용으로 GitLab Advanced SAST 스캔을 활성화합니다. |
ADVANCED_SAST_PARTIAL_SCAN |
false |
differential로 설정하여 GitLab Advanced SAST 차등 스캔 모드를 활성화합니다. |
GITLAB_ADVANCED_SAST_RULE_TIMEOUT |
30 |
파일당 규칙당 타임아웃(초). 초과하면 해당 분석이 건너뜁니다. |
REPORT_UNVERIFIED_VULNS |
false |
스캔 결과에 미검증 발견 항목을 포함합니다. 활성화하려면 true, 1 또는 True로 설정하세요. |
GITLAB_ADV_SAST_INCR_SCAN |
false |
파이프라인 실행 간 오염 서명을 캐시하는 증분 스캔을 활성화합니다. |
GITLAB_ADV_SAST_INCR_SCAN_SEARCH_PERIOD |
3 days |
캐시된 오염 서명 아티팩트를 검색하는 기간. 지원 형식: 숫자 뒤에 d, day 또는 days (예: 7 days). 아티팩트 만료 기간을 초과하지 않아야 합니다. |
GITLAB_ADV_SAST_INCR_SCAN_CUSTOM_JOB_NAME |
gitlab-advanced-sast |
캐시 아티팩트 조회를 위한 사용자 정의 작업 이름. gitlab-advanced-sast 작업의 이름을 바꾼 경우 설정하세요. |
GitLab Advanced SAST 스캔은 기본적으로 비활성화됩니다. 상위 수준(예: 그룹)에서 활성화된 경우 명시적으로 비활성화하려면 GITLAB_ADVANCED_SAST_ENABLED(또는 C/C++ 프로젝트의 경우 GITLAB_ADVANCED_SAST_CPP_ENABLED)를 false로 설정하세요.
GitLab Advanced SAST의 LGPL 라이선스 컴포넌트 소스 코드 요청#
GitLab Advanced SAST의 LGPL 라이선스 컴포넌트의 소스 코드에 대한 정보를 요청하려면 GitLab 지원팀에 문의하세요.
신속한 응답을 위해 요청에 GitLab Advanced SAST 분석기 버전을 포함해 주세요.
이 기능은 Ultimate 티어에서만 사용할 수 있으므로, 해당 수준의 지원 자격이 있는 조직과 연관되어 있어야 합니다.
