SAST 규칙
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
GitLab 정적 애플리케이션 보안 테스트(SAST)는 분석기 모음을 사용해 코드에서 잠재적인 취약점을 검사합니다. 각 분석기는 코드를 처리한 다음 규칙을 사용해 소스 코드의 잠재적 결함을 찾습니다. SAST는 보안 결함과 취약점에 집중합니다.
GitLab 정적 애플리케이션 보안 테스트(SAST)는 분석기 모음을 사용해 코드에서 잠재적인 취약점을 검사합니다. 리포지터리에서 발견된 프로그래밍 언어에 따라 실행할 분석기를 자동으로 선택합니다.
각 분석기는 코드를 처리한 다음 규칙을 사용해 소스 코드의 잠재적 결함을 찾습니다. 분석기의 규칙이 어떤 유형의 결함을 보고할지 결정합니다.
규칙 범위#
SAST는 보안 결함과 취약점에 집중합니다. 일반적인 버그를 찾거나 전반적인 코드 품질 또는 유지 보수성을 평가하는 것이 목적은 아닙니다.
GitLab은 조치 가능한 보안 결함과 취약점을 식별하는 데 초점을 두고 탐지 규칙 집합을 관리합니다. 이 규칙 집합은 오탐(취약점이 없는데 취약점으로 보고되는 경우)을 최소화하면서 영향이 큰 취약점을 폭넓게 다루도록 설계되었습니다.
SAST는 기본 구성 그대로 사용하도록 설계되었으나, 필요하면 탐지 규칙을 구성할 수 있습니다.
규칙 소스#
SAST가 사용하는 취약점 탐지 규칙은 GitLab Advanced SAST와 Semgrep 기반 분석기 중 어떤 분석기를 사용하는지에 따라 달라집니다.
GitLab Advanced SAST#
GitLab은 GitLab Advanced SAST의 규칙을 직접 만들고 유지 관리하며 지원합니다. 이 규칙은 GitLab Advanced SAST 스캔 엔진의 파일 간·함수 간 분석 기능을 활용하도록 맞춤 제작되었습니다. GitLab Advanced SAST 규칙 집합은 오픈 소스가 아니며, 다른 분석기의 규칙 집합과도 다릅니다.
GitLab Advanced SAST가 탐지하는 취약점 유형은 취약점 탐지 기준을 참고합니다.
GitLab Advanced SAST가 사용하는 전체 규칙 목록은 GitLab Advanced SAST 규칙을 참고합니다.
Semgrep 기반 분석기#
GitLab은 Semgrep 기반 GitLab SAST 분석기에서 사용하는 규칙을 직접 만들고 유지 관리하며 지원합니다. 이 분석기는 하나의 CI/CD 파이프라인 job에서 여러 언어를 검사합니다. 다음 요소를 결합합니다.
- Semgrep 오픈 소스 엔진.
- GitLab이 관리하는 오픈 소스
sast-rules프로젝트에서 관리되는 GitLab 관리 탐지 규칙 집합. - 취약점 추적을 위한 GitLab 독자 기술.
기타 분석기#
GitLab SAST는 나머지 지원 언어를 검사하는 데 다른 분석기를 사용합니다. 이러한 검사의 규칙은 각 스캐너의 업스트림 프로젝트에 정의되어 있습니다.
규칙 업데이트가 릴리스되는 방법#
GitLab은 고객 피드백과 내부 연구를 바탕으로 규칙을 정기적으로 업데이트합니다. 규칙은 각 분석기의 컨테이너 이미지에 포함되어 릴리스됩니다. 분석기를 특정 버전으로 직접 고정하지 않는 한 업데이트된 분석기와 규칙을 자동으로 받습니다.
관련 업데이트가 있으면 분석기와 규칙은 최소 월 1회 업데이트됩니다.
규칙 업데이트 정책#
SAST 규칙 업데이트는 호환성이 깨지는 변경이 아닙니다. 따라서 규칙이 사전 공지 없이 추가·제거·변경될 수 있습니다.
다만 규칙 변경을 더 쉽게 파악하고 대응할 수 있도록 GitLab은 다음을 제공합니다.
- 예정되었거나 완료된 규칙 변경 사항을 문서화합니다.
- Semgrep 기반 분석기에서 규칙이 제거된 뒤 해당 규칙으로 발견된 사항을 자동으로 해결합니다.
- activity = "no longer detected" 인 취약점의 상태를 일괄 변경할 수 있게 합니다.
- 제안된 규칙 변경이 기존 취약점 기록에 미칠 영향을 평가합니다.
프로젝트에서 규칙 구성#
변경해야 할 구체적인 이유가 없다면 기본 SAST 규칙을 사용합니다. 기본 규칙 집합은 대부분의 프로젝트에 적합하도록 설계되었습니다.
필요하다면 사용할 규칙을 사용자 정의하거나 규칙 변경의 배포 방식을 제어할 수 있습니다.
로컬 규칙 기본 설정 적용#
다음과 같은 이유로 SAST 검사에 사용하는 규칙을 사용자 정의할 수 있습니다.
- 교차 사이트 스크립팅(XSS)이나 SQL 인젝션을 다른 취약점 유형보다 먼저 처리하기로 하는 등, 조직이 특정 취약점 유형에 우선순위를 지정한 경우.
- 특정 규칙이 오탐이거나 코드베이스 맥락에서 적합하지 않다고 판단한 경우.
프로젝트 검사에 사용할 규칙을 변경하거나, 심각도를 조정하거나, 그 밖의 설정을 적용하려면 규칙 집합 사용자 정의를 참고합니다. 사용자 정의 내용이 다른 사용자에게도 도움이 된다면 GitLab에 문제를 보고하는 방안을 고려합니다.
규칙 롤아웃 조정#
규칙 변경의 배포를 제어하려면 SAST 분석기를 특정 버전으로 고정할 수 있습니다.
여러 프로젝트에 이러한 변경을 동시에 적용하려면 다음 위치에 변수를 설정하는 방안을 고려합니다.
- 그룹 수준 CI/CD 변수.
- 스캔 실행 정책의 사용자 정의 CI/CD 변수.
GitLab SAST 규칙의 문제 보고#
GitLab은 SAST에서 사용하는 규칙 집합에 대한 기여를 환영합니다. 기여는 다음 내용을 다룰 수 있습니다.
- 잠재적 취약점 판정이 잘못된 오탐 결과.
- 실제로 존재하는 잠재적 취약점을 SAST가 보고하지 않은 미탐 결과.
- 규칙의 이름, 심각도 등급, 설명, 안내를 비롯한 설명 콘텐츠.
탐지 규칙을 모든 사용자에게 도움이 되도록 개선할 수 있다고 판단되면 다음을 고려합니다.
sast-rules리포지터리에 머지 리퀘스트를 제출합니다. 자세한 내용은 기여 안내를 참고합니다.gitlab-org/gitlab이슈 트래커에 이슈를 등록합니다.- 이슈가 올바른 분류 워크플로로 전달되도록
@gitlab-bot label ~"group::static analysis" ~"Category:SAST"라는 댓글을 남깁니다.
- 이슈가 올바른 분류 워크플로로 전달되도록
중요한 규칙 변경 사항#
GitLab은 SAST 규칙을 정기적으로 업데이트합니다. 이 섹션에서는 가장 중요한 변경 사항을 설명합니다. 자세한 내용은 릴리스 공지와 아래 제공된 CHANGELOG 링크에서 확인할 수 있습니다.
Semgrep 기반 분석기의 규칙 변경 사항#
Semgrep 기반 검사를 위한 GitLab 관리 규칙 집합의 주요 변경 사항은 다음과 같습니다.
- GitLab 16.3부터 GitLab 정적 분석 팀과 취약점 연구 팀은 오탐이 지나치게 많거나 조치 가능한 정탐이 충분하지 않은 규칙을 제거하는 작업을 진행하고 있습니다. 제거된 규칙에서 발견된 기존 사항은 자동으로 해결되며, 보안 대시보드나 취약점 리포트의 기본 화면에 더 이상 표시되지 않습니다. 이 작업은 에픽 10907에서 추적합니다.
- GitLab 16.0부터 16.2까지 GitLab 취약점 연구 팀은 각 결과에 포함되는 안내를 업데이트했습니다.
- GitLab 15.10에서
detect-object-injection규칙이 기본적으로 제거되었고, 해당 규칙의 발견 사항은 자동으로 해결되었습니다.
자세한 내용은 sast-rules CHANGELOG를 참고합니다.
기타 분석기의 규칙 변경 사항#
각 버전에 포함된 신규·변경 규칙을 비롯한 변경 사항은 각 분석기의 CHANGELOG 파일에서 확인합니다.