1. Введение

Будьте уверены, что всегда будут желающие позариться на чужие средства, хотим мы того или нет. Проблеме безопасности их хранения уже не первая тысяча лет, и она будет актуальна еще явно долгое время. В данной статье мне хотелось бы затронуть аспекты безопасности хранения средств в кошельке Bitcoin, хотя описанные ниже идеи и приемы можно использовать и для безопасного хранения других электронных кошельков и не только. Тем, кто только знакомится с биткоином, полезно будет сначала прочитать статью "Что такое биткоин?".

Анализ угроз

Для начала давайте определимся с угрозами, и как мы будем от них защищаться. Если вы используете кошелек версии ниже 0.4.0, то данные о ключах в нем хранятся в открытом виде, и злоумышленнику достаточно получить ваш файл wallet.dat чтобы похитить все ваши средства. Каким образом злоумышленник может получить этот файл? Самый распространенный способ - через программы "трояны", которые незаметно для пользователя выполняют действия злоумышленника. Получить такую программу можно из сети Интернет, скачав с сайтов вместе с другими программами "в довесок", получив незаметно с зараженных сайтов, получить по почте, с зараженной флэшки и еще много других способов. Еще одним способом попадания файла в руки злоумышленника может быть потеря флэшки с кошельком, или считывание с выброшенного жесткого диска, после апгрейда, например. Начиная с версии 0.4.0 в кошельке появилась функция шифрования, которую можно включить в опциях программы. Но не стоит надеяться на нее, как на панацею, вредоносные программы довольно быстро адаптируются к новым методам защиты, и ничего не помешает такой программе считать введенные с клавиатуры символы, когда вы вводите свой пароль.

Еще одной угрозой могут быть мошеннические действия, когда, например, недобросовестный трейдер покупает у вас BTC за PayPal, получает BTC, шлет жалобу на невыполненную сделку, PayPal отменяет платеж, и злоумышленник получает ваши средства ничего не заплатив. Другой пример - некий онлайн сервис, заявляющий, что на нем можно безопасно и удобно хранить свои средства, может даже получать проценты и другие полезные сервисы, в один не прекрасный момент закрывается и исчезает со всеми сбережениями доверявших ему клиентов. К сожалению, случаев подобных известно достаточно, и от таких действий техническая защита практически бесполезна, надо всегда думать своей головой, кому и зачем посылаются средства.

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

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

В качестве гипервизора мной был выбран Oracle VirtualBox за свою бесплатность и универсальность. В качестве гостевой операционной системы будет использоваться Windows Server 2008 R2, у него есть довольно длительный тестовый период, которого хватит, чтобы отразить все описанные в статье нюансы настройки, а кому его не хватит, есть замечательная команда slmgr -rearm, которая может несколько раз запустить тестовый период с начала, и даже после его окончания ОС позволяет работать с собой. Для шифрования будет использована встроенная шифрующая файловая система EFS, а для контроля доступа внутри гостевой ОС будут особым образом настроены права ACL на папку с кошельком.

2. Установка дистрибутивов

Качаем Oracle VM VirtualBox с официального сайта:
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html

Качаем Windows Server 2008 R2 with SP1 с официального сайта(понадобится live id):
http://www.microsoft.com/en-us/server-cloud/windows-server/2008-r2-trial.aspx

На диске хост-машины, на котором будет лежать образ виртуальной машины, очень рекомендую включить теневое копирование. В Windows 7 оно включается в свойствах системы – защита системы.

Открываем VirtualBox, создаем новую виртуальную машину.

Создание виртуальной машины VirtualBox

Жесткий диск советую делать не менее 20Гб, остальное по вкусу и возможностям компьютера. Заходим в настройки только что созданной виртуалки, на вкладке «Носители» справа от надписи «Привод» кликаем по значку диска, выбираем наш свежескачанный образ 2008 сервера. Все, можно запускать виртуальную машину. Указываем языки по вкусу, редакцию Standart (Full edition) нам вполне хватит. На этапе разбивки жесткого диска конфигурацию каждый под свои нужды рассчитывает, я разбил 80Гб диск на 30 под систему и 50 под данные.

Для надежности уберем возможность загрузки виртуальной машины с иных носителей, кроме основного жесткого диска после инсталляции ОС. Заходим при выключенной виртуалке в ее свойства и ставим первым и единственным загрузочным устройством жесткий диск, а CD-ROM вообще убираем из списка подключенных устройств.

Первое, что делаем после установки ОС и задания сложного(!) пароля администратора, это включение автоматического обновления и установка обновлений безопасности.

3. Настройка ОС

После установки всех обновлений безопасности включаем теневые копии на диске, где будет лежать кошелек, в 2008 сервере делается это в свойствах диска на вкладке Shadow Copies.

Включение теневых копий в Windows 2008 server

В тех же свойствах на вкладке General нужно убрать галку с разрешения индексировать файлы и папки.

Настройка сети

Заходим в свойства адаптера ( ncpa.cpl) local area connection и в Properties убираем галочки у всех протоколов и служб, кроме Internet Protocol Version 4. Параноики могут еще и сменить DHCP адрес на статический.

Настройка служб

Отключаем большинство не нужных для наших целей служб, это сузит круг потенциально опасных мест. Перейти к ним можно через Control Panel – All Control Panell Items – Administrative Tools – Services. Вот список служб, которые я отключил:

  • Print spooler
  • Remote registry
  • Windows Remote Management
  • Problem Reports and Solutions Control Panel Support
  • Remote Access Auto Connection Manager
  • Remote Access Connections Manager
  • Remote Desktop Configuration
  • Remote Desktop Services
  • Remote Desktop Services UserMode Port Redirector
  • WinHTTP Web Proxy Auto-Discovery Service

Ваш список может отличаться от моего в зависимости от соотношения лени и паранои.

Создание пользователей

Нам понадобится создать дополнительно 2 пользователя, под первым мы будем заходить на сервер, т.к. под Администратором это делать неправильно, и второй для работы с кошельком. Войти в оснастку управления пользователями можно командой lusrmgr.msc или через Computer Management. Первого пользователя я назову user, второго banker, на своих системах лучше назовите их по-другому и задайте сложные пароли в целях безопасности.

Настройка политик

Чтобы каждый раз при выключении или перезагрузке не докладывать серверу, с какой целью мы это делаем, запускаем редактор политик gpedit.msc идем по пути Computer Configuration > Administrative Templates > System и в правой части окна выберите вариант настройки “Display Shutdown Event Tracker” в открывшемся окне ставим активным значение Disabled и нажимаем Ok.

Далее идем по пути Computer Configuration > Windows settings > Security settings > Local Polices > User Rights Assignment и в правой части окна выберите вариант настройки “Shut down the system”. Добавьте в список пользователей, которым система будет разрешать выключать и перезагружать компьютер, пользователя user через кнопку “Add User or Group”.

По тому же пути добавляем всех наших троих пользователей - Administrator, banker и user в пункты “Deny access to this computer from the network”, “Deny log on as a batch job”, “Deny log on as a service”, “Deny log on through Remote Desctop Services”, чтобы единственным методом входа в компьютер остался локальный вход. В итоге политики должны выглядеть примерно так:

Настройка групповых политик в Windows 2008 server

Наводим косметику

В свойствах системы в разделе Computer Name задаем более понятное имя системе, в моем случае компьютер стал называться my_bank, можно сменить рабочую группу.

В свойствах системы в разделе Advanced в настройках Perfomance ставим Adjust for best performance.

В Server Manager в правой колонке жмем на Configure IE ESC и для администраторов выключаем дополнительную защиту, это понадобится для скачивания кошелька и антивируса, потом ее можно включить назад.

Смена имени компьютера и рабочей группы в Windows 2008 server

4. Установка и настройка ПО

Антивирус

Антивирус дело религии, но лучше его держать на всякий случай, я на эту виртуалку поставил Microsoft Essentials, скачать можно тут - http://www.microsoft.com/ru-ru/security_essentials/default.aspx

Кошелек

Качаем с официального сайта http://bitcoin.org/ программу кошелька(.zip версию). Распаковываем в подготовленную для него папку, у меня папка с программой кошельком будет лежать по адресу D:\bitcoin, а каталог данных, в котором лежит wallet.dat и скачанные блоки будет располагаться в папке D:\wallet.

Далее открываем блокнот и пишем в него следущую строку – D:\bitcoin\bitcoin.exe –datadir=D:\wallet

Перенаправление папки кошелька биткоин
После чего сохраняем с расширением .cmd и любым именем, я дал имя run.cmd. После этих действий запускаем полученный командный файл, и пока запустившийся кошелек закачивает блоки, продолжаем его настройку. Входим в Settings > Options, убираем галку напротив «Start Bitcoin on system startup», остальные параметры, в том числе встроенное шифрование кошелька, выставляем на свое усмотрение.

Настройка Firewall

Заходим под администратором, Control Panel – All Control Panel Items – Windows Firewall и кликаем “Allow a program or feature through Windows Firewall”. В этом окне убираем все галочки и жмем Ok, для работы кошелька эти программы и службы нам не нужны.

Настройки Firrewall в Windows 2008 server
Параноики могут еще зайти в Advanced settings и настроить правила трафика более детально.

Шифрование и доступ

Закрываем корректно кошелек, щелкаем правой кнопкой по папке wallet, выбираем properties , заходим на вкладку Security, нажимаем Advanced > Change Permission. Снимаем галочку напротив Include inheritable permissions from this object’s parent, на всплывающем запросе жмем кнопку Remove. Эти действия удалят все наследованные права на папку. Жмем пару раз ok, на вкладке Security нажимаем Edit > Add, добавляем пользователя banker и даем ему права в том числе на редактирование, после чего удаляем всех оставшихся пользователей и группы, сохраняем, итоговые значения должны получиться такие:

Настройки Firrewall в Windows 2008 server

Заходим в виртуальную машину от имени пользователя banker. Щелкаем правой кнопкой по папке wallet, выбираем properties, и на вкладке General снизу нажимаем на кнопку Advanced, в открывшемся окне ставим галку напротив Encrypt contents to secure data, жмем ок, в окне подтверждения выбираем Apply changes to this folder, subfolder and files. Подтверждаем, дожидаемся окончания процесса шифрования.

Теперь только пользователь banker может пользоваться кошельком, для остальных он зашифрован, даже если украдут образ виртуальной машины или физический компьютер, без ключа пользователя banker до кошелька не добраться. После выполнения приведенных выше действий никто, кроме banker, не имеет доступа к папке кошелька по правам NTFS, плюс папка зашифрована EFS с ключом пользователя banker.

Но есть одно но, сидя под banker любая программа может вытащить данные, от этого защитимся следующим образом: мы не будем заходить под пользователем banker, а заходить будем под пользователем user, а запускать кошелек будем от имени banker. Для этого изменим файл run.cmd следующим образом: кликаем по нему правой кнопкой мыши, нажимаем edit и изменяем содержимое на Runas /user:my_bank\banker “D:\bitcoin\bitcoin.exe –datadir=D:\wallet”

После этих действий запуск run.cmd будет сопровождаться запросом пароля пользователя banker, кто его не знает не сможет запустить кошелек.

запрос пароля на работу с кошельком

Ограничения на вход

Настройка почти завершена, осталось только убрать возможность входа пользователей Administrator и banker с страницы приветствия, т.к. у banker есть все права на кошелек, а у Administrator – на систему. Сейчас окно приветствия имеет следующий вид:

Настройки Firrewall в Windows 2008 server

А раз уж система у нас настроена и кошелек защищен, запускаем под администратором редактор реестра командой regedit, идем по пути HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ У раздела “Winlogon” создаем подраздел “SpecialAccounts”, а в нем подраздел “UserList” В этом подразделе создаем запись типа DWORD (New-> DWORD (32bit) Value) с именем banker, значение 0 не меняем. Аналогично создаем запись с именем Administrator.

Настройки Firrewall в Windows 2008 server

Это действие не запрещает локальный вход, но убирает указанных пользователей из окна приветствия, то есть иначе как под пользователем user теперь не войти.

Настройки Firrewall в Windows 2008 server

Если нам понадобится что- то изменить в настройке сервера, то можно запустить редактор реестра от администратора и убрать внесенные записи, что позволит выполнять вход как от администратора, так и от banker’а, хотя предпочтительнее просто запускать нужные оснастки от имени нужного пользователя, сделать это можно зажав Shift+ правая кнопка мышки по объекту -> Run as different user -> ввести логин и пароль нужного пользователя.

5. Заключение

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