APR (Automated Program Repair) 개요

  • 정의: 소프트웨어의 버그나 취약점을 자동으로 수정하는 기술임
  • 5단계 과정:
    1. 오류 탐지: 테스트에서 실패한 케이스를 발견함
    2. 오류 위치 식별: 결함이 의심되는 코드 라인을 찾아냄
    3. 패치 생성: 각 라인에 대해 여러 패치 후보를 자동으로 만듦
    4. 패치 검증: 테스트를 다시 실행해 성공하는 패치 후보(plausible patch)를 확인함
    5. 패치 선택: 품질 점수를 비교해 최종 패치를 채택하고 코드베이스에 병합함

APR 기술 유형

  • 템플릿 기반 (PAR):
    • 사용자 입력이 들어가는 곳에 미리 만들어진 코드 템플릿을 적용해 패치를 생성함
    • 예시: if, null 체크, 길이 제한 등 보안에 취약한 부분을 자동으로 보강하는 코드를 추가함
  • 유전 알고리즘 기반 (GenProg):
    • 버그 패치를 진화적 탐색 문제로 보고, 자연 선택처럼 점점 더 나은 패치 후보를 진화시켜 최적의 패치를 찾음
  • LLM 기반 (Codex):
    • Codex처럼 코딩에 특화된 LLM을 활용함
    • 원본 코드와 실패 로그를 입력(prompt)으로 주어 버그를 수정한 코드를 생성하게 함

LLM 기반 취약점 탐지의 한계

  • 정확도 저하: 코드 줄 수(LoC)가 증가할수록 취약점 탐지 정확도가 떨어지는 현상이 발생함
  • Lost in the middle 현상: 코드의 앞과 뒤 정보는 잘 기억하지만, 중간 부분의 내용을 놓치는 경향이 있음
  • 노이즈 및 다양성 부족: 주석이나 불필요한 코드 등으로 인해 환각(hallucination)이 발생할 수 있으며, 다양한 프로그래밍 언어에 대한 학습 패턴이 부족함

0개의 댓글