Effiziente Vermeidung von Schwachstellen im automatisch generierten Smart Contract-Code mittels schwachstellenbeschränkter Decodierung

Die automatische Code-Vervollständigung ermöglicht es Entwicklern, den Entwicklungsprozess erheblich zu beschleunigen. In jüngster Zeit wurden Fortschritte in der Technologie transformerbasierter großer Sprachmodelle (LLM) für die Code-Synthese eingesetzt. Allerdings zeigen Studien, dass viele dieser synthetisierten Codes Sicherheitslücken enthalten. Wir stellen einen neuartigen, vulnerabilities-bedingten Decodieransatz vor, um die Menge an sicherheitskritischen Codeabschnitten, die von solchen Modellen generiert werden, zu reduzieren. Anhand eines kleinen Datensatzes mit annotierten, sicherheitsrelevanten Codezeilen fine-tunen wir ein LLM, sodass es bei der Codegenerierung Sicherheitslabels berücksichtigt – wodurch das Modell als eingebetteter Klassifikator fungiert. Während der Decodierung verhindern wir jedoch, dass das Modell diese Sicherheitslabels generiert, um die Erzeugung sicherheitskritischer Codeabschnitte zu vermeiden. Zur Evaluation wählen wir die automatische Vervollständigung von Smart Contracts (SCs) auf der Ethereum-Blockchain als Fallstudie, da Smart Contracts strenge Sicherheitsanforderungen stellen. Zunächst fine-tunen wir das 6-Milliarden-Parameter-Modell GPT-J anhand von 186.397 Ethereum-SCs, wobei Duplikate aus 2.217.692 SCs entfernt wurden. Der Fine-Tuning-Prozess dauerte mehr als eine Woche bei Nutzung von zehn GPUs. Die Ergebnisse zeigen, dass das fine-tuned Modell Smart Contracts mit einem durchschnittlichen BLEU-Wert (BiLingual Evaluation Understudy) von 0,557 synthetisieren kann. Dennoch enthielten viele der automatisch vervollständigten SCs Sicherheitslücken. Bei der Vervollständigung von 176 SCs unter Verwendung des Codes vor der jeweiligen sicherheitsrelevanten Zeile – die unterschiedliche Arten von Schwachstellen aufwiesen – stellten wir fest, dass mehr als 70 % der automatisch vervollständigten Codes unsicher waren. Daher fine-tunen wir das Modell zusätzlich an weiteren 941 SCs mit denselben Schwachstellenarten und wenden den vulnerabilities-bedingten Decodieransatz an. Der zusätzliche Fine-Tuning dauerte lediglich eine Stunde mit vier GPUs. Anschließend vervollständigen wir die 176 SCs erneut und stellen fest, dass unser Ansatz 62 % der zu generierenden Codeabschnitte als sicherheitskritisch identifizieren und 67 % davon verhindern konnte, generiert zu werden. Dies zeigt, dass der vorgeschlagene Ansatz effizient und wirksam dabei ist, Sicherheitslücken in automatisch vervollständigtem Code zu vermeiden.