Revive^cc
revive^CC ist ein statisches Analyse -Tool für Hyperledger Fabric Smart Contracts (ChainCode), mit dem Blockchain -bezogene Sicherheitslücken erfasst werden sollen, um Entwicklern dabei zu helfen, saubere und sichere Smart Contracts zu schreiben. revive^CC ist eines der beiden vorhandenen statischen Analyse -Tools für Hyperledger Fabric Chaincode. Was revive^CC besonders macht, ist, dass das Tool die Zugänglichkeit der Sicherheitsanalyse in jede Kettencode -Datei gebracht hat. Dies ist bisher nicht verfügbar.
Das Tool ist eine Erweiterung des Open Source GO -statischen Analyse -Tools Revive und wurde mit dem Framework von Revive erstellt. Daher enthält es alle Vorteile und Überprüfungen von Revive, um Entwicklern beim Schreiben von Clean Go -Code zu helfen. revive^CC wurde als Teil meines Dissertationsprojekts zur Analyse von Smart Contracts an der Universität von Sheffield gebaut.
Installation
1. Place folder in the your $GOPATH/src/github.com/youraccount
2. Go into directory sivachokkapu/revive-cc
3. $ make install
4. $ make build
5. Move the revive file into $GOPATH/bin
6. You should now be able to use revive commands
Verwendung
$ revive {chaincodefilename.go} - will analyse the file
$ revive -formatter stylish {chaincodefilename.go} - better output format
$ revive - on a directory will analyse all files if from the same package

Verwenden von $ revive in einem Verzeichnis
Leistung

Um die Leistung von Revive^CC zu bewerten, wurden eine Vielzahl von realen Fallkettencode -Dateien gefunden, die jeweils Schwachstellen enthielten. Insgesamt wurden 20 öffentliche Kettencode -Dateien zur Bewertung aus Github -Repositories erhalten. Alle diese Dateien wurden verifiziert und die folgenden Schwachstellen gemeldet. Die Leistung wurde dann mit dem Chaincode -Scanner von Chainsecurity verglichen, der nur 13 der 20 Dateien überprüfen konnte. Insgesamt konnte Revive^CC mehr Schwachstellen erkennen (bitte beachten Sie, dass Revive^cc in der Lage ist, mehr echte Positive zu erkennen, die auch etwas mehr falsch positive Ergebnisse erkannt werden).
Erkennbare Schwachstellen
Blacklisted ChainCode Importe

Beispiel für die schwarze Liste ChainCode importieren Sie Verwundbarkeit in ChainCode
Der Import bestimmter Bibliotheken kann zu einem mangelnden Konsens zwischen Gleichaltrigen führen. Dies liegt daran, dass bestimmte Bibliotheken die Kommunikation mit der externen Welt ermöglichen, den Zugriff auf Datei zu gewähren und sogar ein nicht deterministisches Verhalten in ChainCode einführen können. Diese können alle zu inkonsistenten Berechnungen zwischen Gleichaltrigen führen, die zu einem Mangel an Konsens führen. Eine Blacklist -Bibliothek ist die "Zeit" -Bibliothek. Diese Bibliothek ermöglicht es Gleichaltrigen, den aktuellen Zeitstempel zu einem bestimmten Zeitpunkt zu erhalten. Es ist jedoch unwahrscheinlich, dass jeder Peer während einer Transaktion denselben Zeitstempel erstellt, der zu Diskrepanzen zwischen Gleichaltrigen führt. Dies kann zu nicht deterministischem Verhalten zwischen Gleichaltrigen führen, was zu inkonsistenten Berechnungen führt.
Globale Staatsvariablen

Beispiel für die globale staatliche variable Verwundbarkeit in ChainCode
Globale Variablen sind nur global für einen einzelnen Peer, da globale Variablen im Hauptbuch nicht verfolgt werden. Kein Peer wird notwendigerweise jede Transaktion ausführen, und da der Umfang der globalen Variablen auf einen einzelnen Peer beschränkt ist, können ihre Zustände abweichen. Keine Daten, die gelesen oder geschrieben werden, sollten von diesen globalen Zustandsvariablen abhängen, da dies zu einer Berechnung mit unterschiedlichen Lese- und Schreibsätzen führen kann. Diese nicht konsistente Berechnung führt zu einem mangelnden Konsens zwischen Gleichaltrigen und daher werden alle Transaktionen als ungültig markiert.
Goroutinen

Beispiel für Goroutines Schwachstellen in ChainCode
Goroutines bringen Parallelität in ChainCode ein. Was dann ein nicht deterministisches Verhalten bewirken kann. Dies kann zu einer inkonsistenten Berechnung zwischen Gleichaltrigen führen, da Kollegen nicht die gleichen Les- und Schreibsätze berechnen. Dies führt zu einem mangelnden Konsens zwischen Gleichaltrigen im Netzwerk, was dazu führt, dass alle Transaktionen als ungültig markiert werden. Daher ist es sehr entmutigt, Goroutinen zu verwenden.
Phantom -Lesen des Hauptbuchs

Beispiel für das Phantom -Lesen der Ledger -Verwundbarkeit in ChainCode
Das Erhalten von Daten aus dem Hauptbuch mit GethistoryOfkey oder GetQueryResult übergeben die Versionsversionskontrolle des Systems nicht. Dies bedeutet, dass Daten, die mit diesen Methoden abgerufen wurden, nicht zum Schreiben neuer Daten oder zum Aktualisieren von Daten in das Ledger verwendet werden sollten. Dies könnte zu unerwartetem Verhalten führen, das die Ausführung von Transaktionen beeinflussen und unbeabsichtigte Ergebnisse verursachen kann.
Reichweite über Karte

Beispiel für die Reichweite über der Kartenanfälligkeit in ChainCode
Das Schlüsselwort der Reichweite ermöglicht die Möglichkeit, in verschiedenen Datenstrukturen in GO durch jedes Element zu iterieren. Wenn jedoch die Reichweite auf eine Karte angewendet wird, wird die Iterationsreihenfolge in GO randomisiert. Dies bedeutet, dass die Verwendung von Reichweiten zur IT -IT -IT -Elementen einer Karte nicht deterministisch ist, da sich die Reihenfolge der Iteration zwischen jeder Ausführung ändern kann. Daher ist die Berechnung zwischen Gleichaltrigen nicht konsistent und es ist für Peers des Netzwerks unmöglich, Konsens zu erreichen.
Lesen Sie nach dem Schreiben

Beispiel für das Lesen nach Schreibfälligkeit in ChainCode
Damit eine Schreibschreiung in die Ledger -Erklärung wirksam werden kann, muss die Transaktion zunächst in das Hauptbuch verschrieben und geschrieben werden. Bis dahin wird der Wert, der geschrieben wurde, seinen alten Wert behalten. Dies bedeutet, dass das Lesen dieses Wertes aus dem Hauptbuch nur den alten Wert zurückgibt, der wahrscheinlich nicht das ist, was vom ChainCode beabsichtigt ist. Dies führt zu einem unerwarteten Verhalten, das die Ausführung von Transaktionen beeinflussen und unbeabsichtigte Ergebnisse verursacht.
Lizenz
MIT