کیا Google Authenticator کا ایکسپورٹ QR اسکین کرنا محفوظ ہے؟
صرف اسی صورت میں جب آپ نے اسے خود، اپنے پرانے فون پر بنایا ہو، اور اپنے نئے فون کو اسکرین کی طرف تاک کر اسکین کیا ہو۔ کوئی بھی دوسرا شخص جو اس QR کی تصویر کھینچتا ہے، کسی بھی وجہ سے، بنڈل کے ہر اکاؤنٹ کے ہر 2FA کوڈ تک مستقل رسائی حاصل کر لیتا ہے۔
Google Authenticator اور کئی ہم آہنگ ایپس (Aegis، Raivo OTP، 2FAS) آپ کو اپنے محفوظ شدہ 2FA اکاؤنٹس کو ”ایکسپورٹ“ کرنے دیتی ہیں تاکہ آپ انہیں نئی ڈیوائس پر منتقل کر سکیں۔ ایکسپورٹ ایک QR کوڈ کی شکل اختیار کرتا ہے جس میں ایک URI ہوتا ہے جو otpauth-migration:// سے شروع ہوتا ہے۔ اس URI کے اندر ایک واحد protocol-buffer بنڈل (Google کا MigrationPayload schema) ہوتا ہے جو بیک وقت ہر اکاؤنٹ کو لے کر چلتا ہے، issuer، اکاؤنٹ کا نام، secret seed، الگورتھم، ہندسوں کی تعداد، قسم (HOTP / TOTP)، اور counter۔
یہ فارمیٹ اصل میں غیر دستاویزی تھا، لیکن اسے ریورس-انجینیئر کیا گیا ہے اور اب یہ 2FA بیک اپس کے لیے عملاً انٹرچینج فارمیٹ ہے۔ تیسرے فریق کی authenticator ایپس اسی QR کو پہچانتی اور امپورٹ کرتی ہیں۔
ایک QR درجنوں اکاؤنٹس پر مشتمل ہو سکتا ہے۔ QR بصری طور پر ایک عام TOTP سیٹ اپ QR سے ناقابلِ تمیز ہوتا ہے، کوئی بصری نشان نہیں ہوتا جو کسی عام مشاہدہ کرنے والے کو بتائے کہ یہ پورا بنڈل لے کر چل رہا ہے۔
ایک واحد بنڈل QR منفرد طور پر کیوں خطرناک ہے
اگر آپ نے درخواست نہیں کی تو ایک عام otpauth:// سیٹ اپ QR کو اسکین کرنا خطرناک ہے، لیکن نقصان کا دائرہ ایک اکاؤنٹ تک محدود ہے۔ مائیگریشن QR کے نقصان کا دائرہ آپ کے authenticator میں موجود ہر اکاؤنٹ ہے۔ اگر کوئی حملہ آور اس QR کو دکھاتی اسکرین کی تصویر لے لے، کسی کافی شاپ میں آپ کے کندھے کے اوپر سے، کسی CCTV کیمرے کے ذریعے جسے آپ نے محسوس نہیں کیا، کسی شفاف شیشے کی کھڑکی سے، تو وہ ہر اس اکاؤنٹ پر 2FA کو نظرانداز کرنے کی صلاحیت کے ساتھ چلا جاتا ہے جسے یہ احاطہ کرتا تھا۔ مستقل طور پر۔ جب تک آپ ہر secret کو دستی طور پر گردش نہ دیں، جسے زیادہ تر سروسز آسان نہیں بناتیں۔
بنڈل میں موجود secrets کی کوئی میعاد ختم ہونے کی تاریخ نہیں ہوتی۔ سیشن ٹوکن (جو ختم ہو جاتا ہے) کے برعکس، passkey QR (جو ایک بار کے لیے ہوتا ہے) کے برعکس، مائیگریشن بنڈل میں موجود سیڈز اس وقت تک کارآمد رہتے ہیں جب تک آپ انہیں سروس بہ سروس تبدیل نہ کر دیں۔
یہی وجہ ہے کہ ہمارے اسکینر کا ہر otpauth-migration:// QR پر فیصلہ likely_dangerous سے شروع ہوتا ہے اور سیاق و سباق سے قطع نظر وہیں رہتا ہے۔ فارمیٹ ٹھیک ہے؛ خطرے کا ماڈل فارمیٹ کا وجود ہی ہے۔
base64 باڈی، ڈی کوڈ ہونے کے بعد، ان ٹاپ لیول فیلڈز کے ساتھ ایک MigrationPayload protocol-buffer ہے:
otp_parameters، دہرایا گیا۔ فی اکاؤنٹ ایک اندراج۔
version، اسکیما ورژن۔
batch_size، جب کوئی ایکسپورٹ متعدد QRs میں تقسیم ہو تو ٹکڑوں کی کل تعداد۔
batch_index، اس ٹکڑے کی پوزیشن۔
batch_id، منفرد ID جو ٹکڑوں کو آپس میں جوڑتی ہے۔
ہر otp_parameters اندراج میں شامل ہے:
secret، خام سیڈ بائٹس۔ یہی اصل کلید کا مواد ہے۔
name، اکاؤنٹ کا لیبل (مثلاً alice@acme.com)۔
issuer، سروس کا نام (مثلاً ACME، GitHub)۔
algorithm، SHA1 / SHA256 / SHA512 / MD5۔
digits، فی کوڈ 6 یا 8 ہندسے۔
type، TOTP (وقت پر مبنی) یا HOTP (کاؤنٹر پر مبنی)۔
counter، HOTP اندراجات کے لیے موجودہ کاؤنٹر ویلیو۔
ہمارا اسکینر کیا ظاہر کرتا ہے، اور کیا وہ جان بوجھ کر نہیں کرتا
✓ ظاہر کیا گیا
بنڈل کے ہر اندراج کے لیے، نتیجہ issuer (ACME، GitHub، AWS)، اکاؤنٹ کا نام (alice@acme.com)، الگورتھم (SHA1)، ہندسوں کی تعداد (6)، اور قسم (TOTP) دکھاتا ہے۔ نتیجے کا انکشاف یوں پڑھا جاتا ہے ”اس بنڈل میں رسائیاں: ACME / alice@acme.com؛ GitHub / bob@github؛ AWS / root؛ …“ تاکہ وہ صارف جو واقعی مائیگریشن کے دوران ہے، امپورٹ کرنے سے پہلے فہرست کا آڈٹ کر سکے۔
Schema ورژن، batch index، batch size، اور batch ID بھی ظاہر کیے جاتے ہیں، جو اس وقت مفید ہیں جب ایک ایکسپورٹ کو متعدد QRs میں تقسیم کیا جاتا ہے۔
✗ کبھی ڈی کوڈ نہیں ہوتا
خام secret بائٹس کو کبھی بھی نتیجے کے آؤٹ پٹ میں ڈی کوڈ نہیں کیا جاتا۔ ہمارا اینالائزر انہیں صرف یہ تصدیق کرنے کے لیے پڑھتا ہے کہ ہر اندراج درست شکل میں ہے (secret موجود + خالی نہیں)، پھر findings بننے سے پہلے اس قدر کو ضائع کر دیتا ہے۔
اس کی تصدیق ٹیسٹ سوٹ کے ذریعے کی جاتی ہے، ہم اینالائزر کو ہاتھ سے بنائے گئے protobuf پے لوڈ دیتے ہیں جن میں کینری اسٹرنگز (SECRET_SEED_1، SECRET_SEED_2) ہوتی ہیں اور یہ یقینی بناتے ہیں کہ یہ اسٹرنگز کبھی سیریلائزڈ نتیجے کے آؤٹ پٹ میں ظاہر نہ ہوں۔ وہاں کوئی ریگریشن CI کو فیل کر دیتی ہے۔
اسے کب (اور کیسے) استعمال کریں
جائز استعمال کی صورت: آپ ایک فون سے دوسرے فون پر اپ گریڈ کر رہے ہیں۔ پرانا فون اپنی اسکرین پر تقریباً 30 سیکنڈ تک مائیگریشن QR دکھاتا ہے۔ نئے فون کی authenticator ایپ اسکرین کی طرف تاکتی ہے اور امپورٹ کر لیتی ہے۔ کمرے میں کوئی اور نہیں ہوتا۔ سب کچھ امپورٹ ہونے کی تصدیق کے بعد آپ پرانے فون سے ایکسپورٹ کو حذف کر دیتے ہیں۔
خطرے کی صورتیں یہ ہیں:
QR کے اسکرین شاٹس۔ کلاؤڈ سے ہم آہنگ تصاویر میں محفوظ ایک اسکرین شاٹ QR کو اس اکاؤنٹ سے ہم آہنگ ہر ڈیوائس پر رکھ دیتا ہے۔
چیٹ پر QR کا اشتراک۔ مختصر طور پر بھی، چیٹ تک رسائی رکھنے والا کوئی بھی (اب یا بعد میں) بنڈل نکال سکتا ہے۔
کسی ہیلپ فورم تھریڈ میں QR پوسٹ کرنا۔ یہ آپ کی سوچ سے زیادہ ہوتا ہے؛ لوگ مدد مانگتے ہیں اور غلطی سے اپنے authenticator ایکسپورٹ کی تصویر پوسٹ کر دیتے ہیں۔
عوامی پوسٹرز / سائن بورڈز جنہیں غلطی سے سیٹ اپ QRs سمجھ لیا جائے۔ یہ فارمیٹ بصری طور پر ایک واحد اکاؤنٹ سیٹ اپ QR سے ناقابلِ تمیز ہے۔
اگر آپ کو شک ہے کہ کوئی مائیگریشن QR ظاہر ہو گیا ہے
اسے بنڈل کے ہر اکاؤنٹ پر کریڈینشل لیک کے طور پر لیں۔ بحالی کے اقدامات، ترتیب وار:
ہر متاثرہ سروس میں سائن اِن کریں اور 2FA secret کو گھمائیں (rotate کریں)۔ زیادہ تر سروسز آپ کو یہ کام Account → Security → Two-factor authentication → Disable پھر دوبارہ enroll کے تحت کرنے دیتی ہیں۔
ایسی سروسز کے لیے جو rotation فراہم نہیں کرتیں (نادر مگر موجود)، اکاؤنٹ کو ہٹا کر دوبارہ شامل کریں۔
ہر متاثرہ اکاؤنٹ پر حالیہ سائن اِن سرگرمی کا آڈٹ کریں۔
اصل ایکسپورٹ QR کو ہر اس ڈیوائس + کلاؤڈ-سنک شدہ فوٹو لائبریری سے حذف کریں جس میں یہ موجود ہو سکتا ہے۔
بنڈل رکھنے والا حملہ آور برسوں تک درست 2FA کوڈز تیار کر سکتا ہے جب تک آپ گردش نہ دیں۔ تاخیر نہ کریں۔
QR تصویر کو ہمارے اسکینر میں ڈالیں، otpauth-migration:// URI پیسٹ کریں، یا کیمرہ استعمال کریں۔ نتیجہ بنڈل کے ہر اکاؤنٹ کو secrets ڈی کوڈ کیے بغیر دکھاتا ہے۔