SlideShare a Scribd company logo
Погружение в Ethereum
Сергей Лоншаков
Blockchain разработчик, Airalab
Цели
#msdevcon
Создание умного
контракта в
Ethereum
Blockchain
Проверка умного
контракта в
Ethereum
Blockchain
Известные атаки
на умные
контракты на
Ethereum
Рекомендации от ведущих
разработчиков Ethereum.
Выдержки из презентаций с
devcon2 в Шанхае
Атака по глубине стека, DoS
при вызове исключения,
условия гонки, DoS при
переполнении лимита газа.
Пример инфраструктуры из
нескольких видов умных
контрактов
#msdevcon
Создание умного контракта в
Ethereum Blockchain
Контракт – это аккаунт
Есть два типа аккаунтов в Ethereum:
Аккаунт пользователя (Externally owned account сокр. EOAs):
учетная запись контролируемая закрытым ключом, и если у вас
есть закрытый ключ, связанный с EOA у вас есть возможность
отправлять эфиры и сообщения от EOA.
Контракт: учетная запись, которая имеет свой собственный код, и
управляемая с помощью кода.
Токены
contract MyToken {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
}
Описание стандарта ERC20:
https://github.com/ethereum/EIPs/issues/20
Управление взаимоотношениями
1. Конгресс / Совет директоров /Демократия
2. Escrow / Аккредитив
3. p2p + Страхование / Кредитование / Финансирование
Управление взаимоотношениями
Alice и Bob заключают пари
на 100 GavCoin с триггером
на основе данных о
температуре в Москве.
Если температура в Москве
не будет выше 35 градусов в
течении года, то Bob
получит 100 GavCoin, иначе
их получит Alice.
Демонстрация
#msdevcon
Разбираем ERC20 токен
#msdevcon
Проверка умного контракта в
Ethereum Blockchain
Рекомендации от ведущих разработчиков Ethereum
Обобщенные рекомендации к проверке
кода контрактов на Ethereum платформе
1. Избегайте внешних вызовов когда это возможно, очень часто они являются
причиной уязвимости
2. Отдавайте приоритет изменению состояния над внешним вызовом
вызовом (включая .send())
3. Изолируйте внешние вызовы в отдельной транзакции, например,
метод withdraw для вывода средств
4. Будьте внимательны при делении целых чисел (округление происходит к
ближайшему целому)
5. При делении на ноль возвращается ноль, проверяйте аргументы
самостоятельно
Обобщенные рекомендации к проверке
кода контрактов на Ethereum платформе
6. Будьте внимательны к переполнению целых чисел (особенно в
сравнениях) и приведению знаковых к беззнаковым в JS
7. Будьте осторожны при переборе динамических массивов, это может
потребовать большое количество газа
8. Будьте осторожны с привязкой логики контракта ко времени блока, оно
устанавливается майнером
9. Подумайте о способе обновления контракта в будущем
10. Используйте метки остановки работы контракта в случае чрезвычайной
ситуации, например обнаружении уязвимости
Обобщенные рекомендации к проверке
кода контрактов на Ethereum платформе
11. Разделяйте критически важные вызовы во времени, например, вывод
большого количества средств не чаще раза в неделю
12. Используйте формальную верификацию контрактов
#msdevcon
Известные атаки на контракты
Ethereum платформы
DoS при переполнении лимита газа
Идея: объем газа в блоке ограничен, если для транзакции
требуется газа больше, чем помещается в блок - она никогда
не будет исполнена.
DoS при переполнении лимита газа
struct Payee {
address addr;
uint256 value;
}
Payee payees[];
uint256 nextPayeeIndex;
function payOut() {
uint256 i = 0; // при достаточно большом размере payees возможно
превысить лимит газа while
(i < payees.length) { payees[i].addr.send(payees[i].value); i++;
}
}
DoS при переполнении лимита газа
Противодействие: избегать итерации по большим массивам
данных, либо переносить перебор на программную логику вне
контракта; если невозможно избавиться от перебора,
необходимо разбить его на несколько шагов, либо выполнять
действия по запросу, например, добавить метод withdraw для
вывода средств.
Атака по глубине стека
Идея: разрешенная глубина стека составляет 1024, вызовы
глубже не будут выполнены, однако транзакция не прервется;
атакующий может вызвать код с глубиной стека 1023, в таком
случае вызовы из уязвимого кода, например send() не будут
исполнены.
Атака по глубине стека
// INSECURE
contract auction {
mapping(address => uint) refunds;
// [...]
function withdrawRefund(address recipient) {
uint refund = refunds[recipient];
refunds[recipient] = 0;
recipient.send(refund); // эта строка исполнится не так, как ожидается
}
}
// ATTACKER contract xxx {
function foo(address target, address recipient, uint iter) {
if (iter < 1023) foo(target, recipient, iter+1);
else auction(target).withdrawRefund(recipient);
}
}
Атака по глубине стека
Противодействие: минимизация вызовов внутри методов,
приоритет записи и учета над вызовом другого метода; а
также .send() возвращает false если не может быть
исполнена, необходимо при каждой отправке средств
проверять возвращаемое значение.
Условия гонки
Идея: внешний вызов может произвести неконтролируемые
изменения в данных контракта.
Условия гонки
// INSECURE
mapping (address => uint) private userBalances;
function withdrawBalance() public {
uint amountToWithdraw = userBalances[msg.sender]; // в этом месте внешний
контракт может вызвать метод withdrawBalance снова
if (!(msg.sender.call.value(amountToWithdraw)())) { throw; }
userBalances[msg.sender] = 0; }
/// ATTACKER
contract xxx {
uint iter;
address target;
function foo(address _target) {
iter = 0;
target = _target;
token(_target).withdrawBalance(); }
function () payable { if (iter < 10) // Withrawal 10 times
token(_target).withdrawBalance();
}
}
Условия гонки
Противодействие: для недоверенного кода(msg.sender)
приоритет в использовании .send() над .call.value(), так как
количество газа для .send() очень ограничено и не может быть
использовано для эксплуатации уязвимости.
Q&A
#msdevcon
Погружение в Ethereum
Сергей Лоншаков, sergeylonshakov@gmail.com

More Related Content

What's hot

Владимир Иванов - Криптография и шифрование
Владимир Иванов - Криптография и шифрованиеВладимир Иванов - Криптография и шифрование
Владимир Иванов - Криптография и шифрованиеYandex
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
Масштабирование Блокчейн Сетей
Масштабирование Блокчейн СетейМасштабирование Блокчейн Сетей
Масштабирование Блокчейн Сетей
Eugene Aseev
 
Марк Пойда. Инвестирование на ICO.
Марк Пойда. Инвестирование на ICO.Марк Пойда. Инвестирование на ICO.
Марк Пойда. Инвестирование на ICO.
AtlasBlockchain
 
Возможности и проблемы FFI в Haskell. Александр Вершилов
Возможности и проблемы FFI в Haskell. Александр ВершиловВозможности и проблемы FFI в Haskell. Александр Вершилов
Возможности и проблемы FFI в Haskell. Александр Вершилов
Юрий Сыровецкий
 
«The Heartbleed Bug» или OpenSSL как вектор атаки.
«The Heartbleed Bug» или OpenSSL как вектор атаки.«The Heartbleed Bug» или OpenSSL как вектор атаки.
«The Heartbleed Bug» или OpenSSL как вектор атаки.
Oleg Lipin
 
World of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source InsideWorld of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source InsideMaksim Melnikau
 
7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)
Smolensk Computer Science Club
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++
Mikhail Shcherbakov
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
Alex Tumanoff
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
Mikhail Shcherbakov
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4Technopark
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.
Mikhail Shcherbakov
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Yandex
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)
World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)
World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)Ontico
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutines
corehard_by
 
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей СидоровОракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Cyber Fund
 
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGPPositive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days
 

What's hot (20)

Владимир Иванов - Криптография и шифрование
Владимир Иванов - Криптография и шифрованиеВладимир Иванов - Криптография и шифрование
Владимир Иванов - Криптография и шифрование
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
Масштабирование Блокчейн Сетей
Масштабирование Блокчейн СетейМасштабирование Блокчейн Сетей
Масштабирование Блокчейн Сетей
 
Марк Пойда. Инвестирование на ICO.
Марк Пойда. Инвестирование на ICO.Марк Пойда. Инвестирование на ICO.
Марк Пойда. Инвестирование на ICO.
 
Возможности и проблемы FFI в Haskell. Александр Вершилов
Возможности и проблемы FFI в Haskell. Александр ВершиловВозможности и проблемы FFI в Haskell. Александр Вершилов
Возможности и проблемы FFI в Haskell. Александр Вершилов
 
«The Heartbleed Bug» или OpenSSL как вектор атаки.
«The Heartbleed Bug» или OpenSSL как вектор атаки.«The Heartbleed Bug» или OpenSSL как вектор атаки.
«The Heartbleed Bug» или OpenSSL как вектор атаки.
 
World of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source InsideWorld of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source Inside
 
7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)
World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)
World of Tanks: на пути к 1 млн CCU / Максим Мельников (Wargaming.net)
 
Ddos
DdosDdos
Ddos
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutines
 
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей СидоровОракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
 
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGPPositive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
 

Viewers also liked

Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Sergey Lonshakov
 
Масштабируемость блокчейн-систем: проблемы и решения
Масштабируемость блокчейн-систем: проблемы и решенияМасштабируемость блокчейн-систем: проблемы и решения
Масштабируемость блокчейн-систем: проблемы и решения
Alex Chepurnoy
 
Etherem ~ agvm
Etherem ~ agvmEtherem ~ agvm
Etherem ~ agvmgha sshee
 
Ethereum @ descon 2016
Ethereum @ descon 2016Ethereum @ descon 2016
Ethereum @ descon 2016
Predrag Radović
 
Dapps for Web Developers Aberdeen Techmeetup
Dapps for Web Developers Aberdeen TechmeetupDapps for Web Developers Aberdeen Techmeetup
Dapps for Web Developers Aberdeen Techmeetup
James Littlejohn
 
日本のIT市場のトピックス
日本のIT市場のトピックス日本のIT市場のトピックス
日本のIT市場のトピックス
Hiroyasu NOHATA
 
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter..."Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
Khaled Ben Driss
 
Vision for a health blockchain
Vision for a health blockchainVision for a health blockchain
Vision for a health blockchain
James Littlejohn
 
Etherisc Versicherung neu erfinden
Etherisc Versicherung neu erfindenEtherisc Versicherung neu erfinden
Etherisc Versicherung neu erfinden
Stephan Karpischek
 
Solidity intro
Solidity introSolidity intro
Solidity intro
Angello Pozo
 
Introduction to Idea
Introduction to IdeaIntroduction to Idea
Introduction to Idea
James Littlejohn
 
The Ethereum ÐApp IDE: Mix
The Ethereum ÐApp IDE: MixThe Ethereum ÐApp IDE: Mix
The Ethereum ÐApp IDE: Mix
gavofyork
 
NodeJS Blockchain.info Wallet
NodeJS Blockchain.info WalletNodeJS Blockchain.info Wallet
NodeJS Blockchain.info Wallet
Sjors Provoost
 
Learning Solidity
Learning SolidityLearning Solidity
Learning Solidity
Arnold Pham
 
Ingredients for creating dapps
Ingredients for creating dappsIngredients for creating dapps
Ingredients for creating dapps
Stefaan Ponnet
 
Introduction to Ethereum
Introduction to EthereumIntroduction to Ethereum
Introduction to Ethereum
Arnold Pham
 
The Ethereum Geth Client
The Ethereum Geth ClientThe Ethereum Geth Client
The Ethereum Geth Client
Arnold Pham
 
Ethereum Madrid - Cambio de paradigma en el sector energético
Ethereum Madrid - Cambio de paradigma en el sector energéticoEthereum Madrid - Cambio de paradigma en el sector energético
Ethereum Madrid - Cambio de paradigma en el sector energético
Ethereum Madrid
 
V-Pesa
V-PesaV-Pesa
Ethereum Madrid - Blockchain for dummies
Ethereum Madrid - Blockchain for dummiesEthereum Madrid - Blockchain for dummies
Ethereum Madrid - Blockchain for dummies
Ethereum Madrid
 

Viewers also liked (20)

Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
 
Масштабируемость блокчейн-систем: проблемы и решения
Масштабируемость блокчейн-систем: проблемы и решенияМасштабируемость блокчейн-систем: проблемы и решения
Масштабируемость блокчейн-систем: проблемы и решения
 
Etherem ~ agvm
Etherem ~ agvmEtherem ~ agvm
Etherem ~ agvm
 
Ethereum @ descon 2016
Ethereum @ descon 2016Ethereum @ descon 2016
Ethereum @ descon 2016
 
Dapps for Web Developers Aberdeen Techmeetup
Dapps for Web Developers Aberdeen TechmeetupDapps for Web Developers Aberdeen Techmeetup
Dapps for Web Developers Aberdeen Techmeetup
 
日本のIT市場のトピックス
日本のIT市場のトピックス日本のIT市場のトピックス
日本のIT市場のトピックス
 
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter..."Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
 
Vision for a health blockchain
Vision for a health blockchainVision for a health blockchain
Vision for a health blockchain
 
Etherisc Versicherung neu erfinden
Etherisc Versicherung neu erfindenEtherisc Versicherung neu erfinden
Etherisc Versicherung neu erfinden
 
Solidity intro
Solidity introSolidity intro
Solidity intro
 
Introduction to Idea
Introduction to IdeaIntroduction to Idea
Introduction to Idea
 
The Ethereum ÐApp IDE: Mix
The Ethereum ÐApp IDE: MixThe Ethereum ÐApp IDE: Mix
The Ethereum ÐApp IDE: Mix
 
NodeJS Blockchain.info Wallet
NodeJS Blockchain.info WalletNodeJS Blockchain.info Wallet
NodeJS Blockchain.info Wallet
 
Learning Solidity
Learning SolidityLearning Solidity
Learning Solidity
 
Ingredients for creating dapps
Ingredients for creating dappsIngredients for creating dapps
Ingredients for creating dapps
 
Introduction to Ethereum
Introduction to EthereumIntroduction to Ethereum
Introduction to Ethereum
 
The Ethereum Geth Client
The Ethereum Geth ClientThe Ethereum Geth Client
The Ethereum Geth Client
 
Ethereum Madrid - Cambio de paradigma en el sector energético
Ethereum Madrid - Cambio de paradigma en el sector energéticoEthereum Madrid - Cambio de paradigma en el sector energético
Ethereum Madrid - Cambio de paradigma en el sector energético
 
V-Pesa
V-PesaV-Pesa
V-Pesa
 
Ethereum Madrid - Blockchain for dummies
Ethereum Madrid - Blockchain for dummiesEthereum Madrid - Blockchain for dummies
Ethereum Madrid - Blockchain for dummies
 

Similar to Погружение в Ethereum

"Программируемые деньги" Чепурной Александр, IOHK Research
"Программируемые деньги" Чепурной Александр, IOHK Research"Программируемые деньги" Чепурной Александр, IOHK Research
"Программируемые деньги" Чепурной Александр, IOHK Research
it-people
 
04
0404
04
malvvv
 
Blockchain & Ecommerce (part 1)
Blockchain & Ecommerce (part 1)Blockchain & Ecommerce (part 1)
Blockchain & Ecommerce (part 1)
Pro Magento Community
 
Bitcoin Wite paper (ru)
Bitcoin Wite paper (ru)Bitcoin Wite paper (ru)
Bitcoin Wite paper (ru)
Roman Radchenko
 
Базы данных лекция №9
Базы данных лекция №9Базы данных лекция №9
Базы данных лекция №9
Vitaliy Pak
 
Защита и контроль приложений
Защита и контроль приложенийЗащита и контроль приложений
Защита и контроль приложений
Cisco Russia
 

Similar to Погружение в Ethereum (6)

"Программируемые деньги" Чепурной Александр, IOHK Research
"Программируемые деньги" Чепурной Александр, IOHK Research"Программируемые деньги" Чепурной Александр, IOHK Research
"Программируемые деньги" Чепурной Александр, IOHK Research
 
04
0404
04
 
Blockchain & Ecommerce (part 1)
Blockchain & Ecommerce (part 1)Blockchain & Ecommerce (part 1)
Blockchain & Ecommerce (part 1)
 
Bitcoin Wite paper (ru)
Bitcoin Wite paper (ru)Bitcoin Wite paper (ru)
Bitcoin Wite paper (ru)
 
Базы данных лекция №9
Базы данных лекция №9Базы данных лекция №9
Базы данных лекция №9
 
Защита и контроль приложений
Защита и контроль приложенийЗащита и контроль приложений
Защита и контроль приложений
 

More from Sergey Lonshakov

Публично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Публично доступные блокчейн сети для цифровых паспортов на основе IoTданныхПублично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Публично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Sergey Lonshakov
 
Devcon5 robotics under ethereum computer control
Devcon5  robotics under ethereum computer controlDevcon5  robotics under ethereum computer control
Devcon5 robotics under ethereum computer control
Sergey Lonshakov
 
Robotics in Polkadot, Sub0 Berlin
Robotics in Polkadot, Sub0 BerlinRobotics in Polkadot, Sub0 Berlin
Robotics in Polkadot, Sub0 Berlin
Sergey Lonshakov
 
ERF 2019 blockchain in robotic applications
ERF 2019 blockchain in robotic applications ERF 2019 blockchain in robotic applications
ERF 2019 blockchain in robotic applications
Sergey Lonshakov
 
Economy of-robots-brussels-oct-18
Economy of-robots-brussels-oct-18Economy of-robots-brussels-oct-18
Economy of-robots-brussels-oct-18
Sergey Lonshakov
 
Ethereum Devcon 3
 Ethereum Devcon 3  Ethereum Devcon 3
Ethereum Devcon 3
Sergey Lonshakov
 
Brussels: cryptocurrency, smart contracts and robotics
Brussels: cryptocurrency, smart contracts and roboticsBrussels: cryptocurrency, smart contracts and robotics
Brussels: cryptocurrency, smart contracts and robotics
Sergey Lonshakov
 
Who will be gatekeeper from human economy to economy of robots?
Who will be gatekeeper from human economy to economy of robots?Who will be gatekeeper from human economy to economy of robots?
Who will be gatekeeper from human economy to economy of robots?
Sergey Lonshakov
 
Введение в Bitcoin и Ethereum
Введение в Bitcoin и EthereumВведение в Bitcoin и Ethereum
Введение в Bitcoin и Ethereum
Sergey Lonshakov
 
How works the global robot economics
How works the global robot economicsHow works the global robot economics
How works the global robot economics
Sergey Lonshakov
 
Robot economics protocol by Airalab short presentation
Robot economics protocol by Airalab short presentationRobot economics protocol by Airalab short presentation
Robot economics protocol by Airalab short presentation
Sergey Lonshakov
 
Экономика роботов, расширенная презентация
Экономика роботов, расширенная презентацияЭкономика роботов, расширенная презентация
Экономика роботов, расширенная презентация
Sergey Lonshakov
 
Экономика роботов, часть 1
Экономика роботов, часть 1Экономика роботов, часть 1
Экономика роботов, часть 1
Sergey Lonshakov
 
Экономика роботов и индустрия 4.0
Экономика роботов и  индустрия 4.0Экономика роботов и  индустрия 4.0
Экономика роботов и индустрия 4.0
Sergey Lonshakov
 
Взаимодействие человека и робота как двух автономных экономических агентов
Взаимодействие человека и робота как двух автономных экономических агентовВзаимодействие человека и робота как двух автономных экономических агентов
Взаимодействие человека и робота как двух автономных экономических агентов
Sergey Lonshakov
 
Введение в децентрализованный интернет вещей
Введение в децентрализованный интернет вещейВведение в децентрализованный интернет вещей
Введение в децентрализованный интернет вещей
Sergey Lonshakov
 
Autonomous technologies for global commercial and civil uav vendors
Autonomous technologies for global commercial and civil uav vendorsAutonomous technologies for global commercial and civil uav vendors
Autonomous technologies for global commercial and civil uav vendors
Sergey Lonshakov
 

More from Sergey Lonshakov (17)

Публично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Публично доступные блокчейн сети для цифровых паспортов на основе IoTданныхПублично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Публично доступные блокчейн сети для цифровых паспортов на основе IoTданных
 
Devcon5 robotics under ethereum computer control
Devcon5  robotics under ethereum computer controlDevcon5  robotics under ethereum computer control
Devcon5 robotics under ethereum computer control
 
Robotics in Polkadot, Sub0 Berlin
Robotics in Polkadot, Sub0 BerlinRobotics in Polkadot, Sub0 Berlin
Robotics in Polkadot, Sub0 Berlin
 
ERF 2019 blockchain in robotic applications
ERF 2019 blockchain in robotic applications ERF 2019 blockchain in robotic applications
ERF 2019 blockchain in robotic applications
 
Economy of-robots-brussels-oct-18
Economy of-robots-brussels-oct-18Economy of-robots-brussels-oct-18
Economy of-robots-brussels-oct-18
 
Ethereum Devcon 3
 Ethereum Devcon 3  Ethereum Devcon 3
Ethereum Devcon 3
 
Brussels: cryptocurrency, smart contracts and robotics
Brussels: cryptocurrency, smart contracts and roboticsBrussels: cryptocurrency, smart contracts and robotics
Brussels: cryptocurrency, smart contracts and robotics
 
Who will be gatekeeper from human economy to economy of robots?
Who will be gatekeeper from human economy to economy of robots?Who will be gatekeeper from human economy to economy of robots?
Who will be gatekeeper from human economy to economy of robots?
 
Введение в Bitcoin и Ethereum
Введение в Bitcoin и EthereumВведение в Bitcoin и Ethereum
Введение в Bitcoin и Ethereum
 
How works the global robot economics
How works the global robot economicsHow works the global robot economics
How works the global robot economics
 
Robot economics protocol by Airalab short presentation
Robot economics protocol by Airalab short presentationRobot economics protocol by Airalab short presentation
Robot economics protocol by Airalab short presentation
 
Экономика роботов, расширенная презентация
Экономика роботов, расширенная презентацияЭкономика роботов, расширенная презентация
Экономика роботов, расширенная презентация
 
Экономика роботов, часть 1
Экономика роботов, часть 1Экономика роботов, часть 1
Экономика роботов, часть 1
 
Экономика роботов и индустрия 4.0
Экономика роботов и  индустрия 4.0Экономика роботов и  индустрия 4.0
Экономика роботов и индустрия 4.0
 
Взаимодействие человека и робота как двух автономных экономических агентов
Взаимодействие человека и робота как двух автономных экономических агентовВзаимодействие человека и робота как двух автономных экономических агентов
Взаимодействие человека и робота как двух автономных экономических агентов
 
Введение в децентрализованный интернет вещей
Введение в децентрализованный интернет вещейВведение в децентрализованный интернет вещей
Введение в децентрализованный интернет вещей
 
Autonomous technologies for global commercial and civil uav vendors
Autonomous technologies for global commercial and civil uav vendorsAutonomous technologies for global commercial and civil uav vendors
Autonomous technologies for global commercial and civil uav vendors
 

Погружение в Ethereum

  • 1.
  • 2. Погружение в Ethereum Сергей Лоншаков Blockchain разработчик, Airalab
  • 3. Цели #msdevcon Создание умного контракта в Ethereum Blockchain Проверка умного контракта в Ethereum Blockchain Известные атаки на умные контракты на Ethereum Рекомендации от ведущих разработчиков Ethereum. Выдержки из презентаций с devcon2 в Шанхае Атака по глубине стека, DoS при вызове исключения, условия гонки, DoS при переполнении лимита газа. Пример инфраструктуры из нескольких видов умных контрактов
  • 5. Контракт – это аккаунт Есть два типа аккаунтов в Ethereum: Аккаунт пользователя (Externally owned account сокр. EOAs): учетная запись контролируемая закрытым ключом, и если у вас есть закрытый ключ, связанный с EOA у вас есть возможность отправлять эфиры и сообщения от EOA. Контракт: учетная запись, которая имеет свой собственный код, и управляемая с помощью кода.
  • 6. Токены contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; } Описание стандарта ERC20: https://github.com/ethereum/EIPs/issues/20
  • 7. Управление взаимоотношениями 1. Конгресс / Совет директоров /Демократия 2. Escrow / Аккредитив 3. p2p + Страхование / Кредитование / Финансирование
  • 8. Управление взаимоотношениями Alice и Bob заключают пари на 100 GavCoin с триггером на основе данных о температуре в Москве. Если температура в Москве не будет выше 35 градусов в течении года, то Bob получит 100 GavCoin, иначе их получит Alice.
  • 10. #msdevcon Проверка умного контракта в Ethereum Blockchain Рекомендации от ведущих разработчиков Ethereum
  • 11. Обобщенные рекомендации к проверке кода контрактов на Ethereum платформе 1. Избегайте внешних вызовов когда это возможно, очень часто они являются причиной уязвимости 2. Отдавайте приоритет изменению состояния над внешним вызовом вызовом (включая .send()) 3. Изолируйте внешние вызовы в отдельной транзакции, например, метод withdraw для вывода средств 4. Будьте внимательны при делении целых чисел (округление происходит к ближайшему целому) 5. При делении на ноль возвращается ноль, проверяйте аргументы самостоятельно
  • 12. Обобщенные рекомендации к проверке кода контрактов на Ethereum платформе 6. Будьте внимательны к переполнению целых чисел (особенно в сравнениях) и приведению знаковых к беззнаковым в JS 7. Будьте осторожны при переборе динамических массивов, это может потребовать большое количество газа 8. Будьте осторожны с привязкой логики контракта ко времени блока, оно устанавливается майнером 9. Подумайте о способе обновления контракта в будущем 10. Используйте метки остановки работы контракта в случае чрезвычайной ситуации, например обнаружении уязвимости
  • 13. Обобщенные рекомендации к проверке кода контрактов на Ethereum платформе 11. Разделяйте критически важные вызовы во времени, например, вывод большого количества средств не чаще раза в неделю 12. Используйте формальную верификацию контрактов
  • 14. #msdevcon Известные атаки на контракты Ethereum платформы
  • 15. DoS при переполнении лимита газа Идея: объем газа в блоке ограничен, если для транзакции требуется газа больше, чем помещается в блок - она никогда не будет исполнена.
  • 16. DoS при переполнении лимита газа struct Payee { address addr; uint256 value; } Payee payees[]; uint256 nextPayeeIndex; function payOut() { uint256 i = 0; // при достаточно большом размере payees возможно превысить лимит газа while (i < payees.length) { payees[i].addr.send(payees[i].value); i++; } }
  • 17. DoS при переполнении лимита газа Противодействие: избегать итерации по большим массивам данных, либо переносить перебор на программную логику вне контракта; если невозможно избавиться от перебора, необходимо разбить его на несколько шагов, либо выполнять действия по запросу, например, добавить метод withdraw для вывода средств.
  • 18. Атака по глубине стека Идея: разрешенная глубина стека составляет 1024, вызовы глубже не будут выполнены, однако транзакция не прервется; атакующий может вызвать код с глубиной стека 1023, в таком случае вызовы из уязвимого кода, например send() не будут исполнены.
  • 19. Атака по глубине стека // INSECURE contract auction { mapping(address => uint) refunds; // [...] function withdrawRefund(address recipient) { uint refund = refunds[recipient]; refunds[recipient] = 0; recipient.send(refund); // эта строка исполнится не так, как ожидается } } // ATTACKER contract xxx { function foo(address target, address recipient, uint iter) { if (iter < 1023) foo(target, recipient, iter+1); else auction(target).withdrawRefund(recipient); } }
  • 20. Атака по глубине стека Противодействие: минимизация вызовов внутри методов, приоритет записи и учета над вызовом другого метода; а также .send() возвращает false если не может быть исполнена, необходимо при каждой отправке средств проверять возвращаемое значение.
  • 21. Условия гонки Идея: внешний вызов может произвести неконтролируемые изменения в данных контракта.
  • 22. Условия гонки // INSECURE mapping (address => uint) private userBalances; function withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; // в этом месте внешний контракт может вызвать метод withdrawBalance снова if (!(msg.sender.call.value(amountToWithdraw)())) { throw; } userBalances[msg.sender] = 0; } /// ATTACKER contract xxx { uint iter; address target; function foo(address _target) { iter = 0; target = _target; token(_target).withdrawBalance(); } function () payable { if (iter < 10) // Withrawal 10 times token(_target).withdrawBalance(); } }
  • 23. Условия гонки Противодействие: для недоверенного кода(msg.sender) приоритет в использовании .send() над .call.value(), так как количество газа для .send() очень ограничено и не может быть использовано для эксплуатации уязвимости.
  • 24. Q&A #msdevcon Погружение в Ethereum Сергей Лоншаков, sergeylonshakov@gmail.com