튜토리얼: 파이프라인 시크릿 탐지로 프로젝트 보호
GitLab v19.2애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 파이프라인 시크릿 탐지는 CI/CD job을 사용하여 GitLab 프로젝트에서 시크릿을 확인합니다. 이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:
애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿이 원격 리포지터리에 push되면, 리포지터리에 액세스할 수 있는 누구나 사용자 또는 애플리케이션을 가장할 수 있습니다.
파이프라인 시크릿 탐지는 CI/CD job을 사용하여 GitLab 프로젝트에서 시크릿을 확인합니다. 이 튜토리얼에서는 프로젝트를 만들고, 파이프라인 시크릿 탐지를 구성하고, 결과를 분석하는 방법을 알아봅니다:
시작하기 전에#
이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:
-
GitLab.com 계정. 파이프라인 시크릿 탐지의 모든 기능을 활용하려면 Ultimate 계정이 있는 경우 해당 계정을 사용하는 것이 좋습니다.
-
CI/CD에 대한 기본적인 친숙함.
프로젝트 만들기#
먼저 프로젝트를 만들고 시크릿 탐지를 활성화합니다:
-
오른쪽 상단 모서리에서 새로 만들기 ( 더하기 )를 선택한 다음 새 프로젝트/리포지터리를 선택합니다.
-
빈 프로젝트 만들기를 선택합니다.
-
프로젝트 세부 정보를 입력합니다:
이름과 프로젝트 슬러그를 입력합니다.
-
프로젝트 배포 대상(선택 사항) 드롭다운 목록에서 계획된 배포 없음을 선택합니다.
-
README로 리포지터리 초기화 체크박스를 선택합니다. 이렇게 하면 나중에 프로젝트에 콘텐츠를 추가할 수 있습니다.
-
시크릿 탐지 활성화 체크박스를 선택합니다.
-
프로젝트 만들기를 선택합니다.
새 프로젝트가 만들어지고 README 및 .gitlab-ci.yml 파일로 초기화됩니다.
CI/CD 구성에는 Security/Secret-Detection.gitlab-ci.yml 템플릿이 포함되며,
이를 통해 프로젝트에서 파이프라인 시크릿 탐지가 활성화됩니다.
job 출력 확인#
파이프라인 시크릿 탐지는 secret_detection이라는 CI/CD job에서 실행됩니다.
스캔 결과는 CI/CD job 로그에 기록됩니다. 각 스캔은 job 아티팩트로 포괄적인 보고서도 생성합니다.
가장 최근 스캔 결과를 확인하려면:
-
왼쪽 사이드바에서 빌드 > Job을 선택합니다.
-
가장 최근
secret_detectionjob을 선택합니다. 새 파이프라인을 실행하지 않은 경우 job이 하나만 있어야 합니다. -
로그 출력에서 다음을 확인합니다:
분석기 버전 및 규칙 세트를 포함한 스캔에 대한 정보. 시크릿 탐지를 자동으로 활성화했으므로 프로젝트는 기본 규칙 세트를 사용합니다.
-
시크릿이 감지되었는지 여부.
no leaks found가 표시되어야 합니다. -
전체 보고서를 다운로드하려면 Job 아티팩트에서 다운로드를 선택합니다.
머지 리퀘스트 파이프라인 활성화#
지금까지 파이프라인 시크릿 탐지를 사용하여 기본 브랜치의 커밋을 스캔했습니다. 그러나 기본 브랜치로 머지하기 전에 머지 리퀘스트의 커밋을 분석하려면 머지 리퀘스트 파이프라인을 활성화해야 합니다.
이를 위해:
.gitlab-ci.yml 파일에 다음 줄을 추가합니다:
variables:
AST_ENABLE_MR_PIPELINES: "true"
변경 사항을 저장하고 프로젝트의 main 브랜치에 커밋합니다.
가짜 시크릿 추가#
다음으로, 머지 리퀘스트에서 가짜 시크릿을 “유출”하여 job 출력을 복잡하게 만들어 봅니다:
새 브랜치를 체크아웃합니다:
git checkout -b pipeline-sd-tutorial
프로젝트 README를 편집하고 다음 줄을 추가합니다.
개인 액세스 토큰의 정확한 형식과 일치하도록 - 앞뒤의 공백을 제거해야 합니다:
# To make the example work, remove
# the spaces before and after the dash:
glpat - 12345678901234567890
변경 사항을 커밋하고 push한 다음 기본 브랜치로 머지하기 위한 머지 리퀘스트를 엽니다.
머지 리퀘스트 파이프라인이 자동으로 실행됩니다.
파이프라인이 완료될 때까지 기다린 다음 job 로그를 확인합니다. WRN leaks found: 1이 표시되어야 합니다.
job 아티팩트를 다운로드하고 다음 정보가 포함되어 있는지 확인합니다:
시크릿 유형. 이 예시에서 유형은 "GitLab personal access token"입니다.
시크릿의 용도 설명 및 유출을 복구하기 위한 단계.
유출의 심각도. 개인 액세스 토큰은 GitLab.com에서 사용자를 가장하는 데 사용될 수 있으므로 이 유출은 Critical입니다.
시크릿의 원시 텍스트.
시크릿이 위치한 곳에 대한 정보:
"file": "README.md",
"line_start": 97,
"line_end": 97,
이 예시에서 시크릿은 README.md 파일의 97번째 줄에 있습니다.
머지 리퀘스트 보고서 사용#
-
Tier: Ultimate
기본 브랜치가 아닌 브랜치에서 감지된 시크릿을 “발견”이라고 합니다. 발견이 기본 브랜치에 머지되면 “취약점”이 됩니다.
머지 리퀘스트 보고서 탭은 머지 리퀘스트가 머지될 경우 취약점이 될 수 있는 보안 스캔 발견 목록을 표시합니다.
발견을 보려면:
-
이전 단계에서 만든 머지 리퀘스트를 선택합니다.
-
보고서 탭을 선택합니다.
-
Security scan을 선택합니다.
-
표시된 정보를 검토합니다. Secret detection이 새로운 잠재적 취약점 1개를 감지했습니다가 표시되어야 합니다.
머지 리퀘스트의 모든 발견에 대한 자세한 보기를 보려면 모든 파이프라인 발견 보기를 선택합니다.
시크릿 분류#
-
Tier: Ultimate
GitLab Ultimate에서 job 출력은 다음에도 기록됩니다:
-
파이프라인의 Security 탭.
-
발견이 취약점이 되면 취약점 보고서.
UI를 사용하여 시크릿을 분류하는 방법을 보여주기 위해 취약점을 만들고 취약점 보고서에서 상태를 변경해 봅니다:
마지막 단계에서 만든 MR을 머지한 다음 파이프라인이 완료될 때까지 기다립니다.
가짜 시크릿이 main에 추가되어 발견이 취약점이 됩니다.
왼쪽 사이드바에서 Secure > 취약점 보고서를 선택합니다.
취약점의 설명을 선택하여 다음을 봅니다:
시크릿 유형에 대한 세부 정보.
-
복구 안내.
-
취약점이 감지된 시기 및 위치에 대한 정보.
취약점 편집 > 상태 변경을 선택합니다.
상태 드롭다운 목록에서 테스트에 사용됨으로 무시를 선택합니다.
-
프로젝트에 가짜 시크릿을 추가한 이유를 설명하는 댓글을 추가합니다.
-
상태 변경을 선택합니다.
취약점은 더 이상 취약점 보고서 첫 페이지에 나타나지 않습니다.
유출 복구#
시크릿을 원격 리포지터리에 추가하면 해당 시크릿은 더 이상 안전하지 않으며 가능한 한 빨리 폐기해야 합니다. 기본 브랜치에 머지되지 않은 경우에도 시크릿을 폐기하고 교체해야 합니다.
유출을 복구하기 위해 취해야 할 정확한 단계는 조직의 보안 정책에 따라 다르지만, 최소한 다음을 수행해야 합니다:
-
시크릿을 폐기합니다. 시크릿이 폐기되면 더 이상 유효하지 않으며 합법적인 활동을 가장하는 데 사용할 수 없습니다.
-
리포지터리에서 시크릿을 제거합니다.
특정 복구 안내는 secret-detection job 로그에 기록되며 취약점 보고서 세부 정보 페이지에서 볼 수 있습니다.