Dies ist die Version von Securify ist veraltet und wird nicht mehr unterstützt. Bitte verwenden Sie Versicherung v2.0.

Securify ist ein Sicherheitsscanner für Ethereum Smart Contracts, die von der Ethereum Foundation und Chainecurity unterstützt werden. Die Kernforschung hinter der Versicherung wurde im ICE Center von ETH Zürich durchgeführt.

Es verfügt über eine umfangreiche Liste von Sicherheitsmustern, die häufig in intelligenten Verträgen enthalten sind:
Das Projekt soll eine offene Plattform sein, die Beiträge aller Ethereum -Sicherheitsgemeinschaften begrüßt. Um neue Muster vorzuschlagen, sich freiwillig für das Testen zu melden oder neue Muster zu entwickeln, wenden Sie sich bitte über unsere Discord -Gruppe in Verbindung.
souffle Binary abstürzen. Zum Schreiben ist Soufflé unter Windows nicht verfügbar, daher sollte auch nicht erwartet werden, dass sie unter Windows ausgeführt werden.solc -Binärin ist erforderlich, um die Soliditätsdatei als Eingabe zu verwenden. Securify geht davon aus, dass die richtige Version für die angegebene Datei installiert ist. solc ist hier erhältlich.Zu bauen:
./gradlew jarUm eine Soliditätsdatei zu versichern:
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solVersicherung für die Dekompilierungsausgabe, die durch das Skript pySolc.py (für das PY-SOLC erforderlich ist) bereitgestellt wird:
java -jar build/libs/securify.jar -co out.json Für einige EVM -Binärer (produziertes EG nach solc ) zu verfolgen:
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hexUm die vollständige Liste der Optionen anzuzeigen:
java -jar build/libs/securify.jar -hUm die Tests auszuführen (die JUNIT4 verwenden):
./gradlew test Eine Python -Wrapper hilft, mit solc und truffle umzugehen. Die Anforderungen sind in der Datei der Anforderungen.txt. Die DockerFile kann als Verweis verwendet werden, um Ihre lokale Umgebung für diese Wrapper einzurichten.
Die Installation sollte auf Debianderivaten oder auf einer anderen von Soufflé unterstützten Plattform einfach genug sein.
Für eine kurze Demonstration, die Soufflé nicht erfordert, können Sie Docker verwenden.
Erstellen Sie das Docker -Bild:
docker build . -t securifyRennen Sie auf einem kleinen Beispiel versichern:
docker run securify Sie können die analysierten Dateien ändern, indem Sie ein Volumen für das Mount angeben, und jede enthaltene *.sol
docker run -v $( pwd ) /folder_with_solidity_files:/project securify Das Hinzufügen eines --truffle -Flags sollte es ermöglichen, das TRUFF -Projekt zu verarbeiten, in dem bereits Abhängigkeiten installiert wurden (also führen Sie npm install vor, wenn dies bei Bedarf besteht). Ohne diese Flagge wird das Projekt mit solc zusammengestellt. Fügen Sie eine -h hinzu, um die vollständige Liste der Optionen zu erhalten. Insbesondere, wenn der Benutzer Kompilierungsinformationen von TRUFFL empfangen möchte, sollte er das Flag -v hinzufügen.
Wenn man die JSON -Ausgabe erhalten möchte, unterstützt der Docker ein --json -Flag, das die hübsche Ausgabe unterdrückt und stattdessen JSON zurückgibt. Stellen Sie sicher, dass das -q -Flag hinzugefügt wird, wenn keine Fortschrittsinformationen angezeigt werden sollten, was zu einer reinen JSON -Ausgabe führt. Die Indizes der übereinstimmenden Linien sind 0 basiert, was bedeutet, dass eine Übereinstimmung mit der Zeile i meint, dass die i+1 -TH-Zeile übereinstimmt. Insbesondere hat die erste Zeile einen Index von 0.
Grundlegende Tests von End -to -End -Tests können über die Datei test.py durchgeführt werden:
python3 test . pyDie Anforderungen können mit Pipenv installiert werden:
pipenv install oder mit pip :
pip install -r requirements.txtDiese Tests vergleichen die aktuelle JSON -Ausgabe, die durch Versicherung mit einigen früheren Ausgaben angegeben ist, und melden Unterschiede zwischen den beiden.
Sie können Ihrem Projekt die folgenden .travis.yml hinzufügen, um die Versicherung für neue Commits auszuführen:
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
Dies sollte ermöglichen, dass sich die Versicherung über das TRUFFL -Projekt ausführen kann, in dem bereits Abhängigkeiten installiert wurden (also führen Sie npm install vor, wenn dies bei Bedarf besteht).
Die Ausgabe folgt locker dem Klangstil. Es werden nur Warnungen und Schwachstellen gemeldet. Wenn man auch die Compliance -Informationen erhalten möchte, verwenden Sie bitte das Flag --json im Docker- oder -co -Flag auf der ausführbaren Java -Datei, um alle Analyseinformationen im JSON -Format zu erhalten.
Siehe Beitrag.md.
Schließen Sie sich unserer Zwietracht an, um mit anderen Benutzern zu diskutieren.
Obwohl Versicherung regelmäßig verwendet wird, um Audits bei Chainecurity zu unterstützen, gibt es immer noch Fehler, darunter:
computeBranches ausgelöst. In den meisten Fällen reicht es aus, die Stapelgröße mit der Option -Xss von java , z. B. java -Xss1G -jar ... zu erhöhen.solc erhalten werden kann) werden nicht unterstützt Zu den statisch analysierten den EVM-Code des Smart-Vertrags analysiert, um wichtige semantische Informationen (einschließlich Kontrollflow- und Datenflussfakten) über den Vertrag zu schließen. Dieser Schritt wird mit Soufflé, einem skalierbaren Datalog -Solver, vollständig automatisiert. Verfassen Sie dann die abgeleiteten Tatsachen, um Sicherheitsverstöße zu entdecken oder die Einhaltung sicherheitsrelevanter Anweisungen zu beweisen.
Die vollständigen technischen Details hinter dem Versicherungsscanner sind im Research -Papier verfügbar.