crytic/optik

GitHub: crytic/optik

Optik 是一套结合符号执行与模糊测试的智能合约安全分析工具,通过 Maat 符号执行器扩展 Echidna 的测试语料库以提升代码覆盖率。

Stars: 99 | Forks: 10

# Optik **Optik** 是一组符号执行工具,旨在辅助智能合约模糊测试器,使其能够在_混合_模式下运行。Optik 将我们的智能合约模糊测试器 [Echidna](https://github.com/crytic/echidna) 与 [Maat](https://github.com/trailofbits/maat) 符号执行器相结合,后者会重放模糊测试语料库,并通过增加覆盖率的新输入对其进行扩展。 #### 当前局限性 Optik 仍在开发中,暂不应用于实际审计。当前的局限性包括: - 不支持符号 `KECCAK` 哈希 - 尚不支持 `CREATE2`、`CALLCODE` 和 `DELEGATECALL` - 未考虑 Gas 消耗 - 部分 echidna 选项尚不支持(请参阅 `hybrid-echidna -h`) ## 混合模式 Echidna


Optik 允许 [Echidna](https://github.com/crytic/echidna) 智能合约模糊测试器在_混合_模式下运行。它本质上将 Echidna 与 [Maat](https://github.com/trailofbits/maat) 符号执行器结合使用,后者重放 Echidna 的语料库,并通过增加覆盖率的新输入对其进行扩展。 `hybrid-echidna` 从几个增量种子步骤开始,通过 [Slither](https://github.com/crytic/slither) 的数据流分析获取的短交易序列填充语料库,并更密集地使用符号执行来求解新的输入。序列长度在每个种子步骤中递增。一旦达到特定的长度阈值,`hybrid-echidna` 就会恢复到其正常模式,开始限制要求解的符号输入数量,并停止使用数据流分析来填充语料库。 ### 用法 通过在 Echidna 命令行中将 `echidna-test` 替换为 `hybrid-echidna`,可以无缝地使用混合模式 Echidna 来代替常规 Echidna。 例如: ``` hybrid-echidna MyContract.sol --test-mode assertion --corpus-dir /tmp/test --contract MyContract ``` 混合模式下提供了额外的选项来控制 `hybrid-echidna` 的行为: - `--max-iters`:要执行的最大模糊测试迭代次数(一次迭代即一次 Echidna 活动 + 一次在语料库上运行的符号执行器) - `--solver-timeout`:求解每个可能的新输入所花费的最大时间(毫秒) - `--incremental-threshold`:要执行的初始增量种子步骤的数量 - `--no-incremental`:跳过初始增量种子步骤 - `--cov-mode`:求解新输入时要增加的覆盖类型。大多数覆盖率模式是为实验目的而实现的。除非您正在开发/修改 Optik,否则我们建议保持默认模式 调试、日志记录和终端显示: - `--debug`:向日志输出添加调试信息 - `--logs`:将日志写入给定文件(或 `stdout`) - `--no-display`:禁用图形终端显示 ## 安装 如需快速安装,请运行: ``` python3 -m pip install optik-tools ``` 为了紧跟最新的功能和修复,请从 Optik 的 `master` 分支进行安装: ``` git clone https://github.com/crytic/optik && cd optik python3 -m pip install . ``` 您也可以通过 Docker 运行: ``` git clone https://github.com/crytic/optik && cd optik docker build -t crytic/optik . docker run -it --rm --mount type=bind,source="$(pwd)",target=/workdir crytic/optik # 这会运行 Docker 容器,将本地目录挂载到 /workdir ```
标签:DNS重绑定攻击, Echidna, Maat, Slither, Solidity, Web3安全, 云安全监控, 代码覆盖率, 以太坊, 区块链, 智能合约安全, 混合分析, 混合模糊测试, 符号执行, 请求拦截, 逆向工具, 静态分析