자동 완성된 스마트 계약 코드에서 취약점을 효율적으로 회피하기 위한 취약점 제약 디코딩 방법

코드 자동 완성은 개발자가 코딩 속도를 크게 향상시킬 수 있게 해줍니다. 최근 트랜스포머 기반 대규모 언어 모델(LLM) 기술의 발전은 코드 합성에 적용되고 있습니다. 그러나 여러 연구에서 이러한 방식으로 생성된 코드의 많은 부분이 취약점을 포함하고 있음을 밝혀냈습니다. 본 연구에서는 이러한 모델이 생성하는 취약 코드의 양을 줄이기 위해 새로운 취약점 제약 디코딩 방법을 제안합니다. 작은 규모의 취약 코드 라인을 레이블링한 데이터셋을 사용하여, LLM을 미세 조정(fine-tuning)함으로써 코드 생성 시 취약성 레이블을 포함하도록 합니다. 이는 내장된 분류기와 같은 역할을 합니다. 이후 디코딩 과정에서 해당 레이블을 생성하지 못하도록 제한함으로써 취약 코드 생성을 방지합니다. 평가를 위해 스마트 계약(Smart Contract, SC)의 보안 요구사항이 매우 엄격한 이더리움 블록체인 스마트 계약의 자동 완성을 사례로 선정하였습니다. 먼저, 2,217,692개의 이더리움 SC 중 중복을 제거한 186,397개를 사용하여 60억 파라미터 규모의 GPT-J 모델을 미세 조정하였습니다. 이 과정은 10개의 GPU를 사용해 일주일 이상 소요되었습니다. 결과적으로 미세 조정된 모델은 평균 BLEU(BiLingual Evaluation Understudy) 점수가 0.557인 스마트 계약을 합성할 수 있음을 확인하였습니다. 그러나 자동 완성된 계약 내에서 여전히 많은 코드가 취약성을 포함하고 있었습니다. 다양한 유형의 취약성을 포함한 176개의 스마트 계약에서 취약 라인 이전의 코드를 기반으로 자동 완성 시도한 결과, 자동 완성된 코드의 70% 이상이 보안상 불안정한 것으로 나타났습니다. 따라서 본 연구는 동일한 취약 유형을 포함한 추가 941개의 취약 스마트 계약을 활용하여 모델을 다시 미세 조정하고, 취약점 제약 디코딩 기법을 적용하였습니다. 이 미세 조정 과정은 4개의 GPU를 사용해 단 1시간이 소요되었습니다. 다시 176개의 스마트 계약에 대해 자동 완성을 수행한 결과, 제안한 방법은 생성될 코드 중 62%를 취약하다고 식별하고, 그 중 67%를 생성하지 않도록 방지할 수 있음을 확인하였습니다. 이는 본 방법이 자동 완성된 코드 내에서 취약성을 효율적이고 효과적으로 회피할 수 있음을 입증합니다.