정보:Copilot 자동 수정code scanning
GitHub Copilot Autofix는 code scanning을(를) 확장하여, 사용자에게 경고를 수정하는 데 도움이 되는 목표 권장 사항을 제공함으로써 새로운 보안 취약성이 발생하지 않도록 지원하는 기능입니다. 잠재적 수정은 코드베이스의 데이터와 code scanning 분석을 사용하여 대규모 언어 모델(LLM)에 의해 자동으로 생성됩니다.
GitHub Copilot Autofix은 CodeQL 분석에 사용할 수 있습니다.
참고
GitHub Copilot Autofix를 사용하기 위해 GitHub Copilot을 구독할 필요는 없습니다. Copilot 자동 수정는 GitHub.com의 모든 퍼블릭 리포지토리와 GitHub Code Security 라이선스가 있는 조직 및 엔터프라이즈가 소유한 내부 또는 프라이빗 리포지토리에서 사용할 수 있습니다.
Copilot 자동 수정 는 기존 소스 코드와 관련된 잠재적 수정 사항을 생성하고 경고의 설명 및 위치를 경고를 수정할 수 있는 코드 변경 내용으로 변환합니다.
Copilot 자동 수정에서는 코드에서 제안된 수정 사항과 해당 수정에 대한 설명 텍스트를 모두 생성할 수 있는 충분한 생성 기능이 있는 OpenAI의 큰 언어 모델 GitHub Copilot 과 상호 작용하는 내부 GPT-5.1 API를 사용합니다.
Copilot 자동 수정는 기본적으로 허용되며 모든 리포지토리에서 CodeQL을(를) 사용하도록 설정되어 있지만, Copilot 자동 수정을(를) 비활성화하고 옵트아웃하는 것을 선택할 수 있습니다. 엔터프라이즈, 조직 및 리포지토리 수준에서 사용하지 않도록 설정하는 Copilot 자동 수정 방법을 알아보려면 [AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning)을 참조하세요.
조직 보안 개요 대시보드에서는 주어진 기간 동안 조직에서 시작 및 종료된 끌어오기 요청에서 코드 제안의 전체 수를 볼 수 있습니다. 자세한 내용은 보안 인사이트 보기을(를) 참조하세요.
개발자 경험
Code scanning 사용자는 이미 보안 경고를 보고 끌어오기 요청을 분석할 수 있습니다. 그러나 개발자는 코드 보안에 대한 학습이 거의 없으므로 이러한 경고를 수정하려면 상당한 노력이 필요합니다. 먼저 경고 위치 및 설명을 읽고 이해한 다음, 해당 이해를 사용하여 소스 코드를 편집하여 취약성을 수정해야 합니다.
Copilot 자동 수정 는 모범 사례에 대한 정보와 코드베이스의 세부 정보 및 경고를 결합하여 개발자에게 잠재적인 수정 사항을 제안하여 개발자에게 진입 장벽을 낮춥니다. 취약성에 대한 정보 검색을 시작하는 대신, 개발자는 코드베이스에 대한 잠재적 솔루션을 보여 주는 코드 제안으로 시작합니다. 개발자는 해당 잠재적인 수정 사항을 평가하여 코드베이스에 가장 적합한 솔루션인지 결정하고 의도한 동작을 유지 관리하는지 확인합니다.
개발자는 항상 제안된 수정 사항 또는 수정된 수정 사항을 커밋한 후 코드베이스에 대한 C연속 통합 테스트(CI)가 계속 통과인지 그리고 끌어오기 요청을 병합하기 전에 경고가 해결됨으로 표시되는지 확인해야 합니다.
에 대해 지원되는 언어 CodeQLcode scanning
Copilot 자동 수정는 기본 및 보안 확장 CodeQL 쿼리 패키지에 포함된 쿼리 하위 집합의 C#, C/C++, Go, Java/Kotlin, Swift, JavaScript/TypeScript, Python, Ruby, Rust 수정 생성을 지원합니다.
[AUTOTITLE](/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites#built-in-codeql-query-suites)에서 이러한 쿼리 도구 모음에 대한 자세한 내용을 참조하세요.
제안 생성 프로세스
리포지토리가 Copilot 자동 수정로 사용 설정된 경우, 식별된 code scanning 경고는 LLM에 입력을 보냅니다. LLM에서 잠재적인 수정 사항을 생성할 수 있는 경우 해당 수정 사항은 제안으로 표시됩니다.
GitHub 는 분석에서 code scanning LLM에 다양한 데이터를 보냅니다. 다음은 그 예입니다.
* CodeQL SARIF 형식의 경고 데이터입니다. 자세한 내용은 코드 검사에 대한 SARIF 지원을(를) 참조하세요.
- 분기의 현재 버전에서 가져온 코드.
- 각 원본 위치, 싱크 위치 및 경고 메시지에서 참조되거나 흐름 경로에 포함되는 모든 위치에 대한 짧은 코드 조각.
- 모든 해당 위치에 관련된 각 파일의 처음 ~10줄.
- 문제를 식별한 쿼리에 CodeQL 대한 도움말 텍스트입니다. 예제는 쿼리 도움말을 참조 CodeQL 하세요.
제안들은 Copilot 자동 수정 생성되어 code scanning 백엔드 내에 저장됩니다. 제안으로 표시됩니다. 코드베이스에서 사용하도록 설정하고 code scanning 끌어오기 요청을 만드는 것 외에는 사용자 상호 작용이 필요하지 않습니다.
수정 생성 프로세스는 위에 개략적으로 소개된 범위를 벗어난 각종 고객 데이터를 수집하거나 사용하지 않습니다. 따라서 이 기능의 사용은 연결된 기존 사용 약관에 의해 제어됩니다 Advanced Security. 또한 LLM 학습을 위해 처리되는 Copilot 자동 수정 데이터는 엄격히 사용되지 않습니다. 사용 약관에 대한 Advanced Security 자세한 내용은 GitHub 추가 제품 및 기능 약관을 참조하세요.
Copilot 자동 수정의 제한 사항 및 비결정성
Copilot 자동 수정 경고 code scanning 는 모든 상황에서 모든 경고에 대한 수정을 생성할 수 없습니다. 이 기능은 최상의 노력으로 작동하며 100% 성공하도록 보장되지 않습니다.
Copilot 자동 수정 제안이 생성되지 않을 수 있는 경우
여러 요인으로 인해 Copilot 자동 수정에서 제안된 수정 사항이 성공적으로 생성되지 못할 수 있습니다.
-
_비결정성:_ 기본 큰 언어 모델은 생성 모델이므로 비결정적입니다. 즉, 동일한 경고 및 코드가 있더라도 실행 가능한 제안을 생성하지 못하거나 제안이 시도에 따라 다를 수 있습니다. -
_문제 복잡성 및 컨텍스트:_ 복잡한 다중 파일 코드베이스 또는 미묘한 논리 결함을 나타내는 추적 데이터 흐름이 필요한 것과 같은 일부 보안 경고는 모델이 해결하기 어려울 수 있습니다. -
_파일 크기:_ 영향을 받는 코드가 매우 큰 파일 또는 리포지토리 내에 있는 경우 LLM에 제공된 컨텍스트가 잘려질 수 있습니다. 모델에는 주변 코드 논리를 이해하고 수정 사항을 안전하게 적용할 수 있는 충분한 컨텍스트가 필요합니다. 이 컨텍스트가 제한되면 기능이 수정을 시도하지 않습니다. -
_언어 및 프레임워크 적용 범위:_ 증가하는 언어 및 CodeQL 경고 목록을 지원하지만 Copilot 자동 수정 가능한 모든 경고 유형 또는 언어를 다루지는 않습니다.
제안 품질
GitHub 는 자동화된 테스트 하네스를 사용하여 제안 품질을 지속적으로 모니터링합니다 Copilot 자동 수정. 이를 통해 모델이 개발됨에 따라 LLM에서 생성된 제안이 어떻게 변경되는지 이해할 수 있습니다.
테스트 도구에는 다양한 퍼블릭 리포지토리 집합에서 수집한 2,300개 이상의 경고 집합이 포함되어 있으며, 여기에서 강조 표시된 코드에 테스트 적용 범위가 포함됩니다. 코드베이스에 커밋하기 전에 얼마나 잘 작동하는지, 즉 개발자가 얼마나 많이 편집해야 하는지를 확인하기 위해 이러한 경고에 대한 제안이 테스트됩니다. 많은 테스트 경고의 경우 LLM에서 생성된 제안을 있는 그대로 커밋하여 기존 CI 테스트를 모두 성공적으로 통과하면서 지속적으로 경고를 수정할 수 있습니다.
또한 시스템은 잠재적인 피해(레드 팀이라고도 함)에 대해 검사하는 스트레스 테스트를 받으며, LLM의 필터링 시스템을 통해 사용자에게 잠재적인 피해를 주는 제안이 표시되는 것을 방지할 수 있습니다.
GitHub에서 제안을 테스트하는 방법
제안된 모든 변경 사항을 편집하지 않고 병합한 후, 코드에 code scanning 및 리포지토리의 단위 테스트를 실행하여 제안의 효과를 테스트합니다.
- 경고가 code scanning 제안에 의해 수정되었나요?
- 수정 사항으로 인해 새 code scanning 경고가 발생했나요?
- 수정 사항이 code scanning이(가) 감지할 수 있는 구문 오류를 도입했나요?
- 리포지토리 테스트의 출력이 수정 사항으로 인해 변경되었나요?
또한 많은 성공적인 제안을 수시로 검사하며 새로운 문제를 도입하지 않고 경고를 수정하는지 확인합니다. 수동 심사는 이러한 검사 중 하나 이상이 실패하면 많은 경우에 제안된 수정 사항이 거의 정확하긴 하지만 사용자가 식별하고 수동으로 수행할 수 있는 몇 가지 사소한 수정이 필요하다는 것을 보여 주었습니다.
기타 프로젝트에 대한 효과
넓은 범위의 다양한 유형의 프로젝트 및 경고가 테스트 집합에 포함되어 있습니다. 지원 Copilot 자동 수정 되는 언어를 사용하는 다른 프로젝트에 대한 제안도 비슷한 패턴을 따라야 한다고 예측합니다.
-
Copilot 자동 수정 는 대부분의 경고에 코드 제안을 추가할 가능성이 높습니다. - 개발자가 제안을 평가할 때 편집이나 사소한 업데이트 없이 대부분의 수정 사항을 커밋하여 코드의 더 넓은 컨텍스트를 반영할 수 있을 것으로 예상합니다.
- 코드베이스 또는 취약성에 대한 상당한 착오는 제안된 수정 사항 중 작은 비율에서 반영합니다.
그러나 각 프로젝트와 코드베이스는 고유하므로 개발자는 커밋하기 전에 제안된 수정 사항의 더 큰 비율을 편집해야 할 수 있습니다. Copilot 자동 수정 는 경고를 해결하는 code scanning 데 도움이 되는 중요한 정보를 제공하지만, 궁극적으로 제안된 변경 내용을 평가하고 코드의 보안 및 정확도를 확인하는 것은 사용자의 책임입니다.
참고
지원되는 언어에 대한 수정 생성은 LLM 운영 용량에 따라 다릅니다. 또한 끌어오기 요청에 추가되기 전에 제안된 각 수정 사항이 테스트됩니다. 제안을 사용할 수 없거나 제안된 수정 사항이 내부 테스트에서 실패하면 제안이 표시되지 않습니다.
제안의 제한 사항
제안을 Copilot 자동 수정검토할 때는 변경 내용을 적용하기 전에 항상 AI의 제한 사항을 고려하고 필요에 따라 변경 내용을 편집해야 합니다. Copilot 자동 수정 code scanning을 활성화하기 전에 리포지토리에 대한 CI 테스트 및 종속성 관리를 업데이트하는 것도 고려해야 합니다. 자세한 내용은 제안의 제한 사항 완화를 참조하세요.
코드 제안의 제한 사항
-
_인간 언어:_ 시스템은 영어 데이터를 주로 사용하며, 해당 데이터는 시스템에 전송된 프롬프트, 데이터 집합의 LLM에서 볼 수 있는 코드 및 내부 평가에 사용되는 테스트 사례를 포함합니다. LLM에서 생성된 제안은 다른 언어로 작성되고 다른 문자 집합을 사용하는 소스 코드 및 주석의 성공률이 낮을 수 있습니다. -
_구문 오류:_ 시스템에서 구문적으로 옳지 않은 코드 변경 내용인 수정 사항을 제안할 수 있으므로 끌어오기 요청 시 구문 검사를 실행하는 것이 중요합니다. -
_위치 오류:_ 시스템은 구문적으로 옳은 코드이지만 잘못된 위치에 제안되는 수정 사항을 제안할 수 있으며, 이는 사용자가 위치를 편집하지 않고 수정을 수락하면 구문 오류가 발생한다는 의미입니다. -
_의미 오류_: 시스템에서 구문적으로 유효하지만 프로그램의 의미 체계를 변경하는 수정 사항을 제안할 수 있습니다. 시스템은 코드가 어떻게 동작해야 하는지에 대한 프로그래머 또는 코드베이스의 의도를 전혀 이해하지 못합니다. 테스트 범위가 양호하면 개발자가 수정 사항이 코드베이스의 동작을 변경하지 않는지 확인하는 데 도움이 됩니다. -
_보안 취약성 및 잘못된 수정 사항:_ 시스템은 근본적인 보안 취약성을 교정하는 데 실패하거나 새로운 보안 취약성을 도입하는 수정 사항을 제안할 수 있습니다. -
_부분 수정:_ 시스템에서 보안 취약성을 부분적으로만 해결하거나 의도한 코드 기능만 부분적으로만 유지하는 수정 사항을 제안할 수 있습니다. 시스템은 코드베이스에서 코드의 작은 하위 집합만 보고 항상 전체적으로 최적화된 또는 옳은 솔루션을 생성하지는 않습니다.
종속성 제안의 제한 사항
코드베이스 종속성의 변경 내용이 제안된 수정 사항에 포함되는 경우가 있습니다. 종속성 관리 시스템을 사용하는 경우 개발자가 검토할 수 있도록 모든 변경 내용이 자동으로 강조 표시됩니다. 끌어오기 요청을 병합하기 전에 항상 종속성 변경 내용이 안전한지 확인하고 코드베이스의 의도한 동작을 유지 관리하세요.
-
_새 종속성 또는 업데이트된 종속성:_ 시스템은 소프트웨어 종속성을 추가하거나 업데이트할 것을 제안된 수정 사항의 일부로 제안할 수 있습니다. 예를 들어 npm에서 종속성을 추가하기 위해 JavaScript 프로젝트에 대한 `package.json` 파일을 변경하도록 제안합니다. -
_지원되지 않거나 안전하지 않은 종속성:_ 시스템은 어떤 버전의 기존 종속성이 지원되거나 안전한지 알지 못합니다. -
_거짓 종속성:_ 시스템은 더욱 넓은 생태계에 게시된 종속성에 대한 불완전한 지식을 갖고 있습니다. 이로 인해 공격자가 통계적으로 가능성이 있는 종속성 이름으로 게시한 악성 소프트웨어에 대한 새로운 종속성을 추가하는 제안이 발생할 수 있습니다.
제안의 제한 사항 완화
제안 Copilot 자동 수정 의 제한 사항을 완화하는 가장 좋은 방법은 모범 사례를 따르는 것입니다. 예를 들어 끌어오기 요청의 CI 테스트를 사용하여 기능 요구 사항이 영향을 받지 않는지 확인하고 종속성 검토 API 및 작업과 같은 종속성 관리 솔루션을 사용합니다. 자세한 내용은 종속성 검토 정보을(를) 참조하세요.
동료 또는 자동화된 도구에서 제안했는지 여부에 관계없이 끌어오기 요청의 작성자가 주석 검토 및 제안된 코드 변경 내용에 응답하는 방법에 대한 책임을 유지한다는 점을 기억해야 합니다. 개발자는 항상 코드 변경 내용에 대한 제안을 비판적으로 바라보아야 합니다. 필요한 경우 제안된 변경 내용을 편집하여 결과 코드와 애플리케이션이 정확하고 안전하며 성능 기준을 충족하며 애플리케이션에 대한 다른 모든 기능 및 비기능적 요구 사항을 만족하는지 확인해야 합니다.
다음 단계
-
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/triaging-code-scanning-alerts-in-pull-requests#working-with-autofix-suggestions-for-alerts-on-a-pull-request) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/resolving-code-scanning-alerts#generating-suggested-fixes-for-code-scanning-alerts) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning)