eth-sri / securify2

Securify v2.0
Apache License 2.0
586 stars 136 forks source link

Can not analyze smart contract due to Souffle #9

Open HNYuuu opened 4 years ago

HNYuuu commented 4 years ago

I have configured successfully for all the prerequisite, when I entered

python securify

I can get:

usage: securify contract.sol [opts]
securify: error: the following arguments are required: contract

But when I tried to analyze a simple smart contract with reentrancy vulnerability, I got the error:

Environment variable LD_LIBRARY_PATH not set. Setting it up...
pragma directive defines a prior version to 0.6.7. Changing pragma version to 0.6.7....
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "securify/__main__.py", line 286, in <module>
    main()
  File "securify/__main__.py", line 272, in main
    severity_exc=args.exclude_severity)
  File "securify/__main__.py", line 15, in get_list_of_patterns
    pattern_classes = discover_patterns()
  File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/analyses/analysis.py", line 123, in discover_patterns
    patterns.update(c.get())
  File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/analyses/patterns/static/static_analysis_patterns.py", line 16, in get
    patterns = cls.__list_static_patterns()
  File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/analyses/patterns/static/static_analysis_patterns.py", line 23, in __list_static_patterns
    patterns = static_analysis.discover_patterns()
  File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/static_analysis.py", line 69, in discover_patterns
    souffle_kwargs=kw_args_souffle)
  File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/souffle/souffle.py", line 62, in run_souffle
    **(souffle_kwargs or {}))
  File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/souffle/wrapper.py", line 119, in souffle_wrapper
    stderr_data=codecs.decode(stderrdata),
securify.staticanalysis.souffle.exceptions.SouffleError: Error during souffle execution:

cannot open file /Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/souffle_analysis/analysis.dl

I have tried souffle from 1.6.2 to 1.7.2, none of them can settle this thing down. Could you please help me with this problem, thank you!

YannisSach commented 4 years ago

Unfortunately, I haven't been able to reproduce your error. It seems like securify is looking for the datalog file in the wrong place. Could you provide more information on the installation process you followed?

What message do you get when you execute the following commands in the securify2 directory?

pip install -r requirements.txt
pip install -e .
securify <solidity-source>.sol
HNYuuu commented 4 years ago

I followed your instructions. The first and second lines execute successfully. However, when I try to run the third line, I got this error:

Environment variable LD_LIBRARY_PATH not set. Setting it up...
pragma directive defines a prior version to 0.6.7. Changing pragma version to 0.6.7....
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "securify/__main__.py", line 286, in <module>
    main()
  File "securify/__main__.py", line 272, in main
    severity_exc=args.exclude_severity)
  File "securify/__main__.py", line 15, in get_list_of_patterns
    pattern_classes = discover_patterns()
  File "/Users/ningyu/securify2/securify2-github/securify/analyses/analysis.py", line 123, in discover_patterns
    patterns.update(c.get())
  File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 16, in get
    patterns = cls.__list_static_patterns()
  File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 23, in __list_static_patterns
    patterns = static_analysis.discover_patterns()
  File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/static_analysis.py", line 69, in discover_patterns
    souffle_kwargs=kw_args_souffle)
  File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/souffle.py", line 62, in run_souffle
    **(souffle_kwargs or {}))
  File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/wrapper.py", line 119, in souffle_wrapper
    stderr_data=codecs.decode(stderrdata),
securify.staticanalysis.souffle.exceptions.SouffleError: Error during souffle execution:

This installation of Souffle does not support concurrent jobs.
libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion

It seems like I have another problem with Souffle. Moreover, when I type souffle in command line, I got this version information:

----------------------------------------------------------------------------
Version: 1.7.0
----------------------------------------------------------------------------
Copyright (c) 2016-18 The Souffle Developers.
Copyright (c) 2013-16 Oracle and/or its affiliates.
All rights reserved.
YannisSach commented 4 years ago

It seems like the problem is related to the souffle binary. Have you tried souffle 1.6.2 instead after following my instructions?

HNYuuu commented 4 years ago

I have reinstalled the souffle 1.6.2, I still got an error:

Environment variable LD_LIBRARY_PATH not set. Setting it up...
pragma directive defines a prior version to 0.6.7. Changing pragma version to 0.6.7....
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "securify/__main__.py", line 286, in <module>
    main()
  File "securify/__main__.py", line 272, in main
    severity_exc=args.exclude_severity)
  File "securify/__main__.py", line 15, in get_list_of_patterns
    pattern_classes = discover_patterns()
  File "/Users/ningyu/securify2/securify2-github/securify/analyses/analysis.py", line 123, in discover_patterns
    patterns.update(c.get())
  File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 16, in get
    patterns = cls.__list_static_patterns()
  File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 23, in __list_static_patterns
    patterns = static_analysis.discover_patterns()
  File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/static_analysis.py", line 69, in discover_patterns
    souffle_kwargs=kw_args_souffle)
  File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/souffle.py", line 62, in run_souffle
    **(souffle_kwargs or {}))
  File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/wrapper.py", line 119, in souffle_wrapper
    stderr_data=codecs.decode(stderrdata),
securify.staticanalysis.souffle.exceptions.SouffleError: Error during souffle execution:

Warning: OpenMP is not enabled
libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion

I dont know if it is related to MacOS, maybe I should compile it on linux? Could you please tell me what is your testing operating system and its version? Maybe I should install a virtual machine

YannisSach commented 4 years ago

It is probably related to MacOS as you mentioned. I would recommend you to try to compile it in a virtual machine with ubuntu 18.04 or use Docker instead.