Solidity: Denegación Por Límite De Gas#
Los ataques por denegación de servicio no necesariamente son “ataques”, pueden ocurrir debido a malas implementaciones por parte del desarrollador del contrato.
DoS por límite de gas#
Al realizar una llamada desde nuestro contrato a otro, siempre es buena práctica configurar el uso del gas para esa transacción. Pero si configuramos una baja cantidad de gas, podemos bloquear nosotros mismos el contrato, ya que la cantidad de gas asignado nunca, o en muchas ocasiones, permitirá la finalización de la llamada.
(bool sent, ) = addr.call{value: amount, gas: 100}("");
require(sent, "Ha ocurrido un error en la llamada externa.")
DoS por bloques completos#
Otro tipo de ataque DoS son aquellos que no permiten que las transacciones de los usuarios normales se completen. Un atacante puede congestionar la red con cientos de transacciones con comisiones altas para que sean más tentadoras para los mineros. De esta forma, los mismos ignorarán las transacciones de otros usuarios y estas demorarán en completarse.
Este DoS suele ocurrir con contratos con incentivos muy interesantes y que suelen estar disponibles por muy breves períodos de tiempo. Por ejemplo, una subasta. Se subasta a través de un contrato un producto súper interesante y a bajo precio. Los atacantes pujan por el mismo y bombardean la red para que, en el lapso de tiempo que dura la subasta, nadie pueda sobrepujar la oferta actual.
Conclusión#
Los ataques por denegación de servicio existen en blockchain y son un problema que debes contemplar a la hora de diseñar tus contratos y programar las reglas de negocio.
Post creado en colaboración con el Curso de Seguridad de Smart Contracts de Platzi.