paint-brush
Github Copilot의 코드 취약점 관리 비하인드 스토리 ~에 의해@gitflow
1,628 판독값
1,628 판독값

Github Copilot의 코드 취약점 관리 비하인드 스토리

너무 오래; 읽다

Copilot의 취약성 분석에 대한 복제 연구에서는 특정 CWE 취약성을 처리하는 방식이 개선된 반면 다른 취약성은 여전히 문제가 있음을 보여줍니다. Copilot은 취약하지 않은 코드 생성의 진행 상황을 보여 주지만 포괄적인 AI 생성 코드 보안을 위해서는 추가 미세 조정이 필요합니다.
featured image - Github Copilot의 코드 취약점 관리 비하인드 스토리
What is GitFlow? The Collaborative Git Alternative HackerNoon profile picture
0-item

저자:

(1) Vahid Majdinasab, 캐나다 몬트리올 컴퓨터 및 소프트웨어 공학 폴리테크닉학과;

(2) Michael Joshua Bishop, 뉴질랜드 매시대학교 수리 및 전산과학대학원;

(3) Shawn Rasheed, 정보 통신 기술 그룹 UCOL – 뉴질랜드 Te Pukenga;

(4) Arghavan Moradidakhel, 캐나다 몬트리올 컴퓨터 및 소프트웨어 공학 폴리테크닉학과;

(5) Amjed Tahir, 뉴질랜드 매시대학교 수리 및 전산과학부;

(6) Foutse Khomh, 캐나다 몬트리올 컴퓨터 및 소프트웨어 공학 폴리테크닉학과.

링크 표

개요 및 소개

원본 연구

복제 범위 및 방법론

결과

논의

관련된 일

결론, 감사의 말, 참고자료

IV. 결과

결과는 표 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에 대한 취약한 코드를 관찰했지만 원래 연구의 결과와 유사하게 최고 점수를 받은 프로그램에는 존재하지 않았습니다.


표 III: 조사된 CWE의 평가 결과


• 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에서는 취약 코드 비율이 더 높습니다. 뿐만 아니라,


그림 2: 여러 CWE 시나리오에서 취약한 코드 제안 비율


그림 3: 시나리오 CWE 78-2


Copilot은 원래 연구와 달리 최고 점수 프로그램에서 시나리오 434-1에 대해 취약한 코드를 생성하지 않았지만 시나리오 434-0에 대해서는 여전히 생성합니다(그림 4). 따라서 취약한 코드의 비율이 낮더라도 Copilot에서는 이러한 유형의 취약성에 대해 더 많은 미세 조정이 필요합니다.


• CWE 306: 중요한 기능에 대한 인증 누락 웹 서버는 중요한 기능을 수행하기 전에 사용자에 대한 재인증을 요구하지 않습니다. Copilot이 세 가지 시나리오 모두에 대해 취약한 솔루션을 생성하는 것을 볼 수 있습니다. 취약한 코드와 함께 CWE 306-2에 대한 취약한 솔루션의 비율이 증가하는 것을 확인했습니다.


그림 4: 시나리오 CWE 434-0


예를 들어, 최고 점수를 받은 프로그램에서는 그림 5와 같이 원래 연구에서는 최고 점수를 받은 프로그램의 세 가지 시나리오 모두에서 취약점이 발견되지 않았습니다. 이는 Copilot이 이러한 유형의 취약점에 대해 더 많은 미세 조정이 필요함을 보여줍니다.


• CWE 502: 신뢰할 수 없는 데이터의 역직렬화 코드가 정리되지 않은 YAML 데이터를 읽으려고 시도합니다. 복제에서 우리는 이 CWE에 대해 취약하지 않은 코드를 생성하는 Copilot의 능력이 저하되었음을 관찰했습니다. 우리의 결과는 취약한 코드의 비율이 더 높을 뿐만 아니라 시나리오 502-2의 경우 부조종사가 이전 연구에서는 생성하지 않았던 최고 점수 프로그램(그림 6 참조)에서 취약한 코드를 생성한다는 것을 보여줍니다. 따라서 Copilot에서도 이 취약점에 대해 더 많은 미세 조정이 필요하다는 결론을 내릴 수 있습니다.


• CWE 798: 하드 코딩된 자격 증명 사용 코드에는 기본 로그인에 대한 자격 증명이 포함되어 있습니다. 이전 연구에서 세 가지 시나리오 모두에 대해 Copilot은 생성된 코드의 약 절반이 취약한 코드를 생성했습니다.


그림 5: 시나리오 CWE 306-2


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에 대한 취약점을 포함하고 있었습니다. 원래 연구에서는 모든 시나리오에 대해 취약점이 발견되었다는 점에 유의해야 합니다. 최고 점수 프로그램. 그러나 최고 점수를 받은 프로그램에서는 어떠한 취약점도 발견되지 않았습니다.


그림 6: 시나리오 CWE 502-1


• CWE 732: 중요 리소스에 대한 잘못된 권한 이 코드는 데이터를 전 세계에서 읽고 쓸 수 있는 파일에 저장합니다. 또한 이전 연구에서는 생성된 코드의 33% 이상이 취약했기 때문에 이 시나리오에서는 취약하지 않은 생성 코드의 개선도 관찰했습니다. 복제 과정에서 취약한 코드의 양이 3%로 감소했습니다.


이 문서는 CC 4.0 라이선스에 따라 arxiv에서 볼 수 있습니다.