대형 언어 모델(Large Language Models, LMs)이 코드 생성에 사용될 때 발생할 수 있는 보안 문제를 해결하기 위한 모델
두 가지 목표
1. introduce security hardening in order to enhance LM's ability to generate secure code: 보안 강화
2. explore the potential of degrading LMs' security level from an adversarial perspective: 적대적 테스트
controlled code generation
- 프롬프트 외의 바이너리 함께 주입
- 해당 바이너리가 코드가 안전한지 확인
- sentiment, toxity
Challenges
- Modularity
LLM 모델 크기가 크다보니 학습을 반복하는 것은 큰 비용을 수반.
따라서 분리된 모듈을 이용하여 보안적인 통제 할 수 있도록 함.
적은 양의 데이터를 학습시키기에 적합
- Functional Correctness vs. Security Control
기능상 문제가 없는 코드는 유지되어야 함.
Security hardening & adversarial testing 두 가지 만족하는 모델
- Ensuring High-quality Training Data
SVEN
LM의 가중치를 수정하지 않고 보안 속성을 조절할 수 있는 경량 모듈형 제어 기법
연속 prefix vectors
- LM의 입력에 특수한 연속 벡터를 삽입
해당 prefix는 보안 속성에 따라 상이(SVEN_sec, SVEN_vul)
- Transformer 내부의 attention 매커니즘을 통해 코드 생성 전반에 영향
-> LM의 본래 파라미터 수정 없이 그대로 사용
SVEN: Interference, Training, and data
- 기존 LMs의 가중치 건드리지 않고 새로운 연속 벡터를 추가해 모델 제어
- 보안 속성에 따라 새로운 prefix vectors(연속 벡터)를 활용
학습 방식
세 가지 손실 함수
- Conditional Language Modeling Loss(LLM)
변경된 코드 영역(mask=1)에 보안 속성을 반영
- Constrastive loss(LCT)
SVEN_sec은 보안 코드/SVEN_vul은 취약한 코드 생성
반대 속성(prefix)이 해당 코드를 생성하지 못하도록 학습
- KL Divergence Loss (LKL)
변경되지 않은 영역(mask=0)은 원래 모델과 동일하게 유지
-> SVEN은 코드 내 변경된 지역만 타겟팅
데이터셋
- 9개의 주요 CWE 취약점 범주에 대해 수작업으로 1,696개 프로그램(803쌍) 수집
- CorssVul, Big-Vul, VUDENC 데이터셋에서 시작해 정재
SVEN:Use cases
GHCP 비교
| 항목 | GHCP | SVEN |
|---|
| 동작 방식 | 코드 생성 후 필터링 | 코드 생성 중 제어 |
| 적용 시점 | 후처리(Post-generation) | 추론 시점(Interference) |
| 지원 CWE | CWE-089, CWE-022, CWE-798(3개) | 최근 9개 주요 CWE |
| 오픈 여부 | 비공개 | 오픈 소스 |
적대적 테스트(Adverserial Testing)
- LM이 보안 취약한 코드를 생성하도록 유도
- 모델의 보안성 시험 및 취약점 파악 목적
실험