[논문 리뷰] SALLM: Security Assessment of Generated Code
이 논문은 대규모 언어 모델(Large Language Models, LLMs)이 생성한 코드의 보안성을 체계적으로 평가하기 위한 SALLM 프레임워크를 소개한다. Python 프롬프트 기반의 보안 중심 데이터셋, 정적 및 동적 분석(코드QL을 통한)을 활용한 자동화된 평가 파이프라인, 그리고 두 가지 새로운 메트릭인 security@k와 vulnerability@k를 제안하며, GPT-4와 CodeGen-2.5-7B-mono가 다른 모델들보다 보안성이 뛰어난 코드를 생성하는 것으로 밝혀졌다.
With the growing popularity of Large Language Models (LLMs) in software engineers' daily practices, it is important to ensure that the code generated by these tools is not only functionally correct but also free of vulnerabilities. Although LLMs can help developers to be more productive, prior empirical studies have shown that LLMs can generate insecure code. There are two contributing factors to the insecure code generation. First, existing datasets used to evaluate LLMs do not adequately represent genuine software engineering tasks sensitive to security. Instead, they are often based on competitive programming challenges or classroom-type coding tasks. In real-world applications, the code produced is integrated into larger codebases, introducing potential security risks. Second, existing evaluation metrics primarily focus on the functional correctness of the generated code while ignoring security considerations. Therefore, in this paper, we described SALLM, a framework to benchmark LLMs' abilities to generate secure code systematically. This framework has three major components: a novel dataset of security-centric Python prompts, configurable assessment techniques to evaluate the generated code, and novel metrics to evaluate the models' performance from the perspective of secure code generation.
연구 동기 및 목표
- LLM이 생성한 코드의 보안성을 평가하는 데 중점을 둔 벤치마크의 부족 문제를 해결하기 위해.
- 기존 평가 메트릭(예: pass@k, BLEU)이 기능적 정확성보다 보안을 우선시하지 않는다는 점을 규명하기 위해.
- 실제 소프트웨어 공학 환경에서 LLM이 생성한 코드의 보안성을 체계적으로 평가하기 위한 프레임워크를 개발하기 위해.
- 보안성 또는 취약성을 가진 코드를 생성할 확률을 수량화하는 데 사용할 수 있는 새로운 메트릭인 security@k와 vulnerability@k를 도입하기 위해.
- CodeGen-2B-mono, CodeGen-2.5-7B-mono, StarCoder, GPT-3.5, GPT-4 등 여러 LLM의 보안성 코드 생성 능력을 벤치마킹하기 위해.
제안 방법
- 실제 소프트웨어 공학 작업에서 유래한 100개의 보안 중심 Python 프롬프트로 구성된 수작업으로 정제된 데이터셋을 사용한다.
- 정적 및 동적 분석을 통해 CodeQL을 활용해 취약점을 탐지한다. 예를 들어 약한 해시(CWE-328) 및 명령어 삽입(CWE-78)과 같은 취약점.
- 입력(예: HTTP 요청)에서 민감한 연산(예: os.system)으로 이어지는 신뢰할 수 없는 데이터의 흐름을 추적하기 위해 타인팅 추적 기법을 사용한다. 이는 삽입 취약점을 식별하는 데 기여한다.
- 보안성 낮은 API 사용, 특히 약한 암호화 함수 및 불안전한 역직렬화 패턴을 탐지하기 위해 CodeQL 쿼리를 통합한다.
- security@k와 vulnerability@k는 각각 상위-k 생성 코드 샘플 중 보안 검사를 통과한 비율 또는 취약성을 포함한 비율을 측정하여 계산된다.
- 평가 파이프라인은 여러 모델과 프롬프트를 대상으로 LLM 출력의 생성, 분석, 점수 매기기를 자동화한다.

실험 결과
연구 질문
- RQ1기존의 LLM 벤치마크는 실제 보안 민감도가 높은 소프트웨어 공학 작업을 얼마나 잘 반영하고 있는가?
- RQ2pass@k 및 CodeBLEU와 같은 기존 평가 메트릭이 생성된 코드의 보안 취약성을 어떻게 간과하는가?
- RQ3보안 전용 메트릭을 사용할 경우, 다양한 LLM의 보안성 코드 생성 능력은 얼마나 효과적인가?
- RQ4다양한 보안 중심 코드 생성 작업에서 가장 높은 security@k와 가장 낮은 vulnerability@k를 보인 LLM은 무엇인가?
- RQ5CodeQL을 통한 정적 및 동적 분석이 LLM이 생성한 코드의 보안 결함을 신뢰성 있게 탐지할 수 있는가?
주요 결과
- GPT-4는 최고의 security@k 점수 0.68을 기록하여 상위 10개의 생성 코드 샘플 중 68%가 알려진 취약성 없이 통과했다.
- CodeGen-2.5-7B-mono는 security@k가 0.62로 높은 성능을 보이며, 더 작은 모델들과 StarCoder를 능가했다.
- GPT-3.5와 StarCoder는 security@k 점수가 각각 0.45와 0.42로 낮아, 보다 취약한 코드를 생성할 가능성이 높다는 점을 시사한다.
- Vulnerability@k 분석 결과, GPT-3.5와 StarCoder는 상위 10개 출력 중 각각 55%와 58%의 코드에 취약성이 포함되어 있었다.
- 프레임워크는 CodeQL 기반의 타인팅 및 API 분석을 통해 알려진 15개의 취약성 패tern 중 12개를 성공적으로 탐지했으며, 이는 CWE-328(약한 해시) 및 CWE-78(OS 명령어 삽입)를 포함한다.
- 기능적 정확성 메트릭인 pass@k가 보안 품질과 상관이 없다는 점이 확인되었으며, 높은 pass@k 점수를 기록한 모델들 역시 여전히 취약한 코드를 생성했다.

더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.