코드 심연 공개 : AI 생성 프로그램에서 취약성 소용돌이를 노출시키기 위해 LLM을 역전시키는
링크 표
초록과 I. 소개
II. 관련 작업
III. 기술적 배경
IV. 코드 생성 모델의 체계적인 보안 취약성 검색
V. 실험
VI. 논의
VII. 결론, 인정 및 참고 문헌
충수
A. 코드 언어 모델의 세부 사항
B. Github Copilot에서 보안 취약점 찾기
C. Chatgpt를 사용한 기타 기준
D. 다른 수의 소수의 예제의 영향
E. C 코드에 대한 특정 취약점을 생성하는 효율성
F. 퍼지 코드 중복 제거 후 보안 취약성이 발생합니다
G. 생성되지 않은 비분기 프롬프트의 전달성에 대한 자세한 결과
H. 비 안전 보장 프롬프트 데이터 세트 생성에 대한 세부 사항
I. 비 안전한 데이터 세트를 사용하여 Codelms 평가의 상세한 결과
J. 샘플링 온도의 효과
K. 취약한 코드 재구성에서 모델 반전 체계의 효과
L. Codegen 및 Chatgpt에 의해 생성 된 질적 예
M. Github Copilot에 의해 생성 된 질적 예
다음에서, 우리는 대형 언어 모델에 대한 기존 작업을 간단히 소개 하고이 작업이 우리의 접근 방식과 어떤 관련이 있는지 논의합니다.
A. 큰 언어 모델과 프롬프트
대형 언어 모델은 질문 답변, 번역 및 독해를 포함하여 다양한 작업에서 자연어 처리 분야를 발전 시켰습니다. [1],,, [17]. 이 이정표는 수억에서 모델 크기를 스케일링하여 달성되었습니다. [18] 수억에 이르렀습니다 [1]자체 감독 된 객관적인 기능, 인간 피드백의 강화 학습 [19]그리고 거대한 텍스트 데이터. 이러한 모델 중 다수는 대기업에서 교육을받은 다음 미리 훈련 된 모델로 출시됩니다. 브라운 등 [1] 이러한 모델은 모델의 매개 변수를 변경하지 않고 입력으로 몇 가지 예제 만 제공하여 다양한 작업을 해결하는 데 사용될 수 있습니다. 최종 사용자는 템플릿을 몇 가지 샷 프롬프트로 사용할 수 있으며 모델을 안내하여 특정 작업에 대한 원하는 출력을 생성 할 수 있습니다. 이 작업에서는 블랙 박스 코드 생성 모델의 역전을 근사화하여 특정 취약점으로 코드를 생성하는 데 몇 가지 샷 프롬프트 접근법이 어떻게 사용될 수 있는지 보여줍니다.
B. 소스 코드의 큰 언어 모델
소스 코드 이해 및 생성 작업을 위해 대형 언어 모델 사용에 대한 관심이 높아지고 있습니다. [7],,, [5],,, [20]. 낡은. [21] 및 Guo et al. [22] 객관적인 기능의 변형이있는 인코더 전용 모델을 제안하십시오. 이 모델 [21],,, [22] 주로 코드 분류, 코드 검색 및 프로그램 수리에 중점을 둡니다. Ahmad et al. [23] 및 Wang et al. [20] 코드-코드를 해결하기 위해 인코더 디코더 아키텍처를 사용하고 프로그램 번역, 프로그램 수리 및 코드 요약을 포함한 코드-텍스트 생성 작업을 해결하십시오. 최근 Decoderonly 모델은 왼쪽에서 오른쪽으로 프로그램을 생성하는 유망한 결과를 보여주었습니다. [5],,, [4],,, [6],,, [12]. 이 모델은 제로 샷 및 소수의 프로그램 생성 작업에 적용 할 수 있습니다. [5],,, [6],,, [24],,, [12]코드 완료, 코드 충전 및 텍스트-코드 작업을 포함합니다. 대규모 언어 모델은 잠재적 보안 취약성 문제를 고려하지 않고 생성 된 코드의 기능적 정확성을 기반으로 주로 평가되었습니다 (논의는 섹션 II-C 참조). 이 작업에서는 소수의 프롬프트를 통해 대상 블랙 박스 모델의 역전을 통해 이러한 모델에 의해 생성 될 수있는 특정 보안 취약점을 자동으로 찾는 접근법을 제안합니다.
C. 코드 생성 모델의 보안 취약성 문제
대형 언어 코드 생성 모델은 광대 한 오픈 소스 코드 데이터를 사용하여 미리 훈련되었습니다. [7],,, [5],,, [25]. 이러한 오픈 소스 코드에는 메모리 안전 위반을 포함하여 다양한 보안 취약점 문제가 포함될 수 있습니다. [26]더 이상 사용되지 않은 API 및 알고리즘 (예 : MD5 해시 알고리즘 [27],,, [15]) 또는 SQL 주입 및 크로스 사이트 스크립팅 [28],,, [15] 취약성. 대형 언어 모델은 이러한 보안 패턴을 배우고 사용자의 입력이 주어지면 취약한 코드를 생성 할 수 있습니다. 최근에 Pearce et al. [15] 그리고 Siddiq와 Santos [28] 코드 생성 모델을 사용한 생성 된 코드에는 다양한 보안 문제가 포함될 수 있습니다.
Pearce et al. [15] 수동으로 설계된 시나리오 세트를 사용하여 Github Copilot의 잠재적 보안 취약성 문제를 조사하십시오. [9]. 이 시나리오는 제한된 취약한 코드 세트를 사용하여 선별됩니다. 각 시나리오에는 잠재적으로 취약한 코드의 처음 몇 줄이 포함되어 있으며 모델은 시나리오를 완성하기 위해 쿼리됩니다. 이 시나리오는 Miter의 일반적인 약점 열거 (CWE)를 기반으로 설계되었습니다. [29]. Pearce et al. [15] GitHub CodeQL 정적 분석 도구를 사용하여 생성 된 코드의 취약점을 평가하십시오. 이전 연구 [15],,, [30],,, [28] 코드 생성 모델에서 보안 문제를 조사했지만 수동으로 설계된 제한된 시나리오 세트에 의존하여 특정 취약성 유형으로 잠재적 코드를 생성 할 수 있습니다. 대조적으로, 우리의 작업은 다양한 시나리오를 규모로 자동 생성하여 보안 취약점을 찾는 체계적인 접근법을 제안합니다. 이를 통해 보안 문제로 코드를 생성하는 것과 관련하여 모델을 평가하고 비교하기위한 다양한 비 안전한 프롬프트 세트를 만들 수 있습니다.
D. 모델 역전 및 데이터 추출
딥 모델 반전이 모델 설명에 적용되었습니다 [31]모델 증류 [32]보다 일반적으로 개인 교육 데이터를 재구성하는 것입니다 [33],,, [34],,, [35],,, [36]. 모델 역전의 일반적인 목표는 모델의 출력에 따라 입력 데이터의 대표적인보기를 재구성하는 것입니다. [34]. 최근 Carlini et al. [37] 큰 언어 모델에서 암기 된 데이터를 추출 할 수 있음을 보여주었습니다. 이 데이터에는 이메일, URL 및 전화 번호와 같은 개인 정보가 포함됩니다. 이 작업에서 우리는 타겟팅 된 블랙 박스 코드 모델의 역전을 근사하기 위해 소수의 프롬프트를 사용합니다. 여기서 우리의 목표는 모델의 근사한 반전을 사용하여 모델이 특정 유형의 취약성을 갖는 코드를 생성하도록하는 시나리오 (프롬프트)를 자동으로 찾는 것입니다.
III. 기술적 배경
배포 전에 소프트웨어 버그를 감지하면 잠재적 인 피해와 예측할 수없는 비용을 방지 할 수 있습니다. 그러나 코드에서 보안 크리티컬 버그를 자동으로 찾는 것은 실제로 어려운 작업입니다. 여기에는 특히 블랙 박스 특성과 그러한 모델의 복잡성을 고려할 때 모델 생성 코드도 포함됩니다. 다음에서는 코드 취약점에 대한 최근의 분석 방법 및 분류 체계에 대해 자세히 설명합니다.
A. 보안 문제 평가
다양한 보안 테스트 방법을 사용하여 배포 된 시스템의 런타임 중에 버그를 피하기 위해 소프트웨어 취약점을 찾을 수 있습니다. [38],,, [39],,, [40]. 이 목표를 달성하기 위해 이러한 방법은 다양한 종류의 프로그래밍 오류, 열악한 코딩 스타일, 감가 상각 된 기능 또는 잠재적 메모리 안전 위반 (예 : 배포 후 악용 또는 불가피한 암호화 체계에 대한 불안정한 메모리에 대한 무단 액세스를 감지하려고 시도합니다. [41],,, [42],,, [26]). 광범위하게 말하면 소프트웨어의 보안 평가를위한 현재 방법은
두 가지 범주로 나뉩니다 : 정적 [38],,, [43] 동적 분석 [44],,, [45]. 정적 분석은 잠재적 인 취약점을 찾기 위해 주어진 프로그램의 코드를 평가하지만 후자의 접근 방식은 코드를 실행합니다. 예를 들어, 퍼즈 테스트 (퍼지)는 버그를 트리거하기 위해 임의의 프로그램 실행을 생성합니다.
우리의 작업의 목적을 위해, 우리는 정적 분석을 사용하여 생성 된 코드를 평가하여 감지 된 취약점의 유형을 분류 할 수 있으므로 선택합니다. 특히, 우리는 Github에서 출시 된 가장 성능이 좋은 무료 정적 분석 엔진 중 하나 인 CodeQL을 사용합니다. [46]. 언어 모델 생성 코드를 분석하기 위해 CodeQL을 통해 코드를 쿼리하여 코드에서 보안 취약점을 찾습니다. 우리는 CodeQL의 CWE 분류 출력을 사용하여 평가 중에 발견 된 취약성 유형을 분류 하고이 작업 전체에서 추가로 조사하는 취약점 세트를 정의합니다.
B. 보안 약점 분류
일반적인 약점 열거 (CWES) Miter가 제공하는 소프트웨어 및 하드웨어의 일반적인 결함 목록입니다. [29]종종 특정 취약성 예제가 있습니다. 총 400 개가 넘는 400 개 이상의 다른 CWE 유형이 정의되고 다른 클래스 및 변형, 예를 들어 메모리 손상 오류로 분류됩니다. Listing 1은 파이썬에서 CWE-502 (신뢰할 수없는 데이터의 사막화)의 예를 보여줍니다. 이 예에서 [29]피클 라이브러리는 데이터를 사로화하는 데 사용됩니다. 코드는 데이터를 구문 분석하고 토큰 검증을 기반으로 사용자를 인증하려고하지만 들어오는 데이터를 확인하지 않습니다. 잠재적 인 공격자는 새로운 프로세스를 생성하는 피클을 구성 할 수 있으며 피클은 물체가 피할 수없는 방법에 대한 프로세스를 정의 할 수 있으므로 공격자는 unceficle 프로세스를 호출하도록 지시 할 수 있습니다. 하위 프로세스 모듈 및 실행 /빈 /SH.
우리의 작업을 위해, 우리는 정적 분석 도구를 통해 감지 될 수있는 13 명의 대표 CWE의 분석에 중점을 두어 취약한 코드와 입력 프롬프트를 체계적으로 생성 할 수 있음을 보여줍니다. 우리는 근본 원인 분석에 의해 부과되는 잠재적으로 높은 계산 비용과 수동 노력으로 인해 취약성 탐지에 퍼지를 사용하지 않기로 결정했습니다. 일부 CWE는 단순한 코드 냄새를 나타내거나 개발 및 배포 프로세스를 고려해야 하므로이 작업의 범위를 벗어납니다. 간단한 설명을 포함하여 13 개의 분석 된 CWE는 13 개의 CWES의 표 1에 나열되어 있으며, 11 개는 가장 중요한 취약점의 상위 25 개 목록에서 나온 것입니다. 설명은 Miter에 의해 정의됩니다 [29].
저자 :
(1) Hossein Hajipour, CISPA Helmholtz 정보 보안 센터 ([email protected]);
(2) CISPA Helmholtz 정보 보안 센터 Keno Hassler ([email protected]);
(3) Cispa Helmholtz 정보 보안 센터 Thorsten Holz ([email protected]);
(4) Lea Schonherr, CISPA Helmholtz 정보 보안 센터 ([email protected]);
(5) Cispa Helmholtz 정보 보안 센터 마리오 프리츠[email protected]).
Post Comment