Преминете към защитена 2FA на блокчейна

SMS съобщенията са най-популярният метод за двуфакторно удостоверяване (2FA). Използва се от банки, електронни и крипто портфейли, пощенски кутии и всякакви услуги; броят на потребителите на метода наближава 100%.

Възмутен съм от този сценарий, защото този метод не е безопасен. Преназначаването на номер от една SIM карта на друга започна в началото на мобилната ера - така се възстановява номерът при загуба на SIM карта. „Специалистите по кражба на цифрови пари“ разбраха, че опцията „пренаписване на SIM карта“ може да се използва в измамни схеми. В крайна сметка този, който контролира SIM картата, може да контролира онлайн банкирането, електронните портфейли и дори криптовалутата на други хора. И можете да завладеете номера на друго лице чрез подкупване на служител на телекома, като използвате измама или фалшиви документи.

Преминете към защитена 2FA на блокчейна

Разкрити са хиляди епизоди на размяна на SIM карти, както се нарича тази схема за измама. Мащабът на бедствието предполага, че светът скоро ще се откаже от 2FA чрез SMS. Но това не се случва - в проучване те казват, че не потребителите избират метода 2FA, а собствениците на услуги.

Предлагаме да използвате защитения метод 2FA с доставка на еднократни кодове чрез блокчейн и ще ви кажем как собственикът на услугата може да го свърже.

Броят отива в милиони

През 2019 г. измамите със смяна на SIM карти са се увеличили с 63% според лондонската полиция, а „средната сметка“ на нападател е била 4,000 GBP. Не намерих статистика в Русия, но предполагам, че е още по-зле.

Размяната на SIM карти се използва за кражба на популярни акаунти в Twitter, Instagram, Facebook, VK, банкови сметки и наскоро дори криптовалути - Това съобщава вестник "Таймс". според биткойн предприемача Джоби Уикс. От 2016 г. насам в пресата се появяват известни случаи на кражба на криптовалута чрез размяна на SIM карти; 2019 видя истински пик.

През май Прокуратурата на САЩ за Източния окръг на Мичиган повдигнати обвинения девет младежи на възраст между 19 и 26 години: смята се, че са част от хакерска банда, наречена „Общността“. Бандата е обвинена в седем суап атаки, в резултат на които хакерите са откраднали криптовалута на стойност над 2,4 милиона долара. А през април калифорнийският студент Джоел Ортис получи 10 години затвор за размяна на SIM карта; производството му беше 7.5 милиона долара в криптовалути.

Преминете към защитена 2FA на блокчейна
Снимка на Джоел Ортис на университетска пресконференция. Две години по-късно той ще бъде задържан за кибер измама.

Как работи размяната на SIM

„Размяна“ означава размяна. Във всички подобни схеми престъпниците превземат телефонния номер на жертвата, обикновено чрез повторно издаване на SIM карта, и го използват за нулиране на паролата. Типичната смяна на SIM на теория изглежда така:

  1. Разузнавателна служба. Измамниците откриват личната информация на жертвата: име и телефонен номер. Те могат да бъдат намерени в открити източници (социални мрежи, приятели) или получени от съучастник - служител на мобилен оператор.
  2. Блокиране. SIM картата на жертвата е деактивирана; За да направите това, просто се обадете на техническата поддръжка на доставчика, посочете номера и кажете, че телефонът е изгубен.
  3. Уловете, прехвърлете номера на вашата SIM карта. Обикновено това става и чрез съучастник в телекома или чрез фалшифициране на документи.

В реалния живот нещата са още по-тежки. Нападателите избират жертва и след това ежедневно проследяват местоположението на телефона - една заявка за получаване на информация, че абонатът е преминал към роуминг, струва 1-2 цента. Веднага след като собственикът на SIM картата отиде в чужбина, той преговаря с мениджъра в комуникационния магазин за издаване на нова SIM карта. Струва около 50$ (намерих информация - в различни държави и при различни оператори от 20 до 100$), а в най-лошия случай управителя ще бъде уволнен - ​​за това няма отговорност.

Сега всички SMS ще бъдат получени от нападателите, а собственикът на телефона няма да може да направи нищо по въпроса - той е в чужбина. И тогава злодеите получават достъп до всички акаунти на жертвата и променят паролите, ако желаят.

Възможност за връщане на откраднато имущество

Понякога банките приспособяват жертвите наполовина и теглят преводи от техните сметки. Следователно е възможно да се върнат фиатни пари, дори ако престъпникът не бъде открит. Но с портфейлите за криптовалута всичко е по-сложно - и технически, и законодателно. Досега нито една борса/портфейл не е платила обезщетение на жертвите на суап.

Ако жертвите искат да защитят парите си в съда, те обвиняват оператора: той е създал условията за кражба на пари от сметката. Точно това направих Майкъл Търпин, който загуби $224 милиона поради размяна.Сега той съди телекомуникационната компания AT&T.

Преминете към защитена 2FA на блокчейна

Досега нито една държава няма работещи схеми за законна защита на собствениците на криптовалута. Невъзможно е да застраховате капитала си или да получите обезщетение за загубата му. Следователно предотвратяването на суап атака е по-лесно, отколкото справянето с нейните последствия. Най-очевидният начин е да се използва по-надежден „втори фактор“ за 2FA.

Смяната на SIM не е единственият проблем с 2FA чрез SMS

Кодовете за потвърждение в SMS също не са безопасни от техническа гледна точка. Съобщенията могат да бъдат прихванати поради неотстранени уязвимости в Signaling System 7 (SS7). 2FA през SMS е официално признат за несигурен (Националният институт за стандарти и технологии на САЩ казва това в своя Ръководство за цифрово удостоверяване).

В същото време наличието на 2FA често дава на потребителя усещане за фалшива сигурност и той избира по-проста парола. Следователно такова удостоверяване не затруднява, а улеснява достъпа на атакуващ до акаунта.

И често SMS пристигат с голямо закъснение или изобщо не пристигат.

Други 2FA методи

Разбира се, светлината не се събра на смартфони и SMS. Има и други методи на 2FA. Например еднократни TAN кодове: примитивен метод, но работи - все още се използва в някои банки. Има системи, използващи биометрични данни: пръстови отпечатъци, сканиране на ретината. Друг вариант, който изглежда като разумен компромис по отношение на удобство, надеждност и цена, са специални приложения за 2FA: RSA Token, Google Authenticator. Има и физически ключове и други методи.

На теория всичко изглежда логично и надеждно. Но на практика съвременните 2FA решения имат проблеми и поради тях реалността се разминава с очакванията.

Според проучване, използването на 2FA е неудобство по принцип, а популярността на 2FA чрез SMS се обяснява с „по-малко неудобство в сравнение с други методи“ - получаването на еднократни кодове е разбираемо за потребителя.

Потребителите свързват много 2FA методи със страха, че достъпът ще бъде загубен. Физическият ключ или списъкът с TAN пароли може да бъде изгубен или откраднат. Аз лично имам лош опит с Google Authenticator. Първият ми смартфон с това приложение се развали - оценете усилията ми да възстановя достъпа до акаунтите си. Друг проблем е преминаването към ново устройство. Google Authenticator няма опция за експортиране поради съображения за сигурност (ако ключовете могат да бъдат експортирани, каква сигурност има?). Веднъж нося ключовете ръчно и тогава реших, че е по-лесно да оставя стария смартфон в кутия на рафт.

Методът 2FA трябва да бъде:

  • Сигурно - само вие, а не нападателите, трябва да получите достъп до вашия акаунт
  • Надеждни - получавате достъп до акаунта си винаги, когато имате нужда от него
  • Удобно и достъпно – използването на 2FA е ясно и отнема минимално време
  • Евтини

Вярваме, че блокчейн е правилното решение.

Използвайте 2FA в блокчейна

За потребителя 2FA в блокчейна изглежда същото като получаване на еднократни кодове чрез SMS. Единствената разлика е каналът за доставка. Методът за получаване на 2FA код зависи от това какво предлага блокчейн. В нашия проект (информацията е в моя профил) това е уеб приложение, Tor, iOS, Android, Linux, Windows, MacOS.

Услугата генерира еднократен код и го изпраща на месинджъра в блокчейна. След това следвайте класиката: потребителят въвежда получения код в интерфейса на услугата и влиза.

Преминете към защитена 2FA на блокчейна

Статията Как работи децентрализиран месинджър в блокчейна Написах, че блокчейнът гарантира сигурността и поверителността на предаването на съобщения. По въпроса за изпращането на 2FA кодове ще подчертая:

  • Едно кликване за създаване на акаунт - без телефони или имейли.
  • Всички съобщения с 2FA кодове са криптирани от край до край curve25519xsalsa20poly1305.
  • MITM атаката е изключена - всяко съобщение с 2FA код е транзакция в блокчейна и е подписано от Ed25519 EdDSA.
  • Съобщението с 2FA кода завършва в собствен блок. Последователността и времето на блоковете не могат да бъдат коригирани и следователно редът на съобщенията.
  • Няма централна структура, която да проверява „автентичността“ на съобщението. Това се прави от разпределена система от възли, базирана на консенсус, и е собственост на потребителите.
  • Не може да се деактивира - акаунтите не могат да бъдат блокирани и съобщенията не могат да бъдат изтрити.
  • Достъп до 2FA кодове от всяко устройство по всяко време.
  • Потвърждение за доставка на съобщение с 2FA код. Услугата, която изпраща еднократната парола, знае със сигурност, че тя е доставена. Няма бутони „Изпрати отново“.

За да сравня с някои други 2FA методи, направих таблица:

Преминете към защитена 2FA на блокчейна

Потребителят получава акаунт в блокчейн месинджъра, за да получава кодове за секунда - за влизане се използва само парола. Следователно методите на кандидатстване могат да бъдат различни: можете да използвате един акаунт, за да получавате кодове за всички услуги, или можете да създадете отделен акаунт за всяка услуга.

Има и едно неудобство - сметката трябва да има поне една транзакция. За да може потребителят да получи криптирано съобщение с код, трябва да знаете неговия публичен ключ, а той се появява в блокчейна само с първата транзакция. Ето как успяхме да се измъкнем от това: дадохме им възможност да получат безплатни токени в портфейла си. Въпреки това, по-добро решение е да назовете акаунта публичен ключ. (За сравнение имаме номера на сметката U1467838112172792705 е производно на публичния ключ cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. За месинджъра това е по-удобно и четимо, но за системата за изпращане на 2FA кодове е ограничение). Мисля, че в бъдеще някой ще вземе такова решение и ще премести „Удобство и достъпност” в зелената зона.

Цената за изпращане на 2FA код е наистина ниска - 0.001 ADM, сега е 0.00001 USD. Отново можете да повишите своя блокчейн и да направите цената нула.

Как да свържете 2FA на блокчейн към вашата услуга

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

Ще ви кажа как да направите това, използвайки нашия месинджър като пример и по аналогия можете да използвате друг блокчейн. В демо приложението 2FA използваме postgresql10 за съхраняване на информация за акаунта.

Етапи на свързване:

  1. Създайте акаунт в блокчейна, от който ще изпращате 2FA кодове. Ще получите парола, която се използва като частен ключ за криптиране на съобщения с кодове и за подписване на транзакции.
  2. Добавете скрипт към вашия сървър, за да генерирате 2FA кодове. Ако вече използвате друг 2FA метод с доставка на еднократна парола, вече сте завършили тази стъпка.
  3. Добавете скрипт към вашия сървър, за да изпращате кодове до потребителя в блокчейн месинджъра.
  4. Създайте потребителски интерфейс за изпращане и въвеждане на 2FA код. Ако вече използвате друг 2FA метод с доставка на еднократна парола, вече сте завършили тази стъпка.

1 Създаване на акаунт

Създаването на акаунт в блокчейна означава генериране на частен ключ, публичен ключ и извлечен адрес на акаунт.

Преминете към защитена 2FA на блокчейна

Първо се генерира паролата BIP39 и хешът SHA-256 се изчислява от нея. Хешът се използва за генериране на частния ключ ks и публичния ключ kp. От публичния ключ, използвайки същия SHA-256 с инверсия, получаваме адреса в блокчейна.

Ако искате да изпращате 2FA кодове всеки път от нов акаунт, кодът за създаване на акаунт ще трябва да бъде добавен към сървъра:

import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()

…

import * as bip39 from 'bip39'
import crypto from 'crypto'

adamant.createPassphraseHash = function (passphrase) {
  const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
  return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}

…

import sodium from 'sodium-browserify-tweetnacl'

adamant.makeKeypair = function (hash) {
  var keypair = sodium.crypto_sign_seed_keypair(hash)
  return {
    publicKey: keypair.publicKey,
    privateKey: keypair.secretKey
  }
}

…

import crypto from 'crypto'

adamant.getAddressFromPublicKey = function (publicKey) {
  const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
  const temp = Buffer.alloc(8)
  for (var i = 0; i < 8; i++) {
    temp[i] = publicKeyHash[7 - i]
  }
  return 'U' + bignum.fromBuffer(temp).toString()
}

В демо приложението го опростихме - създадохме един акаунт в уеб приложението и изпращаме кодове от него. В повечето случаи това е и по-удобно за потребителя: той знае, че услугата изпраща 2FA кодове от конкретен акаунт и може да го наименува.

Преминете към защитена 2FA на блокчейна

2 Генериране на 2FA кодове

Трябва да се генерира 2FA код за всяко влизане на потребител. Използваме библиотеката питейно заведение, но можете да изберете всеки друг.

const hotp = speakeasy.hotp({
  counter,
  secret: account.seSecretAscii,
});

Проверка на валидността на 2FA кода, въведен от потребителя:

se2faVerified = speakeasy.hotp.verify({
  counter: this.seCounter,
  secret: this.seSecretAscii,
  token: hotp,
});

3 Изпращане на 2FA код

За да изпратите 2FA код, можете да използвате API на блокчейн възела, библиотеката на JS API или конзолата. В този пример използваме конзолата - това е интерфейсът на командния ред, помощна програма, която опростява взаимодействието с блокчейна. За да изпратите съобщение с 2FA код, трябва да използвате командата send message конзоли.

const util = require('util');
const exec = util.promisify(require('child_process').exec);

…

const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);

Алтернативен начин за изпращане на съобщения е използването на метода send в библиотеката на JS API.

4 Потребителски интерфейс

На потребителя трябва да се даде възможност да въведе 2FA код, това може да стане по различни начини в зависимост от платформата на вашето приложение. В нашия пример това е Vue.

Преминете към защитена 2FA на блокчейна

Изходният код за демонстрационното приложение за двуфакторно удостоверяване на блокчейн може да се види на GitHub. В Readme има връзка към демонстрация на живо, за да го изпробвате.

Източник: www.habr.com

Добавяне на нов коментар