Анализ применения цифровой подписи: 10 из 15 топовых криптовалют не подписывают ПО

    Читая очередную новость об успешной подмене злоумышленниками кода крупного проекта, сам собой возникает вопрос: как вообще такое возможно, если код был подписан!? Пренебрежение правилами безопасности в криптосфере – оксюморон и, одновременно, факт, поэтому, чтобы данная статья не превратилась в избиение лежачего, я отобрал для анализа не новичков, а криптовалюты с вершины рейтинга CoinMarketCap. И, как вы уже догадались, не зря.


    Давайте посмотрим как обстоят дела с применением цифровой подписи в оплоте финтех революции.


    Мотивация


    Как вы, скорее всего, знаете взломы официальных сайтов и github-профилей криптопроектов происходят достаточно часто, через которые распространяется вредоносный код. Иногда подменяются адреса кошельков, в других случаях подменяется распространяемое ПО. Способы взлома различаются: происходит атака на один из узлов сети, ответственный за доставку данных и производится скрытая подмена фрагмента данных. Обнаружить подмену визуально достатчно сложно, чем и пользуются злоумышленники. Защититься от такой атаки можно несколькими способами. Стандартным считается PGP-подпись: публикация подписанных проверочных сумм. При этом PGP-ключ должен быть распространен надлежащим образом. Например опубликован на различных ресурсах (желательно больше двух).


    Анализ


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


    Результаты


    Проект Результат
    Bitcoin Core публикация ключа и кода в одном источнике
    Ethereum Geth публикация ключа и кода в одном источнике
    Ethereum SDK нет подписи
    Parity нет подписи
    XRP -
    Litecoin публикация ключа и кода в одном источнике
    Cardano Daedalus нет подписи
    Cardano нет подписи
    Stellar неопубликованы ключи
    Stellar SDK неподписанные релизы, подпись неопубликованными ключами
    IOTA IRI нет подписи
    IOTA Wallet нет подписи
    Tron Core нет подписи
    Tron Wallet нет подписи
    Neo Gui нет подписи
    Neo Cli нет подписи
    Monero публикация ключа и кода в одном источнике
    Dash Core публикация ключа и кода в одном источнике
    Dash Electrum нет подписи
    NEM Nano Wallet нет подписи
    NEM NIS неопубликованы ключи
    Ethereum Classic *
    Qtum Core нет подписи
    Zcash неподписанные релизы

    ( * ) Ethereum Classic использует сторонее ПО и не публикует информации для подтверждения релиза.


    Типичные ошибки


    1. Отсутствие подписи как таковой (10/15):
      Неподписанным может оказаться как код исполняемого кода, но чаще встречаются неподписанные библиотеки и прикладное ПО вроде кошельков.
    2. Подпись неопубликованными ключами (2/15):
      Код подписывается несколькими разработчиками, ключи которых нигде не опубликованы, а соответственно такие подписи бесполезны.
    3. Публикация ключей и кода в одном источнике (5/15).
      Очень частой ошибкой является публикация ключей по ссылке на стороннем ресурсе, либо создание единого доверенного источника в виде сайта. Таким образом для подмены данных достаточно взломать только сайт.

    Нетипичные ошибки


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


    На заметку!



    Причины


    1. Отсутствие единой стратегии. На сегодня нет инструкции, которая подходила бы большинству разработчиков для решения задач обеспечения гарантированной доставки кода на разных платформах. Велика доля самодеятельности.
    2. Моральное устаревание. Если взглянуть на основные сайты технологии PGP, то складывается впечатление, что технология пребывает в забвении:
    3. Отсутствие комплексного инструментария для публикации и проверки подписи. Даже при наличии желания пользователь столкнется с серьезными препятствиями на пути – многие пользователи не умеют и не готовы использовать консоль обязательную для проверки подписи. Даже для разработчиков использование подписи является нетривиальной задачей.
    4. Устаревший протокол обмена ключами. В 21 веке, когда разработчики практически не встречаются лично, устраивать обмен ключами на p2p основе становится не слишком удобно и нужны инструменты для более быстрого распространения и отзыва подписи.

    Советы


    Лучшие советы в данной ситуации:


    1. Разделять ключи по задачам (это поможет избежать утечки мастерключа или использования ключа разработчика для подписи релиза).
    2. Дублировать информацию в нескольких источниках, например на официальном сайте и на Github (взломать два ресурса одновременно сложнее чем один).
    3. Формировать человекочитаемые url (их легче запомнить и проверить).

    Инструкция


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


    Используем GPG с Git
    1. Скачиваем ПО для управления ключами:
      1. Linux (Не требует установки, используйте gpg2).
      2. MacOS GPG Tools.
      3. Windows GPG4Win.
    2. Генерируем ключ:
      > gpg2 --gen-key
    3. Получаем отпечаток ключа:
      > gpg2 --fingerprint user@localhost
      gpg: checking the trustdb
      gpg: marginals needed: 3  completes needed: 1  trust model: pgp
      gpg: depth: 0  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
      gpg: next trustdb check due at 2020-07-01
      pub   rsa2048 2018-07-02 [SC] [expires: 2020-07-01]
            E5F1 2C73 045F 1E85 302D  A9D5 269E 7C5E B852 68BB
      uid           [ultimate] User <user@localhost>
      sub   rsa2048 2018-07-02 [E] [expires: 2020-07-01]
    4. Добавляем ключ в git (см. stackoverflow):
      > git config user.signingkey E5F12C73
    5. Подписываем коммиты с добавлением ключа -S:
      > git commit -S -m 'Signed commit'
    6. Экспортируем ключ:


      > gpg2 --armor --export user@localhost
      -----BEGIN PGP PUBLIC KEY BLOCK-----
      
      mQENBFs6VDsBCADzd5F4jaJr7Dzp11+h5CmnRNHGSTWOMQe+TSXljR351BCF9hS6
      VrIizaPCVkLW/ATsqdf6vZEApvbQplwHecFPwMpFhusTOILk7lsuXm8w5CscqgBo
      KiZdSBa9bpWmFrSsPgD8/2VMlQdh+3uChOKapsLo7cHKXNuWX8b1L30twNwgavMc
      Sel/3clO7Bwp9cFftyktsM/HtSUu1oaE//dibS60HzwmscPHsIIoYsfUSCEOj08f
      DwK2vLbPilYKyE7fONJpXCSPk5pfDnNxzdFWylNBTQL8benhCtSyfabbtHmeywe+
      VWfRAGf/BRjjb7meAMX5vO6qh1l4FfHVo7irABEBAAG0FVJ1bWtpbiA8c3BhbUBy
      dW1rLmluPokBVAQTAQgAPhYhBOXxLHMEXx6FMC2p1SaefF64Umi7BQJbOlQ7AhsD
      BQkDwmcABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJECaefF64Umi7e4kIALs2
      0wbQ0g5557cIbN/eXeK+DsyZFyp3D95RoOnLgWiDknVBluRyPY1QFkjKgNNepMNr
      7TM1eNev1CcSDLkuUxlLMrDH9AsAIVWFl7v1+/npJuHkazylU2DgssWICF0yKgWZ
      tzOQUEDwX7xwIJ3g5v44Lymq0hPi56FVv+rq15hkNsqIOyjDQNVGROUURyO/+vUP
      khOa2ryjWCpdBzoRNxSyVMlyoABLHwTfXDkCFHV9T7bOa/o0GqILOZ7wCBN9tT5C
      38ellwu/HTCtmzZsWvl3a6g8JcunB9yV3RZFQgUDvLEjiVoY2qqn/SWgcl6QR2Ro
      aEwTKk/p3PU1Foz7mEC5AQ0EWzpUOwEIAPbKGT/xzJ9JvXhMyoOGQZNWkqyXKtV4
      zVdfdjxkWMrsMD/C2K1CQ5HPafTM9G/kATGCAmoFPCdLwrc9QqOw3H8PNxnph3Ca
      irvp0ICj6KDiuCCuptJYICzllKriyLhUDyFkb7GPpRgHpKJZMVCkRbDEau3jcJEx
      jsdUnjf3gDpEnkuV1pwSxGFxTV3vHNQBqGbFG8mjVkfZSnB++e+tyKPhC5X0QFue
      K2AlHbnj0/uXZ9wYfRTOJsbW6myR0k1edo7Y5P93fhpW49wwaMTe2Q9p+m6zRguf
      8vC9sGUB/eGD9+6OwtIZJ6ZlUa8/MYUBr9er/z+hl7ApdpibChCb8lUAEQEAAYkB
      PAQYAQgAJhYhBOXxLHMEXx6FMC2p1SaefF64Umi7BQJbOlQ7AhsMBQkDwmcAAAoJ
      ECaefF64Umi7e3UIAO9ixyXaKmsfWVB11tYPHP+9Xo2s0RRanNMyqAcp1se3jQBZ
      Z7gfr7DBFBFPU0KeOibWXysMz54hXImxDgYQPKFznzKB5463DiZt8pYjxdphX4/j
      m6ccw1GnpImRJHpu3mMPSItd/QDqEl87KqSw+IojaLDid3QeL0uRzi2k5/Jwz6ru
      QMCwdKIMBDPw936YOsfHjQx1RTY9NC59cW1i0lU813By1J80hd24aIJH5vVyYI/I
      suz153mZUZ+dmN0F6wfnuqNzeCfJRoHKh45ABDD3cRQ2kE76UQ4Kr0xb0G512yUO
      WJFT8ff3EWn1FulR7bmprA4HHACyx/otL7P777E=
      =zi5u
      -----END PGP PUBLIC KEY BLOCK-----

    7. Копируем результат и добавляем в доверенные ключи в интерфейсе Github, Gitlab или Bitbucket.

    Заключение


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

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Используете ли вы PGP-подпись
    • +14
    • 3,5k
    • 6
    Поделиться публикацией
    Комментарии 6
      0
      Если взглянуть на основные сайты технологии PGP, то сразу станет ясно, что технология пребывает в забвении


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

        Заменил


        Если взглянуть на основные сайты технологии PGP, то сразу станет ясно, что технология...

        На


        Если взглянуть на основные сайты технологии PGP, складывается впечатление, что технология...

        Смысл в том, что у новичков нет мотивации инвестировать время в технологию, которая выглядит устаревшей.

          –1
          Если новичек технический дилетант, то перед инвестированием он должен заказать техническую экспертизу.
        0
        Устаревший протокол обмена ключами. В 21 веке, когда разработчики практически не встречаются лично, устраивать обмен ключами на p2p основе становится не слишком удобно и нужны инструменты для более быстрого распространения и отзыва подписи.


        [irony] PKI? [/irony].
        Вопрос как обычно в доверии. И в паранойе. Согласны ли вы подписать ключ друга, если он продиктует fingerprint по телефону? А если пришлет его через телеграм? Через обычный e-mail? Будете ли вы доверить другим ключам, подписанным вашим другом? А если это не друг, а просто знакомый с конференции?
          0

          PKI на блокчейне, почему нет? (в варианте без единого CA).


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

            0
            Единого CA нет и сейчас. Чем и спасаемся, собственно говоря. Если бы существовал всего один монопольный CA — мы бы жили в ужасном мире.

            Блокчейн — это такая распределенная БД, которая, благодаря своему дизайну не допускает внесений изменений задним числом.

            Текущие сети доверия (Web of Trust) тоже в общем распределены и не позволяют вносить изменения задним числом. В том смысле что я не могу сгенерить новый ключ и волшебным образом получить подписи от других ключей.

            PKI в блокчейне ничем не будет отличаться от простого PKI. Мы либо доверяем конкретно этому CA, либо не доверяем.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое