- 취약점 설명
- 취약점 해결
- 취약점 코드 흐름
- 취약점 상태 값
- 취약점 해제 이유
- 취약점 상태 변경
- 취약점에 대한 GitLab 이슈 생성
- 취약점을 GitLab 및 Jira 이슈에 연결
- 취약성 해결
- 취약점에 대한 보안 교육 활성화
- 취약점에 대한 보안 교육 보기
취약점 페이지
프로젝트의 각 취약점에는 취약점 페이지가 있으며, 취약점에 대한 자세한 내용을 포함합니다.
- 설명
- 감지된 시간
- 현재 상태
- 가능한 작업
- 연결된 이슈
- 작업 로그
- 취약점의 파일 이름 및 라인 번호(사용 가능한 경우)
스캐너가 취약점을 잘못된 긍정으로 결정했다면, 취약점 페이지 상단에 경고 메시지가 포함됩니다.
프로젝트의 기본 브랜치에서 더 이상 취약점이 감지되지 않으면, 상태를 해결됨(Resolved)으로 변경해야 합니다. 이렇게 하면 나중에 실수로 재도입되더라도 새로운 레코드로 다시 보고됩니다. 여러 취약점의 상태를 변경하려면 취약점 보고서의 Activity 필터를 사용하세요.
취약점 설명
- GitLab 16.0에서 실험으로 GitLab.com에 도입됨.
- GitLab 16.2에서 베타 상태로 승격됨.
- GitLab 17.2에서 일반 사용 가능 상태로 변경됨.
GitLab은 큰 언어 모델을 사용하여 취약점을 다음과 같이 도울 수 있습니다.
- 취약점 요약
- 개발자 및 보안 분석가가 취약점을 이해하고, 어떻게 악용될 수 있는지, 어떻게 수정해야 하는지 이해하는 데 도움.
- 제안된 완화 방법 제공
취약점 설명
GitLab Duo 취약점 설명을 사용하여 취약점을 더 잘 이해하고 가능한 완화 방법을 이해하는 데 사용하세요.
전제 조건:
- GitLab Ultimate 구독 티어가 있어야 합니다.
- 유료 GitLab Duo Enterprise 시트를 소유해야 합니다.
- 그룹이나 인스턴스에 GitLab Duo를 사용하도록 활성화해야 합니다.
- 프로젝트 멤버여야 합니다.
- 취약점이 SAST 스캐너에서 나왔어야 합니다.
취약점을 설명하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 보안 > 취약점 보고서를 선택합니다.
- 기본 필터를 제거하려면 지우기를 선택합니다 ().
- 취약점 목록 위에서 필터 막대를 선택합니다.
- 나타나는 드롭다운 목록에서 Tool을 선택한 후 SAST 범주의 모든 값을 선택합니다.
- 필터 필드 바깥을 클릭합니다. 취약점 심각도 총계 및 일치하는 취약점 목록이 업데이트됩니다.
- 설명을 원하는 SAST 취약점을 선택합니다.
-
다음 중 하나를 수행합니다:
- 취약점 설명 및 제안된 수정 사항을 문의할 수 있도록 취약점 설명 아래에 있는 You can also use AI by asking GitLab Duo Chat to explain this vulnerability and a suggested fix. 텍스트를 선택합니다.
- 오른쪽 상단에서 Resolve with merge request 드롭다운 목록에서 Explain vulnerability를 선택한 후 Explain vulnerability를 선택합니다.
- GitLab Duo Chat을 열고
/vulnerability_explain
명령을 입력하여 취약점을 설명합니다.
응답이 페이지 오른쪽에 표시됩니다.
GitLab.com에서는 이 기능을 사용할 수 있습니다. 기본적으로 claude-3-haiku
로 구동됩니다. 큰 언어 모델이 올바른 결과를 생성할 것을 보증할 수 없습니다. 설명을 사용할 때 주의하세요.
취약점 설명을 위한 제3자 AI API와 공유되는 데이터
다음 데이터가 제3자 AI API와 공유됩니다.
- 취약점 제목(스캐너에 따라 파일 이름을 포함할 수 있음).
- 취약점 식별자.
- 파일 이름.
취약점 해결
- GitLab 16.7에서 실험으로 GitLab.com에 도입됨.
- GitLab 17.3에서 베타로 변경됨.
GitLab Duo 취약점 해결을 사용하여 취약점을 자동으로 해결하는 병합 요청을 만듭니다. 기본적으로 claude-3.5-sonnet
로 구동됩니다.
큰 언어 모델이 정확한 결과를 생성할 것을 보증할 수 없습니다. 항상 제안된 변경 사항을 검토해야 합니다. 검토 시 다음을 확인하세요.
- 애플리케이션의 기존 기능이 유지되고 있는지 확인하세요.
- 취약점이 조직의 표준에 따라 해결되었는지 확인하세요.
전제 조건:
- GitLab Ultimate 구독 티어와 GitLab Duo Enterprise가 있어야 합니다.
- 프로젝트 멤버여야 합니다.
- 지원되는 해석기에서 나온 SAST 발견이어야 합니다.
- 지원되는 유형의 취약점이어야 합니다.
모든 GitLab Duo 기능을 활성화하는 방법에 대해 자세히 알아보세요.
취약점을 해결하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 보안 > 취약점 보고서를 선택합니다.
- 기본 필터를 제거하려면 지우기를 선택합니다 ().
- 취약점 목록 위에서 필터 막대를 선택합니다.
- 나타나는 드롭다운 목록에서 Tool을 선택한 후 SAST 범주의 모든 값을 선택합니다.
- 필터 필드 바깥을 클릭합니다. 취약점 심각도 총계 및 일치하는 취약점 목록이 업데이트됩니다.
- 해결하려는 SAST 취약점을 선택합니다.
- 취약점 해결을 지원하는 취약점 옆에 파란색 아이콘이 표시됩니다.
- 오른쪽 상단 모서리에서 AI로 해결을 선택합니다.
- MR에 추가 커밋을 추가합니다. 이렇게 하면 새로운 파이프라인이 실행됩니다.
- 파이프라인이 완료되면 파이프라인 보안 탭에서 취약점이 더 이상 표시되지 않는지 확인합니다.
- 취약점 보고서에서 취약점을 수동으로 업데이트합니다.
AI 개선 제안이 포함된 병합 요청이 열립니다. 제안된 변경 사항을 검토한 후 표준 작업 흐름에 따라 병합 요청을 처리합니다.
이 기능에 대한 피드백은 issue 476553에서 제공하세요.
지원되는 취약점에 대한 취약점 해결 방법
제안된 해결 방법이 고품질인지 확인하기 위해 취약점 해결 방법은 특정 취약점 집합을 위해 사용할 수 있습니다. 시스템은 취약점의 공통 약점 열거(CWE) 식별자를 기준으로 취약점 해결 방법을 제공할지 여부를 결정합니다.
현재의 취약점 집합은 자동화된 시스템 및 보안 전문가의 테스트를 기반으로 선택되었습니다. 저희는 더 많은 유형의 취약점에 대한 커버리지를 확대하기 위해 노력하고 있습니다.
취약점 해결 방법에 대한 지원되는 CWE의 완전한 목록 보기
문제 해결
흔히 발생하는 이유로 취약점 해결 방법이 때때로 제안된 수정을 생성하지 못할 수 있습니다.
-
잘못된 양성 판정 감지: 수정을 제안하기 전에 AI 모델은 취약점이 유효한지를 평가합니다. 취약점이 실제 취약점이 아니거나 수정할 가치가 없는지를 판단할 수 있습니다.
- 이것은 테스트 코드에서 취약점이 발생할 수 있습니다. 조직에서는 테스트 코드에서 발생하는 취약점을 여전히 수정할 수 있지만, 모델은 때로 이것들을 잘못된 양성으로 판단할 수 있습니다.
- 취약점이 잘못된 양성이거나 수정할 가치가 없다고 생각하는 경우, 취약점을 해결한 것으로 표시(dismiss)하고 일치하는 이유를 선택(select a matching reason)해야 합니다.
- SAST 구성을 사용자 정의하거나 GitLab SAST 규칙에 문제를 신고하려면 SAST 규칙을 참조하십시오.
-
임시 또는 예상치 못한 오류: 오류 메시지에 “예기치 않은 오류가 발생했습니다”, “상위 AI 제공 업체 요청 시간이 초과되었습니다”, “문제가 발생했습니다” 또는 유사한 원인이 명시될 수 있습니다.
- 이러한 오류는 AI 제공 업체나 GitLab Duo의 임시적인 문제로 인해 발생할 수 있습니다.
- 새로운 요청이 성공할 수 있기 때문에 취약점을 다시 해결해 볼 수 있습니다.
- 이러한 오류가 계속되는 경우 GitLab에 연락하여 지원을 받으십시오.
취약점 해결을 위한 제3자 AI API와 공유하는 데이터
다음 데이터가 제3자 AI API와 공유됩니다:
- 취약점 이름
- 취약점 설명
- 식별자(CWE, OWASP)
- 취약한 코드 라인을 포함하는 전체 파일
- 취약한 코드 라인(라인 번호)
취약점 코드 흐름
- 플래그로 GitLab 17.3에 도입되었습니다. 기본 설정은 비활성화되어 있습니다.
- GitLab.com에서 GitLab 17.3에서 활성화되었습니다.
- 자체 관리 및 GitLab Dedicated에서 GitLab 17.4에서 활성화되었습니다.
- GitLab 17.4에서 일반 사용으로 제공됩니다. 기능 플래그가 제거되었습니다.
고급 SAST에서 감지된 일부 취약점에 대해 코드 흐름 탭이 사용할 수 있습니다. 취약점의 코드 흐름은 사용자 입력(소스)부터 취약한 코드 라인(싱크)까지 데이터가 흐르는 경로로, 모든 할당, 조작 및 살화 작업을 포함합니다. 이 정보는 취약점의 문맥, 영향 및 위험을 이해하고 평가하는 데 도움을 줍니다.
코드 흐름 탭에서 확인할 수 있는 것은:
- 소스부터 싱크까지의 단계.
- 코드 스니펫을 포함한 관련 파일.
취약점 상태 값
취약점의 상태는 다음과 같을 수 있습니다:
- Detected: 새로 발견된 취약점의 기본 상태입니다. UI에서 “Needs triage”로 나타납니다.
- Confirmed: 사용자가 이 취약점을 확인하고 정확하다고 확인했습니다.
- Dismissed: 사용자가 이 취약점을 확인하고 정확하지 않거나 해결할 필요가 없다고 판단하여 해제했습니다. 해제된 취약점은 이후의 스캔에서 감지되어도 무시됩니다.
- Resolved: 취약점이 수정되었거나 더 이상 존재하지 않습니다. 해결된 취약점이 다시 감지되면 해당 레코드가 복원되고 상태가 감지됨으로 설정됩니다.
취약점 해제 이유
dismissal_reason
이라는 기능 플래그를 사용하여 GitLab 15.11에서 도입되었습니다.- GitLab.com에서 GitLab 15.11에서 기본으로 활성화되었습니다. 자체 관리형 고객은 GitLab 15.11에서 이 기능을 사용하고 싶은 경우 지원팀에 문의하십시오.
- GitLab 16.0에서 기본적으로 활성화됩니다.
취약점을 해제할 때, 다음 중 하나의 이유를 선택하여 해제되는 이유를 명확히해야 합니다:
- Acceptable risk: 취약점은 알려져 있으며, 해결되지 않았거나 완화되지 않았지만 수용할 수 있는 비즈니스 리스크로 간주됩니다.
- False positive: 시스템의 취약점이 존재하지 않을 때 테스트 결과가 잘못된 정보를 나타내는 보고 오류입니다.
- Mitigating control: 조직이 정보 시스템에 동등하거나 비교 가능한 보호를 제공하는 관리, 운영 또는 기술적 제어(즉, 안전 장치 또는 대책)입니다.
- Used in tests: 결과가 테스트의 일부이거나 테스트 데이터인 취약점이 아닙니다.
- Not applicable: 취약점은 알려져 있으며, 해결되지 않았거나 완화되지 않았지만 업데이트되지 않을 애플리케이션의 일부로 간주됩니다.
취약점 상태 변경
- GitLab 16.4에서
개발자
가 취약점의 상태를 변경하는 기능(admin_vulnerability
)이 폐기되었습니다.admin_vulnerability
권한은 GitLab 17.0에서 기본 설정에서 모든개발자
역할에서 제거될 예정입니다.
전제 조건:
- 프로젝트에 대해 적어도 메인테이너(Maintainer) 역할이 있거나
admin_vulnerability
권한이 있는 사용자 지정 역할이 있어야 합니다.
취약점의 상태를 취약점 페이지에서 변경하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- Secure > 취약점 보고서를 선택합니다.
- 취약점 설명을 선택합니다.
-
상태 드롭다운 목록에서 상태를 선택한 다음 상태 변경을 선택합니다.
GitLab 15.11 이상에서는 취약점의 상태를 해제됨으로 변경할 때 해제 이유를 선택해야 합니다.
- 페이지 하단에서 필요에 따라 로그 항목에 코멘트를 추가합니다.
상태 변경의 세부 정보(누가 변경했는지, 언제 변경했는지 등)는 취약점의 작업 로그에 기록됩니다.
취약점에 대한 GitLab 이슈 생성
취약점을 해결하거나 완화하기 위해 취해진 모든 조치를 추적하기 위해 GitLab 이슈를 생성할 수 있습니다. 취약점에 대한 GitLab 이슈를 생성하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- Secure > 취약점 보고서를 선택합니다.
- 취약점 설명을 선택합니다.
- 이슈 생성을 선택합니다.
이슈는 취약점 보고서의 정보가 포함된 GitLab 프로젝트에 생성됩니다.
Jira 이슈를 생성하려면 취약점을 위한 Jira 이슈 생성를 참조하십시오.
취약점을 GitLab 및 Jira 이슈에 연결
취약점을 기존의 하나 이상의 GitLab 또는 Jira 이슈에 연결할 수 있습니다. 동시에 한 가지 링크 기능만 사용할 수 있습니다. 링크를 추가하여 취약점을 해결하거나 완화하는 데 도움이 되는 이슈를 추적할 수 있습니다.
기존 GitLab 이슈에 취약점 연결
전제 조건:
- Jira 이슈 통합이 활성화되어 있어야 합니다.
기존 GitLab 이슈에 취약점을 연결하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- Secure > 취약점 보고서를 선택합니다.
- 취약점 설명을 선택합니다.
- 연결된 이슈 섹션에서 플러스 아이콘()을 선택합니다.
- 연결할 각 이슈에 대해:
- 이슈에 링크를 붙입니다.
- 이슈 ID를 입력합니다(해시
#
로 선행된).
- 추가를 선택합니다.
선택한 GitLab 이슈는 연결된 항목 섹션에 추가되고 연결된 이슈 수가 업데이트됩니다.
취약점에 연결된 GitLab 이슈는 취약점 보고서 및 취약점 페이지에 표시됩니다.
다음은 취약점과 연결된 GitLab 이슈 간의 다음 조건을 인지하십시오:
- 취약점 페이지에 관련된 이슈가 표시되지만, 이슈 페이지에는 연결된 취약점이 표시되지 않습니다.
- 한 번에 하나의 이슈만 한 취약점과 관련될 수 있습니다.
- 이슈는 그룹 및 프로젝트 간에 링크될 수 있습니다.
기존 Jira 이슈에 취약점 연결
전제 조건:
- Jira 이슈 연동이 구성되어 있어야 하며 취약점을 위한 Jira 이슈 생성 확인란이 선택되어 있어야 합니다.
기존 Jira 이슈에 취약점을 연결하려면, Jira 이슈 설명에 다음 라인을 추가합니다:
/-/security/vulnerabilities/<id>
<id>
는 취약점 ID입니다.
하나의 설명에 여러 개의 ID를 추가할 수 있습니다.
설명이 적절한 Jira 이슈는 관련된 Jira 이슈 섹션에 추가되고 연결된 이슈 수가 업데이트됩니다.
취약점에 연결된 Jira 이슈는 취약점 페이지에만 표시됩니다.
다음은 취약점과 연결된 Jira 이슈 간의 다음 조건을 인지하십시오:
- 취약점 페이지와 이슈 페이지는 서로 연결된 취약점을 표시합니다.
- 하나의 이슈는 동시에 하나 이상의 취약점과 관련될 수 있습니다.
취약성 해결
일부 취약성의 경우 해결 방법은 이미 알려져 있지만 수동으로 구현되어야 합니다. 취약성 페이지의 Solution 필드는 보안 검사 도구에 의해 제공되었거나 취약성을 수동으로 생성하는 동안 입력되었습니다. GitLab 도구는 GitLab 안내 데이터베이스의 정보를 활용합니다.
또한, 일부 도구는 제안된 솔루션을 적용하는 소프트웨어 패치를 포함할 수 있습니다. 이러한 경우에는 취약성 페이지에 병합 요청으로 해결 옵션이 포함됩니다.
다음 스캐너가 이 기능을 지원합니다:
-
의존성 스캔.
자동 패치 생성은
yarn
으로 관리되는 Node.js 프로젝트에서만 사용할 수 있습니다. 또한 FIPS 모드가 비활성화된 경우에만 자동 패치 생성이 지원됩니다. - 컨테이너 스캔.
취약성을 해결하려면 다음 중 하나를 선택할 수 있습니다:
병합 요청으로 취약성 해결
취약성을 병합 요청으로 해결하려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 보안 > 취약성 보고서를 선택합니다.
- 취약성 설명을 선택합니다.
- 병합 요청으로 해결 드롭다운 목록에서 병합 요청으로 해결을 선택합니다.
취약성을 해결하는 데 필요한 패치가 적용된 병합 요청이 생성됩니다. 병합 요청은 표준 워크플로에 따라 처리합니다.
수동으로 취약성 해결
GitLab에서 취약성을 위해 생성한 패치를 수동으로 적용하려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 보안 > 취약성 보고서를 선택합니다.
- 취약성 설명을 선택합니다.
- 병합 요청으로 해결 드롭다운 목록에서 다운로드하여 해결하는 패치를 선택합니다.
- 로컬 프로젝트가 패치 생성에 사용된 커밋을 확인한 상태인지 확인합니다.
-
git apply remediation.patch
를 실행합니다. - 변경 사항을 확인하고 브랜치에 커밋합니다.
- 변경 사항을 기본 브랜치에 적용하기 위해 병합 요청을 생성합니다.
- 병합 요청은 표준 워크플로에 따라 처리합니다.
취약점에 대한 보안 교육 활성화
참고: 보안 교육은 보안 조치로 공개 인터넷에서 격리된 컴퓨터에서는 접근할 수 없습니다. 구체적으로, GitLab 서버는 교육 제공 업체의 API 엔드포인트를 쿼리할 수 있는 능력이 필요합니다. 일부 제3자 교육 공급 업체는 무료 계정에 가입하도록 요구할 수 있습니다. Secure Code Warrior, Kontra, 또는 SecureFlag 중 하나로 이동하여 계정에 가입하세요. GitLab는 이러한 제3자 공급 업체에 사용자 정보를 전송하지 않습니다. 대신 CWE 또는 OWASP 식별자 및 파일 확장자의 언어 이름을 전송합니다.
보안 교육은 개발자가 취약성을 해결하는 방법을 학습하는 데 도움을 줍니다. 개발자는 검출된 취약점과 관련된 선택된 교육 제공 업체의 보안 교육을 볼 수 있습니다.
프로젝트의 취약점에 대한 보안 교육을 활성화하려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 보안 > 보안 구성을 선택합니다.
- 탭 바에서 취약점 관리를 선택합니다.
- 보안 교육 제공 업체를 활성화하려면 토글을 켭니다.
각 통합은 취약점 식별자(CWE 또는 OWASP) 및 언어를 보안 교육 제공 업체로 제출합니다. 결과 링크는 GitLab 취약점에 표시됩니다.
취약점에 대한 보안 교육 보기
보안 교육이 활성화된 경우 취약성 페이지에 해당 취약점과 관련된 교육 링크가 포함될 수 있습니다. 교육의 가용성은 활성화된 교육 제공 업체가 특정 취약점과 일치하는 콘텐츠를 보유하는지 여부에 따라 달라집니다. 교육 콘텐츠는 취약점 식별자에 따라 요청됩니다. 취약점에 제공되는 식별자와 사용 가능한 교육 콘텐츠는 취약점에 따라 다르며 일부 취약점은 교육 콘텐츠를 표시하지 않습니다. CWE를 갖는 취약점은 교육 결과가 가장 가능성이 높습니다.
취약점에 대한 보안 교육을 보려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 보안 > 취약성 보고서를 선택합니다.
- 보령하고 싶은 취약점을 선택합니다.
- 교육 보기를 선택합니다.