Блокчейндегі 2FA қауіпсіздігін қамтамасыз ету үшін жылжытыңыз

SMS хабарламалар екі факторлы аутентификацияның (2FA) ең танымал әдісі болып табылады. Оны банктер, электронды және криптографиялық әмияндар, пошта жәшіктері және қызметтердің барлық түрлері пайдаланады; әдісті пайдаланушылар саны 100% жақындайды.

Мен бұл сценарийге ашуландым, өйткені бұл әдіс қауіпті. Бір SIM картасынан екіншісіне нөмірді қайта тағайындау мобильді дәуірдің басында басталды - SIM картасы жоғалған кезде нөмір осылайша қалпына келтіріледі. «Цифрлық ақша ұрлау мамандары» «SIM картасын қайта жазу» опциясын алаяқтық схемаларда қолдануға болатынын түсінді. Ақыр соңында, SIM картасын басқаратын адам басқа адамдардың онлайн-банкингін, электронды әмияндарын және тіпті криптовалюталарын басқара алады. Сіз телекоммуникация қызметкеріне пара беру, алдау немесе жалған құжаттарды пайдалану арқылы басқа біреудің нөмірін иеленуіңізге болады.

Блокчейндегі 2FA қауіпсіздігін қамтамасыз ету үшін жылжытыңыз

SIM картасын ауыстырудың мыңдаған эпизодтары ашылды, себебі бұл алаяқтық схема деп аталады. Апаттың ауқымы әлем жақын арада SMS арқылы 2FA-дан бас тартады деп болжайды. Бірақ бұл болмайды - жылы зерттеу олар 2FA әдісін пайдаланушылар емес, қызмет иелері таңдайды дейді.

Біз блокчейн арқылы бір реттік кодтарды жеткізу арқылы қауіпсіз 2FA әдісін пайдалануды ұсынамыз және қызмет иесі оны қалай қосуға болатынын айтып береміз.

Сан миллионға жетеді

Лондон полициясының мәліметінше, 2019 жылы SIM картасын ауыстыру алаяқтығы 63%-ға өсті, ал шабуылдаушының «орташа есепшоты» 4,000 фунт стерлингті құрады. Мен Ресейде ешқандай статистика таппадым, бірақ олар одан да нашар деп ойлаймын.

SIM картасын ауыстыру танымал Twitter, Instagram, Facebook, VK аккаунттарын, банктік шоттарды және жақында тіпті криптовалюталарды ұрлау үшін қолданылады - Бұл туралы Times газеті хабарлайды Bitcoin кәсіпкері Джоби Аптасына сәйкес. 2016 жылдан бері баспасөзде SIM айырбастау арқылы криптовалютаны ұрлаудың атышулы оқиғалары жиі кездеседі; 2019 жыл нағыз шыңға жетті.

Мамыр айында Мичиганның Шығыс округі бойынша АҚШ прокурорының кеңсесі айыптар әкелді 19 бен 26 жас аралығындағы тоғыз жас: олар «Қауымдастық» деп аталатын хакерлер тобының бір бөлігі болып табылады. Бандаға жеті своп-шабуыл жасады деген айып тағылды, нәтижесінде хакерлер құны 2,4 миллион доллардан асатын криптовалютаны ұрлады. Сәуірде Калифорния студенті Джоэль Ортис SIM картасын ауыстырғаны үшін 10 жылға бас бостандығынан айырылды; оның өндірісі криптовалютадағы 7.5 миллион долларды құрады.

Блокчейндегі 2FA қауіпсіздігін қамтамасыз ету үшін жылжытыңыз
Джоэл Ортистің университеттегі баспасөз мәслихатындағы суреті. Екі жылдан кейін ол кибералаяқтық үшін ұсталады.

SIM картасын ауыстыру қалай жұмыс істейді

«Айысу» алмасу дегенді білдіреді. Барлық осындай схемаларда қылмыскерлер жәбірленушінің телефон нөмірін, әдетте SIM картасын қайта шығару арқылы алады және оны құпия сөзді қалпына келтіру үшін пайдаланады. Теорияда әдеттегі SIM алмасу келесідей көрінеді:

  1. Барлау қызметі. Алаяқтар жәбірленушінің жеке мәліметтерін: аты-жөні мен телефон нөмірін анықтайды. Оларды ашық көздерден табуға болады (әлеуметтік желілер, достар) немесе сыбайласынан - ұялы байланыс операторының қызметкерінен алуға болады.
  2. Блоктау. Жәбірленушінің SIM картасы өшірілген; Мұны істеу үшін провайдердің техникалық қолдау қызметіне қоңырау шалыңыз, нөмірді беріңіз және телефон жоғалғанын айтыңыз.
  3. Түсіріңіз, нөмірді SIM картасына тасымалдаңыз. Әдетте бұл телекоммуникациялық компаниядағы сыбайласы арқылы немесе құжаттарды қолдан жасау арқылы жасалады.

Шынайы өмірде жағдай одан да ауыр. Шабуылшылар жәбірленушіні таңдайды, содан кейін телефонның орналасқан жерін күнделікті бақылайды - абоненттің роумингке ауысқаны туралы ақпаратты алуға бір сұраныс 1-2 цент тұрады. SIM картасының иесі шетелге кеткен бойда олар жаңа SIM картасын шығару үшін байланыс дүкеніндегі менеджермен келіссөз жүргізеді. Бұл шамамен 50 доллар тұрады (мен ақпаратты таптым - әртүрлі елдерде және әртүрлі операторлармен 20 доллардан 100 долларға дейін), ал ең нашар жағдайда менеджер жұмыстан босатылады - бұл үшін жауапкершілік жоқ.

Енді барлық SMS-ті шабуылдаушылар қабылдайды, ал телефон иесі бұл туралы ештеңе істей алмайды - ол шетелде. Содан кейін зұлым адамдар құрбанның барлық тіркелгілеріне қол жеткізе алады және қажет болса, құпия сөздерді өзгертеді.

Ұрланған мүлікті қайтару мүмкіндігі

Банктер кейде жәбірленушілерді жарты жолда орналастырып, шоттарынан аударымдарды алып тастайды. Сондықтан қылмыскер табылмаса да, ақшаны қайтаруға болады. Бірақ cryptocurrency әмияндармен бәрі күрделірек - және техникалық, және заңнамалық тұрғыдан. Әзірге бірде-бір биржа/әмиян свопинг құрбандарына өтемақы төлеген жоқ.

Егер жәбірленушілер өз ақшасын сотта қорғағысы келсе, операторды кінәлайды: шоттағы ақшаны ұрлауға жағдай жасаған. Мен дәл осылай жасадым Майкл Турпин, своптың кесірінен $224 млн жоғалтқан.Ол қазір AT&T телекоммуникациялық компаниясын сотқа береді.

Блокчейндегі 2FA қауіпсіздігін қамтамасыз ету үшін жылжытыңыз

Әзірге ешбір мемлекетте криптовалюта иелерін заңды түрде қорғаудың жұмыс схемалары жоқ. Өз капиталыңызды сақтандыру немесе оның жоғалуы үшін өтемақы алу мүмкін емес. Сондықтан своп шабуылының алдын алу оның салдарымен күресуден оңайырақ. Ең айқын әдіс - 2FA үшін сенімдірек «екінші факторды» пайдалану.

SIM картасын ауыстыру SMS арқылы 2FA-дағы жалғыз мәселе емес

SMS-тегі растау кодтары техникалық тұрғыдан да қауіпті. Хабарламалар 7 (SS7) сигналдық жүйесіндегі түзетілмеген осалдықтарға байланысты ұсталуы мүмкін. SMS арқылы 2FA ресми түрде қауіпті деп танылды (АҚШ Ұлттық стандарттар және технологиялар институты бұл туралы өз мәлімдемесінде айтады. Сандық аутентификация бойынша нұсқаулық).

Сонымен қатар, 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 кодын алу әдісі блокчейннің не ұсынатынына байланысты. Біздің жобада (ақпарат менің профилімде) бұл Web қолданбасы, Tor, iOS, Android, Linux, Windows, MacOS.

Қызмет бір реттік кодты жасайды және оны блокчейндегі мессенджерге жібереді. Содан кейін классиканы орындаңыз: пайдаланушы алынған кодты қызмет интерфейсіне енгізіп, жүйеге кіреді.

Блокчейндегі 2FA қауіпсіздігін қамтамасыз ету үшін жылжытыңыз

Мақалада Орталықтандырылмаған мессенджер блокчейнде қалай жұмыс істейді? Мен блокчейн хабарды жіберудің қауіпсіздігі мен құпиялылығын қамтамасыз ететінін жаздым. 2FA кодтарын жіберу мәселесі бойынша мен мыналарды атап өтемін:

  • Тіркелгіні жасау үшін бір рет басыңыз - телефондар немесе электрондық пошталар жоқ.
  • 2FA кодтары бар барлық хабарлар End-to-End curve25519xsalsa20poly1305 шифрланған.
  • MITM шабуылы алынып тасталды - 2FA коды бар әрбір хабарлама блокчейндегі транзакция болып табылады және Ed25519 EdDSA қол қояды.
  • 2FA коды бар хабарлама өз блогында аяқталады. Блоктардың реті мен уақыт белгісін, демек, хабарлардың ретін түзету мүмкін емес.
  • Хабарламаның «шынайылығын» тексеретін орталық құрылым жоқ. Мұны консенсусқа негізделген түйіндердің бөлінген жүйесі жасайды және ол пайдаланушыларға тиесілі.
  • Өшіру мүмкін емес - тіркелгілерді бұғаттауға және хабарларды жоюға болмайды.
  • 2FA кодтарына кез келген уақытта кез келген құрылғыдан қол жеткізіңіз.
  • 2FA кодымен хабарламаның жеткізілуін растау. Бір реттік парольді жіберетін қызмет оның жеткізілгенін нақты біледі. «Қайта жіберу» түймелері жоқ.

Кейбір басқа 2FA әдістерімен салыстыру үшін мен кесте жасадым:

Блокчейндегі 2FA қауіпсіздігін қамтамасыз ету үшін жылжытыңыз

Пайдаланушы кодтарды секундта алу үшін блокчейн мессенджерінде тіркелгіні алады - кіру үшін тек құпия сөз қолданылады. Сондықтан қолдану әдістері әртүрлі болуы мүмкін: сіз барлық қызметтер үшін кодтарды алу үшін бір тіркелгіні пайдалана аласыз немесе әрбір қызмет үшін жеке тіркелгі жасай аласыз.

Сондай-ақ ыңғайсыздық бар - шотта кем дегенде бір транзакция болуы керек. Пайдаланушы коды бар шифрланған хабарламаны алу үшін оның ашық кілтін білу керек және ол блокчейнде тек бірінші транзакцияда пайда болады. Осылайша біз одан шыға алдық: біз оларға әмиянында тегін жетондарды алу мүмкіндігін бердік. Дегенмен, жақсы шешім - тіркелгіні ашық кілт деп атау. (Салыстыру үшін бізде шот нөмірі бар U1467838112172792705 ашық кілттің туындысы болып табылады cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Мессенджер үшін бұл ыңғайлы және оқуға ыңғайлы, бірақ 2FA кодтарын жіберу жүйесі үшін бұл шектеу). Болашақта біреу осындай шешім қабылдап, «Ыңғайлылық пен қолжетімділікті» жасыл аймаққа ауыстырады деп ойлаймын.

2FA кодын жіберу бағасы өте төмен - 0.001 ADM, қазір ол 0.00001 АҚШ доллары. Тағы да, сіз блокчейнді көтеріп, бағаны нөлге тең ете аласыз.

Блокчейндегі 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 коды жасалуы керек. Біз кітапхананы пайдаланамыз speakeasy, бірақ кез келген басқасын таңдауға болады.

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 бағдарламасында оны сынап көру үшін Live demo сілтемесі бар.

Ақпарат көзі: www.habr.com

пікір қалдыру