튜토리얼: 파이프라인 시크릿 감지로 프로젝트 보호
애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 파이프라인 시크릿 감지는 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를 편집하고 다음 줄을 추가합니다. 개인 액세스 토큰의 정확한 형식과 일치하도록
-앞뒤의 공백을 제거해야 합니다:# 예시가 작동하려면 대시 앞뒤의 # 공백을 제거하세요: 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번째 줄에 있습니다.
-
머지 리퀘스트 보안 위젯 사용#
기본 브랜치가 아닌 브랜치에서 감지된 시크릿을 "발견"이라고 합니다. 발견이 기본 브랜치에 머지되면 "취약점"이 됩니다.
머지 리퀘스트 보안 위젯은 머지 리퀘스트가 머지될 경우 취약점이 될 수 있는 발견 목록을 표시합니다.
위젯을 보려면:
- 이전 단계에서 만든 머지 리퀘스트를 선택합니다.
- Security scanning으로 시작하는 머지 리퀘스트 보안 위젯을 찾습니다.
- 위젯에서 세부 정보 표시 ([chevron-down])를 선택합니다.
- 표시된 정보를 검토합니다. Secret detection이 새로운 잠재적 취약점 1개를 감지했습니다가 표시되어야 합니다.
머지 리퀘스트의 모든 발견에 대한 자세한 보기를 보려면 모든 파이프라인 발견 보기를 선택합니다.
시크릿 분류#
GitLab Ultimate에서 job 출력은 다음에도 기록됩니다:
- 파이프라인의 Security 탭.
- 발견이 취약점이 되면 취약점 보고서.
UI를 사용하여 시크릿을 분류하는 방법을 보여주기 위해 취약점을 만들고 취약점 보고서에서 상태를 변경해 봅니다:
-
마지막 단계에서 만든 MR을 머지한 다음 파이프라인이 완료될 때까지 기다립니다.
가짜 시크릿이
main에 추가되어 발견이 취약점이 됩니다. -
왼쪽 사이드바에서 Secure > 취약점 보고서를 선택합니다.
-
취약점의 설명을 선택하여 다음을 봅니다:
- 시크릿 유형에 대한 세부 정보.
- 복구 안내.
- 취약점이 감지된 시기 및 위치에 대한 정보.
-
취약점 편집 > 상태 변경을 선택합니다.
- 상태 드롭다운 목록에서 테스트에 사용됨으로 무시를 선택합니다.
- 프로젝트에 가짜 시크릿을 추가한 이유를 설명하는 댓글을 추가합니다.
- 상태 변경을 선택합니다.
취약점은 더 이상 취약점 보고서 첫 페이지에 나타나지 않습니다.
유출 복구#
시크릿을 원격 리포지터리에 추가하면 해당 시크릿은 더 이상 안전하지 않으며 가능한 한 빨리 폐기해야 합니다. 기본 브랜치에 머지되지 않은 경우에도 시크릿을 폐기하고 교체해야 합니다.
유출을 복구하기 위해 취해야 할 정확한 단계는 조직의 보안 정책에 따라 다르지만, 최소한 다음을 수행해야 합니다:
- 시크릿을 폐기합니다. 시크릿이 폐기되면 더 이상 유효하지 않으며 합법적인 활동을 가장하는 데 사용할 수 없습니다.
- 리포지터리에서 시크릿을 제거합니다.
특정 복구 안내는 secret-detection job 로그에 기록되며 취약점 보고서 세부 정보 페이지에서 볼 수 있습니다.
