InfoGrab Docs

튜토리얼: 파이프라인 시크릿 감지로 프로젝트 보호

요약

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 파이프라인 시크릿 감지는 CI/CD job을 사용하여 GitLab 프로젝트에서 시크릿을 확인합니다. 이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿이 원격 리포지터리에 push되면, 리포지터리에 액세스할 수 있는 누구나 사용자 또는 애플리케이션을 가장할 수 있습니다.

파이프라인 시크릿 감지는 CI/CD job을 사용하여 GitLab 프로젝트에서 시크릿을 확인합니다. 이 튜토리얼에서는 프로젝트를 만들고, 파이프라인 시크릿 감지를 구성하고, 결과를 분석하는 방법을 알아봅니다:

  1. 프로젝트 만들기
  2. job 출력 확인
  3. 머지 리퀘스트 파이프라인 활성화
  4. 가짜 시크릿 추가
  5. 시크릿 분류
  6. 유출 복구

시작하기 전에#

이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

  • GitLab.com 계정. 파이프라인 시크릿 감지의 모든 기능을 활용하려면 Ultimate 계정을 사용하는 것이 좋습니다.
  • CI/CD에 대한 기본적인 친숙함.

프로젝트 만들기#

먼저 프로젝트를 만들고 시크릿 감지를 활성화합니다:

  1. 오른쪽 상단 모서리에서 새로 만들기 (+)를 선택한 다음 새 프로젝트/리포지터리를 선택합니다.
  2. 빈 프로젝트 만들기를 선택합니다.
  3. 프로젝트 세부 정보를 입력합니다:
    1. 이름과 프로젝트 슬러그를 입력합니다.
    2. 프로젝트 배포 대상(선택 사항) 드롭다운 목록에서 계획된 배포 없음을 선택합니다.
    3. README로 리포지터리 초기화 체크박스를 선택합니다. 이렇게 하면 나중에 프로젝트에 콘텐츠를 추가할 수 있습니다.
    4. 시크릿 감지 활성화 체크박스를 선택합니다.
  4. 프로젝트 만들기를 선택합니다.

새 프로젝트가 만들어지고 README 및 .gitlab-ci.yml 파일로 초기화됩니다. CI/CD 구성에는 Security/Secret-Detection.gitlab-ci.yml 템플릿이 포함되며, 이를 통해 프로젝트에서 파이프라인 시크릿 감지가 활성화됩니다.

job 출력 확인#

파이프라인 시크릿 감지는 secret_detection이라는 CI/CD job에서 실행됩니다. 스캔 결과는 CI/CD job 로그에 기록됩니다. 각 스캔은 job 아티팩트로 포괄적인 보고서도 생성합니다.

가장 최근 스캔 결과를 확인하려면:

  1. 왼쪽 사이드바에서 빌드 > Job을 선택합니다.
  2. 가장 최근 secret_detection job을 선택합니다. 새 파이프라인을 실행하지 않은 경우 job이 하나만 있어야 합니다.
  3. 로그 출력에서 다음을 확인합니다:
    • 분석기 버전 및 규칙 세트를 포함한 스캔에 대한 정보. 시크릿 감지를 자동으로 활성화했으므로 프로젝트는 기본 규칙 세트를 사용합니다.
    • 시크릿이 감지되었는지 여부. no leaks found가 표시되어야 합니다.
  4. 전체 보고서를 다운로드하려면 Job 아티팩트에서 다운로드를 선택합니다.

머지 리퀘스트 파이프라인 활성화#

지금까지 파이프라인 시크릿 감지를 사용하여 기본 브랜치의 커밋을 스캔했습니다. 그러나 기본 브랜치로 머지하기 전에 머지 리퀘스트의 커밋을 분석하려면 머지 리퀘스트 파이프라인을 활성화해야 합니다.

이를 위해:

  1. .gitlab-ci.yml 파일에 다음 줄을 추가합니다:

    variables:
      AST_ENABLE_MR_PIPELINES: "true"
    
  2. 변경 사항을 저장하고 프로젝트의 main 브랜치에 커밋합니다.

가짜 시크릿 추가#

다음으로, 머지 리퀘스트에서 가짜 시크릿을 "유출"하여 job 출력을 복잡하게 만들어 봅니다:

  1. 새 브랜치를 체크아웃합니다:

    git checkout -b pipeline-sd-tutorial
    
  2. 프로젝트 README를 편집하고 다음 줄을 추가합니다. 개인 액세스 토큰의 정확한 형식과 일치하도록 - 앞뒤의 공백을 제거해야 합니다:

    # 예시가 작동하려면 대시 앞뒤의
    # 공백을 제거하세요:
    glpat - 12345678901234567890
    
  3. 변경 사항을 커밋하고 push한 다음 기본 브랜치로 머지하기 위한 머지 리퀘스트를 엽니다.

    머지 리퀘스트 파이프라인이 자동으로 실행됩니다.

  4. 파이프라인이 완료될 때까지 기다린 다음 job 로그를 확인합니다. WRN leaks found: 1이 표시되어야 합니다.

  5. job 아티팩트를 다운로드하고 다음 정보가 포함되어 있는지 확인합니다:

    • 시크릿 유형. 이 예시에서 유형은 "GitLab personal access token"입니다.

    • 시크릿의 용도 설명 및 유출을 복구하기 위한 단계.

    • 유출의 심각도. 개인 액세스 토큰은 GitLab.com에서 사용자를 가장하는 데 사용될 수 있으므로 이 유출은 Critical입니다.

    • 시크릿의 원시 텍스트.

    • 시크릿이 위치한 곳에 대한 정보:

      "file": "README.md",
      "line_start": 97,
      "line_end": 97,
      

      이 예시에서 시크릿은 README.md 파일의 97번째 줄에 있습니다.

머지 리퀘스트 보안 위젯 사용#

기본 브랜치가 아닌 브랜치에서 감지된 시크릿을 "발견"이라고 합니다. 발견이 기본 브랜치에 머지되면 "취약점"이 됩니다.

머지 리퀘스트 보안 위젯은 머지 리퀘스트가 머지될 경우 취약점이 될 수 있는 발견 목록을 표시합니다.

위젯을 보려면:

  1. 이전 단계에서 만든 머지 리퀘스트를 선택합니다.
  2. Security scanning으로 시작하는 머지 리퀘스트 보안 위젯을 찾습니다.
  3. 위젯에서 세부 정보 표시 ([chevron-down])를 선택합니다.
  4. 표시된 정보를 검토합니다. Secret detection이 새로운 잠재적 취약점 1개를 감지했습니다가 표시되어야 합니다.

머지 리퀘스트의 모든 발견에 대한 자세한 보기를 보려면 모든 파이프라인 발견 보기를 선택합니다.

시크릿 분류#

GitLab Ultimate에서 job 출력은 다음에도 기록됩니다:

  • 파이프라인의 Security 탭.
  • 발견이 취약점이 되면 취약점 보고서.

UI를 사용하여 시크릿을 분류하는 방법을 보여주기 위해 취약점을 만들고 취약점 보고서에서 상태를 변경해 봅니다:

  1. 마지막 단계에서 만든 MR을 머지한 다음 파이프라인이 완료될 때까지 기다립니다.

    가짜 시크릿이 main에 추가되어 발견이 취약점이 됩니다.

  2. 왼쪽 사이드바에서 Secure > 취약점 보고서를 선택합니다.

  3. 취약점의 설명을 선택하여 다음을 봅니다:

    • 시크릿 유형에 대한 세부 정보.
    • 복구 안내.
    • 취약점이 감지된 시기 및 위치에 대한 정보.
  4. 취약점 편집 > 상태 변경을 선택합니다.

    1. 상태 드롭다운 목록에서 테스트에 사용됨으로 무시를 선택합니다.
    2. 프로젝트에 가짜 시크릿을 추가한 이유를 설명하는 댓글을 추가합니다.
    3. 상태 변경을 선택합니다.

취약점은 더 이상 취약점 보고서 첫 페이지에 나타나지 않습니다.

유출 복구#

시크릿을 원격 리포지터리에 추가하면 해당 시크릿은 더 이상 안전하지 않으며 가능한 한 빨리 폐기해야 합니다. 기본 브랜치에 머지되지 않은 경우에도 시크릿을 폐기하고 교체해야 합니다.

유출을 복구하기 위해 취해야 할 정확한 단계는 조직의 보안 정책에 따라 다르지만, 최소한 다음을 수행해야 합니다:

  1. 시크릿을 폐기합니다. 시크릿이 폐기되면 더 이상 유효하지 않으며 합법적인 활동을 가장하는 데 사용할 수 없습니다.
  2. 리포지터리에서 시크릿을 제거합니다.

특정 복구 안내는 secret-detection job 로그에 기록되며 취약점 보고서 세부 정보 페이지에서 볼 수 있습니다.

튜토리얼: 파이프라인 시크릿 감지로 프로젝트 보호

Tier: Ultimate
원문 보기
요약

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 파이프라인 시크릿 감지는 CI/CD job을 사용하여 GitLab 프로젝트에서 시크릿을 확인합니다. 이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿이 원격 리포지터리에 push되면, 리포지터리에 액세스할 수 있는 누구나 사용자 또는 애플리케이션을 가장할 수 있습니다.

파이프라인 시크릿 감지는 CI/CD job을 사용하여 GitLab 프로젝트에서 시크릿을 확인합니다. 이 튜토리얼에서는 프로젝트를 만들고, 파이프라인 시크릿 감지를 구성하고, 결과를 분석하는 방법을 알아봅니다:

  1. 프로젝트 만들기
  2. job 출력 확인
  3. 머지 리퀘스트 파이프라인 활성화
  4. 가짜 시크릿 추가
  5. 시크릿 분류
  6. 유출 복구

시작하기 전에#

이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

  • GitLab.com 계정. 파이프라인 시크릿 감지의 모든 기능을 활용하려면 Ultimate 계정을 사용하는 것이 좋습니다.
  • CI/CD에 대한 기본적인 친숙함.

프로젝트 만들기#

먼저 프로젝트를 만들고 시크릿 감지를 활성화합니다:

  1. 오른쪽 상단 모서리에서 새로 만들기 (+)를 선택한 다음 새 프로젝트/리포지터리를 선택합니다.
  2. 빈 프로젝트 만들기를 선택합니다.
  3. 프로젝트 세부 정보를 입력합니다:
    1. 이름과 프로젝트 슬러그를 입력합니다.
    2. 프로젝트 배포 대상(선택 사항) 드롭다운 목록에서 계획된 배포 없음을 선택합니다.
    3. README로 리포지터리 초기화 체크박스를 선택합니다. 이렇게 하면 나중에 프로젝트에 콘텐츠를 추가할 수 있습니다.
    4. 시크릿 감지 활성화 체크박스를 선택합니다.
  4. 프로젝트 만들기를 선택합니다.

새 프로젝트가 만들어지고 README 및 .gitlab-ci.yml 파일로 초기화됩니다. CI/CD 구성에는 Security/Secret-Detection.gitlab-ci.yml 템플릿이 포함되며, 이를 통해 프로젝트에서 파이프라인 시크릿 감지가 활성화됩니다.

job 출력 확인#

파이프라인 시크릿 감지는 secret_detection이라는 CI/CD job에서 실행됩니다. 스캔 결과는 CI/CD job 로그에 기록됩니다. 각 스캔은 job 아티팩트로 포괄적인 보고서도 생성합니다.

가장 최근 스캔 결과를 확인하려면:

  1. 왼쪽 사이드바에서 빌드 > Job을 선택합니다.
  2. 가장 최근 secret_detection job을 선택합니다. 새 파이프라인을 실행하지 않은 경우 job이 하나만 있어야 합니다.
  3. 로그 출력에서 다음을 확인합니다:
    • 분석기 버전 및 규칙 세트를 포함한 스캔에 대한 정보. 시크릿 감지를 자동으로 활성화했으므로 프로젝트는 기본 규칙 세트를 사용합니다.
    • 시크릿이 감지되었는지 여부. no leaks found가 표시되어야 합니다.
  4. 전체 보고서를 다운로드하려면 Job 아티팩트에서 다운로드를 선택합니다.

머지 리퀘스트 파이프라인 활성화#

지금까지 파이프라인 시크릿 감지를 사용하여 기본 브랜치의 커밋을 스캔했습니다. 그러나 기본 브랜치로 머지하기 전에 머지 리퀘스트의 커밋을 분석하려면 머지 리퀘스트 파이프라인을 활성화해야 합니다.

이를 위해:

  1. .gitlab-ci.yml 파일에 다음 줄을 추가합니다:

    variables:
      AST_ENABLE_MR_PIPELINES: "true"
    
  2. 변경 사항을 저장하고 프로젝트의 main 브랜치에 커밋합니다.

가짜 시크릿 추가#

다음으로, 머지 리퀘스트에서 가짜 시크릿을 "유출"하여 job 출력을 복잡하게 만들어 봅니다:

  1. 새 브랜치를 체크아웃합니다:

    git checkout -b pipeline-sd-tutorial
    
  2. 프로젝트 README를 편집하고 다음 줄을 추가합니다. 개인 액세스 토큰의 정확한 형식과 일치하도록 - 앞뒤의 공백을 제거해야 합니다:

    # 예시가 작동하려면 대시 앞뒤의
    # 공백을 제거하세요:
    glpat - 12345678901234567890
    
  3. 변경 사항을 커밋하고 push한 다음 기본 브랜치로 머지하기 위한 머지 리퀘스트를 엽니다.

    머지 리퀘스트 파이프라인이 자동으로 실행됩니다.

  4. 파이프라인이 완료될 때까지 기다린 다음 job 로그를 확인합니다. WRN leaks found: 1이 표시되어야 합니다.

  5. job 아티팩트를 다운로드하고 다음 정보가 포함되어 있는지 확인합니다:

    • 시크릿 유형. 이 예시에서 유형은 "GitLab personal access token"입니다.

    • 시크릿의 용도 설명 및 유출을 복구하기 위한 단계.

    • 유출의 심각도. 개인 액세스 토큰은 GitLab.com에서 사용자를 가장하는 데 사용될 수 있으므로 이 유출은 Critical입니다.

    • 시크릿의 원시 텍스트.

    • 시크릿이 위치한 곳에 대한 정보:

      "file": "README.md",
      "line_start": 97,
      "line_end": 97,
      

      이 예시에서 시크릿은 README.md 파일의 97번째 줄에 있습니다.

머지 리퀘스트 보안 위젯 사용#

기본 브랜치가 아닌 브랜치에서 감지된 시크릿을 "발견"이라고 합니다. 발견이 기본 브랜치에 머지되면 "취약점"이 됩니다.

머지 리퀘스트 보안 위젯은 머지 리퀘스트가 머지될 경우 취약점이 될 수 있는 발견 목록을 표시합니다.

위젯을 보려면:

  1. 이전 단계에서 만든 머지 리퀘스트를 선택합니다.
  2. Security scanning으로 시작하는 머지 리퀘스트 보안 위젯을 찾습니다.
  3. 위젯에서 세부 정보 표시 ([chevron-down])를 선택합니다.
  4. 표시된 정보를 검토합니다. Secret detection이 새로운 잠재적 취약점 1개를 감지했습니다가 표시되어야 합니다.

머지 리퀘스트의 모든 발견에 대한 자세한 보기를 보려면 모든 파이프라인 발견 보기를 선택합니다.

시크릿 분류#

GitLab Ultimate에서 job 출력은 다음에도 기록됩니다:

  • 파이프라인의 Security 탭.
  • 발견이 취약점이 되면 취약점 보고서.

UI를 사용하여 시크릿을 분류하는 방법을 보여주기 위해 취약점을 만들고 취약점 보고서에서 상태를 변경해 봅니다:

  1. 마지막 단계에서 만든 MR을 머지한 다음 파이프라인이 완료될 때까지 기다립니다.

    가짜 시크릿이 main에 추가되어 발견이 취약점이 됩니다.

  2. 왼쪽 사이드바에서 Secure > 취약점 보고서를 선택합니다.

  3. 취약점의 설명을 선택하여 다음을 봅니다:

    • 시크릿 유형에 대한 세부 정보.
    • 복구 안내.
    • 취약점이 감지된 시기 및 위치에 대한 정보.
  4. 취약점 편집 > 상태 변경을 선택합니다.

    1. 상태 드롭다운 목록에서 테스트에 사용됨으로 무시를 선택합니다.
    2. 프로젝트에 가짜 시크릿을 추가한 이유를 설명하는 댓글을 추가합니다.
    3. 상태 변경을 선택합니다.

취약점은 더 이상 취약점 보고서 첫 페이지에 나타나지 않습니다.

유출 복구#

시크릿을 원격 리포지터리에 추가하면 해당 시크릿은 더 이상 안전하지 않으며 가능한 한 빨리 폐기해야 합니다. 기본 브랜치에 머지되지 않은 경우에도 시크릿을 폐기하고 교체해야 합니다.

유출을 복구하기 위해 취해야 할 정확한 단계는 조직의 보안 정책에 따라 다르지만, 최소한 다음을 수행해야 합니다:

  1. 시크릿을 폐기합니다. 시크릿이 폐기되면 더 이상 유효하지 않으며 합법적인 활동을 가장하는 데 사용할 수 없습니다.
  2. 리포지터리에서 시크릿을 제거합니다.

특정 복구 안내는 secret-detection job 로그에 기록되며 취약점 보고서 세부 정보 페이지에서 볼 수 있습니다.