SlideShare a Scribd company logo
1 of 32
Download to read offline
Классификация экономико-
технических атак
Introductions
About Me:
● Security researcher and auditor
● Co-founder BSU Blockchain and Smart Contracts Lab
● Co-founder BugBounty.Center
● Email:
○ gr.vasilkov@gmail.com
○ g@bugbounty.center
● Telegram: @grvasilkov
● LinkedIn: linkedin.com/in/grigoryvasilkov/
Множество блокчейн платформ с возможностью
имплементации умных контрактов
● Общеизвестные: С++, C#, Java, Go, Solidity,
Kotlin, Rust, Scala, Javascript, Plutus;
● Свои собственные: Michelson, Simvolio и др.
Языки программирования умных контрактов
Ethereum. Solidity example:
Языки программирования умных контрактов
function safeWithdrawal() afterDeadline {
if (!fundingGoalReached) {
uint amount = balanceOf[msg.sender];
balanceOf[msg.sender] = 0;
if (amount > 0) {
if (msg.sender.send(amount)) {
FundTransfer(msg.sender, amount, false);
} else {
balanceOf[msg.sender] = amount;
}
}
}
}
EOS. C++ example:
Языки программирования умных контрактов
auto buyer_account = get_account( highest_bid.buyer.name );
while( highest_bid.at_price >= exchange_ask.at_price ) {
match( highest_bid, buyer_account, exchange_ask, seller_account );
if( highest_bid.quantity == eos_tokens(0) ) {
buyer_account.open_orders--;
save( seller_account );
save( buyer_account );
bids::remove( highest_bid );
if( !bids_by_price::back( highest_bid ) ) {
break;
}
buyer_account = get_account( highest_bid.buyer.name );
} else {
break; // buyer's bid should be filled
}
}
Exonum. Rust example:
Языки программирования умных контрактов
impl Api for CryptocurrencyApi {
fn wire(&self, router: &mut Router) {
let self_ = self.clone();
let self_ = self.clone();
let wallets_info = move |_: &mut Request| ->
IronResult<Response> {
if let Some(wallets) = self_.get_wallets() {
self_.ok_response(&serde_json::to_value(wallets).unwrap())
} else {
self_.not_found_response(
&serde_json::to_value("Wallets database is
empty")
.unwrap(),
)
}
};
Corda. Kotlin example:
Языки программирования умных контрактов
@InitiatingFlow
class FixSignFlow(val tx: TransactionBuilder, val oracle:
Party,
val partialMerkleTx: FilteredTransaction) :
FlowLogic<TransactionSignature>() {
@Suspendable
override fun call(): TransactionSignature {
val oracleSession = initiateFlow(oracle)
val resp =
oracleSession.sendAndReceive<TransactionSignature>(SignRequ
est(partialMerkleTx))
return resp.unwrap { sig ->
check(oracleSession.counterparty.owningKey.isFulfilledBy(li
stOf(sig.by)))
tx.toWireTransaction(serviceHub).checkSignature(sig)
sig
} } }
Hyperledger. Go example:
Языки программирования умных контрактов
func set(stub shim.ChaincodeStubInterface, args []string) (string,
error) {
if len(args) != 2 {
return "", fmt.Errorf("Incorrect arguments. Expecting
a key and a value")
}
err := stub.PutState(args[0], []byte(args[1]))
if err != nil {
return "", fmt.Errorf("Failed to set asset: %s",
args[0])
}
return args[1], nil
}
NEO. C# example:
Языки программирования умных контрактов
private static bool Transfer(string domain, byte[] to)
{
if (!Runtime.CheckWitness(to)) return false;
byte[] from = Storage.Get(Storage.CurrentContext, domain);
if (from == null) return false;
if (!Runtime.CheckWitness(from)) return false;
Storage.Put(Storage.CurrentContext, domain, to);
return true;
}
private static bool Delete(string domain)
{
byte[] owner = Storage.Get(Storage.CurrentContext, domain);
if (owner == null) return false;
if (!Runtime.CheckWitness(owner)) return false;
Storage.Delete(Storage.CurrentContext, domain);
return true;
}
Cardano. Plutus example:
Языки программирования умных контрактов
count : forall a. Tree a -> Nat {
count Leaf = Zero ;
count (Branch _ l r) = Suc (add (count l) (count r))
}
traversal : forall a. Tree a -> List a {
traversal Leaf = Nil ;
traversal (Branch x l r) = Cons x (append (traversal l)
(traversal r))
}
reverse : forall a. Tree a -> Tree a {
reverse Leaf = Leaf ;
reverse (Branch x l r) = Branch x (reverse r) (reverse l)
}
● В публичных блокчейн платформах логика
разработки умного контракта доступна всем
участникам платформы
● Персональные данные, хранимые в умных
контрактах, также доступны всем
участникам платформы
● При получении данных из внешних
централизованных источников, умный
контракт не может явно гарантировать
достоверность этих данных
Проблемы построения безопасной архитектуры
приложений в блокчейне
● Затрагивает движение ценных
криптовалютных единиц
● Разработка требует
экономического мышления
Особенности недостатков безопасности в
блокчейн системах
● Race Conditions
○ Reentrancy
○ Cross-function Race Conditions
○ Pitfalls in Race Condition Solutions
● Transaction-Ordering Dependence (TOD) /
Front Running
● Timestamp Dependence
● Integer Overflow and Underflow
● DoS with (Unexpected) revert
● DoS with Block Gas Limit
● Call Depth Attack
Существующие технические недостатки
безопасности в умных контрактах
Только ли технические недостатки
безопасности актуальны для блокчейн
систем и приложений
Экономико-техническая атака - это совокупность действий
злоумышленника, приводящих к нарушению экономической
стабильности информационной системы. Результатом
успешной атаки может стать искажение пользовательских
данных хранящихся в информационной системе или
искажение экономических показателей.
Экономико-техническая атака
● Системный анализ компонентов;
● Иерархия взаимодействия сложных элементов;
● Иерархическое управление элементами;
● Согласование целей в иерархических элементах;
● Обработка полученной информации;
● Оптимизация потоков информации в задачах
управления;
● Контроль и управление в организационных системах;
● Задачи классификации;
● Комплексная оценка элементов системы;
● Кибернетические модели социальных и экономических
систем.
Основные элементы экономической кибернетики
Классификация экономико-
технических угроз
Необходимо прогнозировать, как может повести себя пользователь,
если ему дать дополнительную экономическую стимуляцию или же
наоборот ввести ограничения. Если в основу логики приложения ляжет
неверная экономическая модель, то приложение может не выполнять
желаемых задач и участники могут понести материальные потери.
Данный класс недостатка безопасности чаще всего проявляется в
следующих моделях проектирования: эмиссия токенов, создание
реферальной программы, интеграция экономик блокчейн-приложения с
фиатной системой и т.п.
1. Несостоятельность экономической модели
приложения
Чаще всего рассматриваются следующие аспекты:
2. Невозможность прогнозирования внешних по
отношению к экономике приложения факторов
● Прогнозирование точного количества участников
приложения, которые будут использовать умный контракт;
● Прогнозирование потребляемого газа при отправке
транзакции;
● Внешние шоки, стимулирующие спрос или снижающие его,
такие как колебания ожиданий сообщества или резкое
изменение новостного фона.
● Стоимость токена по отношению к фиатным валютам
(слишком высокая или слишком низкая), а также резкое
изменение стоимости токена.
Для того чтобы отправить транзакцию, пользователю необходимо
понести дополнительные материальные издержки в виде газа,
даже если активация метода не принесёт никакой прибыли, что
приводит к возрастанию транзакционных издержек в приложении
и уменьшает привлекательность его использования для
пользователей. Поэтому разработчики придумывают различные
экономические стимулы для отправки транзакций.
3. Отсутствие стимулов обращения пользователей
к смарт-контрактам, транзакционные издержки
Некоторые из блокчейн платформ имеют замкнутую
экосистему, обращаются к внешним источникам через
внешних агентов - Оракулов, другие же позволяют это
сделать используя средства самой платформы.
Оракулы, как и любое другое ПО, подвержен рискам
компрометации. Также всегда существует риск подмены
данных на самом внешнем источнике. В таком случае
умный контракт будет считать полученные данные
валидными, что в свою очередь может отразится на работе
приложения.
4. Работа с непроверенными данными
Разрабатывается множество приложений, в которых вовлечена
деятельность сразу множества контрагентов. К таковым
приложениям можно отнести: создание депозитария на основе
блокчейна, развитие микрокредитования, децентрализованные
биржи, обменники, геймификация и т.п.
Во всех этих сущностях необходимо скоординированное
взаимодействие контрагентов приложения. Но т.к. для
реализации заложенного функционала приходится полагаться на
сторонних участников, всегда есть возникновение
преднамеренной или непреднамеренной ошибки, обусловленной
человеческим фактором.
5. Зависимость выполнения работы программы от
других участников
Большинство транзакций, использующихся в умных контрактах, представляют собой открытые
данные. Майнер решает вносить ли отправленную транзакцию в блок рассчитывая различные
метрики, такие как Gas Price и Gas Limit. Также насколько быстро будет принято решение о внесении
транзакции в блок, зависит от того, попадёт ли наша транзакция в Uncles, а также от времени
формирования нового блока. Злоумышленник может воспользоваться промежутком времени
внесения транзакции в блок, чтобы в дальнейшем повлиять на результат выполнения работы
транзакции.
6. Возможность манипуляции порядком исполнения
транзакций
Криптовалютный рынок постоянно находится в движении и очень
сложно предсказать, а тем более выявить закономерность, какова
будет стоимость курса в длительный момент времени. Но так
может случиться, что логика разработанного приложения явно
зависит от курса криптовалюты или токенов, и разработчикам
нужно построить модель приложения таким образом, чтобы
учитывались возможные флуктуации курса.
В лучшем случае, необходимо отслеживать изменение стоимости
активов и вносить соответствующие изменения в умный контракт.
Если умный контракт автономен на длительном промежутке
времени, то такой сценарий не всегда возможен и требует другого
подхода для решения проблемы.
7. Неопределенность изменения стоимости
активов
Иногда скорость получения данных может не соответствовать
заявленной или внешний ресурс имеет проблемы с доступностью.
Быть может даже случится так, что необходимый нам
централизованный ресурс подвергся DDOS атаке или какая-либо
страна решила заблокировать его на своей территории.
Внутри замкнутых децентрализованных систем задержка с
получением данных тоже имеет место быть, например если
умный контракт зависит от определённых данных другого
контракта, которые должен внести сторонний участник системы.
К проблемам тайминга можно также отнести race condition при
включении транзакции в блок, если транзакция попадёт не в тот
uncles, или будет перегрузка блокчейн сети из-за большого
количества отправленных транзакций.
8. Задержки при получении информации
При правильной разработке архитектуры любого приложения, не следует доверять одному
единственному источнику получения данных. Цепочка получения данных очень длинная и
потенциально может быть изменена на любом участке. Правильным решением было бы получать
данные из нескольких независимых источников и сравнивать их. Если данные между собой
отличаются, то это расхождение необходимо заметить и принять меры.
9. Несоответствие полученных данных
Иногда, для удобства использования, умные контракты используют сторонние библиотеки или даже
обращаются к сторонним вызовам других контрактов. Данная архитектурная реализация может
помочь с процессом обновления умных контрактов, но одновременно ставит в зависимость
работоспособность самого приложения от работоспособности сторонних программ и библиотек.
10. Зависимость выполнения работы умных
контрактов от других умных контрактов
Если полученные данные не соответствуют ожидаемым, то в таком случае необходимо вызывать
исключение. Но может случиться так, что входные данные будут соответствовать ожидаемой
маске, но кардинально отличаться от текущих валидных.
11. Сложности прогнозирования и влияния на
входные данные
Блокчейн не является анонимным по своей природе, а
является всего лишь неперсонализированным. Это
означает, что если всего лишь один раз удастся
персонализировать адрес кошелька пользователя
блокчейн системы, то любой участник сможет составить
необходимую картину взаимосвязей данного
пользователя и сделать соответствующие выводы о его
предпочтениях.
12. Раскрытие и влияние собственных данных на
результат работы
Артур Пинчук
Роман Гребнев
Александр Бажанов
Максим Лазаревич
Константин Туровец
Павел Бука
Благодарности за рецензию и пометки
Вопросы

More Related Content

Similar to Классификация экономико-технических атак. Спикер: Григорий Васильков

Аспектно-Ориентированный Подход
Аспектно-Ориентированный ПодходАспектно-Ориентированный Подход
Аспектно-Ориентированный Подходakopium
 
Внедрение бизнес приложений
Внедрение бизнес приложенийВнедрение бизнес приложений
Внедрение бизнес приложенийКРОК
 
Облачные услуги ActiveCloud. Вопросы к SLA
Облачные услуги ActiveCloud. Вопросы к SLAОблачные услуги ActiveCloud. Вопросы к SLA
Облачные услуги ActiveCloud. Вопросы к SLAActiveCloud
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Symfony2 practice
Symfony2 practiceSymfony2 practice
Symfony2 practiceSkorney
 
Programming Java - Lection 05 - Software Design - Lavrentyev Fedor
Programming Java - Lection 05 - Software Design - Lavrentyev FedorProgramming Java - Lection 05 - Software Design - Lavrentyev Fedor
Programming Java - Lection 05 - Software Design - Lavrentyev FedorFedor Lavrentyev
 
самое интересное в мире блокчейн, опыт и рецепты от сбербанка
самое интересное в мире блокчейн, опыт и рецепты от сбербанкасамое интересное в мире блокчейн, опыт и рецепты от сбербанка
самое интересное в мире блокчейн, опыт и рецепты от сбербанкаСбертех | SberTech
 
Презентация КлаудМастер
Презентация КлаудМастерПрезентация КлаудМастер
Презентация КлаудМастерlilyerma
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
Измерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустяИзмерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустяAleksey Lukatskiy
 
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveЭволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveReturn on Intelligence
 
Основные сведения о данных Google Analytics
Основные сведения о данных Google AnalyticsОсновные сведения о данных Google Analytics
Основные сведения о данных Google AnalyticsОлег Подлуцкий
 
Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Dmytro Mindra
 
SAM-решения в Softline: максимум порядка, минимум затрат
SAM-решения в Softline: максимум порядка, минимум затратSAM-решения в Softline: максимум порядка, минимум затрат
SAM-решения в Softline: максимум порядка, минимум затратSoftline
 
Devconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииDevconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииAlex Popov
 
Mixx2016_Чухляев_Илья
Mixx2016_Чухляев_ИльяMixx2016_Чухляев_Илья
Mixx2016_Чухляев_Ильяiabrussiaprez
 
Аудит СКЗИ и криптоключей на примере Банка
Аудит СКЗИ и криптоключей на примере БанкаАудит СКЗИ и криптоключей на примере Банка
Аудит СКЗИ и криптоключей на примере Банкаimbasoft ru
 

Similar to Классификация экономико-технических атак. Спикер: Григорий Васильков (20)

Аспектно-Ориентированный Подход
Аспектно-Ориентированный ПодходАспектно-Ориентированный Подход
Аспектно-Ориентированный Подход
 
Внедрение бизнес приложений
Внедрение бизнес приложенийВнедрение бизнес приложений
Внедрение бизнес приложений
 
Облачные услуги ActiveCloud. Вопросы к SLA
Облачные услуги ActiveCloud. Вопросы к SLAОблачные услуги ActiveCloud. Вопросы к SLA
Облачные услуги ActiveCloud. Вопросы к SLA
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Symfony2 practice
Symfony2 practiceSymfony2 practice
Symfony2 practice
 
Programming Java - Lection 05 - Software Design - Lavrentyev Fedor
Programming Java - Lection 05 - Software Design - Lavrentyev FedorProgramming Java - Lection 05 - Software Design - Lavrentyev Fedor
Programming Java - Lection 05 - Software Design - Lavrentyev Fedor
 
самое интересное в мире блокчейн, опыт и рецепты от сбербанка
самое интересное в мире блокчейн, опыт и рецепты от сбербанкасамое интересное в мире блокчейн, опыт и рецепты от сбербанка
самое интересное в мире блокчейн, опыт и рецепты от сбербанка
 
Презентация КлаудМастер
Презентация КлаудМастерПрезентация КлаудМастер
Презентация КлаудМастер
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Измерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустяИзмерение эффективности SOC. 3 года спустя
Измерение эффективности SOC. 3 года спустя
 
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveЭволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
 
Основные сведения о данных Google Analytics
Основные сведения о данных Google AnalyticsОсновные сведения о данных Google Analytics
Основные сведения о данных Google Analytics
 
Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011
 
SAM-решения в Softline: максимум порядка, минимум затрат
SAM-решения в Softline: максимум порядка, минимум затратSAM-решения в Softline: максимум порядка, минимум затрат
SAM-решения в Softline: максимум порядка, минимум затрат
 
Безопасность CMS
Безопасность CMSБезопасность CMS
Безопасность CMS
 
Devconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииDevconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логировании
 
Mixx2016_Чухляев_Илья
Mixx2016_Чухляев_ИльяMixx2016_Чухляев_Илья
Mixx2016_Чухляев_Илья
 
Аудит СКЗИ и криптоключей на примере Банка
Аудит СКЗИ и криптоключей на примере БанкаАудит СКЗИ и криптоключей на примере Банка
Аудит СКЗИ и криптоключей на примере Банка
 
PVS-Studio vs Chromium
PVS-Studio vs ChromiumPVS-Studio vs Chromium
PVS-Studio vs Chromium
 
CCPM DBR Vebinar 28 01 2010
CCPM DBR Vebinar 28 01 2010CCPM DBR Vebinar 28 01 2010
CCPM DBR Vebinar 28 01 2010
 

More from Cyber Fund

Разработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан ШиндаулетовРазработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан ШиндаулетовCyber Fund
 
Mesh-сети - интернет, который мы заслужили. Матвей Сиворакша
Mesh-сети - интернет, который мы заслужили. Матвей СиворакшаMesh-сети - интернет, который мы заслужили. Матвей Сиворакша
Mesh-сети - интернет, который мы заслужили. Матвей СиворакшаCyber Fund
 
Продукты и сервисы на блокчейне биткоина. Спикер: Алексей Карпов
Продукты и сервисы на блокчейне биткоина. Спикер: Алексей КарповПродукты и сервисы на блокчейне биткоина. Спикер: Алексей Карпов
Продукты и сервисы на блокчейне биткоина. Спикер: Алексей КарповCyber Fund
 
Blockchain wallet Multy
Blockchain wallet MultyBlockchain wallet Multy
Blockchain wallet MultyCyber Fund
 
Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...
Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...
Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...Cyber Fund
 
Onchain масштабирование блокчейна. Спикер: Дмитрий Мешков
Onchain масштабирование блокчейна. Спикер: Дмитрий МешковOnchain масштабирование блокчейна. Спикер: Дмитрий Мешков
Onchain масштабирование блокчейна. Спикер: Дмитрий МешковCyber Fund
 
Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...
Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...
Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...Cyber Fund
 
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей СидоровОракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей СидоровCyber Fund
 
CyberSearch: The Blockchain Browser. Valery Litvin
CyberSearch: The Blockchain Browser. Valery LitvinCyberSearch: The Blockchain Browser. Valery Litvin
CyberSearch: The Blockchain Browser. Valery LitvinCyber Fund
 
Verifying offchain computations using TrueBit. Sami Makela
Verifying offchain computations using TrueBit. Sami MakelaVerifying offchain computations using TrueBit. Sami Makela
Verifying offchain computations using TrueBit. Sami MakelaCyber Fund
 
The Melon security approach. Reto Trinkler
The Melon security approach. Reto TrinklerThe Melon security approach. Reto Trinkler
The Melon security approach. Reto TrinklerCyber Fund
 
The censorship resistance. Andrey Sobol
The censorship resistance. Andrey SobolThe censorship resistance. Andrey Sobol
The censorship resistance. Andrey SobolCyber Fund
 
End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...
End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...
End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...Cyber Fund
 
Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...
Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...
Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...Cyber Fund
 
Rust & Web Assembly
Rust & Web AssemblyRust & Web Assembly
Rust & Web AssemblyCyber Fund
 
Будущее блокчейн. Спикер: Владимир Попов
Будущее блокчейн. Спикер: Владимир ПоповБудущее блокчейн. Спикер: Владимир Попов
Будущее блокчейн. Спикер: Владимир ПоповCyber Fund
 
Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь
 Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь
Почему децентрализованные биржи ближе чем нам кажется. Андрей СобольCyber Fund
 
Новеллы в законодательстве. Спикер: Алексей Воробей
Новеллы в законодательстве. Спикер: Алексей ВоробейНовеллы в законодательстве. Спикер: Алексей Воробей
Новеллы в законодательстве. Спикер: Алексей ВоробейCyber Fund
 
Перспективы технологии и философии. Спикер: Владимир Попов
Перспективы технологии и философии. Спикер: Владимир ПоповПерспективы технологии и философии. Спикер: Владимир Попов
Перспективы технологии и философии. Спикер: Владимир ПоповCyber Fund
 
Использование открытых данных блокчейн . Спикер: Александр Давыдов.pptx
Использование открытых данных блокчейн . Спикер: Александр Давыдов.pptxИспользование открытых данных блокчейн . Спикер: Александр Давыдов.pptx
Использование открытых данных блокчейн . Спикер: Александр Давыдов.pptxCyber Fund
 

More from Cyber Fund (20)

Разработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан ШиндаулетовРазработка на блокчейн Голос | Ерлан Шиндаулетов
Разработка на блокчейн Голос | Ерлан Шиндаулетов
 
Mesh-сети - интернет, который мы заслужили. Матвей Сиворакша
Mesh-сети - интернет, который мы заслужили. Матвей СиворакшаMesh-сети - интернет, который мы заслужили. Матвей Сиворакша
Mesh-сети - интернет, который мы заслужили. Матвей Сиворакша
 
Продукты и сервисы на блокчейне биткоина. Спикер: Алексей Карпов
Продукты и сервисы на блокчейне биткоина. Спикер: Алексей КарповПродукты и сервисы на блокчейне биткоина. Спикер: Алексей Карпов
Продукты и сервисы на блокчейне биткоина. Спикер: Алексей Карпов
 
Blockchain wallet Multy
Blockchain wallet MultyBlockchain wallet Multy
Blockchain wallet Multy
 
Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...
Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...
Практические кейсы использования приватных блокчейнов на EXONUM. Спикер: Глеб...
 
Onchain масштабирование блокчейна. Спикер: Дмитрий Мешков
Onchain масштабирование блокчейна. Спикер: Дмитрий МешковOnchain масштабирование блокчейна. Спикер: Дмитрий Мешков
Onchain масштабирование блокчейна. Спикер: Дмитрий Мешков
 
Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...
Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...
Анонимизация и деанонимизация пользователей в блокчейн-сетях. Спикер: Григори...
 
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей СидоровОракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
 
CyberSearch: The Blockchain Browser. Valery Litvin
CyberSearch: The Blockchain Browser. Valery LitvinCyberSearch: The Blockchain Browser. Valery Litvin
CyberSearch: The Blockchain Browser. Valery Litvin
 
Verifying offchain computations using TrueBit. Sami Makela
Verifying offchain computations using TrueBit. Sami MakelaVerifying offchain computations using TrueBit. Sami Makela
Verifying offchain computations using TrueBit. Sami Makela
 
The Melon security approach. Reto Trinkler
The Melon security approach. Reto TrinklerThe Melon security approach. Reto Trinkler
The Melon security approach. Reto Trinkler
 
The censorship resistance. Andrey Sobol
The censorship resistance. Andrey SobolThe censorship resistance. Andrey Sobol
The censorship resistance. Andrey Sobol
 
End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...
End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...
End-to-end encryption for Dapps with NuCypher KMS. Sergey Zotov, software dev...
 
Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...
Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...
Creating CI/ CD infrastructure for open source projects. Denis Soldatov, dev-...
 
Rust & Web Assembly
Rust & Web AssemblyRust & Web Assembly
Rust & Web Assembly
 
Будущее блокчейн. Спикер: Владимир Попов
Будущее блокчейн. Спикер: Владимир ПоповБудущее блокчейн. Спикер: Владимир Попов
Будущее блокчейн. Спикер: Владимир Попов
 
Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь
 Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь
Почему децентрализованные биржи ближе чем нам кажется. Андрей Соболь
 
Новеллы в законодательстве. Спикер: Алексей Воробей
Новеллы в законодательстве. Спикер: Алексей ВоробейНовеллы в законодательстве. Спикер: Алексей Воробей
Новеллы в законодательстве. Спикер: Алексей Воробей
 
Перспективы технологии и философии. Спикер: Владимир Попов
Перспективы технологии и философии. Спикер: Владимир ПоповПерспективы технологии и философии. Спикер: Владимир Попов
Перспективы технологии и философии. Спикер: Владимир Попов
 
Использование открытых данных блокчейн . Спикер: Александр Давыдов.pptx
Использование открытых данных блокчейн . Спикер: Александр Давыдов.pptxИспользование открытых данных блокчейн . Спикер: Александр Давыдов.pptx
Использование открытых данных блокчейн . Спикер: Александр Давыдов.pptx
 

Классификация экономико-технических атак. Спикер: Григорий Васильков

  • 2. Introductions About Me: ● Security researcher and auditor ● Co-founder BSU Blockchain and Smart Contracts Lab ● Co-founder BugBounty.Center ● Email: ○ gr.vasilkov@gmail.com ○ g@bugbounty.center ● Telegram: @grvasilkov ● LinkedIn: linkedin.com/in/grigoryvasilkov/
  • 3. Множество блокчейн платформ с возможностью имплементации умных контрактов
  • 4. ● Общеизвестные: С++, C#, Java, Go, Solidity, Kotlin, Rust, Scala, Javascript, Plutus; ● Свои собственные: Michelson, Simvolio и др. Языки программирования умных контрактов
  • 5. Ethereum. Solidity example: Языки программирования умных контрактов function safeWithdrawal() afterDeadline { if (!fundingGoalReached) { uint amount = balanceOf[msg.sender]; balanceOf[msg.sender] = 0; if (amount > 0) { if (msg.sender.send(amount)) { FundTransfer(msg.sender, amount, false); } else { balanceOf[msg.sender] = amount; } } } }
  • 6. EOS. C++ example: Языки программирования умных контрактов auto buyer_account = get_account( highest_bid.buyer.name ); while( highest_bid.at_price >= exchange_ask.at_price ) { match( highest_bid, buyer_account, exchange_ask, seller_account ); if( highest_bid.quantity == eos_tokens(0) ) { buyer_account.open_orders--; save( seller_account ); save( buyer_account ); bids::remove( highest_bid ); if( !bids_by_price::back( highest_bid ) ) { break; } buyer_account = get_account( highest_bid.buyer.name ); } else { break; // buyer's bid should be filled } }
  • 7. Exonum. Rust example: Языки программирования умных контрактов impl Api for CryptocurrencyApi { fn wire(&self, router: &mut Router) { let self_ = self.clone(); let self_ = self.clone(); let wallets_info = move |_: &mut Request| -> IronResult<Response> { if let Some(wallets) = self_.get_wallets() { self_.ok_response(&serde_json::to_value(wallets).unwrap()) } else { self_.not_found_response( &serde_json::to_value("Wallets database is empty") .unwrap(), ) } };
  • 8. Corda. Kotlin example: Языки программирования умных контрактов @InitiatingFlow class FixSignFlow(val tx: TransactionBuilder, val oracle: Party, val partialMerkleTx: FilteredTransaction) : FlowLogic<TransactionSignature>() { @Suspendable override fun call(): TransactionSignature { val oracleSession = initiateFlow(oracle) val resp = oracleSession.sendAndReceive<TransactionSignature>(SignRequ est(partialMerkleTx)) return resp.unwrap { sig -> check(oracleSession.counterparty.owningKey.isFulfilledBy(li stOf(sig.by))) tx.toWireTransaction(serviceHub).checkSignature(sig) sig } } }
  • 9. Hyperledger. Go example: Языки программирования умных контрактов func set(stub shim.ChaincodeStubInterface, args []string) (string, error) { if len(args) != 2 { return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value") } err := stub.PutState(args[0], []byte(args[1])) if err != nil { return "", fmt.Errorf("Failed to set asset: %s", args[0]) } return args[1], nil }
  • 10. NEO. C# example: Языки программирования умных контрактов private static bool Transfer(string domain, byte[] to) { if (!Runtime.CheckWitness(to)) return false; byte[] from = Storage.Get(Storage.CurrentContext, domain); if (from == null) return false; if (!Runtime.CheckWitness(from)) return false; Storage.Put(Storage.CurrentContext, domain, to); return true; } private static bool Delete(string domain) { byte[] owner = Storage.Get(Storage.CurrentContext, domain); if (owner == null) return false; if (!Runtime.CheckWitness(owner)) return false; Storage.Delete(Storage.CurrentContext, domain); return true; }
  • 11. Cardano. Plutus example: Языки программирования умных контрактов count : forall a. Tree a -> Nat { count Leaf = Zero ; count (Branch _ l r) = Suc (add (count l) (count r)) } traversal : forall a. Tree a -> List a { traversal Leaf = Nil ; traversal (Branch x l r) = Cons x (append (traversal l) (traversal r)) } reverse : forall a. Tree a -> Tree a { reverse Leaf = Leaf ; reverse (Branch x l r) = Branch x (reverse r) (reverse l) }
  • 12. ● В публичных блокчейн платформах логика разработки умного контракта доступна всем участникам платформы ● Персональные данные, хранимые в умных контрактах, также доступны всем участникам платформы ● При получении данных из внешних централизованных источников, умный контракт не может явно гарантировать достоверность этих данных Проблемы построения безопасной архитектуры приложений в блокчейне
  • 13. ● Затрагивает движение ценных криптовалютных единиц ● Разработка требует экономического мышления Особенности недостатков безопасности в блокчейн системах
  • 14. ● Race Conditions ○ Reentrancy ○ Cross-function Race Conditions ○ Pitfalls in Race Condition Solutions ● Transaction-Ordering Dependence (TOD) / Front Running ● Timestamp Dependence ● Integer Overflow and Underflow ● DoS with (Unexpected) revert ● DoS with Block Gas Limit ● Call Depth Attack Существующие технические недостатки безопасности в умных контрактах
  • 15. Только ли технические недостатки безопасности актуальны для блокчейн систем и приложений
  • 16. Экономико-техническая атака - это совокупность действий злоумышленника, приводящих к нарушению экономической стабильности информационной системы. Результатом успешной атаки может стать искажение пользовательских данных хранящихся в информационной системе или искажение экономических показателей. Экономико-техническая атака
  • 17. ● Системный анализ компонентов; ● Иерархия взаимодействия сложных элементов; ● Иерархическое управление элементами; ● Согласование целей в иерархических элементах; ● Обработка полученной информации; ● Оптимизация потоков информации в задачах управления; ● Контроль и управление в организационных системах; ● Задачи классификации; ● Комплексная оценка элементов системы; ● Кибернетические модели социальных и экономических систем. Основные элементы экономической кибернетики
  • 19. Необходимо прогнозировать, как может повести себя пользователь, если ему дать дополнительную экономическую стимуляцию или же наоборот ввести ограничения. Если в основу логики приложения ляжет неверная экономическая модель, то приложение может не выполнять желаемых задач и участники могут понести материальные потери. Данный класс недостатка безопасности чаще всего проявляется в следующих моделях проектирования: эмиссия токенов, создание реферальной программы, интеграция экономик блокчейн-приложения с фиатной системой и т.п. 1. Несостоятельность экономической модели приложения
  • 20. Чаще всего рассматриваются следующие аспекты: 2. Невозможность прогнозирования внешних по отношению к экономике приложения факторов ● Прогнозирование точного количества участников приложения, которые будут использовать умный контракт; ● Прогнозирование потребляемого газа при отправке транзакции; ● Внешние шоки, стимулирующие спрос или снижающие его, такие как колебания ожиданий сообщества или резкое изменение новостного фона. ● Стоимость токена по отношению к фиатным валютам (слишком высокая или слишком низкая), а также резкое изменение стоимости токена.
  • 21. Для того чтобы отправить транзакцию, пользователю необходимо понести дополнительные материальные издержки в виде газа, даже если активация метода не принесёт никакой прибыли, что приводит к возрастанию транзакционных издержек в приложении и уменьшает привлекательность его использования для пользователей. Поэтому разработчики придумывают различные экономические стимулы для отправки транзакций. 3. Отсутствие стимулов обращения пользователей к смарт-контрактам, транзакционные издержки
  • 22. Некоторые из блокчейн платформ имеют замкнутую экосистему, обращаются к внешним источникам через внешних агентов - Оракулов, другие же позволяют это сделать используя средства самой платформы. Оракулы, как и любое другое ПО, подвержен рискам компрометации. Также всегда существует риск подмены данных на самом внешнем источнике. В таком случае умный контракт будет считать полученные данные валидными, что в свою очередь может отразится на работе приложения. 4. Работа с непроверенными данными
  • 23. Разрабатывается множество приложений, в которых вовлечена деятельность сразу множества контрагентов. К таковым приложениям можно отнести: создание депозитария на основе блокчейна, развитие микрокредитования, децентрализованные биржи, обменники, геймификация и т.п. Во всех этих сущностях необходимо скоординированное взаимодействие контрагентов приложения. Но т.к. для реализации заложенного функционала приходится полагаться на сторонних участников, всегда есть возникновение преднамеренной или непреднамеренной ошибки, обусловленной человеческим фактором. 5. Зависимость выполнения работы программы от других участников
  • 24. Большинство транзакций, использующихся в умных контрактах, представляют собой открытые данные. Майнер решает вносить ли отправленную транзакцию в блок рассчитывая различные метрики, такие как Gas Price и Gas Limit. Также насколько быстро будет принято решение о внесении транзакции в блок, зависит от того, попадёт ли наша транзакция в Uncles, а также от времени формирования нового блока. Злоумышленник может воспользоваться промежутком времени внесения транзакции в блок, чтобы в дальнейшем повлиять на результат выполнения работы транзакции. 6. Возможность манипуляции порядком исполнения транзакций
  • 25. Криптовалютный рынок постоянно находится в движении и очень сложно предсказать, а тем более выявить закономерность, какова будет стоимость курса в длительный момент времени. Но так может случиться, что логика разработанного приложения явно зависит от курса криптовалюты или токенов, и разработчикам нужно построить модель приложения таким образом, чтобы учитывались возможные флуктуации курса. В лучшем случае, необходимо отслеживать изменение стоимости активов и вносить соответствующие изменения в умный контракт. Если умный контракт автономен на длительном промежутке времени, то такой сценарий не всегда возможен и требует другого подхода для решения проблемы. 7. Неопределенность изменения стоимости активов
  • 26. Иногда скорость получения данных может не соответствовать заявленной или внешний ресурс имеет проблемы с доступностью. Быть может даже случится так, что необходимый нам централизованный ресурс подвергся DDOS атаке или какая-либо страна решила заблокировать его на своей территории. Внутри замкнутых децентрализованных систем задержка с получением данных тоже имеет место быть, например если умный контракт зависит от определённых данных другого контракта, которые должен внести сторонний участник системы. К проблемам тайминга можно также отнести race condition при включении транзакции в блок, если транзакция попадёт не в тот uncles, или будет перегрузка блокчейн сети из-за большого количества отправленных транзакций. 8. Задержки при получении информации
  • 27. При правильной разработке архитектуры любого приложения, не следует доверять одному единственному источнику получения данных. Цепочка получения данных очень длинная и потенциально может быть изменена на любом участке. Правильным решением было бы получать данные из нескольких независимых источников и сравнивать их. Если данные между собой отличаются, то это расхождение необходимо заметить и принять меры. 9. Несоответствие полученных данных
  • 28. Иногда, для удобства использования, умные контракты используют сторонние библиотеки или даже обращаются к сторонним вызовам других контрактов. Данная архитектурная реализация может помочь с процессом обновления умных контрактов, но одновременно ставит в зависимость работоспособность самого приложения от работоспособности сторонних программ и библиотек. 10. Зависимость выполнения работы умных контрактов от других умных контрактов
  • 29. Если полученные данные не соответствуют ожидаемым, то в таком случае необходимо вызывать исключение. Но может случиться так, что входные данные будут соответствовать ожидаемой маске, но кардинально отличаться от текущих валидных. 11. Сложности прогнозирования и влияния на входные данные
  • 30. Блокчейн не является анонимным по своей природе, а является всего лишь неперсонализированным. Это означает, что если всего лишь один раз удастся персонализировать адрес кошелька пользователя блокчейн системы, то любой участник сможет составить необходимую картину взаимосвязей данного пользователя и сделать соответствующие выводы о его предпочтениях. 12. Раскрытие и влияние собственных данных на результат работы
  • 31. Артур Пинчук Роман Гребнев Александр Бажанов Максим Лазаревич Константин Туровец Павел Бука Благодарности за рецензию и пометки