Розробка системи 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 інтеграція + dashboard): 3–5 місяців.
Важливо: система моніторингу сама вимагає security review. Compromise automated pause guardian може використовуватися для DoS атаки. Defense: rate limiting, multisig для unpause, transparency log.
Зв'яжіться з нами, щоб обговорити деталі вашого проекту. Наш досвід — 5 років у безпеці DeFi та 20+ впроваджених систем моніторингу.







