关于Caracal
Caracal是一款功能强大的Starknet智能合约静态分析工具,广大安全研究人员或区块链技术人员可以使用该工具来对Starknet智能合约执行静态分析。
功能介绍
1、提供了检测工具,支持检测存在安全漏洞的Cairo代码; 2、提供了输出打印工具,支持输出和报告检测到的信息; 3、支持进行污染分析; 4、数据流分析框架; 5、支持在Scarb项目中轻松使用和运行;
工具安装
预编译源码
广大研究人员可以直接访问该项目的【Releases页面:https://github.com/crytic/caracal/releases】直接下载预编译的Caracal源码。如果你想要使用Cairo v1.x.x编译器的话,请使用v0.1.x版本的源代码,如果使用的是Cairo v2.x.x编译器的话,请使用v0.2.x版本的源码。
源码构建
首先,广大研究人员需要在本地设备上安装并配置好Rust编译器和Cargo,然后就可以直接使用下列命令从git构建源码了:
代码语言:javascript复制cargo install --git https://github.com/crytic/caracal --profile release --force
(向右滑动,查看更多)
除此之外,我们还可以使用下列命令将该项目源码克隆至本地:
代码语言:javascript复制git clone https://github.com/crytic/caracal
(向右滑动,查看更多)
然后切换到项目目录中,执行下列命令完成项目代码构建:
代码语言:javascript复制cd caracal
cargo install --path . --profile release --force
(向右滑动,查看更多)
工具使用
查看检测工具:
代码语言:javascript复制caracal detectors
查看输出打印工具:
代码语言:javascript复制caracal printers
独立文件使用
如需使用独立的Cario文件,你需要有一个本地Cairo编译器代码。下列命令可以运行检测工具:
代码语言:javascript复制
代码语言:javascript复制caracal detect path/file/to/analyze
caracal detect path/file/to/analyze --corelib path/to/corelib/src
代码语言:javascript复制
(向右滑动,查看更多)
运行打印输出工具:
代码语言:javascript复制caracal print path/file/to/analyze --printer printer_to_use --corelib path/to/corelib/src
(向右滑动,查看更多)
Cairo项目
如果的Cairo项目中有多个文件跟合约,你可能需要使用--contract-path来指定目标合约。下列命令可以运行检测工具:
代码语言:javascript复制
代码语言:javascript复制caracal detect path/to/dir
caracal detect path/to/dir --contract-path token::myerc20::... token::myerc721::...
代码语言:javascript复制(向右滑动,查看更多)
运行打印输出工具:
代码语言:javascript复制caracal print path/to/dir --printer printer_to_use
(向右滑动,查看更多)
Scarb
如果你的项目使用了Scarb,你则需要将下列内容添加到Scarb.toml中:
代码语言:javascript复制[[target.starknet-contract]]
sierra = true
[cairo]
sierra-replace-ids = true
然后将Scarb.toml文件所在目录的路径在运行检测工具时使用参数传递给Caracal:
代码语言:javascript复制caracal detect path/to/dir
运行打印输出工具:
代码语言:javascript复制caracal print path/to/dir --printer printer_to_use
(向右滑动,查看更多)
检测工具
编号 | 检测器 | 影响 | Cairo版本 |
---|---|---|---|
1 | controlled-library-call | 高 | 1 & 2 |
2 | unchecked-l1-handler-from | 高 | 1 & 2 |
3 | felt252-unsafe-arithmetic | 中 | 1 & 2 |
4 | reentrancy | 中 | 1 & 2 |
5 | read-only-reentrancy | 中 | 1 & 2 |
6 | unused-events | 中 | 1 & 2 |
7 | unused-return | 中 | 1 & 2 |
8 | unenforced-view | 中 | 1 |
9 | unused-arguments | 低 | 1 & 2 |
10 | reentrancy-benign | 低 | 1 & 2 |
11 | reentrancy-events | 低 | 1 & 2 |
12 | dead-code | 低 | 1 & 2 |
13 | array-use-after-pop-front | 低 | 1 & 2 |
其中的Cario版本列表示检测器支持的Cario编译器版本。
输出打印工具
cfg:将每一个函数的CFG导出至一个.dot文件中; callgraph:将函数调用图导出至一个.dot文件中;
许可证协议
本项目的开发与发布遵循AGPL-3.0开源许可证协议。
项目地址
Caracal:https://github.com/crytic/caracal