AI로 취약점 해결
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
GitLab Duo Vulnerability Resolution은 보안 취약점을 자동으로 해결하는 데 도움이 됩니다. 자세한 내용은 모든 GitLab Duo 기능을 활성화하는 방법을 참고합니다. 다른 AI 기반 시스템과 마찬가지로 대규모 언어 모델이 항상 올바른 결과를 내놓는다고 보장할 수 없습니다.
Model information
- 기본 LLM
- Amazon Q 용 LLM: Amazon Q Developer
- GitLab Duo with self-hosted models 지원: 예
GitLab Duo Vulnerability Resolution은 보안 취약점을 자동으로 해결하는 데 도움이 됩니다.
자세한 내용은 모든 GitLab Duo 기능을 활성화하는 방법을 참고합니다.
책임감 있게 AI 지원 사용#
다른 AI 기반 시스템과 마찬가지로 대규모 언어 모델이 항상 올바른 결과를 내놓는다고 보장할 수 없습니다. 머지하기 전에 반드시 제안된 변경 사항을 검토해야 합니다. 검토 시 다음을 확인합니다.
- 애플리케이션의 기존 기능이 그대로 유지되는지 확인합니다.
- 조직의 기준에 맞게 취약점이 해결되었는지 확인합니다.
취약점 해결에서 지원되는 취약점#
제안된 해결책의 품질을 보장하기 위해 취약점 해결은 특정 취약점 집합에서만 사용할 수 있습니다. 이 시스템은 취약점의 CWE(Common Weakness Enumeration) 식별자를 기반으로 취약점 해결을 제공할지 여부를 결정합니다.
현재 취약점 집합은 자동화 시스템 및 보안 전문가의 테스트를 기반으로 선택했습니다. 더 많은 유형의 취약점으로 적용 범위를 확장하기 위해 적극적으로 작업 중입니다.
취약점 해결에서 지원되는 CWE의 전체 목록 보기
- CWE-23: 상대 경로 순회
- CWE-73: 파일 이름 또는 경로의 외부 제어
- CWE-78: OS 명령에 사용된 특수 요소의 부적절한 중립화('OS 명령 삽입')
- CWE-80: 웹 페이지의 스크립트 관련 HTML 태그의 부적절한 중립화(기본 XSS)
- CWE-89: SQL 명령에 사용된 특수 요소의 부적절한 중립화('SQL 삽입')
- CWE-116: 부적절한 출력 인코딩 또는 이스케이프
- CWE-118: 인덱스 가능 리소스에 대한 잘못된 액세스('범위 오류')
- CWE-119: 메모리 버퍼 범위 내 작업의 부적절한 제한
- CWE-120: 입력 크기를 확인하지 않고 버퍼 복사('클래식 버퍼 오버플로')
- CWE-126: 버퍼 과다 읽기
- CWE-190: 정수 오버플로 또는 래핑
- CWE-200: 무권한 행위자에게 민감한 정보 노출
- CWE-208: 관찰 가능한 타이밍 불일치
- CWE-209: 민감한 정보가 포함된 오류 메시지 생성
- CWE-272: 최소 권한 위반
- CWE-287: 부적절한 인증
- CWE-295: 부적절한 인증서 유효성 검사
- CWE-297: 호스트 불일치를 통한 인증서의 부적절한 유효성 검사
- CWE-305: 기본 취약점에 의한 인증 우회
- CWE-310: 암호화 문제
- CWE-311: 민감한 데이터의 암호화 누락
- CWE-323: 암호화에서 논스, 키 쌍 재사용
- CWE-327: 손상되거나 위험한 암호화 알고리즘 사용
- CWE-328: 약한 해시 사용
- CWE-330: 충분히 무작위적이지 않은 값 사용
- CWE-338: 암호학적으로 약한 의사 난수 생성기(PRNG) 사용
- CWE-345: 데이터 진위성의 불충분한 검증
- CWE-346: 출처 유효성 검사 오류
- CWE-352: 교차 사이트 요청 위조
- CWE-362: 부적절한 동기화로 공유 리소스 사용 동시 실행('경쟁 조건')
- CWE-369: 0으로 나누기
- CWE-377: 안전하지 않은 임시 파일
- CWE-378: 안전하지 않은 권한으로 임시 파일 생성
- CWE-400: 제어되지 않는 리소스 소비
- CWE-489: 활성 디버그 코드
- CWE-521: 약한 비밀번호 요구 사항
- CWE-539: 민감한 정보를 포함하는 영구 쿠키 사용
- CWE-599: OpenSSL 인증서의 유효성 검사 누락
- CWE-611: XML 외부 엔티티 참조의 부적절한 제한
- CWE-676: 잠재적으로 위험한 함수 사용
- CWE-704: 잘못된 유형 변환 또는 형 변환
- CWE-754: 비정상 또는 예외 조건에 대한 부적절한 확인
- CWE-770: 제한 또는 조절 없는 리소스 할당
- CWE-1004: 'HttpOnly' 플래그 없는 민감한 쿠키
- CWE-1275: 부적절한 SameSite 속성이 있는 민감한 쿠키
취약점 해결을 위해 타사 AI API와 공유되는 데이터#
다음 데이터가 타사 AI API와 공유됩니다.
- 취약점 이름
- 취약점 설명
- 식별자(CWE, OWASP)
- 취약한 코드 줄이 포함된 파일 전체
- 취약한 코드 줄(줄 번호)
워크플로#
취약점 해결은 다음 워크플로에서 사용할 수 있습니다.
- 취약점 리포트에서 기존 취약점을 해결합니다.
- 머지 리퀘스트 컨텍스트에서 취약점을 해결합니다.
취약점 리포트에서 취약점 해결#
히스토리
- 취약점 리포트에서 취약점 해결:
- GitLab.com에서 GitLab 16.7에 실험으로 도입되었습니다.
- GitLab 17.3에서 베타로 변경되었습니다.
- GitLab 17.6 이상에서 GitLab Duo 애드온이 필요하도록 변경되었습니다.
- 취약점 해결 활동 아이콘:
- GitLab 17.5에서
vulnerability_report_vr_badge라는 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다. - GitLab 17.6에서 기본적으로 활성화되었습니다.
- GitLab 18.0에서 일반 제공되었습니다. 기능 플래그
vulnerability_report_vr_badge가 제거되었습니다.
사전 요구 사항:
- 프로젝트의 Maintainer 또는 Owner 권한.
- 취약점은 지원되는 분석기에서 나온 SAST 결과여야 합니다.
- GitLab 이 지원하는 분석기 중 하나.
- 취약점마다 위치와 CWE 식별자를 보고하도록 올바르게 통합된 타사 SAST 스캐너.
- 취약점은 지원되는 유형이어야 합니다.
취약점 리포트에서 취약점을 해결하려면 다음 단계를 따릅니다.
- 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- Secure > Vulnerability report를 선택합니다.
- 선택 사항. 기본 필터를 제거하려면 Clear([clear])를 선택합니다.
- 취약점 목록 위에서 필터 바를 선택합니다.
- 표시되는 드롭다운 목록에서 Activity를 선택한 다음 GitLab Duo (AI) 범주에서 Vulnerability Resolution available을 선택합니다.
- 필터 필드 바깥을 선택합니다. 취약점 심각도 합계와 일치하는 취약점 목록이 갱신됩니다.
- 해결하려는 SAST 취약점을 선택합니다.
- 취약점 해결을 지원하는 취약점 옆에는 파란색 아이콘이 표시됩니다.
- 오른쪽 상단에서 Resolve with AI를 선택합니다. 해당 버튼이 보이지 않으면
AI actions를 선택한 다음 Resolve with AI를 선택합니다.
[!warning] 이 프로젝트가 공개 프로젝트라면 MR을 생성할 때 취약점과 제안된 해결책이 공개적으로 노출된다는 점에 유의합니다. MR을 비공개로 생성하려면 비공개 포크를 생성한 다음 이 과정을 반복합니다.
- MR에 커밋을 하나 더 추가합니다. 그러면 새 파이프라인이 실행됩니다.
- 파이프라인이 완료된 뒤 파이프라인 보안 탭에서 해당 취약점이 더 이상 표시되지 않는지 확인합니다.
- 취약점 리포트에서 취약점을 수동으로 업데이트합니다.
AI 해결 제안이 담긴 머지 리퀘스트가 열립니다. 제안된 변경 사항을 검토한 다음 평소 워크플로에 따라 머지 리퀘스트를 처리합니다.
머지 리퀘스트에서 취약점 해결#
히스토리
- GitLab 17.6에서 도입되었습니다.
- GitLab 17.7에서 기본적으로 활성화되었습니다.
- GitLab 17.11에서 일반 제공되었습니다. 기능 플래그
resolve_vulnerability_in_mr가 제거되었습니다.
머지 리퀘스트에서 GitLab Duo Vulnerability Resolution을 사용하면 머지되기 전에 취약점을 수정할 수 있습니다. 취약점 해결은 해당 취약점 결과를 해결하는 머지 리퀘스트 제안 댓글을 자동으로 생성합니다.
사전 요구 사항:
- 프로젝트의 Maintainer 또는 Owner 권한.
- 취약점은 지원되는 분석기에서 나온 SAST 결과여야 합니다.
- GitLab 이 지원하는 분석기 중 하나.
- 취약점마다 위치와 CWE 식별자를 보고하도록 올바르게 통합된 타사 SAST 스캐너.
- 취약점은 지원되는 유형이어야 합니다.
취약점 결과를 해결하려면 다음 단계를 따릅니다.
-
왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
Merge requests를 선택합니다.
-
머지 리퀘스트를 선택합니다.
- 취약점 해결이 지원되는 취약점 결과에는 타누키 AI 아이콘([tanuki-ai])이 표시됩니다.
-
지원되는 결과를 선택해 보안 결과 대화 상자를 엽니다.
-
오른쪽 하단에서 Resolve with AI를 선택합니다.
AI 해결 제안이 담긴 댓글이 머지 리퀘스트에 열립니다.
-
제안된 변경 사항을 검토한 다음 평소 워크플로에 따라 머지 리퀘스트 제안을 적용합니다.
문제 해결#
취약점 해결이 수정안을 생성하지 못하는 경우가 있습니다. 흔한 원인은 다음과 같습니다.
- 거짓 양성으로 판단된 경우:
- AI 모델은 수정안을 제안하기 전에 해당 취약점이 유효한지 평가합니다. 실제 취약점이 아니거나 수정할 가치가 없다고 판단할 수 있습니다.
- 취약점이 테스트 코드에서 발생한 경우에 이런 일이 생길 수 있습니다. 조직에 따라 테스트 코드의 취약점도 수정하기로 할 수 있지만, 모델은 이를 거짓 양성으로 평가하기도 합니다.
- 해당 취약점이 거짓 양성이거나 수정할 가치가 없다는 데 동의한다면 취약점을 무시하고 해당하는 사유를 선택합니다.
- SAST 구성을 사용자 지정하거나 GitLab SAST 규칙의 문제를 신고하려면 SAST 규칙을 참고합니다.
- 일시적이거나 예기치 않은 오류:
- 오류 메시지에
an unexpected error has occurred,the upstream AI provider request timed out,something went wrong또는 이와 비슷한 내용이 표시될 수 있습니다. - 이런 오류는 AI 공급자나 GitLab Duo의 일시적인 문제로 발생할 수 있습니다.
- 다시 요청하면 성공할 수 있으므로 취약점 해결을 다시 시도할 수 있습니다.
- 이런 오류가 계속 발생하면 GitLab에 문의합니다.
- 오류 메시지에
Resolution target could not be found in the merge request, unable to create suggestion오류:- 이 오류는 대상 브랜치에서 전체 보안 스캔 파이프라인이 실행되지 않았을 때 발생할 수 있습니다. 머지 리퀘스트 문서를 참고합니다.