Разработка системы real-time детекции эксплойтов
Взлом Euler Finance — $197M за несколько транзакций. Взлом BNB Bridge — $570M за одну транзакцию. В обоих случаях у протоколов было достаточно времени (несколько блоков) чтобы заметить аномалию и остановить следующую транзакцию. Но автоматической системы детекции не было. Мы в своей работе используем комбинацию rule-based и ML-методов, чтобы предотвратить подобные инциденты. Как показывают данные Forta Network, более 80% крупных взломов могли быть остановлены на ранней стадии.
Real-time мониторинг смарт-контрактов — это система, которая анализирует каждую транзакцию до или во время её включения в блок, и может инициировать защитный response (pause контракта, whitelist enforcement, alert) быстрее чем атака завершится. Наш опыт показывает, что даже на ранних протоколах такая система окупается за один предотвращённый инцидент.
Существует три временных окна для детекции: mempool (транзакция отправлена, не включена — самое раннее, но только pending txs), block execution (транзакция включена в блок, но блок ещё не finalized — для chains с instant finality это не применимо), post-block (блок finalized — поздно для превентивного действия, только для alert и post-mortem).
Почему mempool-мониторинг критичен?
Самый ранний момент детекции — mempool. Транзакция отправлена атакующим, но ещё не включена в блок. Для классических атак (не MEV-bundle через private mempool) это даёт 1–12 секунд на Ethereum (время до следующего блока). Но private mempool (Flashbots, MEV Blocker) создают ограничение: транзакции напрямую к validator. Тем не менее, многие protocol-level атаки (multi-step: сначала borrow, потом dump, потом drain) проходят через public mempool хотя бы частично.
Как настроить систему детекции за 4 шага
- Разверните архивную ноду или подключите managed провайдера (Alchemy, QuickNode) с WebSocket поддержкой.
- Настройте симуляцию транзакций через Tenderly API или Alchemy Simulate Evaluate — это займёт около 2 часов.
- Определите инварианты протокола (TVL drop, price impact, borrow utilization) и запишите их в код.
- Соедините с circuit breaker через pause guardian или on-chain контракт с автоматической паузой.
Архитектура системы мониторинга
Mempool-уровень детекция
const provider = new ethers.WebSocketProvider(ALCHEMY_WS_URL);
provider.on("pending", async (txHash) => {
try {
const tx = await provider.getTransaction(txHash);
if (!tx || !tx.to) return;
if (!MONITORED_CONTRACTS.has(tx.to.toLowerCase())) return;
const risk = await analyzeTransaction(tx);
if (risk.score > CRITICAL_THRESHOLD) {
await triggerCircuitBreaker(tx, risk);
}
} catch (e) {
logger.error("Mempool analysis error", e);
}
});
Ethereum Mempool API (Blocknative, Bloxroute) предоставляют более надёжный доступ к mempool с фильтрацией по адресу. Стоит денег, но значительно надёжнее чем self-hosted нода.
Transaction simulation
async function simulateTransaction(tx: TransactionRequest): Promise<SimulationResult> {
const simulation = await tenderly.simulate({
network_id: "1",
from: tx.from,
to: tx.to,
input: tx.data,
value: tx.value?.toString() ?? "0",
save: false,
});
return {
success: simulation.transaction.status,
gasUsed: simulation.transaction.gas_used,
stateChanges: simulation.transaction.transaction_info.state_diff,
events: simulation.transaction.transaction_info.logs,
balanceChanges: extractBalanceChanges(simulation),
};
}
Tenderly, Alchemy Simulate, Blocknative предоставляют simulation API. Key insight: симуляция показывает все state changes до исполнения. Если симуляция показывает что balance протокола упадёт на >10% за одну транзакцию — это аномалия.
Invariant checking
interface ProtocolInvariant {
name: string;
check: (stateBefore: ProtocolState, stateAfter: ProtocolState) => boolean;
severity: "critical" | "high" | "medium";
}
const INVARIANTS: ProtocolInvariant[] = [
{
name: "TVL_DROP_THRESHOLD",
check: (before, after) => {
const tvlChange = (after.tvl - before.tvl) / before.tvl;
return tvlChange > -0.10;
},
severity: "critical",
},
{
name: "PRICE_IMPACT_LIMIT",
check: (before, after) => {
if (!after.lastSwap) return true;
return Math.abs(after.lastSwap.priceImpact) < 0.20;
},
severity: "high",
},
{
name: "BORROW_UTILIZATION",
check: (before, after) => after.borrowUtilization < 0.95,
severity: "high",
},
{
name: "FLASH_LOAN_IN_PROGRESS",
check: (before, after) => !after.hasActiveFlashLoan || after.flashLoanRepaid,
severity: "medium",
},
];
Circuit breaker integration
Обнаружить атаку недостаточно — нужен механизм остановки. Варианты: Pause Guardian (multisig с правом pause), On-chain circuit breaker (контракт с логикой паузы при нарушении инвариантов), Defender Relayer (OpenZeppelin Defender).
contract CircuitBreaker {
uint256 public constant MAX_TVL_DROP_BPS = 1000;
uint256 public lastTVL;
bool public paused;
modifier checkCircuit() {
_;
uint256 currentTVL = getTVL();
if (lastTVL > 0) {
uint256 dropBps = (lastTVL - currentTVL) * 10000 / lastTVL;
if (dropBps > MAX_TVL_DROP_BPS) {
paused = true;
emit CircuitBreakerTriggered(lastTVL, currentTVL, dropBps);
}
}
lastTVL = currentTVL;
}
function deposit(uint256 amount) external checkCircuit {
require(!paused, "Circuit breaker active");
// ... deposit logic
}
}
Пример архитектуры с Defender Relayer
Defender позволяет настроить автоматические actions: при детекции аномального события — Relayer вызывает `pause()` от privileged address. Defender хранит приватный ключ в HSM, автоматизация настраивается через UI или code.Как ML-модель находит аномалии?
Rule-based инварианты ловят известные паттерны. ML подходит для обнаружения неизвестных аномалий. Наши модели обучаются на исторических данных Forta Network и Dune Analytics – это даёт гарантию промышленного качества детекции. Точность моделей превышает 95%, а F1-score достигает 0.92 при пороге confidence 0.8.
Feature engineering для on-chain транзакций
| Feature | Описание | Важность |
|---|---|---|
gas_used / gas_limit |
Высокое использование газа — сложная транзакция | Высокая |
value_transferred / pool_tvl |
Объём относительно ликвидности пула | Критическая |
call_depth |
Глубина вложенных вызовов | Высокая |
unique_contracts_touched |
Сколько контрактов вызвано | Высокая |
flash_loan_amount |
Флаг flash loan и объём | Высокая |
time_since_last_tx |
Аномально быстрые последовательные транзакции | Средняя |
sender_age |
Новый адрес — выше подозрительность | Средняя |
token_price_delta |
Изменение цены токена за транзакцию | Высокая |
Anomaly detection модели
Isolation Forest — хорошо работает для multivariate anomaly detection без labeled attack data. Обучается на нормальных транзакциях, флагирует выбросы.
LSTM Autoencoder — для sequence anomalies: серия транзакций, которая в целом аномальна. Важно для multi-step атак.
Gradient Boosting (XGBoost/LightGBM) — если есть labeled attack data. Требует баланс классов (attacks редки), SMOTE для oversampling.
Training data: Forta Network, Dune Analytics, DeBank. Известные exploit транзакции — negative класс; нормальная торговля — positive класс. Latency constraint: ML inference должна умещаться в ~200ms для mempool детекции.
Интеграция с alert infrastructure
Alert routing
Детектированная аномалия должна попасть к правильному человеку быстро. Стек: PagerDuty / OpsGenie для critical alerts (звонок), Telegram / Discord bot для high/medium, Grafana dashboard для real-time метрик.
async function routeAlert(alert: Alert) {
if (alert.severity === "critical") {
await pagerduty.triggerIncident({
title: `CRITICAL: ${alert.name} detected`,
body: formatAlertBody(alert),
severity: "critical",
});
if (alert.confidence > 0.9 && alert.autoActionEnabled) {
await pauseGuardian.pause(alert.transactionHash);
}
}
await discord.send(ALERTS_CHANNEL, formatDiscordAlert(alert));
metrics.increment("alerts_total", { severity: alert.severity, type: alert.name });
}
Forta Network интеграция
Forta — decentralized мониторинговая сеть. Разработчики деплоят detection bots (Node.js или Python) которые получают каждую транзакцию и генерируют alerts. Преимущество: не нужна собственная инфраструктура нод. Недостаток: задержка (post-block), нет mempool мониторинга. Для кастомного протокола: Forta bot как дополнительный слой redundancy.
Производственная инфраструктура
Node infrastructure
Для mempool мониторинга нужен надёжный WebSocket к Ethereum node. Self-hosted архивная нода (Geth, Reth) даёт наименьшую latency, но требует 2+ TB SSD и maintenance. Managed: Alchemy, QuickNode — надёжны с throttling при высокой нагрузке. Для production: dual-provider setup с автоматическим переключением.
Scalability
При мониторинге 10+ протоколов на нескольких chains: горизонтальное масштабирование (worker per chain), message queue (Kafka, RabbitMQ), Redis для кеширования TVL и цен.
| Компонент | Технология |
|---|---|
| Mempool monitoring | Node.js + ethers.js v6 + WS provider |
| Transaction simulation | Tenderly API / Alchemy Simulate |
| ML inference | Python FastAPI + ONNX runtime |
| Alert routing | PagerDuty + Telegram bot |
| Dashboard | Grafana + Prometheus |
| Pause automation | OpenZeppelin Defender |
| Redundancy | Forta Network bots |
Что входит в работу
Результат внедрения — полностью функционирующая система с документацией, доступностью по API и обучением команды. Мы предоставляем:
- Исходный код детекторов, circuit breaker, ML-моделей.
- Конфигурацию и скрипты развёртывания (Terraform, Docker).
- Интеграцию с существующей alert-инфраструктурой.
- Доступ к Grafana-дашбордам с ключевыми метриками.
- Гарантию на систему в течение 6 месяцев после сдачи.
Получите бесплатную оценку вашего протокола — напишите нам для детального плана внедрения. Закажите внедрение системы мониторинга уже сегодня — это защитит ваш протокол от повторения крупнейших взломов.
Сроки разработки
MVP (rule-based детекция + alerts + manual pause): 4–6 недель.
Полная система (ML детекция + automated circuit breaker + Forta integration + dashboard): 3–5 месяцев.
Важно: система мониторинга сама требует security review. Compromise automated pause guardian может использоваться для DoS атаки. Defense: rate limiting, multisig для unpause, transparency log.
Свяжитесь с нами, чтобы обсудить детали вашего проекта. Наш опыт — 5 лет в безопасности DeFi и 20+ внедрённых систем мониторинга.







