2018 IEEE Blockchain SmartContracts Security
2018 IEEE Blockchain SmartContracts Security
net/publication/333590995
CITATIONS READS
135 6,549
2 authors, including:
Mariusz Nowostawski
Norwegian University of Science and Technology
130 PUBLICATIONS 1,969 CITATIONS
SEE PROFILE
All content following this page was uploaded by Mariusz Nowostawski on 18 November 2019.
Blockchain
Generating randomness 2-3
Dec is a company focused on security audits, analysis tools Time constrains / Timestamp dependence 1-3
Lack of transactional privacy 1-3
and web development. Recently (November, 2017), they Transaction-ordering dependence 2-3
Untrustworthy data feeds (oracles) 3
released a beta version of their security tool, SmartCheck.
EVM
Immutable bugs/mistakes 3
Ether lost in transfer 3
It automatically checks for vulnerabilities and bad coding Gas costly patterns 1-2
Call to the unknown 3
practises. In addition to that, it highlights the vulnerability Gasless send 3
Exception disorders / Mishandled exceptions / Unchecked-send bug 3
(e.g. line of code), gives an explanation of the vulnera- Type casts 2
bility, and a possible solution to avoid a particular secu- Reentrancy 3
Solidity
Smart
Source (* = https://blog.zeppelin.solutions)
any severe security vulnerability. For that, we decided to use Hacker
Contract
*/ethercamps-hacker-gold-hkg-public-code-audit-b7dd3a2fe43b
smart contracts which were previously audited. We chose Gold (HKG)
ArcadeCity
Zeppelin28 . We have collected 28 audited smart contracts (ARC)
Golem
*/arcade-city-arc-token-audit-9071fa55a4e8
*/golem-network-token-gnt-audit-edfa4a45bc32
in total from Zeppelin, starting from the one audited first, Network
ProjectKudos */ethercamps-projectkudos-public-code-audit-179ee0c6672d
up until the last one (October 23, 2017). We did a manual EtherCamp’s
DSTC
*/ethercamps-decentralized-startup-team-public-code-audit-65f4ce8f838d
check for each security audit to dismiss a smart contract SuperDAO
Promissory
*/draft-superdao-promissory-token-audit-2409e0fe776c
which had one of the following cases: SuperDAO
ConstitutionalDNA
*/draft-superdao-promissory-token-audit-2409e0fe776c
ROSCA */wetrust-rosca-contract-code-audit-928a536c5dd2
• is written in a programming language other than Matchpool
*/matchpool-gup-token-audit-852a70330f2
GUP
Solidity, iEx.ec
*/iex-ec-rlc-token-audit-80abd763709b
RLC
• is identified with severe vulnerabilities from Zep- Cosmos */cosmos-fundraiser-audit-7543a57335a4
Blockchain
pelin, and not updated afterwards, Capital (BCAP)
*/blockchain-capital-token-audit-68e882d14f0
GovernMental (PonziGovernmental)
send
Unchecked-send conducted and the line where the vulnerability is
bug, Call-stack limit
GovernMental simplified sample 0.3.1
Immutable identified is checked manually to verify if it is false
bugs, exception disorder, call-stack limit, unpredictable state
Rubixi
Immutable
bugs, wrong constructor name
positive.
Type
FirePonzi
Parity Multisig 1
casts (intentional scam)
Unintended The other approach in regards to accuracy is the false
function exposure
Parity Multisig 2 - Suicide Function called
Unintended negative assessment. This is done through the vulnerable
function exposure
Parity Multisig 3- Suicide Function called
Unintended
function exposure
contracts that have at least one vulnerability. If the tools
GoodFellas
Typo
(wrong constructor name)
state that they are able to identify a specific vulnerability
StackyGame
Typo
(wrong constructor name)
and they fail to do so, it is considered a false negative. The
Contract
DynamicPyramid
that does not refund results obtained from this experiment have two possibilities
Contract
GreedPit
that does not refund
Contract
of failure:
NanoPyramid
that does not refund
Tomeka
Contract
that does not refund
• False Positive when the tool identifies a vulnera-
Double3
Allows
the contract owner to withdraw all the funds bility in an audited smart contract, and the manual
Allows
TheGame
the contract owner to withdraw all the funds inspection does not confirm it.
Call-stack
ProtectTheCastle
limit, Withdraw option
Public
• False Negative when the security tool does not find
RockPaperScissors (RPS)
moves
Blockhash
a specific vulnerability in a vulnerable contract.
SmartBillions
bug
Unchecked-send
EtherPot
bug
Timestamp Security Bytecode Solidity
TheRun Method CLI33 WUI34
dependence Tool analysis analysis
Keeping Oyente Symbolic execution X X X X
OddsAndEvents Compiler 0.3.1 Sample
secrets Remix Formal verification X X X X
Keeping F* Framework Formal verification X X X X
OddsAndEvents Compiler 0.4.2 Sample
secrets
Gasper Symbolic execution X X N/A N/A
TABLE 4. V ULNERABLE S MART C ONTRACTS C OLLECTION Securify Formal verification X X X X
Simple
Heuristics X X X X
Analysis35
SmartCheck N/A X X X X
Imandra
Formal verification N/A - paid access
Contracts
Concolic
the security tools and the methodology are themselves prone Mythril
testing (symbolic execution)
X X X X