Revive^cc
revive^CC - это статический инструмент анализа для интеллектуальных контрактов с гиперлледжером (цепной код), направленный на выявление уязвимостей безопасности, связанных с блокчейном, чтобы помочь разработчикам писать чистые и безопасные интеллектуальные контракты. revive^CC является одним из двух существующих инструментов статического анализа для цепного кода Fabric Hyperledger, причем другим инструментом является сканер цепного кода цепного кода, который может анализировать файлы цепных кодов, которые соответствуют определенным требованиям. Что делает revive^CC Special, так это то, что инструмент привнес доступ к анализу безопасности в любой файл цепного кода . Это то, что не было доступно до сих пор.
Инструмент представляет собой расширение инструмента Resecure Go Static Analysis Revive и был построен с использованием структуры Revive. Поэтому он содержит все преимущества и проверки Revive, чтобы помочь разработчикам писать код чистого хода. revive^CC был построен как часть моего диссертационного проекта по «анализе умных контрактов» в Университете Шеффилда.
Установка
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
Использование
$ 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

Использование $ Revive в каталоге
Производительность

Чтобы оценить производительность Revive^CC, были обнаружены различные файлы цепных кодов реальных дел, каждый из которых содержал уязвимости. В общей сложности 20 файлов общедоступных цепных кодов были получены для оценки из репозитории GitHub. Все эти файлы были проверены, и были зарегистрированы следующие уязвимости. Затем производительность сравнивалась со сканером цепного кода цепей, который мог проверить только 13 из 20 файлов. В целом, Revive^CC смог обнаружить больше уязвимостей (обратите внимание, так как Revive^CC может обнаружить более истинные позитивы, что также обнаруживает немного больше ложных срабатываний).
Обнаруживаемые уязвимости
Импорт цепного кода с черным списком

Пример уязвимости импорта цепного кода в черном списке в цепном коде
Импорт определенных библиотек может привести к отсутствию консенсуса между сверстниками. Это связано с тем, что определенные библиотеки позволят общаться с внешним миром, предоставить доступ к файлу и даже ввести неэтерминированное поведение в цепное код. Все это может привести к непоследовательным вычислениям между сверстниками, ведущими к отсутствию консенсуса. Одна библиотека с черным списком - библиотека «Время». Эта библиотека позволяет коллегам получать текущую временную метку в данный момент времени, однако маловероятно, что каждый коллеги создаст одну и ту же временную метку во время транзакции, что приводит к несоответствиям между сверстниками. Это может привести к нетерминированному поведению между сверстниками, что приведет к непоследовательным вычислениям.
Глобальные государственные переменные

Пример уязвимости переменных глобальных состояний в цепном коде
Глобальные переменные являются только глобальными для одного сверстника, поскольку глобальные переменные не отслеживаются в бухгалтерской книге. Никогда не обязательно выполнят каждую транзакцию, и, поскольку сфера сферы глобальной переменной ограничена одним сверстником, их государства могут расходиться. Никакие данные, которые читаются или написаны, не должны зависеть от этих переменных глобального состояния, поскольку это может привести к вычислению с различными наборами чтения и записи. Это неспособное вычисление приведет к отсутствию консенсуса между сверстниками, и, следовательно, все транзакции будут отмечены как недействительные.
Goroutines

Пример уязвимости Goroutines в цепном коде
Goroutines вводят параллелизм в цепно -код. Который может привести к нетерминированному поведению. Это может привести к непоследовательным вычислению между сверстниками из -за того, что коллеги не вычисляют одинаковые наборы чтения и записи. Это приведет к отсутствию консенсуса между сверстниками в сети, что приводит к тому, что все транзакции отмечены как недействительные. Поэтому очень отчасти в использовании goroutines.
Призрачное чтение книги

Пример считываемого чтения уязвимости Ledger в цепном коде
Получение данных из бухгалтерской книги с использованием GethistoryOfKey или GetQueryResult не передает контроль версий системы. Это означает, что данные, полученные с использованием этих методов, не должны использоваться для написания каких -либо новых данных или обновления данных в бухгалтерской книге. Это может привести к неожиданному поведению, которое может повлиять на выполнение транзакций и привести к непреднамеренным результатам.
Диапазон над картой

Пример диапазона уязвимости карты в цепном коде
Ключевое слово диапазона позволяет возможность итерации через каждый элемент в различных структурах данных в Go. Однако, когда диапазон применяется к карте, порядок итерации будет рандомизирован в GO. Это означает, что использование диапазона для итерации через элементы карты не является детерминированным, поскольку порядок итерации может меняться между каждым выполнением. Поэтому вычисления между сверстниками не будут последовательными, и для коллег по сети не будет достижения консенсуса.
Читать после записи

Пример чтения после уязвимости записи в цепном коде
Для того, чтобы вступить в силу «Запись в бухгалтерскую книгу», сначала транзакция должна быть совершена и записана в бухгалтерскую книгу. До тех пор значение, которое было записано, сохранит свое старое значение. Это означает, что чтение этого значения из бухгалтерской книги просто вернет старое значение, которое, вероятно, не то, что задумано цепным кодом. Это приведет к неожиданному поведению, которое может повлиять на выполнение транзакций и привести к непреднамеренным результатам.
Лицензия
Грань