首页 > 其他分享 >符号执行manticore工具演练之发现缓冲区溢出漏洞

符号执行manticore工具演练之发现缓冲区溢出漏洞

时间:2023-12-18 22:13:59浏览次数:30  
标签:paused 下溢 符号执行 漏洞 缓冲区 manticore public

符号执行之manticore工具演练

参考资料:SANS SEC 554
https://docs.soliditylang.org/en/v0.8.0/
ziion虚拟机:区块链智能合约中的kali(ziion涵盖演练中所以提及到的工具)

  • 动静态之分

IDA是静态分析工具,常用于检测脆弱性;manticore是动态分析工具,常用于编写漏洞利用(符号执行:即执行动态的二进制),毕竟要证明危害性嘛,所以动态执行并验证结果。

  • 演练目标
    • 使用符号执行来查找安全漏洞。
    • 使用manticore 对可利用的合约进行分析。
    • 识别基于算术的漏洞。
    • 了解manticore 符号执行运行的输出文件。

第一步
创建 Solidity 文件,文件后缀名 test.sol 源码如下:

pragma solidity ^0.4.26;

contract Ownership{
    address owner = msg.sender;
    function Owner() public{
        owner = msg.sender;
    }
    modifier isOwner(){
        require(owner == msg.sender);
        _;  }}
contract Pausable is Ownership{
    bool is_paused;
    modifier ifNotPaused(){
        require(!is_paused);
        _;  }
    function paused() isOwner public{
        is_paused = true;   }
    function resume() isOwner public{
        is_paused = false;  }}
contract SEC554_CoinBank is Pausable{
    mapping(address => uint) public balances;
    function transfer(address to, uint value) ifNotPaused public{
        balances[msg.sender] -= value;
        balances[to] += value;
    }

第二步

设置编译器版本(代码第一行有版本号)
sudo solc-select 0.4.26

第三步

运行符号执行
运行 manticore 时,请确保选择开关 --txlimit 1 和 --limit-loops,否则测试将运行很长时间(或者可能永远不会完成)(这一点在B站上的UP主:甜品专家 《南京大学《软件分析》课程》中有只言片语的描述 )
结果类似于下图,并且可能需要几分钟才能完成。
image


第四步

分析 Manticore 的发现
完成后,查看检测到的漏洞。结果在以 mcore_ 开头的文件夹中
image
看一下 manticore 创建的文件。符号执行有许多输出文件,显示日志、摘要、跟踪和结果。

打开global.findings文件查看汇总结果

Manticore 发现了多个漏洞,其中包括几个整数溢出漏洞。

Balances[to] += 和balances[to] -= 的代码段会产生算术漏洞。

image

  • 整数溢出/上溢/下溢(算术攻击)

缓冲区溢出,算术运算达到类型的最大(上溢)或最小(下溢)值时,就会发生整数上溢或下溢。比如一个数字是uint8类型存储,那么它存储的范围是0到2^8-1的8位无符号数。超过范围即漏洞。
使用安全数学库代替各种运算符(例如加法、减法和乘法),OpenZeppelin 的安全数学库是避免上溢/下溢漏洞的当前技术。
使用数学库代替标准运算符,例如加法、减法和乘法。 请注意,不包括除法,因为 EVM 不允许除以 0。

标签:paused,下溢,符号执行,漏洞,缓冲区,manticore,public
From: https://www.cnblogs.com/sec875/p/17912421.html

相关文章

  • 通过VS地址擦除系统定位缓冲区溢出问题
    VS2019增加了一个名为“地址擦除系统”的功能,默认是关闭的,可以在项目“属性”-“c/c++”-"常规"中开启。在开启地址擦除系统”功能时,将调试信息格式设置为“程序数据库”。如下图:如果没有该项,检查VS2019的版本是否低于16.9,并且在安装项中是否安装“C++AddressSanitizer”。如下......
  • DMA-BUF缓冲区共享和同步【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/dma-buf.html#DMA-BUF缓冲区共享和同步DMA-BUF子系统提供了一个框架,用于在多个设备驱动程序和子系统之间共享硬件(DMA)访问的缓冲区,并用于同步异步硬件访问。例如,drm的“prime”多GPU支持就使用了这个框架,但当然不仅限于GPU的......
  • 循环缓冲区 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/circular-buffers.html循环缓冲区作者[email protected]@linux.ibm.comLinux提供了许多功能,可用于实现循环缓冲区。有两组这样的功能:用于确定2的幂大小缓冲区信息的便利函数。......
  • 环形缓冲区FIFO
    -------------------------------------------------------------------------------------------------------------------------------------最近学习一个LwRB开源环形缓冲区FIFO设计,即先入先出缓冲区。LwRB是一个开源、通用环形缓冲区库。  1、只有单个任务写和单个任务......
  • 华为云WebAssembly代码静态符号执行技术实现新突破
    本文分享自华为云社区《华为云WebAssembly代码静态符号执行技术实现新突破,相关论文被软件工程顶会ISSTA2023接收并荣获杰出论文奖》,作者:华为云软件分析Lab。WebAssembly(Wasm)最初由W3C的Mozilla、谷歌、微软、苹果等著名公司合作研发,最初是作为浏览器内应用程序的高性能执行引擎......
  • 第十二章 块设备I/O和缓冲区管理
    第十二章块设备I/O和缓冲区管理块设备I/O缓冲区I/O缓冲的基本原理:文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的磁盘块时。它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓冲区存在并且包含有效数据、那么它只需从缓冲区中读取数据、而......
  • 第十一周Linux教材第十二章学习笔记——块设备I/O和缓冲区管理
    块设备I/O和缓冲区管理本章讨论了块设备1/O和缓冲区管理;解释了块设备1/O的原理和T/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之处;还利用信号量设计了新的缓冲区管理算法,以提高1/O缓冲区的缓存效率和性能;表明了简单的PV算法易于实现,缓存效果好,不存在死锁和饥饿问题;还......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结 块设备I/O和缓冲区处理
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • chapter 12: 块设备 I/O 和缓冲区管理
    学习笔记摘要本章深入研究了区块设备I/O和缓冲管理,重点介绍了原则、I/O缓冲的优势以及Unix缓冲管理算法的不足之处。提出使用信号量设计更高效的缓冲管理算法,介绍了PV算法作为示例。还提供了一个编程项目,用于比较Unix的缓冲管理算法和PV算法,有助于理解文件系统的I/O......
  • c#移动控制台的缓冲区
    使用C#中的Console.MoveBufferArea方法来移动控制台的缓冲区。控制台缓冲区是一个用于存储控制台输出的内存区域。通过移动缓冲区,我们可以在控制台上创建自定义的输出布局控制台缓冲区:控制台缓冲区是一个二维字符数组,用于存储控制台输出的字符。它的大小由控制台的宽度和高度决......