revivre ^ cc
revive^CC est un outil d'analyse statique pour les contrats intelligents de tissu Hyperledger (Chaincode) visant à détecter les vulnérabilités de sécurité liées à la blockchain pour aider les développeurs à rédiger des contrats intelligents propres et sûrs. revive^CC est l'un des deux outils d'analyse statique existants pour Hyperledger Fabric Code Code, l'autre outil étant le scanner de code Chainsecurity de Chainsecurity qui peut analyser les fichiers de code Chain qui répondent à certaines exigences. Ce qui rend revive^CC spécial, c'est que l'outil a apporté l'accessibilité de l'analyse de sécurité à n'importe quel fichier de code Chain . C'est quelque chose qui n'a pas été disponible jusqu'à présent.
L'outil est une extension de l'outil d'Open Source Go Static Analysis REVIVE et a été construit à l'aide du cadre de Revive. Par conséquent, il contient tous les avantages et vérifications de Revive pour aider les développeurs à rédiger un code de rendez-vous propre. revive^CC a été construit dans le cadre de mon projet de thèse sur «Analyser les contrats intelligents» à l'Université de Sheffield.
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
Usage
$ 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

Utilisation de $ ravive sur un répertoire
Performance

Pour évaluer les performances de Revive ^ CC, une variété de fichiers de code de chaîne de cas réels ont été trouvés qui contenaient chacun des vulnérabilités. Au total, 20 fichiers de codes de chaîne publique ont été obtenus pour l'évaluation des référentiels GitHub. Tous ces fichiers ont été vérifiés et les vulnérabilités suivantes ont été signalées. Les performances ont ensuite été comparées au scanner de code ChainSecurity de Chainsecurity qui n'a pu vérifier que 13 des 20 fichiers. Dans l'ensemble, Revive ^ cc a pu détecter plus de vulnérabilités (veuillez noter que REAVIVE ^ CC est capable de détecter plus de vraies positifs, il détecte également un peu plus de faux positifs).
Vulnérabilités détectables
Importations de code de chaîne sur liste noire

Exemple de vulnérabilité d'importation de code de chaîne sur liste noire dans le code-chaîne
L'importation de certaines bibliothèques peut entraîner un manque de consensus entre les pairs. En effet, certaines bibliothèques permettront une communication avec le monde extérieur, accorder un accès au fichier et peuvent même introduire un comportement non déterministe dans Chain Code. Ceux-ci peuvent tous conduire à un calcul incohérent entre les pairs conduisant à un manque de consensus. Une bibliothèque sur liste noire est la bibliothèque «Time». Cette bibliothèque permet aux pairs d'obtenir l'horodatage actuel à un moment donné, cependant, il est peu probable que chaque pair crée le même horodatage lors d'une transaction conduisant à des écarts entre les pairs. Cela peut entraîner un comportement non déterministe entre les pairs, conduisant à un calcul incohérent.
Variables d'état mondial

Exemple de vulnérabilité variable de l'état global dans Chain Code
Les variables globales ne sont mondiales qu'à un seul pair car les variables globales ne sont pas suivies sur le grand livre. Not Peer exécutera nécessairement chaque transaction et comme la portée de la variable globale est limitée à un seul pair, leurs États peuvent diverger. Aucune donnée qui est lue ou écrite ne devrait dépendre de ces variables d'état global car cela peut conduire à un calcul avec différents ensembles de lecture et d'écriture. Ce calcul non cohérent entraînera un manque de consensus entre les pairs et, par conséquent, toutes les transactions seront marquées comme invalides.
Goroutins

Exemple de vulnérabilité des Goroutines dans Chain Code
Les Goroutines introduisent la concurrence dans le code de chaîne. Ce qui peut ensuite provoquer un comportement non déterministe. Cela peut conduire à un calcul incohérent entre les pairs en raison de ses pairs ne calculant pas les mêmes ensembles de lecture et d'écriture. Cela entraînera un manque de consensus entre les pairs du réseau conduisant à toutes les transactions marquées comme invalides. Par conséquent, il est très découragé d'utiliser des goroutines.
Phantom Lire du grand livre

Exemple de lecture fantôme de la vulnérabilité du grand livre dans Chain Code
L'obtention des données du grand livre à l'aide de GethistoryOfkey ou GetQueryResult ne passent pas le contrôle de versioning du système. Cela signifie que les données récupérées à l'aide de ces méthodes ne doivent pas être utilisées pour écrire de nouvelles données ou mettre à jour des données sur le grand livre. Cela pourrait conduire à un comportement inattendu qui peut affecter l'exécution des transactions et provoquer des résultats involontaires.
Plage sur la carte

Exemple de plage sur la vulnérabilité de la carte dans Chain Code
Le mot-clé Range permet de parcourir chaque élément dans diverses structures de données en Go. Cependant, lorsque la plage est appliquée à une carte, l'ordre d'itération sera randomisé dans GO. Cela signifie que l'utilisation de la plage pour parcourir les éléments d'une carte n'est pas déterministe car l'ordre d'itération peut changer entre chaque exécution. Par conséquent, le calcul entre les pairs ne sera pas cohérent et il sera impossible pour les pairs du réseau d'atteindre le consensus.
Lire après avoir écrit

Exemple de lecture après l'écriture de vulnérabilité dans Chain Code
Pour qu'une déclaration d'écriture à Ledger prenne effet, la transaction doit d'abord être engagée et écrite au grand livre. Jusque-là, la valeur qui a été écrite conservera sa vieille valeur. Ce qui signifie que la lecture de cette valeur du grand livre ne rendra que l'ancienne valeur qui n'est probablement pas ce qui est prévu par le code de chaîne. Cela conduira à un comportement inattendu qui peut affecter l'exécution des transactions et provoquer des résultats involontaires.
Licence
Mit