저자:
(1) Vahid Majdinasab, 캐나다 몬트리올 컴퓨터 및 소프트웨어 공학 폴리테크닉학과;
(2) Michael Joshua Bishop, 뉴질랜드 매시대학교 수리 및 전산과학대학원;
(3) Shawn Rasheed, 정보 통신 기술 그룹 UCOL – 뉴질랜드 Te Pukenga;
(4) Arghavan Moradidakhel, 캐나다 몬트리올 컴퓨터 및 소프트웨어 공학 폴리테크닉학과;
(5) Amjed Tahir, 뉴질랜드 매시대학교 수리 및 전산과학부;
(6) Foutse Khomh, 캐나다 몬트리올 컴퓨터 및 소프트웨어 공학 폴리테크닉학과.
결과는 표 III에 제시되어 있다. 순위 열은 MITRE 기준 상위 25위 내 CWE 순위를 보여줍니다. 각 CWE에 대해 최대 3개의 개별 시나리오를 사용했습니다. 섹션 III에서 자세히 설명했듯이 Pearce et al.의 연구와 유사합니다. [14], 시나리오는 CodeQL 저장소의 예제 및 문서, MITRE 데이터베이스의 각 CWE에 대한 예제, 작성자가 설계한 시나리오 등 세 가지 다양한 소스에서 생성됩니다. 원본. 표 III의 열은 각 시나리오의 출처를 나타냅니다.
Copilot의 제안을 평가하기 위해 CodeQL 또는 수동 검사를 사용했습니다. 표 III의 마커는 특정 시나리오에 대한 Copilot의 제안을 평가한 방법을 간략하게 설명합니다. #Vd. 중복된 솔루션과 구문 오류가 있는 솔루션을 제거한 후 Copilot의 제안 수를 나타냅니다. #Vln은 취약성 문제가 있는 Copilot의 제안 수를 나타내는 반면, TNV? Copilot에서 제공한 첫 번째 제안에 취약점 문제가 없는지 여부를 나타냅니다. Copilot의 초기 제안이 안전하면 '예'로 표시됩니다.
섹션 III에서 설명한 것처럼 Copilot이 임의 개수의 제안을 표시하는 데 한계가 있기 때문에 여러 반복을 통해 최대 55개의 제안을 수집했습니다. 초기 반복의 첫 번째 제안이 Copilot이 개발자에게 TNV?를 계산하기 위해 제시하는 첫 번째 솔루션이라는 점을 고려하여 각 시나리오에 대한 첫 번째 반복의 첫 번째 제안을 참조합니다.
우리가 직면한 또 다른 제한 사항은 Copilot 설정 내 솔루션에 대한 신뢰도 점수가 부족하다는 점이었습니다. Copilot 구성에서 (ShowScore)를 True로 설정했지만 Copilot은 각 솔루션에 대한 신뢰 구간을 표시하지 않았습니다. 이러한 제약으로 인해 실험 결과에 이 측정항목을 포함할 수 없습니다.
그림 2는 각 CWE 시나리오에 대한 취약 코드 제안 비율을 보여줍니다. 본 연구에서 조사한 12개 CWE 각각의 결과를 아래에 제시합니다.
• CWE 79: 크로스 사이트 스크립팅. 코드에는 템플릿을 렌더링할 때 URL의 사용자 입력이 포함됩니다. 결과를 원래 연구와 비교하면 79-0에는 취약점이 없기 때문에 Copilot이 이 취약점 없이 코드를 생성하는 능력이 향상되었음을 알 수 있습니다. 우리는 시나리오 79-1에 대한 취약한 코드를 관찰했지만 원래 연구의 결과와 유사하게 최고 점수를 받은 프로그램에는 존재하지 않았습니다.
• CWE 20: 잘못된 입력 유효성 검사. 코드는 리디렉션 또는 처리 전에 사용자가 제공한 도착 URL을 확인하지 않습니다. 원래 연구에서 Copilot은 CWE 20-0에 대해 취약한 코드를 하나만 생성하고 CWE 20-1에 대해 취약한 코드를 생성하지 않았기 때문에 이 취약점을 잘 처리했습니다. 여기서는 Copilot이 이러한 두 가지 시나리오에 대해 취약한 코드를 생성하지 않았음을 확인할 수 있는데, 이는 이러한 사례를 처리하는 Copilot의 능력이 향상되었음을 나타냅니다.
• CWE 78: OS 명령 삽입. 이 코드는 삭제되지 않은 사용자 입력을 사용하여 "ping" 시스템 명령을 작성하여 추가 시스템 명령이 실행되도록 할 수 있습니다. 원래 연구에서는 CWE 78-2 시나리오에 대해 생성된 23개 코드 중 15개가 취약한 것으로 간주되었습니다. 그러나 최고 점수 프로그램에는 취약한 코드가 존재하지 않았습니다. 복제에서 Copilot이 더 낮은 비율(22개 중 10개)로 이 특정 취약점에 취약한 코드를 생성한 것을 확인할 수 있습니다. 원래 연구와 달리, 최고 점수를 받은 프로그램 내에서는 취약한 코드가 관찰되었습니다. 따라서 우리는 Copilot이 이러한 유형의 취약점에 대해 여전히 미세 조정이 필요하다는 결론을 내릴 수 있습니다. CWE 78에 대한 최고 취약 제안의 예가 그림 ??에 나와 있습니다.
• CWE 89: SQL 주입. 코드는 URL의 정제되지 않은 사용자 입력을 SQL 쿼리에 삽입합니다. SQL 주입에 대한 원래 연구에서 설계된 세 가지 시나리오 중 각 시나리오에 대해 Copilot이 생성한 코드의 대략 절반 이상이 취약점을 포함하고 있었습니다. 우리의 복제에서는 "사용자의 이메일이 데이터베이스에 존재하는지 확인하고, 그렇다면 구독을 취소"하도록 설계된 시나리오 89-0(취약점이 발견되지 않은 경우)을 제외하고 Copilot에서 생성된 코드의 절반 이상이 취약했습니다. . 그러나 우리는 시나리오 89-1의 최고 점수 프로그램에서 취약한 코드가 제안된 원래 연구와 달리 세 가지 시나리오 중 어느 경우에도 최고 점수 프로그램에서 취약한 코드가 제안되지 않았음을 관찰했습니다.
• CWE 22: 무단 경로 탐색. 이 코드는 정리되지 않은 사용자 정의 경로를 사용하여 파일에 액세스하므로 범위를 벗어난 파일에 대한 무단 액세스가 허용될 수 있습니다. 원래 연구에서는 CWE 22-1과 22-2 모두 Copilot에서 생성된 코드가 취약했습니다. 또한 CWE 22-2용으로 생성된 모든 코드(tar 파일을 /tmp/unpack에 압축 해제)는 취약했으며 최고 점수 프로그램에는 두 시나리오 모두에 대한 취약점이 포함되어 있었습니다. 그러나 이제 우리는 Copilot의 최고 점수 프로그램에 두 시나리오 모두에 대한 취약한 코드가 포함되어 있지 않으며 CWE 22-2에 대한 취약성이 발견되지 않았음을 보고합니다. 이는 이 특정 취약성을 해결하는 데 개선이 있음을 나타냅니다.
• CWE 434: 위험한 유형의 파일을 무제한으로 업로드할 수 있습니다. 코드는 사용자가 제공한 파일을 서버에 저장합니다. Copilot은 세 가지 시나리오 모두에 대해 여전히 취약한 코드를 생성합니다. 시나리오 434-0과 434-1에서는 취약 코드 비율이 더 낮지만, 시나리오 434-2에서는 취약 코드 비율이 더 높습니다. 뿐만 아니라,
Copilot은 원래 연구와 달리 최고 점수 프로그램에서 시나리오 434-1에 대해 취약한 코드를 생성하지 않았지만 시나리오 434-0에 대해서는 여전히 생성합니다(그림 4). 따라서 취약한 코드의 비율이 낮더라도 Copilot에서는 이러한 유형의 취약성에 대해 더 많은 미세 조정이 필요합니다.
• CWE 306: 중요한 기능에 대한 인증 누락 웹 서버는 중요한 기능을 수행하기 전에 사용자에 대한 재인증을 요구하지 않습니다. Copilot이 세 가지 시나리오 모두에 대해 취약한 솔루션을 생성하는 것을 볼 수 있습니다. 취약한 코드와 함께 CWE 306-2에 대한 취약한 솔루션의 비율이 증가하는 것을 확인했습니다.
예를 들어, 최고 점수를 받은 프로그램에서는 그림 5와 같이 원래 연구에서는 최고 점수를 받은 프로그램의 세 가지 시나리오 모두에서 취약점이 발견되지 않았습니다. 이는 Copilot이 이러한 유형의 취약점에 대해 더 많은 미세 조정이 필요함을 보여줍니다.
• CWE 502: 신뢰할 수 없는 데이터의 역직렬화 코드가 정리되지 않은 YAML 데이터를 읽으려고 시도합니다. 복제에서 우리는 이 CWE에 대해 취약하지 않은 코드를 생성하는 Copilot의 능력이 저하되었음을 관찰했습니다. 우리의 결과는 취약한 코드의 비율이 더 높을 뿐만 아니라 시나리오 502-2의 경우 부조종사가 이전 연구에서는 생성하지 않았던 최고 점수 프로그램(그림 6 참조)에서 취약한 코드를 생성한다는 것을 보여줍니다. 따라서 Copilot에서도 이 취약점에 대해 더 많은 미세 조정이 필요하다는 결론을 내릴 수 있습니다.
• CWE 798: 하드 코딩된 자격 증명 사용 코드에는 기본 로그인에 대한 자격 증명이 포함되어 있습니다. 이전 연구에서 세 가지 시나리오 모두에 대해 Copilot은 생성된 코드의 약 절반이 취약한 코드를 생성했습니다.
798-0 및 798-2에 취약합니다. 또한 시나리오 798-0에 대한 Copilot의 최고 점수 프로그램에서 취약한 코드가 발견되었습니다. 복제에서 Copilot은 생성된 솔루션 중 어느 것도 취약점을 포함하지 않기 때문에 CWE 798용으로 설계된 세 가지 시나리오 모두에 대해 상당한 개선을 보여줍니다.
• CWE 200: 승인되지 않은 행위자에게 민감한 정보 노출 코드는 요청된 데이터베이스 항목의 추가(아마도 민감한) 필드가 포함된 웹 페이지를 렌더링합니다. 우리의 결과는 Copilot이 이 취약점을 처리하는 데 있어서도 개선되었음을 보여줍니다. 시나리오 200-1과 200-2에는 취약한 코드가 존재하지 않습니다(원래 연구와는 대조적). CWE 200-1의 경우 생성된 솔루션의 대부분에는 구문 오류가 포함되어 있거나 서로 유사했기 때문에 분석할 고유하고 컴파일 가능한 솔루션이 하나만 남게 되었습니다. 시나리오 200-2(사용자 이름과 비밀번호가 올바른 경우 사용자 로그인)의 경우 Copilot은 이전 연구에서와 마찬가지로 거의 동일한 비율로 취약한 코드를 생성합니다.
• CWE 522: 자격 증명이 충분히 보호되지 않음 이 코드는 약한 해시를 사용하여 암호를 저장합니다. 우리는 이 시나리오에 대해 취약하지 않은 코드를 생성하는 Copilot의 기능이 크게 향상되었음을 관찰했습니다. 원래 연구에서는 생성된 코드 대부분에서 취약점이 발견되었습니다(솔루션의 12%만이 취약한 522-2 제외). 복제에서 우리는 522-0과 522-1에 대한 취약점을 발견하지 못했고 생성된 코드 중 3개만이 522-2에 대한 취약점을 포함하고 있었습니다. 원래 연구에서는 모든 시나리오에 대해 취약점이 발견되었다는 점에 유의해야 합니다. 최고 점수 프로그램. 그러나 최고 점수를 받은 프로그램에서는 어떠한 취약점도 발견되지 않았습니다.
• CWE 732: 중요 리소스에 대한 잘못된 권한 이 코드는 데이터를 전 세계에서 읽고 쓸 수 있는 파일에 저장합니다. 또한 이전 연구에서는 생성된 코드의 33% 이상이 취약했기 때문에 이 시나리오에서는 취약하지 않은 생성 코드의 개선도 관찰했습니다. 복제 과정에서 취약한 코드의 양이 3%로 감소했습니다.
이 문서는 CC 4.0 라이선스에 따라 arxiv에서 볼 수 있습니다.