GitHub Copilot의 요청 모드를 사용하여 문제 분석
보안 문제를 식별하고 이해하는 것은 보안 문제를 해결하는 첫 번째 단계입니다. GitHub Copilot Ask 에이전트는 코드를 분석하고 취약성을 식별하며 수정 전략을 계획하는 대화형 방법을 제공합니다.
Ask 에이전트란?
Ask 에이전트는 Visual Studio Code 통합된 GitHub Copilot Chat 세 가지 기본 제공 에이전트 중 하나입니다. 코드에 대해 질문하고 GitHub Copilot는 사용자가 제공하는 컨텍스트를 사용하여 응답합니다. Ask 에이전트는 코드를 읽고 지침을 제공할 수 있는 지식이 있는 동료와 같은 기능을 합니다. 채팅 보기에서 요청 에이전트를 활성화하려면 에이전트 설정 드롭다운에서 [질문]을 선택합니다.
Ask 에이전트는 다음 작업에 적합합니다.
- 특정 코드가 수행하는 작업을 이해합니다.
- 잠재적인 보안 취약성 식별
- 대체 구현 방법을 탐색합니다.
- 보안 개념에 대한 설명을 가져옵니다.
- 변경하기 전에 수정 전략을 계획합니다.
Ask 에이전트는 코드 파일을 수정하지 않습니다. 진행 방법에 대한 정보에 입각한 결정을 내리는 데 사용할 수 있는 분석, 설명 및 제안을 제공합니다.
Ask 에이전트를 사용하여 보안 문제 분석
Ask 에이전트를 사용하여 코드베이스의 보안 취약성을 체계적으로 식별하고 이해할 수 있습니다. GitHub Copilot는 보안 문제의 특성, 잠재적 효과 및 적절한 수정 방법을 이해하는 데 도움이 됩니다.
보안 문제를 분석하기 위한 전략
다음은 Ask 에이전트를 사용하여 보안 문제를 분석하기 위한 효과적인 전략입니다.
코드 이해: GitHub Copilot에 취약한 코드의 기능과 데이터 처리 방법을 설명해 달라고 요청합니다.
취약성 식별: 특정 코드 섹션에서 잠재적인 보안 문제에 대한 분석을 요청합니다.
영향 평가: 악용될 경우 취약성의 잠재적 결과를 살펴봅니다.
에지 사례 찾기: 코드가 예기치 않게 또는 안전하지 않게 동작할 수 있는 시나리오를 식별합니다.
솔루션 평가: 문제를 해결하기 위한 여러 가지 방법을 요청하고 장만을 이해합니다.
이해 확인: 수정 사항을 구현하기 전에 보안 문제에 대한 해석을 확인합니다.
체계적으로 계획: 취약성의 모든 측면을 해결하는 단계별 수정 계획을 개발합니다.
보안 분석을 위해 에이전트 프롬프트 요청
효과적인 프롬프트는 구체적이고, 컨텍스트를 제공하고, 실행 가능한 인사이트에 초점을 맞춥니다.
이해 및 분석
이러한 프롬프트는 코드가 수행하는 작업을 이해하고 해당 보안 영향을 식별하는 데 도움이 됩니다.
- "선택한 인증 함수가 수행하는 작업을 설명하고 보안 문제를 식별합니다."
- "SQL 삽입 취약성에 대해 선택한 코드를 분석하고 악용할 수 있는 방법을 설명합니다."
- "선택한 암호 스토리지 구현을 검토하고 안전하지 않은 이유를 설명합니다."
- "선택한 파일 처리 코드에 어떤 보안 위험이 있나요?"
취약점 평가
이러한 프롬프트를 사용하여 잠재적인 악용을 심층 분석하고 보안 문제의 심각도를 평가합니다.
- "공격자가 선택한 입력 유효성 검사를 악용할 수 있는 모든 방법을 식별합니다."
- "선택한 오류 처리를 통해 노출될 수 있는 중요한 정보는 무엇인가요?"
- "선택한 암호화 구현을 분석하여 약점을 분석합니다."
- "선택한 코드가 OWASP 상위 10개 보안 지침을 따르나요? 위반 사항을 설명합니다."
솔루션 탐색
이러한 프롬프트는 보안 문제를 해결하기 위한 다양한 접근 방식을 평가하고 장만을 이해하는 데 도움이 됩니다.
- "선택한 쿼리에서 SQL 삽입을 수정하는 데 권장되는 방법은 무엇인가요?"
- "선택한 암호 해시 구현에 대한 안전한 대안을 보여 주세요."
- "디렉터리 통과를 방지하기 위해 경로 유효성 검사를 구현하려면 어떻게 해야 하나요?"
- "중요한 정보를 노출하지 않고 오류를 기록하는 가장 안전한 방법은 무엇인가요?"
결과 분석
이러한 프롬프트를 사용하여 보안 취약성이 악용될 경우 발생할 수 있는 결과를 파악합니다.
- "선택한 SQL 삽입 취약성이 악용될 경우 잠재적인 영향은 무엇인가요?"
- "암호를 일반 텍스트로 저장하면 발생하는 결과를 설명합니다."
- "선택한 경로 통과 취약성을 통해 어떤 데이터가 손상될 수 있나요?"
- "선택한 로깅 문제가 코드베이스의 다른 취약성에 비해 얼마나 심각한가요?"
모범 사례 확인
이러한 프롬프트는 코드가 업계 표준 및 보안 지침을 따르는지 확인하는 데 도움이 됩니다.
- "선택한 코드가 .NET에 대한 Microsoft의 보안 지침을 따르나요?"
- "선택한 암호화 구현이 현재 모범 사례를 사용하고 있나요?"
- "선택한 인증 흐름에 어떤 보안 개선 사항을 권장하시겠습니까?"
- "선택한 코드는 보안 암호 스토리지에 대한 업계 표준과 어떻게 비교됩니까?"
효과적인 채팅 컨텍스트 설정
GitHub Copilot의 분석 품질은 사용자가 제공하는 컨텍스트에 따라 달라집니다. 코필로트에 충분한 정보가 있는지 확인하려면 다음 방법을 따르세요.
관련 파일 및 코드 추가
포괄적인 컨텍스트를 제공하면 GitHub Copilot가 보다 정확하고 관련 있는 보안 분석을 제공하는 데 도움이 됩니다.
- 채팅 입력창에
#를 입력하여 특정 파일(예:#file:SearchProducts.cs), 폴더, 기호 또는 전체 코드베이스(#codebase)를 참조할 수 있습니다. - 분석에 집중하기 위해 질문을 하기 전에 특정 코드 섹션을 선택합니다.
- 컨텍스트를 제공하는 관련 파일(예: 구성 파일, 도우미 클래스 또는 데이터 모델)을 포함합니다.
- 컴파일러 오류 또는 테스트 오류를 컨텍스트로 포함하도록 터미널 출력(
#terminalSelection)을 참조합니다. - 오류 또는 보안 검사 결과의 스크린샷 첨부 - Ask 에이전트는 비전을 지원하므로 이미지를 채팅에 직접 붙여넣을 수 있습니다.
명확한 문제 설명 제공
명확한 컨텍스트는 GitHub Copilot가 특정 상황을 이해하고 더 많은 대상 보안 지침을 제공하는 데 도움이 됩니다.
- 달성하려는 작업을 설명합니다.
- 제약 조건 또는 요구 사항(성능 고려 사항, 규정 준수 요구 사항)을 언급합니다.
- 보안 문제를 명시적으로 지정합니다.
- 팀이 따르는 관련 코딩 표준 또는 지침을 기록해 둡니다.
에이전트 워크플로를 통한 보안 분석 요청
다음 체계적인 워크플로에 따라 Ask 에이전트를 사용하여 보안 문제를 분석합니다.
1단계: 문제가 있는 코드 열기 및 선택
보안 문제를 분석하는 첫 번째 단계는 GitHub Copilot에 분석하려는 특정 코드를 제공하는 것입니다.
보안 문제가 포함된 파일로 이동하고 관련 코드 섹션을 선택합니다. 파일 또는 코드 섹션을 선택하면 GitHub Copilot의 특정 관심 영역에 대한 분석이 집중됩니다.
2단계: 설명 요청
코드가 수행하는 작업을 이해하고 취약성이 있는지 확인하여 분석을 시작합니다.
광범위한 이해 질문으로 시작하여 취약성을 확인하고 취약성을 악용할 수 있는 방법을 이해합니다.
예제 프롬프트: "이 검색 함수가 수행하는 작업을 설명하고 보안 문제를 식별합니다."
GitHub Copilot는 코드의 작동 방식을 설명하고, 취약성 유형을 식별하고, 잠재적인 악용 방법을 설명합니다.
3단계: 취약성에 대한 대상 질문하기
기본 취약성을 이해한 후에는 가능한 모든 공격 벡터를 더 자세히 이해합니다.
보안 문제의 특정 측면을 자세히 살펴보기
예제 프롬프트: "공격자가 이 SQL 삽입 취약성을 악용할 수 있는 다양한 방법은 무엇인가요?"
대상 질문은 인증 바이패스, 데이터 추출, 데이터 수정 및 서비스 거부 가능성을 포함하여 위험의 전체 범위를 이해하는 데 도움이 됩니다.
4단계: 수정 옵션 탐색
여러 솔루션 접근 방식을 이해하면 특정 컨텍스트에 가장 적합한 수정 사항을 선택하는 데 도움이 됩니다.
장단점을 사용하여 솔루션 전략을 요청합니다.
예제 프롬프트: "이 SQL 삽입 취약성을 해결하기 위한 권장 방법은 무엇인가요? 각 접근 방식의 장단점을 포함합니다."
GitHub Copilot는 매개 변수가 있는 쿼리, ORM(Object-Relational 매핑) 프레임워크 또는 저장 프로시저와 같은 여러 솔루션을 제안하여 상황에 가장 적합한 수정 사항을 선택할 수 있도록 도와줍니다.
5단계: 에지 사례 및 요구 사항 확인
수정 사항을 구현하기 전에 처리해야 하는 모든 시나리오 및 특수 사례를 이해해야 합니다.
특별한 고려 사항을 요청하여 모든 시나리오에서 수정이 작동하는지 확인합니다.
예제 프롬프트: "이 검색 함수에 대한 매개 변수가 있는 쿼리를 구현할 때 처리해야 하는 에지 사례 또는 특별한 고려 사항이 있나요?"
GitHub Copilot는 입력 유효성 검사 요구 사항, 성능 고려 사항 및 해결해야 하는 비즈니스 논리 문제를 식별할 수 있습니다.
6단계: 구현 계획
코딩 전 마지막 단계는 구현 프로세스를 안내하는 포괄적인 계획을 만드는 것입니다.
테스트 요구 사항을 포함하는 포괄적인 구현 계획을 요청합니다.
예제 프롬프트: "논의에 따라 테스트 요구 사항을 포함하여 이 SQL 삽입 취약성을 수정하기 위한 단계별 계획을 만듭니다."
GitHub Copilot는 준비, 구현, 테스트(단위, 보안 및 회귀), 배포 및 설명서 단계를 포함하는 구조화된 계획을 제공할 수 있습니다.
Tip
Ask 에이전트 분석을 완료한 후 계획 에이전트 를 사용하여 구현 계획을 공식화하는 것이 좋습니다. 계획 에이전트는 분석 결과에서 구조화된 단계별 구현 계획을 만들고 구현을 위해 에이전트에 직접 전달할 수 있습니다. 채팅 보기의 에이전트 선택기에서 계획을 선택합니다.
반복 분석 방법
보안 분석에는 종종 여러 차례의 질문이 필요합니다. 반복적인 접근 방식에는 다음 단계가 권장됩니다.
- 설명에 대한 후속 질문을 합니다.
- 제안된 솔루션에 대한 코드 예제를 요청합니다.
- 대체 방법을 살펴봅니다.
- 문제 및 해결 프로세스를 포괄적으로 이해합니다.
반복 분석 방법에서 다음 일련의 프롬프트를 고려합니다. 이 시나리오에서는 SQL 삽입에 취약한 검색 함수가 포함된 파일을 열고 코드를 선택했다고 가정합니다.
코드 및 문제에 대한 일반적인 이해를 설정합니다. "선택한 검색 함수가 수행하는 작업을 설명하고 보안 문제를 식별합니다."
특정 위험을 자세히 살펴보기: "공격자가 이 SQL 삽입 취약성을 악용할 수 있는 모든 방법은 무엇인가요?"
솔루션 옵션 살펴보기: "이 SQL 삽입 취약성을 해결하기 위해 권장되는 방법은 무엇인가요? 각 접근 방식의 장단점을 포함합니다."
추천 접근 방식을 이해하기 위해: "왜 입력을 정리하는 함수로 이스케이프하는 것보다 매개변수화된 쿼리가 더 좋을까요?"
포괄적으로 완벽히 이해해야 합니다. "이 검색 함수에 대한 매개 변수가 있는 쿼리를 구현할 때 처리해야 할 예외 사례나 특별한 고려 사항이 있나요?"
구현 계획: "논의에 따라 테스트 요구 사항을 포함하여 이 SQL 삽입 취약성을 수정하기 위한 단계별 계획을 만듭니다."
이 반복적인 접근 방식은 포괄적인 이해를 구축하고 코드를 수정하기 전에 완전한 수정 전략을 갖출 수 있도록 합니다.
GitHub Copilot의 응답 관리
GitHub Copilot는 지식이 있지만, 응답을 절대적인 진실이 아닌 정보에 입각한 지침으로 취급합니다.
중요한 보안 결정 확인
항상 신뢰할 수 있는 원본 및 특정 요구 사항에 대한 보안 권장 사항의 유효성을 검사합니다.
- 공식 설명서와 GitHub Copilot의 조언을 상호 참조합니다.
- 보안 모범 사례는 OWASP 지침을 참조하세요.
- .NET에 대한 Microsoft의 보안 권장 사항을 검토합니다.
- 특정 규정 준수 요구 사항을 고려합니다.
GitHub Copilot의 제한 사항 인식
GitHub Copilot가 수행할 수 있는 것과 수행할 수 없는 작업을 이해하면 적절한 감독을 유지하면서 효과적으로 사용하는 데 도움이 됩니다.
GitHub Copilot는 강력한 도구이지만 알아야 할 제한 사항이 있습니다.
다음 제한 사항을 고려하세요.
- GitHub Copilot는 정적 코드를 분석하지만 런타임 컨텍스트가 없습니다.
- GitHub Copilot는 특정 인프라 또는 아키텍처에 대해 알지 못할 수 있습니다.
- GitHub Copilot는 독점 보안 정책에 액세스할 수 없습니다.
- GitHub Copilot는 도메인 전문 지식이 필요한 미묘한 취약성을 놓칠 수 있습니다.
명확한 컨텍스트 제공
더 많은 컨텍스트와 세부 정보를 제공할 때 GitHub Copilot 응답의 품질이 크게 향상됩니다.
GitHub Copilot의 정확도는 더 나은 컨텍스트에서 개선됩니다. 응답이 대상을 벗어난 것처럼 보이는 경우:
- 환경에 대한 컨텍스트를 더 추가합니다.
- 채팅에 관련 코드 파일을 포함합니다.
- 제약 조건 또는 요구 사항을 명시적으로 지정합니다.
- 질문을 더 자세히 설명합니다.
보안 분석을 위한 요청 에이전트의 주요 이점
보안 분석을 위해 Ask 에이전트를 사용하면 다음과 같은 몇 가지 이점이 있습니다.
- 신속한 평가: 설명서를 조사하지 않고 즉각적인 분석을 가져옵니다.
- 포괄적인 관점: GitHub Copilot는 수백만 개의 코드베이스에서 패턴을 고려합니다.
- 교육: 설명을 통해 보안 원칙을 알아봅니다.
- 계획 지원: 코드를 작성하기 전에 구현 전략을 개발합니다.
- 위험 없는 탐색: 코드를 수정하지 않고 여러 가지 방법을 조사합니다.
요약
Ask 에이전트는 보안 문제를 체계적으로 분석하기 위한 강력한 도구입니다. 대상 질문을 하고 적절한 컨텍스트를 제공하여 최상의 결과를 얻습니다. 반복 워크플로에 따라 취약성을 철저히 이해하고 수정 옵션을 탐색합니다. Ask 에이전트를 사용하여 코드를 작성하기 전에 포괄적인 구현 계획을 개발한 다음 계획 에이전트로 전환하여 접근 방식을 구성하거나 에이전트를 사용하여 수정 사항을 직접 구현합니다. 이 접근 방식을 사용하면 보안 문제를 자신 있게 해결하는 동시에 향후 코드를 개선하는 보안 원칙을 학습할 수 있습니다.