Assessing Vulnerability in Smart Contracts: The Role of Code Complexity Metrics in Security Analysis
Diese Forschung zeigt, dass während einzelne Software-Komplexitätsmetriken eine geringe Korrelation mit spezifischen Schwachstellen in Solidity-Smart-Contracts aufweisen, deren kollektive Analyse effektiv zwischen sicherem und verwundbarem Code unterscheidet, wobei verwundbare Verträge konsistent höhere mittlere Komplexitätswerte aufweisen.
Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen
Stellen Sie sich einen Smart Contract wie einen vollautomatischen Verkaufsautomaten vor, der auf einer Blockchain aufgebaut ist. Sobald Sie Geld einwerfen und einen Knopf drücken, gibt er Ihnen automatisch einen Snack aus. Sie können die internen Zahnräder der Maschine im Nachhinein nicht mehr ändern; sie ist „unveränderlich“ (immutable). Wenn es einen Fehler in den Zahnrädern gibt, kann ein Hacker das gesamte Geld darin stehlen, und es gibt keine Möglichkeit, dies zu beheben, ohne eine völlig neue Maschine zu bauen.
In dieser Arbeit geht es darum, diese defekten Zahnräder zu finden, bevor der Verkaufsautomat eingesetzt wird. Die Forscher stellten eine einfache Frage: „Können wir feststellen, ob ein Verkaufsautomat wahrscheinlich defekt ist, indem wir uns lediglich ansehen, wie kompliziert seine Baupläne sind?“
Hier ist die Aufschlüsselung ihrer Ergebnisse unter Verwendung alltäglicher Analogien:
1. Die Kernidee: Komplexität ist ein „Warnsignal“
Die Forscher untersuchten 21 verschiedene Wege, um zu messen, wie „unordentlich“ oder „kompliziert“ ein Stück Code ist. Denken Sie bei diesen Metriken an Dinge wie:
- SLOC (Source Lines of Code): Wie viele Seiten hat die Bedienungsanleitung?
- Nesting (Verschachtelung): Wie viele Schichten von „Wenn dies, dann das“-Boxen liegen ineinander? (Wie bei einer russischen Matroschka-Puppe).
- Coupling (Kopplung): Wie viele andere Maschinen muss diese eine Maschine kontaktieren, um zu funktionieren?
Das Ergebnis: Sie fanden heraus, dass unordentliche Baupläne meistens auch defekte Maschinen bedeuten.
Als sie sich die Verträge ansah, die gehackt worden waren (vulnerabel), waren deren Baupläne fast immer komplexer, länger und verwinkelter als die Baupläne für sichere Verträge.
2. Das „Kristallkugel“-Problem (Einzelne Metriken)
Die Forscher versuchten zu sehen, ob eine spezifische Messgröße einen Hack vorhersagen konnte.
- Analogie: Stellen Sie sich vor, Sie versuchen zu erraten, ob ein Auto einen Unfall bauen wird, indem Sie nur nach der Anzahl der Getränkehalter schauen.
- Ergebnis: Es funktionierte nicht gut. Keine einzelne Metrik (wie etwa nur das Zählen der Codezeilen) war eine perfekte „Kristallkugel“. Wenn man sich nur die Anzahl der Zeilen ansah, konnte man nicht zuverlässig sagen: „Dieser hier wird definitiv gehackt werden.“ Die Verbindung war vorhanden, aber sie war schwach.
3. Der Erfolg durch „Teamarbeit“ (Kombinierte Metriken)
Wenn sie jedoch alle Messgrößen zusammen betrachteten, wurde das Bild sehr klar.
- Analogie: Man kann eine Suppe nicht feststellen, ob sie salzig ist, indem man nur den Salzstreuer probiert, aber wenn man die ganze Schüssel probiert, weiß man genau, wie salzig sie ist.
- Ergebnis: Während eine einzelne Metrik nicht ausreichte, war die Kombination von Metriken sehr gut darin, zwischen sicheren Verträgen und gefährlichen Verträgen zu unterscheiden. Die „vulnerablen“ Verträge hatten konsistent höhere Werte über das gesamte Spektrum hinweg (mehr Zeilen, tiefere Verschachtelung, mehr Verbindungen) im Vergleich zu den sicheren Verträgen.
4. Die überraschenden Ausnahmen
Es gab drei Dinge, die gegen die Regel „mehr Komplexität = mehr Gefahr“ sprachen:
- Kommentare (CLOC): Sichere Verträge hatten mehr Kommentare (Notizen, die vom Programmierer geschrieben wurden, um den Code zu erklären). Vulnerable Verträge hatten weniger.
- Takeaway: Das Schreiben von Notizen auf Ihren Bauplan scheint zu helfen, Ihre Maschine sicher zu halten.
- Nachkommen (NOD): Sichere Verträge hatten mehr „Nachkommen“ (Versionen oder Kind-Verträge). Vulnerable hatten weniger.
- Parameter: Vulnerable Verträge hatten im Durchschnitt tatsächlich etwas weniger Eingaben/Parameter.
5. Was dies für Entwickler bedeutet
Die Arbeit kommt zu dem Schluss, dass Komplexität nicht die Ursache des Hacks ist (wie ein Virus), aber sie ist ein sehr lautes Warnsignal.
- Die Analogie: Wenn Sie ein Haus mit einem Gewirr aus Kabeln, freiliegenden Rohren und einem verwirrenden Grundriss sehen, wissen Sie nicht sicher, ob es Feuer fangen wird, aber Sie wissen, dass es viel wahrscheinlicher ist als bei einem Haus mit ordentlicher, organisierter Verkabelung.
- Der Rat: Entwickler sollten versuchen, ihren Code einfach zu halten. Wenn ein Vertrag zu kompliziert wird, ist das ein Signal, innezuhalten und nach Sicherheitslücken zu suchen. Schreiben Sie außerdem mehr Kommentare; die Daten legen nahe, dass gut dokumentierter Code sicherer ist.
Zusammenfassung
Die Arbeit beweist, dass Komplexität ein starker Indikator für Risiko bei Smart Contracts ist. Man kann sich nicht auf nur eine Zahl verlassen, um einen Hack vorherzusagen, aber wenn man die gesamte „Unordnung“ des Codes betrachtet, kann man die gefährlichen Verträge viel besser erkennen, als wenn man die Komplexität völlig ignorieren würde. Es ist ein Werkzeug, das Auditoren und Entwicklern hilft, zu entscheiden, welche Verträge die genaueste Inspektion benötigen.
Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?
Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.