এর পরে, BadRAM এর অংশ হিসাবে একটি স্ক্রিপ্ট তৈরি করা হয়েছে যা আক্রমণকারীকে ভূত মেমরি বিটের মেমরি অবস্থানগুলি দ্রুত খুঁজে পেতে দেয়। এই উপনামগুলি আক্রমণকারীকে মেমরি অঞ্চলগুলিতে অ্যাক্সেস দেয় যেগুলি SEV-SNP অ্যাক্সেসযোগ্য করে তুলতে পারে৷ এটি আক্রমণকারীকে এই সুরক্ষিত মেমরি অঞ্চলগুলিতে পড়তে এবং লিখতে দেয়।
মেমরির এই সাধারণভাবে সুরক্ষিত অঞ্চলে অ্যাক্সেস আক্রমণকারীকে ক্রিপ্টোগ্রাফিক হ্যাশ SEV-SNP তৈরি করে VM-এর অখণ্ডতা প্রমাণ করতে অনুলিপি করতে দেয়। অ্যাক্সেস আক্রমণকারীকে একটি SEV-সঙ্গী VM বুট করার অনুমতি দেয় যা ব্যাকডোর করা হয়েছে। সাধারণত, এই ক্ষতিকারক VM একটি ক্রিপ্টোগ্রাফিক হ্যাশ আকারে একটি সতর্কতা ট্রিগার করবে। BadRAM আক্রমণকারীকে এই সত্যায়ন ব্যর্থতার হ্যাশটি আগে সংগ্রহ করা সত্যায়ন সফল হ্যাশের সাথে প্রতিস্থাপন করতে দেয়।
BadRAM আক্রমণের সাথে জড়িত প্রাথমিক পদক্ষেপগুলি হল:
- মেমরি মডিউলটিকে তার আকার সম্পর্কে মিথ্যা বলার জন্য আপোস করুন এবং এইভাবে বিদ্যমান মেমরি অঞ্চলে নীরবে ম্যাপ করা অস্তিত্বহীন ভূতের ঠিকানাগুলি অ্যাক্সেস করার জন্য CPU-কে কৌশল করুন।
- উপনাম খুঁজুন। এই ঠিকানাগুলি একই DRAM অবস্থানে ম্যাপ করে।
- CPU অ্যাক্সেস কন্ট্রোল বাইপাস করুন। উপনামগুলি আক্রমণকারীকে মেমরি সুরক্ষাগুলিকে বাইপাস করার অনুমতি দেয় যা সংবেদনশীল ডেটা সঞ্চয় করা অঞ্চলগুলিতে পড়া এবং লিখতে বাধা দেয় বলে মনে করা হয়৷
ভূত থেকে সাবধান
যারা আরও প্রযুক্তিগত বিবরণ খুঁজছেন তাদের জন্য, জেসি ডি মেউলেমিস্টার, যিনি লুকা উইলকের সাথে পেপারের প্রধান সহ-লেখক ছিলেন, নিম্নলিখিতগুলি প্রদান করেছিলেন, যা আরও নৈমিত্তিক পাঠকরা এড়িয়ে যেতে পারেন:
আমাদের আক্রমণে, দুটি ঠিকানা রয়েছে যা একই DRAM অবস্থানে যায়; একটি হল আসল ঠিকানা, অন্যটি হল যাকে আমরা উপনাম বলি।
যখন আমরা SPD পরিবর্তন করি, তখন আমরা এর আকার দ্বিগুণ করি। একটি নিম্ন স্তরে, এর অর্থ হল সমস্ত মেমরি ঠিকানায় এখন একটি অতিরিক্ত বিট রয়েছে বলে মনে হচ্ছে। এই অতিরিক্ত বিটটিকে আমরা “ভূত” বিট বলি, এটি ঠিকানা বিট যা CPU দ্বারা ব্যবহৃত হয়, কিন্তু DIMM দ্বারা ব্যবহৃত হয় না (এইভাবে উপেক্ষা করা হয়)। যে ঠিকানাগুলির জন্য এই “ভূত” বিটটি 0 সেগুলি আসল ঠিকানা, এবং যে ঠিকানাগুলির জন্য এই বিটটি 1 সেগুলি হল “ভূত” মেমরি।
এটি ব্যাখ্যা করে কিভাবে আমরা লঞ্চ ডাইজেস্টের মতো সুরক্ষিত ডেটা অ্যাক্সেস করতে পারি। লঞ্চ ডাইজেস্ট একটি ঠিকানায় সংরক্ষিত থাকে যেখানে ভূত বিট 0 সেট করা থাকে এবং এই ঠিকানাটি সুরক্ষিত থাকে; এটি অ্যাক্সেস করার কোনো প্রচেষ্টা CPU দ্বারা অবরুদ্ধ করা হয়। যাইহোক, যদি আমরা 1 তে সেট করা ঘোস্ট বিট দিয়ে একই ঠিকানা অ্যাক্সেস করার চেষ্টা করি, CPU এটিকে সম্পূর্ণ নতুন ঠিকানা হিসাবে বিবেচনা করে এবং অ্যাক্সেসের অনুমতি দেয়। DIMM দিকে, ভূত বিট উপেক্ষা করা হয়, তাই উভয় ঠিকানা (ভূত বিট 0 বা 1 সহ) একই শারীরিক মেমরি অবস্থান নির্দেশ করে।
এটি ব্যাখ্যা করার জন্য একটি ছোট উদাহরণ:
আসল SPD: 4 বিট ঠিকানা:
CPU: ঠিকানা 1101 -> DIMM: ঠিকানা 1101সংশোধিত SPD: 5 বিট রিপোর্ট করে যদিও এতে শুধুমাত্র 4 আছে:
CPU: ঠিকানা 01101 -> DIMM: ঠিকানা 1101
CPU: ঠিকানা 11101 -> DIMM: ঠিকানা 1101এই ক্ষেত্রে 01101 হল সুরক্ষিত ঠিকানা, 11101 হল উপনাম। যদিও CPU-তে তারা দুটি ভিন্ন ঠিকানার মত মনে হয়, তারা একই DRAM অবস্থানে যায়।
যেমনটি আগে উল্লেখ করা হয়েছে, কিছু DIMM মডেল SPD চিপকে লক করে না, একটি ব্যর্থতা যা সম্ভবত সফ্টওয়্যার-কেবল পরিবর্তনগুলিকে সম্ভব করে তোলে। বিশেষত, গবেষকরা দেখেছেন যে Corsair দ্বারা তৈরি দুটি DDR4 মডেলে এই ত্রুটি রয়েছে।