Caso práctico: ciberseguridad

Clase 10 de 11Curso de Casos de Uso de Smart Contracts

Resumen

Los contratos inteligentes también pueden ser utilizados para llevar un registro de eventos o alertas importantes de un sistema principal. El primer paso de cualquier sistema de seguridad informática es llevar un registro de lo que está pasando para luego poder hacer un análisis de dichos registros.

Blockchain como log de eventos

A través de un contrato inteligente, se podría crear un log de eventos, accesos, errores y demás información que sucede en un sistema tradicional.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Event {

    // Eventos de creación de nuevo evento y alerta
    event newEventCreated(string _event);
    event newAlertCreated(address node, string message, Risk risk);

    // Estructura de las alertas
    struct Alert {
        string message;
        Risk risk;
        address node;
    }

    // Nivel de riesgo de una alerta
    enum Risk {
        HIGH,
        MEDIUM,
        LOW
    }

    // Array de alertas importantes
    Alert[] public alerts;

    // Mapping de eventos por cuenta
    mapping(address => mapping(uint256 => string)) public events;

    // Mapping para llevar un control de la cantidad de eventos por cuenta
    mapping(address => uint256) public eventsCounter;

    // Límite de eventos por cuenta y owner del contrato
    uint256 public threshold;
    address private owner;

    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner can execute this function");
        _;
    }

    constructor(uint256 _threshold) {
        threshold = _threshold;
        owner = msg.sender;
    }

    // Incrementar o decrementar el límite de eventos a guardar por cuenta
    function setThreshold(uint256 _threshold) public onlyOwner {
        threshold = _threshold;
    }

    // Crear nuevo evento
    function createEvent(string memory _event) public returns (bool success) {
        uint256 eventId = eventsCounter[msg.sender] + 1;
        if (eventId > threshold) {
            eventId = 1;
        }
        eventsCounter[msg.sender] = eventId;
        events[msg.sender][eventId] = _event;
        emit newEventCreated(_event);
        success = true;
    }

    // Crear nueva alerta importante
    function createAlert(Risk risk, string memory message) public returns (bool success) {
        alerts.push(Alert(message, risk, msg.sender));
        emit newAlertCreated(msg.sender, message, risk);
        success = true;
    }
}

La lógica del contrato podría dividirse entre eventos recurrentes y alertas más relevantes con diferentes niveles de riesgo. La acumulación hace que un equipo de seguridad informática tenga que estar pendiente de posibles ataques y tener la seguridad de que la información que están analizando es íntegra y confiable gracias a Blockchain.

Observabilidad de registros

El objetivo es poder analizar el comportamiento de los usuarios en búsqueda de ataques o comportamiento fuera de lo normal. Tecnologías como Elasticsearch u otras herramientas de monitoreo permiten obtener datos incluso de una Blockchain para llevar un análisis en tiempo real de lo que sucede en el sistema.

Así es como Blockchain hace sus aportes a la seguridad informática y permite tener un registro de eventos inmutable y confiable para analizar qué sucede en un sistema y anticipar posibles ataques.


Contribución creada por: Kevin Fiorentino.