Pindhah kanggo ngamanake 2FA ing pamblokiran

Pesen SMS minangka cara paling populer kanggo otentikasi rong faktor (2FA). Iki digunakake dening bank, dompet elektronik lan crypto, kothak layang lan kabeh jinis layanan; jumlah pangguna metode nyedhaki 100%.

Aku nesu ing skenario iki, amarga cara iki ora aman. Reassigning nomer saka siji kertu SIM liyane diwiwiti ing awal jaman seluler - iki carane nomer dibalèkaké nalika kertu SIM ilang. "Spesialis nyolong dhuwit digital" nyadari yen opsi "tulis ulang kertu SIM" bisa digunakake ing skema penipuan. Sawise kabeh, sing ngontrol kertu SIM bisa ngontrol perbankan online wong liya, dompet elektronik, lan malah cryptocurrency. Lan sampeyan bisa njupuk nomer wong liya liwat nyogok karyawan telekomunikasi, nggunakake ngapusi utawa dokumen palsu.

Pindhah kanggo ngamanake 2FA ing pamblokiran

Ewonan episode pertukaran SIM wis ditemokake, amarga skema penipuan iki diarani. Skala bencana kasebut nuduhake manawa jagad iki bakal ninggalake 2FA liwat SMS. Nanging iki ora kelakon - ing riset padha ngomong sing ora kedhaftar sing milih cara 2FA, nanging nduweni layanan.

Kita ngusulake nggunakake metode 2FA sing aman kanthi ngirim kode siji-wektu liwat pamblokiran, lan kita bakal pitutur marang kowe carane pemilik layanan bisa nyambungake.

Cacahe dadi jutaan

Ing taun 2019, penipuan swap SIM mundhak 63% miturut polisi London, lan "tagihan rata-rata" penyerang yaiku 4,000 GBP. Aku wis ora nemu statistik ing Rusia, nanging aku nganggep sing padha malah Samsaya Awon.

Pertukaran SIM digunakake kanggo nyolong akun Twitter, Instagram, Facebook, VK, akun bank, lan malah cryptocurrencies sing populer - Koran Times laporan miturut pengusaha Bitcoin Joby Weeks. Kasus pencurian mata uang kripto sing dhuwur-dhuwur nggunakake pertukaran SIM wis muncul ing pers wiwit 2016; 2019 ndeleng puncak nyata.

Ing wulan Mei, Kantor Kejaksaan AS kanggo Distrik WΓ©tan Michigan nggawa biaya sangang wong enom antarane umur 19 lan 26: padha dipercaya dadi bagΓ©an saka geng hacker disebut "Komunitas". Geng kasebut didakwa karo pitung serangan swap, minangka akibat saka peretas nyolong mata uang kripto sing regane luwih saka $ 2,4 yuta. Lan ing April, mahasiswa California Joel Ortiz nampa 10 taun ing pakunjaran kanggo SIM swapping; produksi kang $ 7.5 yuta ing cryptocurrencies.

Pindhah kanggo ngamanake 2FA ing pamblokiran
Foto Joel Ortiz ing konferensi pers universitas. Rong taun sabanjure dheweke bakal ditahan amarga penipuan cyber.

Carane SIM swap dianggo

"Swap" tegese ngganti. Ing kabeh rencana kuwi, kriminal njupuk liwat nomer telpon korban, biasane liwat nerbitake maneh kertu SIM, lan digunakake kanggo ngreset sandi. Swap SIM khas ing teori katon kaya iki:

  1. Layanan intelijen. Penipu nemokake informasi pribadhi korban: jeneng lan nomer telpon. Bisa ditemokake ing sumber terbuka (jaringan sosial, kanca) utawa ditampa saka accomplice - pegawe operator seluler.
  2. Pamblokiran. Kertu SIM korban dipateni; Kanggo nindakake iki, mung nelpon technical support panyedhiya, nyedhiyani nomer lan ngomong yen telpon wis ilang.
  3. Jupuk, transfer nomer menyang kertu SIM. Biasane iki uga ditindakake liwat accomplice ing perusahaan telekomunikasi utawa liwat pemalsuan dokumen.

Ing urip nyata iku malah luwih abot. Penyerang milih korban lan banjur nglacak lokasi telpon saben dina - siji panjalukan kanggo nampa informasi sing pelanggan wis ngalih menyang roaming biaya 1-2 sen. Sanalika sing duwe kertu SIM wis lunga menyang luar negeri, dheweke rembugan karo manajer ing toko komunikasi kanggo ngetokake kertu SIM anyar. Biaya babagan $ 50 (Aku nemokake informasi - ing macem-macem negara lan operator beda saka $ 20 kanggo $ 100), lan ing kasus paling awon manager bakal dipecat - ora ana tanggung jawab kanggo iki.

Saiki kabeh SMS bakal ditampa dening panyerang, lan pemilik telpon ora bakal bisa nindakake apa-apa - dheweke ana ing luar negeri. Banjur penjahat entuk akses menyang kabeh akun korban lan ngganti tembung sandhi yen dikarepake.

Kemungkinan kanggo mbalekake properti sing dicolong

Bank-bank kadhangkala nampung korban separo lan mbatalake transfer saka akun. Mulane, bisa mbalekake dhuwit fiat sanajan pidana ora ditemokake. Nanging karo dompet cryptocurrency kabeh luwih rumit - lan teknis, lan legislatif. Nganti saiki, ora ana ijol-ijolan / dompet sing mbayar ganti rugi kanggo korban pertukaran.

Yen korban pengin mbela dhuwit ing pengadilan, dheweke nyalahake operator: dheweke nggawe syarat kanggo nyolong dhuwit saka akun kasebut. Semono uga aku Michael Turpin, sing kelangan $224 yuta amarga tukaran. Dheweke saiki nuntut perusahaan telekomunikasi AT&T.

Pindhah kanggo ngamanake 2FA ing pamblokiran

Nganti saiki, ora ana negara sing duwe rencana kerja kanggo nglindhungi pamilik cryptocurrency kanthi sah. Sampeyan ora bisa ngasuransiake ibukutha utawa nampa ganti rugi kanggo mundhut. Mulane, nyegah serangan swap luwih gampang tinimbang ngatasi akibate. Cara sing paling jelas yaiku nggunakake "faktor kapindho" sing luwih dipercaya kanggo 2FA.

SIM swap ora mung masalah karo 2FA liwat SMS

Kode konfirmasi ing SMS uga ora aman saka sudut pandang teknis. Pesen bisa dicegat amarga kerentanan sing ora ditambal ing Sistem Sinyal 7 (SS7). 2FA liwat SMS resmi diakoni minangka ora aman (Institut Standar lan Teknologi Nasional AS ujar iki ing Digital Authentication Guide).

Ing wektu sing padha, ing ngarsane 2FA asring menehi pangguna rasa aman palsu, lan dheweke milih tembung sandhi sing luwih gampang. Mulane, otentikasi kasebut ora nggawe angel, nanging luwih gampang kanggo panyerang entuk akses menyang akun kasebut.

Lan asring SMS teka kanthi wektu tundha utawa ora teka babar pisan.

Cara 2FA liyane

Mesthine, lampu kasebut ora nggabung ing smartphone lan SMS. Ana cara liyane 2FA. Contone, kode TAN siji-wektu: cara primitif, nanging kerjane - isih digunakake ing sawetara bank. Ana sistem nggunakake data biometrik: sidik jari, scan retina. Pilihan liyane sing katon kaya kompromi sing cukup saka segi penak, linuwih lan rega yaiku aplikasi khusus kanggo 2FA: Token RSA, Google Authenticator. Ana uga tombol fisik lan cara liyane.

Ing teori, kabeh katon logis lan dipercaya. Nanging ing praktik, solusi 2FA modern duwe masalah, lan amarga kasunyatane beda karo sing dikarepake.

Miturut riset, panggunaan 2FA minangka rasa ora nyaman ing prinsip, lan popularitas 2FA liwat SMS diterangake kanthi "kurang ora nyaman dibandhingake karo cara liyane" - nampa kode siji-wektu bisa dingerteni kanggo pangguna.

Pangguna nggandhengake akeh cara 2FA kanthi wedi yen akses bakal ilang. Tombol fisik utawa dhaptar sandhi TAN bisa ilang utawa dicolong. Aku dhewe duwe pengalaman ala karo Google Authenticator. Smartphone pisanan karo aplikasi iki rusak - matur nuwun kanggo upaya kanggo mulihake akses menyang akunku. Masalah liyane yaiku ngalih menyang piranti anyar. Google Authenticator ora duwe opsi ekspor amarga alasan keamanan (yen kunci bisa diekspor, keamanan apa sing ana?). Sawise aku nindakake tombol kanthi manual, banjur aku mutusake manawa luwih gampang ninggalake smartphone lawas ing kothak ing rak.

Cara 2FA kudu:

  • Aman - mung sampeyan lan dudu panyerang sing kudu entuk akses menyang akun sampeyan
  • Bisa dipercaya - sampeyan entuk akses menyang akun kapan wae sampeyan butuh
  • Trep lan diakses - nggunakake 2FA cetha lan butuh wektu minimal
  • Murah

Kita percaya yen pamblokiran minangka solusi sing tepat.

Gunakake 2FA ing pamblokiran

Kanggo pangguna, 2FA ing blockchain katon padha karo nampa kode siji-wektu liwat SMS. Bentenipun mung saluran pangiriman. Cara kanggo entuk kode 2FA gumantung saka apa sing ditawakake blockchain. Ing proyek kita (informasi ana ing profilku) iki minangka aplikasi Web, Tor, iOS, Android, Linux, Windows, MacOS.

Layanan kasebut ngasilake kode siji-wektu lan dikirim menyang utusan ing blockchain. Banjur tindakake klasik: pangguna ngetik kode sing ditampa ing antarmuka layanan lan mlebu.

Pindhah kanggo ngamanake 2FA ing pamblokiran

Ing artikel Kepiye carane utusan desentralisasi ing blockchain bisa digunakake? Aku nulis yen pamblokiran njamin keamanan lan privasi transmisi pesen. Ing masalah ngirim kode 2FA, aku bakal nyorot:

  • Siji klik kanggo nggawe akun - ora ana telpon utawa email.
  • Kabeh pesen sing nganggo kode 2FA dienkripsi kurva End-to-End25519xsalsa20poly1305.
  • Serangan MITM ora kalebu - saben pesen kanthi kode 2FA minangka transaksi ing pamblokiran lan ditandatangani dening Ed25519 EdDSA.
  • Pesen karo kode 2FA rampung ing blok dhewe. Urutan lan timestamp pamblokiran ora bisa didandani, lan mulane urutan pesen.
  • Ora ana struktur pusat sing mriksa "keasliane" pesen. Iki ditindakake dening sistem simpul sing disebarake adhedhasar konsensus, lan diduweni dening pangguna.
  • Ora bisa dipateni - akun ora bisa diblokir lan pesen ora bisa dibusak.
  • Akses kode 2FA saka piranti apa wae kapan wae.
  • Konfirmasi pangiriman pesen kanthi kode 2FA. Layanan sing ngirim sandi siji-wektu ngerti manawa wis dikirim. Ora ana tombol "Kirim maneh".

Kanggo mbandhingake karo sawetara metode 2FA liyane, aku nggawe tabel:

Pindhah kanggo ngamanake 2FA ing pamblokiran

Pangguna nampa akun ing utusan pamblokiran kanggo nampa kode ing detik - mung frasa sandhi sing digunakake kanggo mlebu. Mulane, cara aplikasi bisa uga beda: sampeyan bisa nggunakake siji akun kanggo nampa kode kanggo kabeh layanan, utawa sampeyan bisa nggawe akun kapisah kanggo saben layanan.

Ana uga sing ora nyaman - akun kudu paling sethithik sak transaksi. Supaya pangguna bisa nampa pesen sing dienkripsi nganggo kode, sampeyan kudu ngerti kunci umume, lan katon ing pamblokiran mung karo transaksi pisanan. Iki carane kita bisa metu saka iku: kita menehi wong kesempatan kanggo nampa free token ing dompet. Nanging, solusi sing luwih apik yaiku jeneng akun kasebut minangka kunci umum. (Kanggo mbandhingake, kita duwe nomer akun U1467838112172792705 minangka turunan saka kunci publik cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Kanggo utusan iki luwih trep lan bisa diwaca, nanging kanggo sistem kanggo ngirim kode 2FA minangka watesan). Aku mikir yen ing mangsa ngarep wong bakal nggawe keputusan kasebut lan mindhah "Kenyamanan lan Aksesibilitas" menyang zona ijo.

Rega kanggo ngirim kode 2FA pancen murah - 0.001 ADM, saiki dadi 0.00001 USD. Maneh, sampeyan bisa ngunggahake blockchain lan nggawe rega nol.

Cara nyambungake 2FA ing blockchain menyang layanan sampeyan

Muga-muga aku bisa narik minat sawetara pembaca kanggo nambah wewenang pamblokiran menyang layanane.

Aku bakal pitutur marang kowe carane nindakake iki nggunakake utusan kita minangka conto, lan kanthi analogi sampeyan bisa nggunakake blockchain liyane. Ing aplikasi demo 2FA kita nggunakake postgresql10 kanggo nyimpen informasi akun.

Tahap sambungan:

  1. Nggawe akun ing blockchain saka ngendi sampeyan bakal ngirim kode 2FA. Sampeyan bakal nampa tembung sandhi, sing digunakake minangka kunci pribadi kanggo ndhelik pesen nganggo kode lan kanggo mlebu transaksi.
  2. Tambah skrip menyang server kanggo ngasilake kode 2FA. Yen sampeyan wis nggunakake cara 2FA liyane kanthi pangiriman sandhi sepisan, sampeyan wis ngrampungake langkah iki.
  3. Tambah skrip menyang server sampeyan kanggo ngirim kode menyang pangguna ing utusan pamblokiran.
  4. Nggawe antarmuka panganggo kanggo ngirim lan ngetik kode 2FA. Yen sampeyan wis nggunakake cara 2FA liyane kanthi pangiriman sandhi sepisan, sampeyan wis ngrampungake langkah iki.

1 Nggawe akun

Nggawe akun ing pamblokiran tegese ngasilake kunci pribadi, kunci umum, lan alamat akun sing asale.

Pindhah kanggo ngamanake 2FA ing pamblokiran

Pisanan, frasa sandhi BIP39 digawe, lan hash SHA-256 diitung saka iku. Hash digunakake kanggo ngasilake kunci pribadhi ks lan kunci publik kp. Saka kunci umum, nggunakake SHA-256 sing padha karo inversi, kita entuk alamat ing pamblokiran.

Yen sampeyan pengin ngirim kode 2FA saben wektu saka akun anyar, kode nggawe akun kudu ditambahake menyang server:

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()
}

Ing aplikasi demo, kita nyederhanakake - kita nggawe siji akun ing aplikasi web, lan ngirim kode saka iku. Umume kasus, iki uga luwih trep kanggo pangguna: dheweke ngerti manawa layanan kasebut ngirim kode 2FA saka akun tartamtu lan bisa menehi jeneng kasebut.

Pindhah kanggo ngamanake 2FA ing pamblokiran

2 Ngasilake kode 2FA

Kode 2FA kudu digawe kanggo saben pangguna mlebu. Kita nggunakake perpustakaan pidato, nanging sampeyan bisa milih siji liyane.

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

Priksa validitas kode 2FA sing dilebokake pangguna:

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

3 Ngirim kode 2FA

Kanggo ngirim kode 2FA, sampeyan bisa nggunakake API simpul blockchain, perpustakaan API JS, utawa konsol. Ing conto iki, kita nggunakake console - iki Command Line Interface, sarana sing nyederhanakake interaksi karo blockchain. Kanggo ngirim pesen nganggo kode 2FA, sampeyan kudu nggunakake printah kasebut send message konsol.

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);

Cara alternatif kanggo ngirim pesen yaiku nggunakake metode kasebut send ing perpustakaan JS API.

4 Antarmuka pangguna

Pangguna kudu diwenehi pilihan kanggo ngetik kode 2FA, iki bisa ditindakake kanthi cara sing beda-beda gumantung saka platform aplikasi sampeyan. Ing conto kita iki Vue.

Pindhah kanggo ngamanake 2FA ing pamblokiran

Kode sumber kanggo aplikasi demo otentikasi loro-faktor blockchain bisa dideleng ing GitHub. Ana link ing Readme kanggo demo Live kanggo nyoba metu.

Source: www.habr.com

Add a comment