🔍 SECURITY AUDITING: Caza de Vulnerabilidades

Slither, Mythril, Echidna ” las herramientas que usan los mejores auditores del mundo

Semana 9: Security Auditing
ReentrancyInteger OverflowSlitherMythrilEchidna Fuzzing
🔍 Auditar = ser el ladrón antes que el ladrón: Los auditores de smart contracts piensan como atacantes. El DAO Hack (2016, $60M), el Ronin Bridge hack (2022, $625M), el Poly Network hack (2021, $611M) ” todos eran vulnerabilidades que una buena auditoría habría detectado. Slither analiza el AST del código en segundos. Mythril hace análisis simbólico buscando rutas de ejecución maliciosas. Echidna hace fuzzing de propiedades invariantes. Ninguna herramienta lo detecta todo ” necesitas las tres.
📚 Refs: Trail of Bits ” Slither/Echidna · ConsenSys Diligence ” Mythril · Rekt.news ” Top Hacks Database
Vulnerabilidades
Slither
Mythril
Echidna

Top Vulnerabilidades de Smart Contracts

Selecciona una vulnerabilidad para ver el ejemplo de código

Slither ” Análisis Estático

Slither analiza el código en segundos sin ejecutarlo. Detecta ~80 tipos de bugs comunes.
$ slither --version
Slither 0.10.0

Mythril ” Análisis Simbólico

# Mythril analiza rutas de ejecución simbólicamente
# Detecta: reentrancy, integer overflow, unprotected selfdestruct
$ myth analyze VulnerableBank.sol

==== Reentrancy =====
SWC ID: 107
Severity: High
Contract: VulnerableBank
Function name: withdraw(uint256)
PC address: 0x4a2

Description:
External call to user-supplied address followed by state change.
An attacker may cause a reentrant call to VulnerableBank.withdraw().

Initial State:
Account: [ATTACKER] Balance: 1 ETH

Transaction Sequence:
1. VulnerableBank.deposit() value=1 ETH
2. AttackContract.attack()
  Triggers: VulnerableBank.withdraw(1000000000000000000)
  ReEnters: VulnerableBank.withdraw(1000000000000000000) [× 10]
  Drains: 10 ETH total

==== Integer Overflow (no detectado en Solidity 0.8+) ====
SWC ID: 101
Note: SafeMath built-in desde Solidity 0.8.0

Echidna ” Property-Based Fuzzing

// echidna-test.sol ” Propiedades que SIEMPRE deben cumplirse
contract BankTest is VulnerableBank {
  // Echidna buscará inputs que violen esta propiedad
  function echidna_balance_invariant() public view returns (bool) {
    // El balance del contrato nunca debe bajar a 0 si hay depósitos
    return address(this).balance >= totalDeposits;
  }

  function echidna_no_free_money() public view returns (bool) {
    // Nadie puede retirar más de lo que depositó
    return withdrawals[msg.sender] <= deposits[msg.sender];
  }
}

# Ejecutar:
$ echidna BankTest.sol --contract BankTest --config echidna.yaml
# echidna.yaml:
# testLimit: 50000
# seqLen: 100
# shrinkLimit: 5000
🔍 Explora las vulnerabilidades y ejecuta las herramientas de auditoría. ¡Detectar un bug antes del deploy puede salvar millones de dólares!