GitHub Copilot의 에이전트 모드를 사용하여 문제 해결
Ask 에이전트를 사용하여 보안 문제를 분석한 후에는 수정 사항을 구현할 준비가 된 것입니다. GitHub Copilot 에이전트를 사용하면 기능이 유지되고 코드 품질이 향상되도록 하면서 복잡한 수정 작업을 안전하게 실행할 수 있습니다.
비고
에이전트를 사용하여 변경 내용을 구현하기 전에 Ask 에이전트를 사용하여 보안 문제를 분석하고 수정 계획을 수립하는 것이 좋습니다. 이 방법을 사용하면 리팩터링이 신중하고 안전하게 수행됩니다.
에이전트 모드란?
GitHub Copilot 에이전트 모드는 GitHub Copilot Chat의 세 가지 기본 제공 에이전트 중 하나입니다. 채팅 패널에서 지침 및 제안을 제공하는 Ask 에이전트와 달리 에이전트 모드는 코드 파일에서 직접 편집으로 변경 내용을 구현합니다.
에이전트 모드 기능은 다음과 같습니다.
- 정확한 코드 수정으로 파일 편집
- 여러 파일에 변경 내용을 동시에 적용합니다.
- 테스트를 실행하여 변경 내용을 확인합니다.
- 지침에 따라 명령을 실행합니다.
- 프로젝트 컨텍스트 및 종속성 이해
- 코드베이스 전체에서 일관성 유지 관리
에이전트 모드는 종속성, 에지 사례 및 테스트를 신중하게 처리해야 하는 다단계 보안 수정을 구현하는 데 적합합니다. 필요한 컨텍스트를 자동으로 결정하고 수정 목표를 달성하는 데 필요한 단계를 실행합니다.
보안 수정을 위한 에이전트 유형
GitHub Copilot 다양한 환경에서 실행되는 여러 에이전트 유형을 제공합니다. 보안 수정 워크플로의 경우 가장 관련성이 큰 두 가지 유형은 다음과 같습니다.
- 로컬 에이전트(VS Code의 에이전트): 작업 영역, 도구 및 모델에 대한 모든 권한을 가진 편집기에서 대화형으로 실행됩니다. 이 단원 전체에서 설명하는 에이전트 유형으로, 각 변경 사항을 검토하는 실습 단계별 보안 수정에 적합합니다.
- Copilot 클라우드 에이전트: 원격으로 실행되고 GitHub 끌어오기 요청과 통합됩니다. GitHub 문제를 클라우드 에이전트에 직접 할당한 다음, 코드베이스를 연구하고, 구현 계획을 만들고, 검토를 위해 분기에서 코드를 변경할 수 있습니다. Copilot Pro+, Business 및 Enterprise 계획에서 사용할 수 있습니다.
대부분의 보안 수정의 경우 로컬 에이전트는 각 변경 내용에 대한 실시간 가시성을 제공하기 때문에 권장됩니다. 클라우드 에이전트는 자율 구현이 허용되는 잘 정의되고 위험이 낮은 문제에 유용합니다.
권한 수준
수정 세션을 시작하기 전에 작업의 복잡성 및 위험과 일치하는 사용 권한 수준을 선택합니다.
| 권한 수준 | Description | 권장 대상 |
|---|---|---|
| 기본 승인 | 읽기 전용이고 안전한 도구만 확인 없이 실행됩니다. 모든 파일 편집 및 터미널 명령에는 승인이 필요합니다. | 보안상 민감한 조치 — 최대한의 감독 |
| 우회 승인 | 확인 대화 상자 없이 모든 도구 호출을 자동으로 승인합니다. | 계획을 믿고 맡길 수 있는 일상적인 문제 해결 |
| Autopilot (미리 보기) | 완전 자율 - 작업이 완료될 때까지 도구를 자동으로 승인하고 자동으로 응답합니다. | 보안 변경에 권장되지 않음 |
채팅 보기의 사용 권한 선택기에서 사용 권한 수준을 선택합니다. 보안 수정을 위해 각 파일 편집을 적용하기 전에 검토할 수 있도록 기본 승인을 사용하는 것이 좋습니다.
에이전트를 사용하여 보안 문제 해결
에이전트를 사용하여 Ask 에이전트 분석 중에 식별된 보안 수정 사항을 구현할 수 있습니다. 에이전트는 원래 기능을 유지하고 코드 보안을 향상하면서 여러 수정 단계를 자동으로 실행할 수 있습니다.
보안 문제 해결 전략
다음은 에이전트 모드를 사용하여 보안 문제를 해결하기 위한 주요 전략입니다.
삽입 취약성 해결: 에이전트 모드에서 문자열 연결을 매개 변수가 있는 쿼리 또는 준비된 문으로 바꾸도록 지시합니다.
보안 암호화 구현: bcrypt 또는 Argon2와 같은 보안 대안을 사용하여 에이전트가 약한 해시 알고리즘을 업그레이드하게 합니다.
로깅 삭제: 에이전트를 사용하여 유용한 진단 정보를 유지하면서 로그 문에서 중요한 데이터를 제거합니다.
파일 경로 유효성 검사: 에이전트가 디렉터리 순회 공격을 방지하는 적절한 경로 유효성 검사를 추가하도록 합니다.
입력 유효성 검사 추가: 에이전트가 포괄적인 입력 유효성 검사 및 삭제를 구현하게 합니다.
보안 보장: 에이전트에 기존 보안 검사를 모두 유지하고 새로운 취약성을 도입하지 않는 수정 사항의 유효성을 검사하도록 지시합니다.
기능 유지 관리: 에이전트를 사용하여 기존의 모든 비즈니스 논리 및 오류 처리를 유지하면서 보안을 개선합니다.
보안 문제 해결을 위한 에이전트 프롬프트
에이전트를 사용하여 보안 문제를 해결하는 경우 프롬프트는 구체적이고 실행 가능하며 안전 고려 사항을 포함해야 합니다. 다음은 보안 문제를 해결할 때 프롬프트에 포함할 수 있는 자연어 텍스트의 예입니다.
준비 및 안전
이러한 프롬프트는 코드베이스에 대한 보안을 변경하기 전에 안전 조치를 수립하는 데 도움이 됩니다.
- "보안을 수정하기 전에 선택한 함수의 현재 동작을 확인하는 단위 테스트를 만듭니다."
- "선택한 코드를 분석하여 종속성을 분석하고 수정이 모든 기존 기능을 유지하도록 합니다."
- "선택한 코드에 대한 보안 수정을 구현하기 전에 백업 분기를 만들고 기존 테스트를 실행합니다."
기본 수정 작업
이러한 프롬프트를 사용하여 간단한 수정으로 일반적인 보안 취약성을 해결합니다.
- "선택한 SQL 쿼리를 리팩터링하여 문자열 연결 대신 매개 변수가 있는 쿼리를 사용합니다."
- "선택한 MD5 암호 해시를 적절한 소금 생성을 포함하여 bcrypt로 바꿉니다."
- "진단 값을 유지하면서 선택한 로깅 문에서 중요한 정보를 제거합니다."
- "선택한 파일 작업에 경로 유효성 검사를 추가하여 디렉터리 순회 공격을 방지합니다."
고급 수정 패턴
이러한 프롬프트는 여러 구성 요소 또는 아키텍처 변경이 포함된 보다 복잡한 보안 향상을 통해 에이전트 모드를 안내합니다.
- "선택한 인증 함수를 리팩터링하여 적절한 만료 시 보안 토큰 기반 인증을 사용합니다."
- "선택한 사용자 데이터 처리 함수에 대한 포괄적인 입력 유효성 검사를 구현합니다."
- "모범 사례에 따라 선택한 약한 암호화 구현을 AES-256 암호화로 바꿉니다."
- "자세한 오류를 안전하게 로깅하는 동안 사용자에게 친숙한 메시지를 제공하도록 선택한 오류 처리를 리팩터링합니다."
품질 및 유효성 검사
이러한 프롬프트를 사용하여 보안 수정이 품질 표준을 충족하고 회귀를 도입하지 않도록 합니다.
- "보안 수정을 구현한 후 모든 테스트를 실행하고 기능이 동일하게 유지되는지 확인합니다."
- "고정 코드가 Microsoft의 C# 보안 지침 및 코딩 규칙을 따르는지 확인합니다."
- "보안 수정으로 인해 성능 회귀가 발생하지 않는지 확인합니다."
- "보안 중심 단위 테스트를 만들어 취약성이 완전히 해결되었는지 확인합니다."
보안 문제를 해결하기 위한 에이전트 모드 워크플로
에이전트 모드를 사용하여 보안 문제를 해결하려면 다음 체계적인 워크플로를 따릅니다.
1단계: 작업 영역 준비
클린 작업 영역부터 시작하여 변경 내용을 정확하게 추적하고 필요한 경우 롤백할 수 있습니다.
모든 기존 작업이 커밋된 깨끗한 git 분기에서 작업하고 있는지 확인합니다. Ask 에이전트 분석 중에 식별된 보안 취약성이 포함된 파일로 이동하고 수정 계획을 참조할 준비가 되어 있습니다.
2단계: 안전 조치 설정
코드를 변경하기 전에 기준 테스트를 만듭니다. 코드 업데이트가 완료되면 기준 테스트를 사용하여 기능이 그대로 유지되는지 확인합니다.
변경하기 전에 테스트를 만들어 현재 동작을 확인합니다.
예제 프롬프트: "보안 수정을 구현하기 전에 함수에 SearchProducts 대한 포괄적인 단위 테스트를 만들어 현재 동작을 확인합니다."
에이전트는 현재 동작을 캡처하는 테스트를 만들어 유효성 검사 기준을 제공합니다.
Tip
VS Code는 에이전트 세션 중에 키 지점에 검사점을 자동으로 만듭니다. 보안 수정 사항이 예기치 않은 문제를 일으키는 경우 체크포인트를 사용해 다른 작업을 잃지 않고 정상적으로 작동하는 것으로 확인된 상태로 롤백할 수 있습니다. 이는 더 세밀한 실행 취소 옵션으로 기능 브랜치 전략을 보완해 줍니다.
3단계: 중요한 보안 수정 시작
가장 위험 수준이 높은 취약성을 먼저 해결하면 가장 위험한 문제가 즉시 해결됩니다.
우선 순위가 가장 높은 취약성부터 시작합니다.
프롬프트 예제: "문자열 연결 대신 매개 변수가 있는 쿼리를 사용하도록 메서드를 리팩터링 SearchProducts 합니다. 모든 SQL 삽입 벡터가 제거되었는지 확인합니다."
에이전트는 코드를 분석하고, 취약한 문자열 연결을 매개 변수가 있는 쿼리로 바꾸고, 입력 유효성 검사를 추가하여 SQL 삽입 취약성을 제거합니다.
4단계: 보안 암호화 구현
약한 암호화를 업그레이드하면 스토리지 위반이 있더라도 암호와 같은 중요한 데이터가 손상되지 않도록 보호합니다.
암호화 개선 사항을 계속 진행합니다.
예제 프롬프트: "HashPassword 메서드의 MD5 암호 해싱을 적절한 솔트 생성을 포함한 bcrypt 구현으로 교체하십시오."
에이전트는 약한 해시 알고리즘을 업그레이드하여 bcrypt와 같은 대안을 보호하고, 암호 유효성 검사를 추가하고, 확인 방법을 만듭니다.
5단계: 로깅 및 오류 처리 정제
로그에서 중요한 정보를 제거하면 디버깅에 필요한 진단 기능을 유지하면서 데이터 노출을 방지할 수 있습니다.
정보 공개 문제를 해결합니다.
예제 프롬프트: "진단 값을 유지하면서 인증 모듈의 로깅 문에서 중요한 정보를 제거합니다."
에이전트는 로그에서 중요한 데이터를 제거하고 자세한 오류 메시지를 사용자 친화적인 대안으로 대체하면서 진단 정보를 보안 로그에 유지합니다.
6단계: 경로 유효성 검사 추가
파일 경로의 유효성을 검사하면 공격자가 의도한 디렉터리 범위 밖의 파일에 액세스할 수 없습니다.
파일 경로 보안을 구현합니다.
예제 프롬프트: "디렉터리 순회 공격을 방지하기 위해 메서드에 SaveFile 포괄적인 경로 유효성 검사를 추가합니다."
에이전트는 경로 유효성 검사를 사용하여 Path.GetFileName()구현하고, 경로가 의도한 디렉터리 내에 남아 있는지 확인하고, 잘못된 문자에 대한 검사를 추가합니다.
7단계: 변경 내용 유효성 검사
각 주요 수정 후 테스트를 수행하면 취약성이 해결되고 새로운 문제가 발생하지 않습니다.
각 주요 보안 수정 후 변경 내용의 유효성을 검사합니다.
예제 프롬프트: "모든 단위 테스트를 실행하고 보안 관련 테스트를 만들어 SQL 삽입 취약성이 완전히 해결되었는지 확인합니다."
에이전트는 기존 테스트를 실행하고 SQL 삽입 공격을 시도하여 취약성이 해결되었는지 확인하는 다른 보안 테스트를 만듭니다.
8단계: 검토 및 반복
테스트 실패를 해결하고 구현을 구체화하면 수정 완료를 고려하기 전에 모든 요구 사항이 충족됩니다.
문제가 발견되면 구체화에 대한 구체적인 지침을 제공합니다.
예제 프롬프트: "암호 길이 유효성 검사 테스트가 실패합니다. 8자에서 128자 사이의 암호를 허용하도록 유효성 검사를 업데이트합니다."
에이전트는 실패한 테스트를 분석하고 모든 요구 사항을 충족하도록 필요한 수정을 수행합니다.
이 구조화된 접근 방식은 각 단계에서 유효성 검사를 통해 안전하고 체계적으로 수정을 수행할 수 있도록 합니다.
보안 및 품질 고려 사항
에이전트를 사용하여 보안 문제 수정을 수행할 때는 항상 보안 및 품질에 미치는 영향을 고려하세요.
보안 모범 사례
이러한 보안 사례를 따르면 수정 사항이 포괄적이며 새로운 취약성을 도입하지 않습니다.
취약성을 수정할 때 다음 보안 사례를 고려합니다.
- 철저하게 유효성 검사: 모든 입력 유효성 검사가 포괄적이고 에지 사례를 처리하는지 확인합니다.
- 권한 부여 유지: 보안 수정이 인증 또는 권한 부여 검사를 우회하지 않는지 확인합니다.
- 심층 방어 유지: 여러 보안 계층이 그대로 유지되도록 합니다.
- 종속성 검토: 보안 수정으로 인해 취약한 종속성이 발생하지 않는지 확인합니다.
- 광범위하게 테스트: 긍정 및 부정 보안 테스트 사례를 모두 포함합니다.
코드 품질 표준
보안 향상과 함께 코드 품질을 유지 관리하면 코드베이스가 유지 관리 가능하고 전문적인 상태를 유지할 수 있습니다.
다음 지침에 따라 높은 코드 품질을 유지합니다.
- 규칙 준수: 고정 코드가 Microsoft의 C# 코딩 규칙을 따르는지 확인합니다.
- 가독성 유지: 보안 수정이 코드 명확성을 손상시키지 않는지 확인합니다.
- 문서 변경 내용: 보안에 중요한 코드를 설명하는 주석을 추가합니다.
- 업데이트 설명서: 추가 정보, 보안 정책 및 API 문서에 변경 내용이 반영되는지 확인합니다.
- 성능 고려: 보안 향상으로 성능이 크게 저하되지 않는지 확인합니다.
에이전트 모드 안전 지침
에이전트는 강력하지만 신중한 감독이 필요합니다.
수정 전
수정을 시작하기 전에 이러한 예방 조치를 취하면 작업 손실 또는 호환성이 손상되는 변경이 발생할 위험이 최소화됩니다.
- 항상 Feature 브랜치에서 작업하세요.
- 포괄적인 테스트 적용 범위가 있는지 확인합니다.
- Ask 에이전트 분석의 해결 계획을 검토합니다.
- 각 도구 호출을 검토하도록 권한 수준을 기본 승인 으로 설정합니다.
- 보안 취약성 및 잠재적 효과를 이해합니다.
- 중요한 데이터 또는 구성을 백업합니다.
수정 중
수정하는 동안 이러한 실행 방법을 따르면 문제가 발생할 때 즉시 찾아 해결하도록 도와줍니다.
- 큰 변환 대신 증분 변경을 합니다.
- 다음 단계로 진행하기 전에 각 단계의 유효성을 검사합니다.
- 정확성 및 보안을 위해 생성된 코드를 검토합니다.
- 자주 테스트하여 문제를 조기에 catch합니다.
- 의도하지 않은 부작용을 모니터링합니다.
- 필요한 경우 Visual Studio Code 검사점을 사용하여 알려진 정상 상태로 롤백합니다.
수정 후
이러한 수정 후 단계는 수정이 완료되고, 정확하며, 배포할 준비가 되었는지 확인합니다.
- 보안 테스트를 포함하여 포괄적인 테스트를 실행합니다.
- 팀 구성원과 함께 코드 검토를 수행합니다.
- 보안 도구를 사용하여 보안 특성의 유효성을 검사합니다.
- 수정 세부 정보로 GitHub 문제를 업데이트합니다.
- 향후 참조를 위해 교훈을 문서화하십시오.
에이전트 모드를 강력한 도우미로 처리
에이전트는 복잡한 수정 작업을 수행할 수 있지만 사용자 감독이 필요합니다.
- 모든 변경 내용을 적용하기 전에 검토합니다.
- 보안 취약성이 완전히 해결되는지 확인합니다.
- 새로운 취약성이 도입되지 않았는지 확인합니다.
- 미묘한 문제를 식별하려면 철저히 테스트하세요.
- 보안 정책 준수를 확인합니다.
에이전트는 보안 수정을 가속화하지만 신중한 검토 및 테스트의 필요성을 대체하지는 않습니다.
Git 워크플로와 통합
Visual Studio Code 기본 제공 도구를 사용하여 에이전트 변경 내용을 Git 워크플로에 원활하게 통합합니다.
소스 제어 뷰를 사용하여 변경 내용 커밋
Visual Studio Code의 통합 소스 제어 뷰는 보안 수정을 커밋하고 리포지토리에 푸시하는 프로세스를 간소화합니다.
Visual Studio Code의 소스 제어 보기는 보안 수정 사항을 검토하고 커밋하는 통합된 방법을 제공합니다.
작업 표시줄에서 소스 제어 아이콘을 선택하거나 Ctrl+Shift+G를 눌러 소스 제어 보기를 엽니다.
"변경 내용" 아래에 나열된 변경 내용을 검토하여 모든 보안 수정 사항이 포함되어 있는지 확인합니다.
파일을 마우스로 가리켜 + 아이콘을 선택하여 준비하거나, "변경 사항" 옆에 있는 + 아이콘을 사용하여 모든 변경 사항을 준비합니다.
GitHub 문제를 참조하는 설명이 포함된 커밋 메시지를 메시지 상자에 입력합니다.
Fix SQL injection vulnerability in SearchProducts - Replace string concatenation with parameterized queries - Add input validation for search terms - Implement security tests for injection attempts Fixes #42비고
커밋을 GitHub 문제에 연결하려면 Fixes #issue-number 구문을 사용하여 커밋 메시지에 문제 번호를 포함합니다. 이 구문은 커밋이 병합될 때 자동으로 문제를 닫습니다.
커밋 단추를 선택하여 변경 내용을 커밋합니다.
변경 내용 동기화 단추를 선택하여 브랜치를 원격 리포지토리에 푸시합니다.
또는 통합 터미널에서 Git 명령을 사용할 수 있습니다.
# Stage all changes
git add .
# Commit with a descriptive message referencing the GitHub issue
git commit -m "Fix SQL injection vulnerability in SearchProducts
- Replace string concatenation with parameterized queries
- Add input validation for search terms
- Implement security tests for injection attempts
Fixes #42"
# Push changes to the remote repository
git push origin your-branch-name
요약
GitHub Copilot의 에이전트 모드를 사용하면 개발자가 코드 품질 및 기능을 유지하면서 보안 문제를 효율적으로 해결할 수 있습니다. Ask 에이전트의 분석 인사이트를 에이전트의 실행 기능과 결합하여 코드베이스의 취약성을 체계적으로 해결할 수 있습니다. 상황에 적합한 에이전트 유형을 선택합니다. 대화형, 단계별 수정을 위해 로컬 에이전트를 사용하거나 클라우드 에이전트를 사용하여 자율 해결을 위해 잘 정의된 문제를 할당합니다. 성공의 열쇠는 명확한 지침을 제공하고, 적절한 사용 권한 수준을 설정하고, 안전 사례를 유지 관리하고, 모든 변경 내용의 유효성을 철저히 검사하고, 적절한 설명서를 확인하는 것입니다. 에이전트는 수정을 가속화하는 강력한 도우미이지만 보안 수정이 완전하고 정확하며 새로운 취약성을 도입하지 않도록 하기 위해 사용자 감독은 여전히 필수적입니다.