Google Authenticator এক্সপোর্ট QR কি স্ক্যান করা নিরাপদ?
শুধুমাত্র যদি আপনি নিজে এটি তৈরি করে থাকেন, আপনার নিজের পুরোনো ফোনে, আপনার নিজের নতুন ফোন স্ক্রিনের দিকে তাক করে। অন্য যে কেউ সেই QR-এর ছবি তোলে, যেকোনো কারণেই হোক, বান্ডিলের প্রতিটি অ্যাকাউন্টের প্রতিটি 2FA কোডে স্থায়ী অ্যাক্সেস পেয়ে যায়।
Google Authenticator এবং বেশ কয়েকটি সামঞ্জস্যপূর্ণ অ্যাপ (Aegis, Raivo OTP, 2FAS) আপনাকে আপনার সংরক্ষিত 2FA অ্যাকাউন্টগুলো “এক্সপোর্ট” করতে দেয় যাতে আপনি সেগুলো একটি নতুন ডিভাইসে নিতে পারেন। এক্সপোর্টটি একটি QR কোডের রূপ নেয় যার একটি URI থাকে যা otpauth-migration:// দিয়ে শুরু হয়। সেই URI-এর ভেতরে একটি একক প্রোটোকল-বাফার বান্ডিল (Google-এর MigrationPayload স্কিমা) থাকে যা একসাথে প্রতিটি অ্যাকাউন্ট বহন করে, ইস্যুয়ার, অ্যাকাউন্ট নাম, সিক্রেট সিড, অ্যালগরিদম, সংখ্যার গণনা, টাইপ (HOTP / TOTP), এবং কাউন্টার।
ফরম্যাটটি মূলত অনথিভুক্ত ছিল, কিন্তু এটি রিভার্স-ইঞ্জিনিয়ার করা হয়েছে এবং এখন 2FA ব্যাকআপের জন্য কার্যত স্ট্যান্ডার্ড ইন্টারচেঞ্জ ফরম্যাট। তৃতীয়-পক্ষের অথেন্টিকেটর অ্যাপগুলো একই QR শনাক্ত ও আমদানি করে।
একটি QR-এ কয়েক ডজন অ্যাকাউন্ট থাকতে পারে। QR-টি একটি সাধারণ TOTP সেটআপ QR থেকে দৃশ্যত আলাদা করা যায় না, এটি সম্পূর্ণ বান্ডিল বহন করে তা একজন সাধারণ পর্যবেক্ষককে জানানোর মতো কোনো দৃশ্যমান চিহ্ন নেই।
কেন একটি একক বান্ডিল QR অনন্যভাবে বিপজ্জনক
একটি সাধারণ otpauth:// সেটআপ QR স্ক্যান করা বিপজ্জনক যদি আপনি তা না চেয়ে থাকেন, কিন্তু এর ক্ষতির পরিধি একটি অ্যাকাউন্ট। মাইগ্রেশন QR-এর ক্ষতির পরিধি আপনার অথেন্টিকেটরের প্রতিটি অ্যাকাউন্ট। কোনো আক্রমণকারী যদি এই QR দেখানো স্ক্রিনের ছবি তোলে, কফি শপে আপনার কাঁধের ওপর দিয়ে, আপনি লক্ষ্য করেননি এমন একটি CCTV ক্যামেরার মাধ্যমে, একটি স্বচ্ছ কাচের জানালা দিয়ে, তারা এটি দ্বারা আবৃত প্রতিটি অ্যাকাউন্টের 2FA এড়িয়ে যাওয়ার ক্ষমতা নিয়ে চলে যায়। স্থায়ীভাবে। যতক্ষণ না আপনি প্রতিটি সিক্রেট ম্যানুয়ালি ঘোরান, যা বেশিরভাগ পরিষেবা সহজ করে না।
বান্ডিলের সিক্রেটগুলোর কোনো মেয়াদ শেষ হয় না। একটি সেশন টোকেনের (যা মেয়াদোত্তীর্ণ হয়) বিপরীতে, একটি পাসকি QR-এর (যা এক-বার ব্যবহারযোগ্য) বিপরীতে, মাইগ্রেশন বান্ডিলের সিডগুলো পরিষেবা-ভিত্তিকভাবে প্রতিস্থাপন না করা পর্যন্ত বৈধ থাকে।
এ কারণেই প্রতিটি otpauth-migration:// QR সম্পর্কে আমাদের স্ক্যানারের রায় likely_dangerous থেকে শুরু হয় এবং প্রেক্ষাপট নির্বিশেষে সেখানেই থাকে। ফরম্যাটটি ঠিক আছে; হুমকি মডেলটিই ফরম্যাটের অস্তিত্ব।
base64 বডিটি ডিকোড হওয়ার পর হয় একটি MigrationPayload প্রোটোকল-বাফার, যাতে এই শীর্ষ-স্তরের ফিল্ডগুলো থাকে:
otp_parameters, পুনরাবৃত্ত। প্রতি অ্যাকাউন্টে একটি এন্ট্রি।
version, স্কিমা সংস্করণ।
batch_size, একটি এক্সপোর্ট যখন একাধিক QR-এ বিভক্ত হয় তখন মোট চাঙ্ক সংখ্যা।
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 এন্ট্রির জন্য বর্তমান কাউন্টার মান।
আমাদের স্ক্যানার যা প্রকাশ করে, এবং যা ইচ্ছাকৃতভাবে করে না
✓ প্রকাশিত
বান্ডিলের প্রতিটি এন্ট্রির জন্য, রায় দেখায় ইস্যুয়ার (ACME, GitHub, AWS), অ্যাকাউন্ট নাম (alice@acme.com), অ্যালগরিদম (SHA1), সংখ্যার গণনা (6), এবং টাইপ (TOTP)। রায় প্রকাশনায় লেখা থাকে “এই বান্ডিলের গ্রান্ট: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …” যাতে একজন ব্যবহারকারী যিনি মাইগ্রেশনের মাঝামাঝি আছেন তিনি আমদানি করার আগে তালিকাটি নিরীক্ষা করতে পারেন।
স্কিমা সংস্করণ, ব্যাচ ইনডেক্স, ব্যাচ সাইজ, এবং ব্যাচ ID-ও প্রকাশ করা হয়, যা একটি এক্সপোর্ট একাধিক QR জুড়ে চাঙ্ক করা হলে উপযোগী।
✗ কখনো ডিকোড করা হয় না
কাঁচা secret বাইটগুলো কখনোই রায়ের আউটপুটে ডিকোড করা হয় না। আমাদের অ্যানালাইজার এগুলো শুধুমাত্র প্রতিটি এন্ট্রি সঠিকভাবে গঠিত কিনা (সিক্রেট উপস্থিত + অ-খালি) তা যাচাই করতে পড়ে, তারপর ফাইন্ডিংস তৈরির আগেই মানটি বাতিল করে দেয়।
এটি টেস্ট স্যুট দ্বারা নিশ্চিত করা হয়, আমরা অ্যানালাইজারকে ক্যানারি স্ট্রিং (SECRET_SEED_1, SECRET_SEED_2) ধারণকারী হাতে-তৈরি প্রোটোবাফ পেলোড দিই এবং নিশ্চিত করি যে সেই স্ট্রিংগুলো সিরিয়ালাইজড রায়ের আউটপুটে কখনো উপস্থিত হয় না। সেখানে কোনো রিগ্রেশন হলে CI ব্যর্থ হয়।
কখন (এবং কীভাবে) একটি ব্যবহার করবেন
বৈধ ব্যবহারের ক্ষেত্র: আপনি একটি ফোন থেকে অন্যটিতে আপগ্রেড করছেন। পুরোনো ফোনটি তার স্ক্রিনে প্রায় 30 সেকেন্ডের জন্য মাইগ্রেশন QR দেখায়। নতুন ফোনের অথেন্টিকেটর অ্যাপ স্ক্রিনের দিকে তাক করে এবং আমদানি করে। ঘরে আর কেউ নেই। সবকিছু আমদানি হয়েছে নিশ্চিত করার পর আপনি পুরোনো ফোন থেকে এক্সপোর্ট মুছে ফেলেন।
বিপদের ক্ষেত্রগুলো হলো:
QR-এর স্ক্রিনশট। ক্লাউড-সিঙ্ক করা ফটোতে সংরক্ষিত একটি স্ক্রিনশট সেই অ্যাকাউন্টে সিঙ্ক করা প্রতিটি ডিভাইসে QR-টি রাখে।
চ্যাটে QR শেয়ার করা। এমনকি সংক্ষিপ্তভাবে হলেও, চ্যাটে অ্যাক্সেস থাকা যে কেউ (এখন বা পরে) বান্ডিলটি বের করে নিতে পারে।
সাহায্য-ফোরাম থ্রেডে QR পোস্ট করা। এটি আপনার ধারণার চেয়ে বেশি ঘটে; মানুষ সাহায্য চায় এবং ভুল করে তাদের অথেন্টিকেটর এক্সপোর্টের একটি ছবি পোস্ট করে।
সেটআপ QR হিসেবে ভুলভাবে শনাক্ত হওয়া সর্বজনীন পোস্টার / সাইনেজ। ফরম্যাটটি একক-অ্যাকাউন্ট সেটআপ QR থেকে দৃশ্যত আলাদা করা যায় না।
আপনি যদি সন্দেহ করেন যে একটি মাইগ্রেশন QR প্রকাশিত হয়েছে
বান্ডিলের প্রতিটি অ্যাকাউন্ট জুড়ে একটি ক্রেডেনশিয়াল ফাঁস হিসেবে গণ্য করুন। পুনরুদ্ধারের ধাপগুলো, ক্রমানুসারে:
প্রতিটি প্রভাবিত পরিষেবায় সাইন ইন করুন এবং 2FA সিক্রেট রোটেট করুন। বেশিরভাগ পরিষেবা আপনাকে এটি Account → Security → Two-factor authentication → Disable then re-enroll এর অধীনে করতে দেয়।
যেসব পরিষেবা রোটেশন প্রকাশ করে না (বিরল কিন্তু আছে), অ্যাকাউন্টটি সরিয়ে আবার যোগ করুন।
প্রতিটি প্রভাবিত অ্যাকাউন্টে সাম্প্রতিক সাইন-ইন কার্যকলাপ নিরীক্ষা করুন।
যেসব ডিভাইস + ক্লাউড-সিঙ্ক করা ফটো লাইব্রেরিতে এটি থাকতে পারে সেগুলোর প্রতিটি থেকে মূল এক্সপোর্ট QR মুছে ফেলুন।
বান্ডিল হাতে থাকা একজন আক্রমণকারী আপনি রোটেট না করা পর্যন্ত বছরের পর বছর বৈধ 2FA কোড তৈরি করতে পারে। বিলম্ব করবেন না।
QR ছবিটি আমাদের স্ক্যানারে ফেলুন, otpauth-migration:// URI পেস্ট করুন, বা ক্যামেরা ব্যবহার করুন। রায় সিক্রেটগুলো কখনো ডিকোড না করেই বান্ডিলের প্রতিটি অ্যাকাউন্ট দেখায়।