লেখক:
(1) জেন ওয়েইসম্যান, ওরচেস্টার পলিটেকনিক ইনস্টিটিউট ওরচেস্টার, এমএ, ইউএসএ {[email protected]};
(2) টমাস আইজেনবার্থ, লুবেক ইউনিভার্সিটি লুবেক, এসএইচ, জার্মানি {[email protected]};
(3) থোর টাইম্যান, লুবেক ইউনিভার্সিটি লুবেক, এসএইচ, জার্মানি {[email protected]};
(4) Berk Sunar, Worcester Polytechnic Institute Worcester, MA, USA {[email protected]}।
লিনাক্স কার্নেল-ভিত্তিক ভার্চুয়াল মেশিন (KVM) [২৯] আধুনিক CPU-তে উপলব্ধ Intel VT-x বা AMD-V-এর মতো হার্ডওয়্যার-সহায়ক ভার্চুয়ালাইজেশন বৈশিষ্ট্যগুলির একটি বিমূর্ততা প্রদান করে। কাছাকাছি-নেটিভ এক্সিকিউশন সমর্থন করার জন্য, বিদ্যমান কার্নেল মোড এবং ব্যবহারকারী মোড ছাড়াও Linux কার্নেলে একটি গেস্ট মোড যোগ করা হয়। লিনাক্স গেস্ট মোডে থাকলে, KVM হার্ডওয়্যারকে হার্ডওয়্যার ভার্চুয়ালাইজেশন মোডে প্রবেশ করতে দেয় যা রিং 0 এবং রিং 3 বিশেষাধিকারের প্রতিলিপি করে।[1]
KVM এর সাথে, I/O ভার্চুয়ালাইজেশনটি বেশিরভাগ ব্যবহারকারীর জায়গায় সঞ্চালিত হয় যে প্রক্রিয়াটি VM তৈরি করেছে, VMM বা হাইপারভাইজার হিসাবে উল্লেখ করা হয়, আগের হাইপারভাইজারগুলির বিপরীতে যার জন্য সাধারণত একটি পৃথক হাইপারভাইজার প্রক্রিয়ার প্রয়োজন হয় [41]। একটি KVM হাইপারভাইজার প্রতিটি VM গেস্টকে তার নিজস্ব মেমরি অঞ্চল সরবরাহ করে যা গেস্ট তৈরির প্রক্রিয়ার মেমরি অঞ্চল থেকে আলাদা। কার্নেল স্পেস এবং ইউজার স্পেস থেকে তৈরি গেস্টদের ক্ষেত্রে এটি সত্য। প্রতিটি ভিএম লিনাক্স হোস্টে একটি প্রক্রিয়ার সাথে মানচিত্র করে এবং অতিথিকে দেওয়া প্রতিটি ভার্চুয়াল সিপিইউ সেই হোস্ট প্রক্রিয়ার একটি থ্রেড। VM-এর ইউজারস্পেস হাইপারভাইজার প্রক্রিয়া শুধুমাত্র তখনই KVM-তে সিস্টেম কল করে যখন প্রিভিলেজড এক্সিকিউশন প্রয়োজন হয়, কনটেক্সট স্যুইচিং কম করে এবং VM-কে কার্নেল অ্যাটাক সারফেসে কমিয়ে দেয়। সমস্ত ধরণের অ্যাপ্লিকেশন জুড়ে কর্মক্ষমতা উন্নত করার পাশাপাশি, এই নকশাটি হালকা ওজনের হাইপারভাইজারগুলির বিকাশের অনুমতি দিয়েছে যা বিশেষ করে স্যান্ডবক্সিং পৃথক প্রোগ্রাম এবং সমর্থনকারী ক্লাউড পরিবেশের জন্য দরকারী যেখানে অনেকগুলি VM একই সময়ে চলছে৷
ক্লাউড কম্পিউটিং-এর একটি ক্রমবর্ধমান জনপ্রিয় মডেল হল সার্ভারবিহীন কম্পিউটিং, যেখানে CSP ব্যবহারকারীর কোড চালিত সার্ভারগুলির পরিমাপযোগ্যতা এবং প্রাপ্যতা পরিচালনা করে। সার্ভারহীন কম্পিউটিং এর একটি বাস্তবায়নকে বলা হয় ফাংশন-এ-এ-সার্ভিস (FaaS)। এই মডেলে, একজন ক্লাউড ব্যবহারকারী ফাংশনগুলিকে সংজ্ঞায়িত করে যেগুলিকে পরিষেবা প্রদানকারীর অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (API) এর মাধ্যমে প্রয়োজনীয় হিসাবে বলা হয় (অতএব "ফাংশন-এ-সার্ভিস" নাম) এবং CSP সার্ভারে সংস্থান বরাদ্দ পরিচালনা করে যা কার্যকর করে। ব্যবহারকারীর ফাংশন (অতএব নাম “সার্ভারলেস কম্পিউটিং”—ব্যবহারকারী কোনো সার্ভার পরিচালনা করে না)। একইভাবে, কন্টেইনার-এ-সার্ভিস (CaaS) কম্পিউটিং চাহিদা অনুযায়ী কন্টেইনার, পোর্টেবল রানটাইম প্যাকেজ চালায়। FaaS এবং CaaS-এর কেন্দ্রীভূত সার্ভার ব্যবস্থাপনা CSP এবং ব্যবহারকারী উভয়ের জন্যই অর্থনৈতিকভাবে আকর্ষণীয়। CSP তার ব্যবহারকারীদের কাজের চাপ পরিচালনা করতে পারে যদিও এটি খুশি হয়, ন্যূনতম অপারেটিং খরচের জন্য অপ্টিমাইজ করতে পারে এবং নমনীয় মূল্য প্রয়োগ করতে পারে যেখানে ব্যবহারকারীরা তাদের ব্যবহার করা কার্যকরী সময়ের জন্য অর্থ প্রদান করে। ব্যবহারকারীকে সার্ভারের অবকাঠামো ডিজাইন বা ব্যবস্থাপনা নিয়ে চিন্তা করার দরকার নেই, এবং তাই তুলনামূলকভাবে ছোট এবং অনুমানযোগ্য হারে CSP-তে উন্নয়ন খরচ এবং আউটসোর্স রক্ষণাবেক্ষণ খরচ কমিয়ে দেয়।
FaaS এবং CaaS প্রদানকারীরা চলমান ফাংশন এবং কন্টেইনারগুলি পরিচালনা করতে বিভিন্ন সিস্টেম ব্যবহার করে। ডকার, পডম্যান এবং এলএক্সডি-র মতো ধারক সিস্টেমগুলি যে কোনও পরিবেশে স্যান্ডবক্সযুক্ত অ্যাপ্লিকেশনগুলি প্যাকেজ এবং চালানোর জন্য একটি সুবিধাজনক এবং হালকা উপায় সরবরাহ করে। যাইহোক, ক্লাউড কম্পিউটিংয়ের আরও অনেক ঐতিহ্যবাহী ফর্মের জন্য ব্যবহৃত ভার্চুয়াল মেশিনের তুলনায়, পাত্রে কম বিচ্ছিন্নতা এবং তাই কম নিরাপত্তা প্রদান করে। সাম্প্রতিক বছরগুলিতে, প্রধান CSPগুলি মাইক্রোভিএম চালু করেছে যা অতিরিক্ত নিরাপত্তার জন্য হালকা ভার্চুয়ালাইজেশন সহ ঐতিহ্যবাহী কন্টেইনারগুলিকে ব্যাক করে। [1, 55] KVM এর সাথে হার্ডওয়্যার ভার্চুয়ালাইজেশনের দক্ষতা এবং মাইক্রোভিএম-এর লাইটওয়েট ডিজাইনের অর্থ হল ভার্চুয়ালাইজড, কন্টেইনারাইজড বা কন্টেইনার-সদৃশ সিস্টেমে কোড আনভার্চুয়ালাইজড কোডের মতো দ্রুত এবং একটি ঐতিহ্যবাহী কন্টেইনারের সাথে তুলনীয় ওভারহেড সহ চলতে পারে।
ফায়ারক্র্যাকার [১] হল একটি মাইক্রোভিএম যা AWS দ্বারা তৈরি করা হয়েছে প্রতিটি AWS Lambda FaaS এবং AWS Fargate CaaS ওয়ার্কলোডকে আলাদা VM-এ আলাদা করার জন্য। এটি শুধুমাত্র x86 বা ARM Linux-KVM হোস্টে Linux গেস্ট সমর্থন করে এবং গেস্ট সিস্টেমের জন্য উপলব্ধ সীমিত সংখ্যক ডিভাইস সরবরাহ করে। এই সীমাবদ্ধতাগুলি ফায়ারক্র্যাকারকে এর কোড বেসের আকারে এবং চলমান VM-এর জন্য মেমরি ওভারহেডে খুব হালকা ওজনের, সেইসাথে খুব দ্রুত বুট বা বন্ধ করার অনুমতি দেয়। অতিরিক্তভাবে, KVM-এর ব্যবহার Firecracker-এর প্রয়োজনীয়তাগুলিকে হালকা করে, যেহেতু কিছু ভার্চুয়ালাইজেশন ফাংশন কার্নেল সিস্টেম কল দ্বারা পরিচালিত হয় এবং হোস্ট OS VMগুলিকে স্ট্যান্ডার্ড প্রক্রিয়া হিসাবে পরিচালনা করে। রাস্টে লেখা এর ছোট কোড বেসের কারণে, ফায়ারক্র্যাকারকে খুব নিরাপদ বলে ধরে নেওয়া হয়, যদিও পূর্ববর্তী সংস্করণগুলিতে নিরাপত্তা ত্রুটিগুলি চিহ্নিত করা হয়েছে (দেখুন CVE-2019-18960)। মজার বিষয় হল, ফায়ারক্র্যাকার হোয়াইট পেপার মাইক্রোআর্কিটেকচারাল আক্রমণগুলিকে তার আক্রমণকারী মডেলের স্কোপ হিসাবে ঘোষণা করেছে [1] তবে অতিথি এবং হোস্ট কার্নেলের জন্য সাধারণ সুরক্ষিত সিস্টেম কনফিগারেশন সুপারিশের বাইরে মাইক্রোআর্কিটেকচারাল আক্রমণগুলির বিরুদ্ধে একটি বিশদ সুরক্ষা বিশ্লেষণ বা বিশেষ পাল্টা ব্যবস্থার অভাব রয়েছে। ফায়ারক্র্যাকার ডকুমেন্টেশন সিস্টেম নিরাপত্তা সুপারিশ প্রদান করে [৮] যার মধ্যে একটি নির্দিষ্ট তালিকা রয়েছে পাল্টা ব্যবস্থা, যা আমরা বিভাগ 2.6.1-এ কভার করি।
2018 সালে, মেল্টডাউন [32] আক্রমণ দেখায় যে অনুমানমূলকভাবে অ্যাক্সেস করা ডেটা এটিকে একটি ক্যাশে সাইড-চ্যানেলের মধ্যে এনকোড করে নিরাপত্তা সীমানা জুড়ে বহিষ্কার করা যেতে পারে। এটি শীঘ্রই অনুরূপ আক্রমণের পুরো শ্রেণীকে নেতৃত্ব দেয়, যা মাইক্রোআর্কিটেকচারাল ডেটা স্যাম্পলিং (MDS) নামে পরিচিত, যার মধ্যে ফলআউট [14], রোগ ইন-ফ্লাইট ডেটা লোড (RIDL) [50], TSX অ্যাসিঙ্ক্রোনাস অ্যাবর্ট (TAA) [50] এবং জম্বিলোড [46]। এই সমস্ত আক্রমণগুলি অনুমানমূলক মৃত্যুদন্ডকে কাজে লাগানোর জন্য একই সাধারণ প্যাটার্ন অনুসরণ করে:
(1) শিকার এমন একটি প্রোগ্রাম চালায় যা গোপন ডেটা পরিচালনা করে এবং গোপন ডেটা একটি ক্যাশে বা CPU বাফারের মধ্য দিয়ে যায়।
(2) আক্রমণকারী একটি বিশেষভাবে নির্বাচিত নির্দেশ চালায় যার ফলে CPU ভুলভাবে ভবিষ্যদ্বাণী করতে পারে যে গোপন ডেটার প্রয়োজন হবে। সিপিইউ আক্রমণকারীর নির্দেশে গোপন ডেটা ফরোয়ার্ড করে।
(3) ফরোয়ার্ড করা গোপন ডেটা একটি অ্যারেতে পড়া মেমরির জন্য সূচী হিসাবে ব্যবহার করা হয় যা আক্রমণকারী অ্যাক্সেস করার জন্য অনুমোদিত, যার ফলে সেই অ্যারের একটি নির্দিষ্ট লাইন ক্যাশে করা হয়।
(4) সিপিইউ ডেটা পরীক্ষা করা শেষ করে এবং সিদ্ধান্ত নেয় যে গোপন ডেটা ভুলভাবে ফরোয়ার্ড করা হয়েছিল, এবং এটি ফরওয়ার্ড করার আগে এক্সিকিউশন স্টেটকে ফিরিয়ে দেয়, কিন্তু ক্যাশের অবস্থা ফিরিয়ে দেওয়া হয় না। (5) কোন লাইনটি ক্যাশ করা হয়েছে তা দেখার জন্য আক্রমণকারী সমস্ত অ্যারের অনুসন্ধান করে; সেই লাইনের সূচক হল গোপন তথ্যের মান।
মূল মেল্টডাউন দুর্বলতা লক্ষ্যযুক্ত ক্যাশে ফরওয়ার্ডিং এবং ক্যাশে উপস্থিত যে কোনও মেমরি ঠিকানা থেকে এই পদ্ধতিতে ডেটা নিষ্কাশনের অনুমতি দেয়। এমডিএস আক্রমণগুলি অন-কোর মাইক্রোআর্কিটেকচারে ছোট এবং আরও নির্দিষ্ট বাফারকে লক্ষ্য করে এবং তাই আক্রমণের একটি সম্পর্কিত কিন্তু স্বতন্ত্র শ্রেণী তৈরি করে যা উল্লেখযোগ্যভাবে ভিন্ন উপায়ে প্রশমিত হয়। মেল্টডাউন মূল মেমরিকে লক্ষ্য করে যা তুলনামূলকভাবে খুব কম সময়ে আপডেট করা হয় এবং সমস্ত কোর, থ্রেড এবং প্রক্রিয়াগুলিতে ভাগ করা হয়, এমডিএস আক্রমণগুলি এমন বাফারগুলিকে লক্ষ্য করে যেগুলি কোর থেকে স্থানীয় (যদিও কখনও কখনও থ্রেড জুড়ে ভাগ করা হয়) এবং কার্যকর করার সময় আরও ঘন ঘন আপডেট করা হয়।
2.4.1 মৌলিক MDS ভেরিয়েন্ট । চিত্র 1 ইন্টেল সিপিইউতে প্রধান পরিচিত এমডিএস আক্রমণের পথ এবং ইন্টেল এবং যে গবেষকরা তাদের রিপোর্ট করেছেন তাদের দ্বারা বিভিন্ন প্রকারের নাম দেওয়া হয়েছে। সর্বাধিক বিস্তৃতভাবে, ইন্টেল তাদের CPU-তে MDS দুর্বলতাগুলিকে নির্দিষ্ট বাফার দ্বারা শ্রেণীবদ্ধ করে যেখান থেকে ডেটা অনুমানমূলকভাবে ফরোয়ার্ড করা হয়, যেহেতু এই বাফারগুলি বিভিন্ন ক্রিয়াকলাপের জন্য ব্যবহার করা হয়। RIDL MDS দুর্বলতাগুলিকে মাইক্রোআর্কিটেকচারাল লোড পোর্ট ডেটা স্যাম্পলিং (MLPDS) হিসাবে শ্রেণীবদ্ধ করা যেতে পারে, যেগুলি CPU এর লোড পোর্ট থেকে লিক হয় এবং মাইক্রোআর্কিটেকচারাল ফিল বাফার ডেটা স্যাম্পলিং (MFBDS), যেগুলি CPU এর LFB থেকে লিক হয় তার জন্য। একই লাইনে, ইন্টেল ফলআউট দুর্বলতাকে মাইক্রোআর্কিটেকচারাল স্টোর বাফার ডেটা স্যাম্পলিং (এমএসবিডিএস) বলে, কারণ এতে স্টোর বাফার থেকে ফুটো হওয়া জড়িত। ভেক্টর রেজিস্টার স্যাম্পলিং (ভিআরএস) হল MSBDS-এর একটি রূপ যা স্টোর বাফারের মধ্য দিয়ে যাওয়ার সময় ভেক্টর ক্রিয়াকলাপ দ্বারা পরিচালিত ডেটাকে লক্ষ্য করে। VERW বাইপাস একটি বাগ শোষণ করে
MFBDS-এর জন্য মাইক্রোকোড সংশোধন করে যা LFB-তে বাসি এবং সম্ভাব্য গোপন ডেটা লোড করে। ফুটো হওয়ার প্রাথমিক প্রক্রিয়া একই, এবং VERW বাইপাসকে MFBDS-এর একটি বিশেষ ক্ষেত্রে বিবেচনা করা যেতে পারে। L1 ডেটা ইভিকশন স্যাম্পলিং (L1DES) হল MFBDS-এর আরেকটি বিশেষ ক্ষেত্রে, যেখানে L1 ডেটা ক্যাশে থেকে উচ্ছেদ করা ডেটা LFB-এর মধ্য দিয়ে যায় এবং MDS আক্রমণের ঝুঁকিতে পড়ে। উল্লেখযোগ্যভাবে, L1DES হল এমন একটি কেস যেখানে আক্রমণকারী আসলে CPU-তে গোপন ডেটার উপস্থিতি ট্রিগার করতে পারে (এটি উচ্ছেদ করে), যেখানে অন্যান্য MDS আক্রমণগুলি সঠিক CPU বাফারে আনতে গোপন ডেটা অ্যাক্সেস করার শিকার প্রক্রিয়ার উপর সরাসরি নির্ভর করে।
2.4.2 মেডুসা। মেডুসা [৩৭] হল এমডিএস আক্রমণের একটি বিভাগ যা ইন্টেল দ্বারা MLPDS ভেরিয়েন্ট হিসেবে শ্রেণীবদ্ধ করা হয়েছে [২৫]। মেডুসা দুর্বলতাগুলি ইন্টেল প্রসেসরের রাইট-কম্বাইন (ডব্লিউসি) বাফারে স্টোরগুলিকে অনুমানমূলকভাবে একত্রিত করতে ব্যবহৃত অপূর্ণ প্যাটার্ন-ম্যাচিং অ্যালগরিদমগুলিকে কাজে লাগায়। ইন্টেল WC বাফারকে লোড পোর্টের অংশ হিসেবে বিবেচনা করে, তাই ইন্টেল এই দুর্বলতাকে MLPDS-এর ক্ষেত্রে শ্রেণীবদ্ধ করে। তিনটি পরিচিত মেডুসার রূপ রয়েছে যেগুলির প্রত্যেকটি একটি অনুমানমূলক ফাঁস সৃষ্টি করতে রাইট-কম্বাইন বাফারের একটি ভিন্ন বৈশিষ্ট্যকে কাজে লাগায়:
ক্যাশে ইনডেক্সিং: একটি ফল্টিং লোডকে অনুমানমূলকভাবে আগের লোডের সাথে মিলিত ক্যাশে লাইন অফসেটের সাথে মিলিত করা হয়।
আনলাইনড স্টোর-টু-লোড ফরোয়ার্ডিং: একটি বৈধ স্টোরের পরে একটি নির্ভরশীল লোড যা একটি মিসলাইনড মেমরি ফল্ট ট্রিগার করে, যার ফলে WC থেকে র্যান্ডম ডেটা ফরওয়ার্ড করা হয়।
শ্যাডো REP MOV : একটি ত্রুটিপূর্ণ REP MOV নির্দেশনা যার পরে একটি নির্ভরশীল লোড একটি ভিন্ন REP MOV-এর ডেটা ফাঁস করে।
2.4.3 TSX অ্যাসিঙ্ক্রোনাস অ্যাবোর্ট। হার্ডওয়্যার দুর্বলতা TSX অ্যাসিঙ্ক্রোনাস অ্যাবোর্ট (TAA) [24] একটি MDS আক্রমণ চালানোর জন্য একটি ভিন্ন অনুমান প্রক্রিয়া প্রদান করে। যদিও স্ট্যান্ডার্ড এমডিএস আক্রমণ একটি স্ট্যান্ডার্ড অনুমান করা এক্সিকিউশন সহ সীমাবদ্ধ ডেটা অ্যাক্সেস করে, TAA TSX দ্বারা বাস্তবায়িত একটি পারমাণবিক মেমরি লেনদেন ব্যবহার করে। যখন একটি পারমাণবিক মেমরি লেনদেন একটি অ্যাসিঙ্ক্রোনাস গর্ভপাতের সম্মুখীন হয়, উদাহরণস্বরূপ কারণ অন্য একটি প্রক্রিয়া লেনদেনের দ্বারা ব্যবহারের জন্য চিহ্নিত একটি ক্যাশে লাইন পড়ে বা লেনদেনটি একটি ত্রুটির সম্মুখীন হয়, লেনদেনের সমস্ত ক্রিয়াকলাপ লেনদেন শুরু হওয়ার আগে স্থাপত্য অবস্থায় ফিরিয়ে আনা হয়৷ যাইহোক, এই রোলব্যাকের সময়, লেনদেনের অভ্যন্তরে নির্দেশাবলী যা ইতিমধ্যেই কার্যকর করা শুরু করেছে সেগুলি অন্যান্য MDS আক্রমণগুলির ধাপ (2) এবং (3) হিসাবে অনুমানমূলক সম্পাদন চালিয়ে যেতে পারে। TAA সমস্ত ইন্টেল প্রসেসরকে প্রভাবিত করে যেগুলি TSX সমর্থন করে এবং কিছু নতুন প্রসেসরের ক্ষেত্রে যেগুলি অন্যান্য MDS আক্রমণ দ্বারা প্রভাবিত হয় না, MDS প্রশমন বা TAA-নির্দিষ্ট প্রশমন (যেমন TSX নিষ্ক্রিয় করা) TAA [24] থেকে রক্ষা করার জন্য সফ্টওয়্যারে প্রয়োগ করা আবশ্যক।
2.4.4 প্রশমন। যদিও মেল্টডাউন এবং এমডিএস-শ্রেণির দুর্বলতাগুলি নিম্ন স্তরের মাইক্রোআর্কিটেকচারাল ক্রিয়াকলাপগুলিকে কাজে লাগায় , তবে বেশিরভাগ দুর্বল সিপিইউতে মাইক্রোকোড ফার্মওয়্যার প্যাচগুলির সাহায্যে এগুলিকে প্রশমিত করা যেতে পারে।
পৃষ্ঠা টেবিল বিচ্ছিন্নতা। ঐতিহাসিকভাবে, কার্নেল পৃষ্ঠা টেবিলগুলি ব্যবহারকারী-স্তরের প্রক্রিয়া পৃষ্ঠা টেবিলে অন্তর্ভুক্ত করা হয়েছে যাতে একটি ব্যবহারকারী-স্তরের প্রক্রিয়া ন্যূনতম ওভারহেড সহ কার্নেলে একটি সিস্টেম কল করতে পারে। পৃষ্ঠা টেবিল বিচ্ছিন্নতা (প্রথম KAISER [১৯] হিসাবে গ্রাস এট আল দ্বারা প্রস্তাবিত) ব্যবহারকারীর পৃষ্ঠা টেবিলে কেবলমাত্র নূন্যতম প্রয়োজনীয় কার্নেল মেমরিকে ম্যাপ করে এবং শুধুমাত্র কার্নেল দ্বারা অ্যাক্সেসযোগ্য একটি দ্বিতীয় পৃষ্ঠার টেবিল প্রবর্তন করে। ব্যবহারকারীর প্রক্রিয়া কার্নেল পৃষ্ঠা টেবিল অ্যাক্সেস করতে অক্ষম হলে, কার্নেল মেমরির একটি ছোট এবং বিশেষভাবে নির্বাচিত ভগ্নাংশ ছাড়া অন্য সকলের অ্যাক্সেস বন্ধ হয়ে যায় তারা নিম্ন স্তরের ক্যাশে পৌঁছানোর আগে যেখানে একটি মেল্টডাউন আক্রমণ শুরু হয়।
বাফার ওভাররাইট. অন-কোর CPU বাফারগুলিকে লক্ষ্য করে এমন MDS আক্রমণগুলির জন্য একটি নিম্ন-স্তরের এবং আরও লক্ষ্যযুক্ত প্রতিরক্ষা প্রয়োজন। ইন্টেল একটি মাইক্রোকোড আপডেট চালু করেছে যা প্রথম-স্তরের ডেটা (L1d) ক্যাশে (ক্যাশে টাইমিং সাইডচ্যানেল আক্রমণের একটি সাধারণ লক্ষ্য) ফ্লাশ করা হলে বা VERW নির্দেশনা চালানো হলে দুর্বল বাফারগুলিকে ওভাররাইট করে [25]। কার্নেল একটি অবিশ্বস্ত প্রক্রিয়ায় স্যুইচ করার সময় একটি বাফার ওভাররাইট ট্রিগার করে MDS আক্রমণ থেকে রক্ষা করতে পারে।
বাফার ওভাররাইট প্রশমন তাদের উত্সে MDS আক্রমণকে লক্ষ্য করে, কিন্তু অন্তত বলতে অসম্পূর্ণ। যখন SMT সক্ষম করা থাকে তখন একই কোরে একযোগে চলমান থ্রেড থেকে প্রসেসগুলি আক্রমণের জন্য ঝুঁকিপূর্ণ থাকে (যেহেতু উভয় থ্রেডই দুর্বল বাফার শেয়ার করে সক্রিয় প্রক্রিয়াটি আসলে যেকোনও থ্রেডে পরিবর্তন না করে), তদ্ব্যতীত, মূল বাফার মাইক্রোকোড আপডেট ওভাররাইট করার কিছুক্ষণ পরে, RIDL টিম খুঁজে পেয়েছে যে কিছু স্কাইলেক সিপিইউতে, বাফারগুলি বাসি এবং সম্ভাব্য সংবেদনশীল ডেটা দিয়ে ওভাররাইট করা হয়েছিল [50], এবং প্রশমন সক্ষম এবং এসএমটি অক্ষম থাকা সত্ত্বেও দুর্বল ছিল। এখনও অন্যান্য প্রসেসরগুলি টিএএ-এর জন্য ঝুঁকিপূর্ণ কিন্তু ননটিএএ এমডিএস আক্রমণ নয়, এবং একটি বাফার ওভাররাইট মাইক্রোকোড আপডেট পায়নি এবং এমডিএস আক্রমণ প্রতিরোধ করার জন্য TSX সম্পূর্ণরূপে নিষ্ক্রিয় করা প্রয়োজন [20, 24]।
2.5 স্পেকটার
2018 সালে, জান হর্ন এবং পল কোচার [30] স্বাধীনভাবে প্রথম স্পেকটার ভেরিয়েন্টের রিপোর্ট করেছেন। তারপর থেকে, স্পেকটারের বিভিন্ন রূপ [22, 30, 31, 33] এবং উপ-ভেরিয়েন্ট [10, 13, 16, 28, 52] আবিষ্কৃত হয়েছে। স্পেকটার আক্রমণগুলি CPU কে অনুমানমূলকভাবে মেমরি অ্যাক্সেস করে যা স্থাপত্যগতভাবে অ্যাক্সেসযোগ্য নয় এবং স্থাপত্য অবস্থায় ডেটা ফাঁস করে দেয়। অতএব, সমস্ত স্পেকটার ভেরিয়েন্ট তিনটি উপাদান নিয়ে গঠিত [২৭]:
প্রথম উপাদানটি হল স্পেকটার গ্যাজেট যা অনুমানমূলকভাবে কার্যকর করা হয়। স্পেকটার ভেরিয়েন্টগুলি সাধারণত ভুল ধারণার উত্স দ্বারা পৃথক করা হয় যা তারা শোষণ করে। একটি শর্তাধীন সরাসরি শাখার ফলাফল, যেমন, প্যাটার্ন হিস্ট্রি টেবিল (PHT) দ্বারা পূর্বাভাস দেওয়া হয়। PHT-এর ভুল ধারণাগুলি লোড এবং স্টোর নির্দেশাবলীর জন্য একটি অনুমানমূলক সীমানা চেক বাইপাস হতে পারে [13, 28, 30]। ব্রাঞ্চ টার্গেট বাফার (BTB) দ্বারা একটি পরোক্ষ লাফের শাখা লক্ষ্য পূর্বাভাস করা হয়। যদি একজন আক্রমণকারী BTB এর ভুল ধারণার ফলাফলকে প্রভাবিত করতে পারে, তাহলে অনুমানমূলক রিটার্ন-ভিত্তিক প্রোগ্রামিং আক্রমণ সম্ভব [10, 13, 16, 30]। রিটার্ন স্ট্যাক বাফার (RSB) দ্বারা পরিবেশিত ভবিষ্যদ্বাণীগুলির ক্ষেত্রেও একই কথা সত্য যা রিটার্ন নির্দেশাবলী [13, 31, 33] কার্যকর করার সময় ফেরত ঠিকানাগুলির পূর্বাভাস দেয়। সাম্প্রতিক ফলাফলগুলি দেখিয়েছে যে কিছু আধুনিক CPU তাদের রিটার্ন ঠিকানা ভবিষ্যদ্বাণীর জন্য BTB ব্যবহার করে যদি RSB আন্ডারফ্লো হয় [52]। স্পেকটার আক্রমণের আরেকটি উৎস হল স্টোর-টু-লোড নির্ভরতার পূর্বাভাস। যদি একটি লোড পূর্ববর্তী স্টোরের উপর নির্ভর না করার জন্য ভুল পূর্বাভাস দেওয়া হয়, তবে এটি অনুমানমূলকভাবে বাসি ডেটার উপর সঞ্চালিত হয় যা একটি অনুমানমূলক স্টোর বাইপাস হতে পারে [22]। এই সমস্ত গ্যাজেটগুলি ডিফল্টরূপে শোষণযোগ্য নয় তবে এখন আলোচনা করা অন্য দুটি উপাদানের উপর নির্ভর করে৷
দ্বিতীয় উপাদান হল কিভাবে একজন আক্রমণকারী উপরে উল্লিখিত গ্যাজেটগুলিতে ইনপুট নিয়ন্ত্রণ করে। আক্রমণকারীরা ব্যবহারকারীর ইনপুট, ফাইল সামগ্রী, নেটওয়ার্ক প্যাকেট বা অন্যান্য স্থাপত্য প্রক্রিয়ার মাধ্যমে সরাসরি গ্যাজেট ইনপুট মান নির্ধারণ করতে সক্ষম হতে পারে। অন্যদিকে আক্রমণকারীরা লোড ভ্যালু ইনজেকশন [১২] বা ফ্লোটিং পয়েন্ট ভ্যালু ইনজেকশন [৪২] এর মাধ্যমে ক্ষণস্থায়ীভাবে গ্যাজেটে ডেটা ইনজেকশন করতে সক্ষম হতে পারে। আক্রমণকারীরা গ্যাজেট ইনপুটগুলিকে সফলভাবে নিয়ন্ত্রণ করতে সক্ষম হয় যদি তারা অনুমান উইন্ডোর সময় কোন ডেটা বা নির্দেশাবলী অ্যাক্সেস বা কার্যকর করা হয় তা প্রভাবিত করতে পারে৷
তৃতীয় উপাদানটি হল গোপন চ্যানেল যা অনুমানমূলক মাইক্রোআর্কিটেকচারাল অবস্থাকে একটি স্থাপত্য অবস্থায় স্থানান্তর করতে ব্যবহৃত হয় এবং সেইজন্য অনুমানমূলকভাবে অ্যাক্সেস করা ডেটাকে একটি স্থায়ী পরিবেশে বের করে দেয়। ক্যাশে গোপন চ্যানেল [39, 40, 54] প্রযোজ্য যদি শিকার কোডটি অনুমানমূলকভাবে অ্যাক্সেস করা গোপন ডেটার উপর নির্ভর করে একটি ক্ষণস্থায়ী মেমরি অ্যাক্সেস করে [30]। যদি একটি গোপনীয়তা অনুমানমূলকভাবে অ্যাক্সেস করা হয় এবং একটি অন-কোর বাফারে লোড করা হয়, তাহলে একজন আক্রমণকারী একটি MDS-ভিত্তিক চ্যানেলের উপর নির্ভর করতে পারে [14, 46, 50] আক্রমণকারী থ্রেডে ক্ষণস্থায়ীভাবে বহিষ্কৃত ডেটা স্থানান্তর করতে যেখানে ডেটা আর্কিটেকচারে স্থানান্তরিত হয়। রাজ্যের মাধ্যমে, যেমন, একটি ক্যাশে গোপন চ্যানেল। সবশেষে কিন্তু অন্তত নয়, যদি শিকার গোপন তথ্যের উপর নির্ভর করে কোডটি কার্যকর করে, আক্রমণকারী বন্দর বিতর্ক [3, 11, 18, 43, 44] পর্যবেক্ষণ করে গোপনীয়তা শিখতে পারে।
2.5.1 প্রশমন। বিভিন্ন স্পেকটার ভেরিয়েন্টগুলি প্রশমিত করার জন্য অনেকগুলি পাল্টা ব্যবস্থা তৈরি করা হয়েছিল। একটি নির্দিষ্ট স্পেকটার বৈকল্পিক কার্যকরভাবে নিষ্ক্রিয় করা হয় যদি তিনটি প্রয়োজনীয় উপাদানের একটি সরানো হয়। স্পেকটার গ্যাজেটগুলিতে ইনপুটগুলির উপর নিয়ন্ত্রণ ছাড়া একজন আক্রমণকারী সফলভাবে আক্রমণ চালানোর সম্ভাবনা কম। অনুমানমূলক রাষ্ট্রকে একটি স্থাপত্য রাষ্ট্রে রূপান্তর করার জন্য একটি গোপন চ্যানেল অনুপলব্ধ হলে এটি সত্য। কিন্তু যেহেতু এটি সাধারণত গ্যারান্টি দেওয়া কঠিন, তাই স্পেকটার পাল্টা ব্যবস্থাগুলি মূলত ভুল ভবিষ্যদ্বাণী বন্ধ করার উপর ফোকাস করে। সমালোচনামূলক কোড বিভাগগুলির আগে বাঁড়া নির্দেশাবলী সন্নিবেশ করানো এই বিন্দুর বাইরে অনুমানমূলক সম্পাদনকে অক্ষম করে এবং তাই একটি সাধারণ পাল্টা ব্যবস্থা হিসাবে ব্যবহার করা যেতে পারে। কিন্তু এর উচ্চ কার্যকারিতা ওভারহেডের কারণে, আরও নির্দিষ্ট পাল্টা ব্যবস্থা তৈরি করা হয়েছিল। Spectre-BTB পাল্টা ব্যবস্থার মধ্যে রয়েছে Retpoline [48] এবং IBRS, STIBP, বা IBPB [23] এর মত মাইক্রোকোড আপডেট। Spectre-RSB এবং Spectre-BTB-via-RSB ক্ষতিকারক এন্ট্রিগুলি ওভাররাইট করার জন্য RSB-কে মান দিয়ে পূরণ করে এবং RSB-কে আন্ডারফ্লো করা থেকে বা IBRS মাইক্রোকোড আপডেট ইনস্টল করার মাধ্যমে হ্রাস করা যেতে পারে। SSBD মাইক্রোকোড আপডেট [23] দ্বারা Spectre-STL প্রশমিত করা যেতে পারে। শেয়ার্ড ব্রাঞ্চ পূর্বাভাস বাফারগুলির সাথে আক্রমণকারীকে টেম্পারিং থেকে থামানোর আরেকটি কঠোর বিকল্প হল SMT অক্ষম করা। SMT নিষ্ক্রিয় করা কার্যকরভাবে একটি উল্লেখযোগ্য কর্মক্ষমতা ক্ষতির মূল্যে সমসাময়িক ভাড়াটেদের মধ্যে শাখা পূর্বাভাস হার্ডওয়্যার সংস্থানগুলিকে বিভাজন করে।
ফায়ারক্র্যাকার বিশেষভাবে সার্ভারহীন এবং কন্টেইনার অ্যাপ্লিকেশনের জন্য তৈরি করা হয়েছে [১] এবং বর্তমানে AWS' Fargate CaaS এবং Lambda FaaS দ্বারা ব্যবহৃত হয়। এই উভয় পরিষেবা মডেলের মধ্যে, ফায়ারক্র্যাকার হল প্রাথমিক বিচ্ছিন্নতা ব্যবস্থা যা প্রতিটি পৃথক ফার্গেট টাস্ক বা ল্যাম্বডা ইভেন্টকে সমর্থন করে। এই উভয় পরিষেবা মডেলগুলি তুলনামূলকভাবে ছোট এবং স্বল্পস্থায়ী কাজগুলির খুব বেশি সংখ্যা চালানোর জন্য ডিজাইন করা হয়েছে। AWS আইসোলেশন সিস্টেমের জন্য ডিজাইনের প্রয়োজনীয়তাগুলিকে আইটেমাইজ করে যা অবশেষে ফায়ারক্র্যাকারে পরিণত হয়:
বিচ্ছিন্নতা : একই হার্ডওয়্যারে একাধিক ফাংশন চালানোর জন্য এটি অবশ্যই নিরাপদ, বিশেষাধিকার বৃদ্ধি, তথ্য প্রকাশ, গোপন চ্যানেল এবং অন্যান্য ঝুঁকির বিরুদ্ধে সুরক্ষিত।
ওভারহেড এবং ঘনত্ব: ন্যূনতম বর্জ্য সহ একটি একক মেশিনে হাজার হাজার ফাংশন চালানো সম্ভব।
কর্মক্ষমতা: ফাংশন নেটিভভাবে চালানোর অনুরূপভাবে কাজ করতে হবে। কর্মক্ষমতা অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে এবং একই হার্ডওয়্যারের প্রতিবেশীদের আচরণ থেকে বিচ্ছিন্ন হতে হবে।
সামঞ্জস্যতা : ল্যাম্বডা ফাংশনকে নির্বিচারে লিনাক্স বাইনারি এবং লাইব্রেরি ধারণ করার অনুমতি দেয়। এই কোড পরিবর্তন বা recompilation ছাড়া সমর্থিত করা আবশ্যক.
দ্রুত স্যুইচিং: নতুন ফাংশন শুরু করা এবং পুরানো ফাংশনগুলি দ্রুত পরিষ্কার করা সম্ভব।
সফ্ট অ্যালোকেশন: সিপিইউ, মেমরি এবং অন্যান্য সংস্থানগুলিকে অতিরিক্ত কমিট করা অবশ্যই সম্ভব, প্রতিটি ফাংশন শুধুমাত্র প্রয়োজনীয় সংস্থানগুলি ব্যবহার করে, এটির অধিকারী সংস্থানগুলি নয়। [১]
আমরা বিচ্ছিন্নতার প্রয়োজনীয়তা এবং চাপের বিষয়ে বিশেষভাবে আগ্রহী যে মাইক্রোআর্কিটেকচারাল আক্রমণগুলি ফায়ারক্র্যাকার হুমকি মডেলের জন্য ইন-স্কোপ ঘোষণা করা হয়। AWS এর পাবলিক ফায়ারক্র্যাকার গিট রিপোজিটরির "ডিজাইন" পৃষ্ঠাটি বিচ্ছিন্নতা মডেলের উপর বিস্তারিত বর্ণনা করে এবং একটি দরকারী ডায়াগ্রাম প্রদান করে যা আমরা চিত্র 2-এ পুনরুত্পাদন করেছি। এই চিত্রটি বেশিরভাগই বিশেষাধিকার বৃদ্ধির বিরুদ্ধে সুরক্ষা সম্পর্কিত। সুরক্ষার বাইরের স্তর হল জেলার, যা ভিএমএম এবং অন্যান্য ব্যবস্থাপনা উপাদানগুলি চালানোর সময় হোস্ট কার্নেলে ফায়ারক্র্যাকারের অ্যাক্সেস সীমিত করতে কন্টেইনার বিচ্ছিন্নকরণ কৌশল ব্যবহার করে
হোস্ট ইউজারস্পেসে একটি একক প্রক্রিয়ার থ্রেড হিসাবে Firecracker এর। ফায়ারক্র্যাকার প্রক্রিয়ার মধ্যে, ব্যবহারকারীর কাজের চাপ অন্যান্য থ্রেডগুলিতে চালিত হয়। ওয়ার্কলোড থ্রেডগুলি ভার্চুয়াল মেশিনের গেস্ট অপারেটিং সিস্টেম এবং গেস্টে চলমান যেকোনো প্রোগ্রাম চালায়। ভার্চুয়াল মেশিন গেস্টে ব্যবহারকারীর কোড চালানোর ফলে হোস্টের সাথে সরাসরি মিথস্ক্রিয়া KVM এবং ফায়ারক্র্যাকার ম্যানেজমেন্ট থ্রেডের কিছু অংশের সাথে পূর্ব-পরিকল্পিত ইন্টারঅ্যাকশনে সীমাবদ্ধ থাকে। তাই হোস্ট কার্নেলের দৃষ্টিকোণ থেকে, ব্যবহারকারীর কোড সহ VMM এবং VM একই প্রক্রিয়ায় চালানো হয়। এই কারণেই AWS বলে যে প্রতিটি VM একটি একক প্রক্রিয়ায় থাকে। কিন্তু, যেহেতু VM হার্ডওয়্যার ভার্চুয়ালাইজেশন কৌশলের মাধ্যমে বিচ্ছিন্ন করা হয়েছে, তাই ব্যবহারকারীর কোড, গেস্ট কার্নেল এবং VMM আলাদা ঠিকানার জায়গায় কাজ করে। তাই, গেস্টের কোড স্থাপত্যগতভাবে বা ক্ষণস্থায়ীভাবে VMM বা গেস্ট কার্নেল মেমরি অ্যাড্রেস অ্যাক্সেস করতে পারে না কারণ সেগুলি গেস্টের অ্যাড্রেস স্পেসে ম্যাপ করা হয়নি। অবশিষ্ট মাইক্রোআর্কিটেকচারাল আক্রমণের পৃষ্ঠটি এমডিএস আক্রমণের মধ্যে সীমাবদ্ধ যা ঠিকানা স্থানের সীমানা এবং স্পেকটার আক্রমণকে উপেক্ষা করে সিপিইউ অভ্যন্তরীণ বাফার থেকে তথ্য ফাঁস করে যেখানে একজন আক্রমণকারী অন্যান্য প্রক্রিয়াগুলির শাখার পূর্বাভাসকে স্ব-লিক তথ্যে ব্যবহার করে।
চিত্র 2-এ দেখানো হয়নি, কিন্তু AWS-এর হুমকি মডেলের জন্য সমানভাবে গুরুত্বপূর্ণ, হার্ডওয়্যার ভাগ করার সময় একে অপরের থেকে ফাংশনগুলিকে বিচ্ছিন্ন করা , বিশেষ করে নরম বরাদ্দের প্রয়োজনীয়তার আলোকে। হোস্ট কার্নেলের সাথে আপস করা যে কোনো অতিথির নিরাপত্তার সাথে আপস করতে পারে তা ছাড়াও, হোস্ট হার্ডওয়্যারকে লক্ষ্য করে মাইক্রোআর্কিটেকচারাল আক্রমণগুলি ব্যবহারকারীর কোডকে সরাসরি হুমকি দিতে পারে। যেহেতু একটি একক ফায়ারক্র্যাকার প্রক্রিয়া ব্যবহারকারীর ফাংশন সহ একটি ভার্চুয়াল মেশিন চালানোর জন্য সমস্ত প্রয়োজনীয় থ্রেড ধারণ করে, নরম বরাদ্দ সহজভাবে হোস্ট অপারেটিং সিস্টেম দ্বারা সঞ্চালিত হতে পারে [1]। এর মানে হল যে স্ট্যান্ডার্ড লিনাক্স প্রসেস আইসোলেশন সিস্টেমগুলি ভার্চুয়াল মেশিন আইসোলেশনের উপরে রয়েছে।
2.6.1 ফায়ারক্র্যাকার নিরাপত্তা সুপারিশ। ফায়ারক্র্যাকার ডকুমেন্টেশন মাইক্রোআর্কিটেকচারাল সাইড-চ্যানেলগুলির বিরুদ্ধে সুরক্ষার জন্য নিম্নলিখিত সতর্কতাগুলিও সুপারিশ করে [৮]:
• SMT অক্ষম করুন
• কার্নেল পৃষ্ঠা-টেবিল বিচ্ছিন্নতা সক্ষম করুন
• কার্নেল kame-পৃষ্ঠা মার্জিং অক্ষম করুন৷
• Spectre-BTB প্রশমনের সাথে সংকলিত একটি কার্নেল ব্যবহার করুন (যেমন, x86 এ IBRS এবং IBPB)
• Spectre-PHT প্রশমন যাচাই করুন
• L1TF প্রশমন সক্ষম করুন • Spectre-STL প্রশমন সক্ষম করুন৷
• রোহ্যামার প্রশমনের সাথে মেমরি ব্যবহার করুন
• অদলবদল অক্ষম করুন বা নিরাপদ সোয়াপ ব্যবহার করুন
এই কাগজটি CC BY-NC-ND 4.0 DEED লাইসেন্সের অধীনে arxiv-এ উপলব্ধ ।
[১] ভার্চুয়ালাইজড রিং 0 এবং রিং 3 হল কাছাকাছি-নেটিভ কোড এক্সিকিউশনের মূল কারণগুলির মধ্যে একটি।