Как уменьшить вероятность взлома кошелька Ethereum?

Резюме

Взлом, произошедший 12 мая 2016 года, чтобы украсть 7 218 эфиров от Патрика, затрагивает только шахтеров, где:

  • Входящие соединения RPC из Интернета по TCP-порту 8545 отправляются на компьютер, на котором запущено программное обеспечение узла Ethereum geth;
  • geth работает с включенными параметрами --rpc; и
  • Кошелек Ethereum (Mist) используется на той же машине geth и используется для отправки транзакции, требующей разблокировки учетной записи geth в течение 2-секундного периода .

Хакер отправил непрерывный поток (каждые 2 секунды) запроса sendTransaction(...) на IP-адрес Патрика на порт 8545, и этот запрос был перенаправлен на geth. Когда Патрик использовал Кошелек Эфириума, чтобы отправить транзакцию, Эфирный Бумажник разблокировал учетную запись Патрика в течение 2 секунд, и транзакция хакера позволила переместить эфиры Патрика на счет хакера.



Подробности

Пользователь Патрик на Форум DAOHub вчера опубликовал сообщение с темой [Срочно] Покупка DAO с использованием Mist взломала .

Патрик использовал Кошелек Эфириума, чтобы перенести 1 эфир, чтобы проверить покупку TheDAO токенов на его интеллектуальный компьютер . Когда (пока что кажется, что) кошелек Эфириума разблокировал кошелек geth в течение 2 секунд (через API IPC, не подверженный интернету), бот, наблюдавший за его geth, чтобы отправить инструкцию передачи на geth (через JSON-RPC, выставленную в Интернете) и перенесла оставшиеся 7218 эфиров в учетную запись хакера.


Вот отчет Патрика, показывающий 1 эфирную передачу до удаления оставшегося баланса ~ 17 секунд спустя ( 0x95a3ba0aabc6296cbbe3862a889ecb37979da493 ) : «введите


Вот счет хакера, показывающий, что 7 218 эфиров разделены на многие фрагменты 97,54489533580829 эфирных транзакций ( 0xc5d431ee2470484b94ce5660aa6ae835346abb19 ) : «введите


Ниже приведен фрагмент кода из кошелька Ethereum mist /interface /client /templates /popupWindows /sendTransactionConfirmation.js # 228 , который разблокирует учетную запись geth на 2 секунды:

    web3.personal.unlockAccount(Session.get('data').from, pw || '', 2, function(e, res){

1 транзакция ETH произошла в 2016-05-12 03:12:57. Операция ETH 7218.368874849814 произошла в 2016-05-12 03:29:03, ~ 17 секунд после транзакции 1 ETH, которая представляет собой 2-секундное окно + среднее время ~ 15 секунд Ethereum.


После взлома Патрик провел анализ на своем компьютере и обнаружил сетевые коммуникации каждые несколько секунд над портом 8545 RPC geth, выполнив следующие команды:

  • eth_accounts - список учетных записей в экземпляре geth
  • eth_mining - чтобы узнать о деятельности по добыче на узле
  • miner_setEtherBase - попытаться установить учетную запись etherbase geth, но это не удалось.
  • eth_getBalance - найти баланс счетов Патрика


Возникает вопрос, почему RPC-порт 8545 был включен, так что RPC-связь из Интернета будет перенаправлена ​​на компьютер geth.

Патрик запускает микропроцессоров GPU за пределами своей сети и разрешает переадресацию портов для порта 8545 для своих шахтеров-гигантах вне своей сети, понимая, что его учетная запись останется заблокированной на 99,99% времени. Все, что у него было, было 2-секундным окном.



Как показано ниже @tayvano, Святое дерьмо, мои учетные записи были взломаны документирует другой эксплойт по протоколу RPC.

Также обратите внимание, что хакер, имеющий доступ к локальной машине, также сможет получить доступ к IPC-связи geth в течение этого 2-секундного периода разблокировкиотправлять транзакции изгоев.


Какие шаги можно предпринять для снижения шансов на это?

43 голоса | спросил The Officious BokkyPooBah 13 Mayam16 2016, 02:49:58

3 ответа


29

(Пожалуйста, отредактируйте меня. Я - сообщество wiki)

Резюме

  1. Не разрешать отправку запроса TCP на порт 8545 из Интернета на ваш компьютер geth
  2. Не включайте --rpc, не проверяя, что только ваши компьютерные компьютеры с графическим процессором могут получить доступ к TCP-порту 8545 на вашем компьютере Ethereum geth
  3. Не запускайте кошелек Ethereum на том же компьютере, что и ваш компьютер geth.
  4. Если вам нужен «сольный пул шахт», подумайте об использовании программного обеспечения бэкэнда пула, которое ограничит инструкции, которые будут перенаправлены на ваш экземпляр geth.

РЕДАКТИРОВАТЬ 31/05/2016 - ОГРАНИЧЕНИЕ БЕЗОПАСНОСТИ!

От blog.ethereum. org - Security Alert - cpp-ethereum сохраняет учетные записи разблокированными :

  

Пострадавшие конфигурации : cpp-ethereum (eth, AlethZero, â € |) версии 1.2.0 до 1.2.5 (исправлено в 1.2.6)   Примечание: на это не влияют ни «geth», ни «Mist», ни «Ewhereum Wallet» (если явно не используется вместе с cpp-ethereum), они снова блокируют учетные записи.

     

Уровень важности : высокий

     

Возможные атаки . Атакующие могут тратить средства из ранее использованных учетных записей, если они имеют доступ к локальному компьютеру или к открытому интерфейсу json-rpc.

     

Детали . Из-за ошибки в cpp-ethereum учетные записи остаются разблокированными после того, как их пароль был введен, пока cpp-ethereum не будет закрыт. Сюда входят учетные записи, зашифрованные «паролем мастера», введенные при запуске, или любой пароль, введенный через Mist. Это означает, что злоумышленник может тратить средства со счета, как только они имеют доступ к интерфейсу RPC. Для этого им либо нужен доступ к локальной файловой системе, либо к зараженному интерфейсу http-json-rpc (а не по умолчанию). Использование Mist в «Mist mode» (не настройка по умолчанию) и переходе на вредоносный веб-сайт также обеспечивает доступ к веб-сайту для интерфейса RPC.

     

Предлагаемое временное обходное решение . Перезапустите eth после каждой транзакции, не подвергайте интерфейс json-rpc через http и обновляйте до версии 1.2.6, как только будут выпущены двоичные файлы. Фиксирование уже было объединено с веткой разработки.



Подробнее

Вот несколько шагов, чтобы уменьшить вероятность того, что ваш кошелек Ethereum взломал.


1. Ограничить доступ к RPC на ваших интеллектуальных компьютерах

Для большинства шахтеров Ethereum вы будете использовать geth для запуска узла blockchain и ethminer для выполнения вычислений добычи.

Если вы используете только один экземпляр geth и ethminer s только на одном компьютере, ограничьте свой порт RPC только службой на локальном компьютере. Параметр --rpcaddr 127.0.0.1 (который является настройкой по умолчанию) ограничит ваши сообщения RPC только этим компьютером.

Если на одном компьютере запущен только один экземпляр geth и ethminer на том же компьютере плюс ethminer) на других компьютерах, связь с одним экземпляром geth, вам придется использовать IP-адрес вашей локальной сети вашего компьютера, например --rpcaddr 192.168.1.123. В этом случае лучше всего настроить брандмауэр, чтобы ограничить связь с помощью RPC с помощью geth только на ваших установках.


2. Не запускайте кошелек Ethereum (Mist) On Your Mining geth Компьютер узла

Если вы запустили Mist на своем узле интеллектуального анализа, когда вы отправляете транзакцию с Mist, он будет связываться через сокет IPC, чтобы проинструктировать geth, чтобы разблокировать вашу учетную запись в течение 2 секунд.

Если вы включили RPC, и этот порт доступен из Интернета, скрипты и боты смогут отправлять транзакции на вашем узле geth, чтобы вырвать ваши монеты за короткий промежуток времени, чтобы Mist разблокирует ваши учетные записи, как это случилось с Патриком.

Если вы отключили RPC и ваш компьютер с горным компьютером был взломан, любое локально установленное вредоносное ПО сможет использовать сокет IPC для выхвата ваших монет.

Не запускать Mist на вашем компьютере с компьютером . Вместо этого используйте его на отдельном защищенном компьютере.


3. Проверьте, что вы $HOME/.ethereum/history Файл и стирание, если необходимо

История команд, которые вы вводите в geth ... console, хранится в $HOME/.ethereum/history. Ниже показано, что я только что набрал в консоли:

> eth.mining
true
> personal.unlockAccount(eth.accounts[0], "invalidpassword", 2)
Decryption failed: MAC mismatch
    at InvalidResponse (<anonymous>:-81662:-62)
    at send (<anonymous>:-156322:-62)
    at unlockAccount (<anonymous>:-133322:-62)
    at <anonymous>:1:1

И вот последние две строки моего файла $HOME/.ethereum/history:

eth.mining
personal.unlockAccount(eth.accounts[0], "invalidpassword", 2)

Проверьте содержимое файла истории с помощью команды:

[email protected]:~$ grep unlock $HOME/.ethereum/history
personal.unlockAccount(eth.accounts[0], "invalidpassword", 2)

Если вы когда-либо использовали команду personal.unlockAccount(...), сотрите свой файл истории:

rm $HOME/.ethereum/history

По умолчанию каталог, в котором находится ваш файл истории, доступен только для чтения вашим собственным пользователем. Но если ваша учетная запись скомпрометирована, ваш пароль находится в вашем файле истории:

[email protected]:~$ ls -al | grep .ethereum
drwx------   9 user user       4096 May 14 00:28 .ethereum


4. Переместите свои награды за добычу, если они слишком много теряют

Ваш компьютер для работы с компьютером постоянно взаимодействует с другими программами в Интернете и рискует получить компрометацию.

Хакеры могут легко найти узлы Ethereum в Интернете, и ваш компьютер может быть нацелен. Переместите ваши награды за добычу в более безопасную учетную запись Ethereum, чтобы уменьшить размер ваших потерь, если вы получили взломанные.


5. Уменьшите поверхность атаки, если возможно

Запустите сервер версию Ubuntu Linux, если это возможно. Это немного сложнее в установке, особенно для графических процессоров, но у вас меньше шансов получить взломанное количество запущенных в этой версии меньше, чем в настольной версии.

  • Ubuntu Desktop имеет гораздо больше бит программного обеспечения, работающего постоянно с открытыми портами. Если вам нужно использовать рабочий стол Ubuntu, отключите ненужные службы, не устанавливайте ненадежное программное обеспечение. Вы можете использовать настройки конфиденциальности, чтобы уменьшить утечку информации:

    • Настройки -> Безопасность & Конфиденциальность -> Файлы и приложения OFF
    • Настройки -> Безопасность & Конфиденциальность -> Поиск OFF
    • Настройки -> Безопасность & Конфиденциальность -> Диагностика ALL OFF
    • /etc/default/appport. Установите enabled=0
  • Mac и Windows постоянно звонят домой и, скорее всего, имеют бэкдоры для Apple и Microsoft соответственно. Даже если у Apple и Microsoft мало стимулов проявлять себя, используя бэкдоры, непрерывная болтовня затрудняет обнаружение ненормальной связи между вашим сервером и другими компьютерами.


6. Защитите свою сеть

  • Убедитесь, что у вас есть относительно безопасный ADSL-модем /маршрутизатор или сетевое устройство. Бэкворы иногда устанавливаются производителем и вашим интернет-провайдером (если у вас есть модем от них как часть сервиса). В то время как они могут не захотеть причинять вредоносные повреждения, используя хакеры, хакер использовал некоторые из слабо защищенных сетевых устройств. Например, см. Cisco, Linksys, Netgear backdoors .
  • Запустите свои интеллектуальные компьютеры в DMZ (демилитаризованной зоне), чтобы отделить ваши интернет-компьютеры с открытым доступом от других сетевых устройств. Вы должны проверить функциональность DMZ вашего сетевого устройства, если вы используете это, поскольку я столкнулся с некоторыми сетевыми устройствами, которые не разделяют DMZ должным образом.
  • Брандмауэр для ваших компьютеров с мини-компьютерами, так что единственным входящим портом из Интернета является TCP и UDP 30303, а если у вас включен RPC для вашего экземпляра geth, разрешите только связь в RPC-порту с вашего интеллектуальных компьютеров.


7. Не использовать пользователя root (или пользователь с привилегиями администратора) для запуска ваших шахтеров

Если у ваших интернет-программ (geth) есть уязвимость, хакер может нанести больше урона, если программа работает с правами администратора.


8. Проверьте правила переадресации портов на вашем маршрутизаторе или брандмауэре

Только порт 30303 для трафика TCP и UDP должен быть перенаправлен вашим модемом или брандмауэром на ваш компьютер с кодом geth. Порт 8545 (или независимо от того, что вы настроили для своего порта RPC) НЕ должен быть перенаправлен на ваш компьютер с кодом geth.

Мои правила брандмауэра предназначены для моих 2 горных вышек (.120 имеет экземпляр geth, .121 - это просто шахматист GPU, .111. * - мой DMZ):

* Allow Internet to DMZ geth machine TCP 30303
    Protocol TCP, Source Any, Destination 192.168.111.120:30303
* Allow Internet to DMZ geth machine UDP 30303
    Protocol UDP, Source Any, Destination 192.168.111.120:30303
* Allow Ethereum RPC 8545 traffic from GPU miner to geth machine
    Protocol TCP, Source 192.168.111.121, Destination 192.168.111.120:8545
* Allow SSH traffic to mining rigs
    Protocol TCP, Source 192.168.1.*, Destination 192.168.111.*:22
* Block everything else
    Protocol *, Source Any, Destination 192.168.111.*:*


9. Тест для открытых портов в вашем интернет-подключении

Используйте службу, например GRC, для поиска открытых портов в вашем интернет-соединении. Нажмите grc.com , нажмите Щиты UP !! , затем нажмите ShieldsUP! снова. Прочтите текст и нажмите «Продолжить».

На приведенной ниже веб-странице я набрал порты 8545, 30303 и нажал Пользовательский настраиваемый пробник порта :

 введите описание изображения здесь>> </a> </p>

<p> Результаты зонда показаны ниже. Порт 8545 (<code>geth</code> RPC) не открыт для Интернета, а порт 30303 (порт Ethereum P2P):
<a href=«введите

Вероятно, рекомендуется одновременно проверять все порты обслуживания (порты от 0 до 1055), чтобы подтвердить, какие порты вы открыли. Следующие результаты показывают, что я открываю только порт 443 (HTTPS): «введите


10. Открытие портов RPC для горняков за пределами вашей сети (собственный собственный бассейн для горного дела с вашими распределенными горняками)

Не открывайте свой порт RPC 8545, если у вас есть гонорары графического процессора вне вашей сети.

Ваши альтернативы, если у вас есть графические процессоры за пределами вашей сети с помощью экземпляра geth:

  1. Запустите geth локально в каждой из ваших сетей шахтеров GPU, указав, что это необходимо, на одну и ту же учетную запись монеты; или
  2. Попробуйте запустить компонент geth open-ethereum-pool . Вам не нужно запускать веб-интерфейс, модули ether-pool или unlocking. Только безопасная инструкция от /к шахтерам GPU в /из payout проходит через программное обеспечение пула шахт. Одним из преимуществ использования этого программного обеспечения является то, что вы получаете лучшую производительность от протокола прокси-сервера stratum. Возможность разминировать с конкретной коинбазой (адрес выплат) не зависит от узла добычи, имеющего доступ к закрытым ключам coinbase; вы можете сгенерировать адрес и закрытый ключ на другом компьютере и установить коинбазу узла узла добычи на сгенерированный адрес. Это уменьшает ущерб от уязвимого узла: прошлые выплаты не могут быть украдены, просто скомпрометируя узел.
ответил rupshabagchi 22 J0000006Europe/Moscow 2016, 16:39:14
10

0. Прочтите официальное уведомление по безопасности.

ethereum blog: [security alert] небезопасно настроенный geth может делать удаленные средства удаленно

1. Никогда не включайте RPC на горячие кошельки. Даже с IP и CORS ограничено локальным хостом. Просто не делайте.

geth                # rpc is disabled by default
eth                 # rpc is disabled by default
parity              # rpc is disabled by default

2. Никогда не включайте IPC на машине, которую вы не чувствуете, что имеете полный контроль над безопасностью. Или используйте четность.

geth --ipcdisable   # ipc is enabled by default, turn it off
geth --no-ipc       # ipc is enabled by default, turn it off
parity              # parity has not ipc (yet)

3. Не используйте учетные записи для хранения огромного количества эфира. Использовать многозначные контракты.

4. Не используйте онлайн-компьютеры для хранения огромного количества эфира. Пользовательские воздушно-десантные машины или бумажные кошельки.

ответил Afri 13 Mayam16 2016, 10:25:06
0

Полагаю, возможно, что Mist не использует подписанные транзакции, а скорее разблокирует учетную запись для отправки неподписанных транзакций. Поэтому, возможно, отправка подписанных транзакций с использованием web3 в консоли командной строки NodeJS или с помощью скрипта позволит отправлять транзакцию без риска атаки. Это предполагает, что учетные записи никогда не разблокируются при отправке подписанных транзакций, но я не уверен, что это так.

Комментарии будут оценены

ответил John Shearing 27 FebruaryEurope/MoscowbMon, 27 Feb 2017 15:17:17 +0300000000pmMon, 27 Feb 2017 15:17:17 +030017 2017, 15:17:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132