একটি pVM-এর অভ্যন্তরে নির্বিচারে পেলোড চালানো রোধ করতে, Android Virtualization Framework (AVF) একটি স্তরযুক্ত সুরক্ষা পদ্ধতি ব্যবহার করে যেখানে প্রতিটি স্তর অতিরিক্ত প্রয়োগ যোগ করে। নীচে AVF নিরাপত্তা স্তরগুলির একটি তালিকা রয়েছে:
অ্যান্ড্রয়েড নিশ্চিত করে যে পিভিএম অনুমতি সহ সেই অ্যাপগুলিকেই পিভিএম তৈরি বা পরিদর্শন করার অনুমতি দেওয়া হয়।
বুটলোডার - বুটলোডার নিশ্চিত করে যে শুধুমাত্র Google বা ডিভাইস বিক্রেতাদের দ্বারা স্বাক্ষরিত pVM চিত্রগুলিকে বুট করার অনুমতি দেওয়া হয় এবং Android যাচাইকৃত বুট পদ্ধতিকে সম্মান করে৷ এই আর্কিটেকচারটি বোঝায় যে পিভিএম চালিত অ্যাপগুলি তাদের নিজস্ব কার্নেল বান্ডিল করতে পারে না।
pVM pVM-এ চালানো পেলোডগুলির জন্য SELinux- এর মতো ডিফেন্স-ইন-ডেপ্থ প্রদান করে। ডিফেন্স-ইন-ডেপ্থ ম্যাপিং ডেটাকে এক্সিকিউটেবল হিসেবে অনুমোদন করে না (
neverallow execmem
) এবং নিশ্চিত করে যে W^X সব ধরনের ফাইলের জন্য ধারণ করে।
নিরাপত্তা মডেল
গোপনীয়তা, অখণ্ডতা এবং প্রাপ্যতা (সিআইএ ট্রায়াড), তথ্য সুরক্ষা নীতিগুলি গাইড করার জন্য ডিজাইন করা একটি মডেল তৈরি করুন:
- গোপনীয়তা হল নিয়মের একটি সেট যা তথ্যের অ্যাক্সেস সীমিত করে।
- সততা হল এই নিশ্চয়তা যে তথ্য বিশ্বাসযোগ্য এবং নির্ভুল।
- প্রাপ্যতা অনুমোদিত সত্তা দ্বারা তথ্যের নির্ভরযোগ্য অ্যাক্সেসের গ্যারান্টি।
গোপনীয়তা এবং সততা
গোপনীয়তা পিকেভিএম হাইপারভাইজার দ্বারা প্রয়োগকৃত মেমরি আইসোলেশন বৈশিষ্ট্য থেকে উদ্ভূত হয়। pKVM পৃথক শারীরিক মেমরি পৃষ্ঠাগুলির মেমরি মালিকানা এবং পৃষ্ঠাগুলি ভাগ করার জন্য মালিকদের কাছ থেকে যে কোনও অনুরোধ ট্র্যাক করে। pKVM নিশ্চিত করে যে শুধুমাত্র এনটাইটেল করা pVM-র (হোস্ট এবং গেস্ট) তাদের স্টেজ 2 পৃষ্ঠার টেবিলে প্রদত্ত পৃষ্ঠা ম্যাপ করা আছে যা হাইপারভাইজার দ্বারা নিয়ন্ত্রিত হয়। এই স্থাপত্যটি বজায় রাখে যে একটি pVM-এর মালিকানাধীন মেমরির বিষয়বস্তু ব্যক্তিগত থাকে যদি না মালিক স্পষ্টভাবে অন্য pVM-এর সাথে শেয়ার করেন।
গোপনীয়তা বজায় রাখার জন্য বিধিনিষেধগুলি সিস্টেমের যেকোন সত্তার ক্ষেত্রেও প্রসারিত হয় যেগুলি pVM-এর হয়ে মেমরি অ্যাক্সেস করে, যেমন DMA-সক্ষম ডিভাইসগুলি এবং পরিষেবাগুলি আরও বিশেষ সুবিধাপ্রাপ্ত স্তরগুলিতে চলছে ৷ সিস্টেম-অন-চিপ (SoC) বিক্রেতারা pKVM সমর্থন করার আগে প্রয়োজনীয়তার একটি নতুন সেট পূরণ করতে হবে। তা না হলে, গোপনীয়তা প্রদান করা যাবে না।
অখণ্ডতা মেমরি এবং গণনার ডেটাতে প্রযোজ্য। pVMs পারে না:
- সম্মতি ছাড়াই একে অপরের স্মৃতি পরিবর্তন করুন।
- একে অপরের CPU অবস্থাকে প্রভাবিত করে।
এই প্রয়োজনীয়তাগুলি হাইপারভাইজার দ্বারা প্রয়োগ করা হয়। যাইহোক, ভার্চুয়াল ডেটা স্টোরেজের সাথেও ডেটা অখণ্ডতা সংক্রান্ত সমস্যা দেখা দেয় যখন অন্যান্য সমাধানগুলি প্রয়োগ করা আবশ্যক, যেমন dm-verity বা AuthFS।
এই নীতিগুলি Linux দ্বারা প্রদত্ত প্রসেস আইসোলেশন থেকে আলাদা নয় যেখানে মেমরি পৃষ্ঠাগুলিতে অ্যাক্সেস স্টেজ 1 পৃষ্ঠার টেবিলের মাধ্যমে নিয়ন্ত্রিত হয় এবং কার্নেল প্রসঙ্গ-প্রসেসের মধ্যে সুইচ করা হয়। যাইহোক, pKVM-এর EL2 অংশ, যা এই বৈশিষ্ট্যগুলিকে প্রয়োগ করে, সম্পূর্ণ লিনাক্স কার্নেলের তুলনায় তিনটি অর্ডার কম অ্যাটাক সারফেস রয়েছে (মোটামুটি 10 হাজার বনাম 20 মিলিয়ন লাইন কোড) এবং তাই খুব সংবেদনশীল কেসগুলি ব্যবহার করার জন্য শক্তিশালী আশ্বাস দেয়। প্রক্রিয়া বিচ্ছিন্নতার উপর নির্ভর করতে।
এর আকার দেওয়া, pKVM আনুষ্ঠানিক যাচাইকরণের জন্য নিজেকে ধার দেয়। আমরা সক্রিয়ভাবে একাডেমিক গবেষণাকে সমর্থন করছি, যার লক্ষ্য প্রকৃত pKVM বাইনারিতে এই বৈশিষ্ট্যগুলি আনুষ্ঠানিকভাবে প্রমাণ করা।
এই পৃষ্ঠার বাকি অংশ গোপনীয়তা এবং অখণ্ডতার গ্যারান্টি দেয় যা একটি pKVM এর চারপাশে প্রতিটি উপাদান প্রদান করে।
হাইপারভাইজার
pKVM হল একটি KVM-ভিত্তিক হাইপারভাইজার যা পিভিএম এবং অ্যান্ড্রয়েডকে পারস্পরিক অবিশ্বাসী এক্সিকিউশন পরিবেশে বিচ্ছিন্ন করে। হোস্ট সহ যেকোনো pVM-এর মধ্যে আপস হওয়ার ক্ষেত্রে এই বৈশিষ্ট্যগুলি ধারণ করে৷ বিকল্প হাইপারভাইজার যা AVF মেনে চলে তাদের অনুরূপ বৈশিষ্ট্য প্রদান করতে হবে।
একটি pVM অন্য সত্তার সাথে সম্পর্কিত একটি পৃষ্ঠা অ্যাক্সেস করতে পারে না, যেমন একটি pVM বা হাইপারভাইজার, যদি না পৃষ্ঠার মালিক স্পষ্টভাবে শেয়ার করেন। এই নিয়ম হোস্ট pVM অন্তর্ভুক্ত এবং CPU এবং DMA উভয় অ্যাক্সেসে প্রযোজ্য।
একটি pVM দ্বারা ব্যবহৃত একটি পৃষ্ঠা হোস্টে ফেরত দেওয়ার আগে, যেমন pVM ধ্বংস হয়ে গেলে, এটি মুছে ফেলা হয়।
একটি ডিভাইস বুট থেকে সমস্ত pVM এবং pVM ফার্মওয়্যারের মেমরি পরবর্তী ডিভাইস বুটে OS বুটলোডার চালানোর আগে মুছে ফেলা হয়।
যখন একটি হার্ডওয়্যার ডিবাগার, যেমন SJTAG, সংযুক্ত করা হয়, একটি pVM তার পূর্বে মিন্ট করা কীগুলি অ্যাক্সেস করতে পারে না।
pVM ফার্মওয়্যারটি বুট হয় না যদি এটি প্রাথমিক চিত্রটি যাচাই করতে না পারে।
instance.img
এর অখণ্ডতা আপস করা হলে pVM ফার্মওয়্যার বুট হয় না।DICE সার্টিফিকেট চেইন এবং একটি pVM দৃষ্টান্তে প্রদত্ত কম্পাউন্ড ডিভাইস আইডেন্টিফায়ার (CDIs) শুধুমাত্র সেই নির্দিষ্ট উদাহরণের দ্বারা প্রাপ্ত করা যেতে পারে।
অতিথি ওএস
মাইক্রোড্রয়েড একটি পিভিএম-এর মধ্যে চলমান একটি ওএসের একটি উদাহরণ। মাইক্রোড্রয়েডে একটি U-বুট-ভিত্তিক বুটলোডার, GKI এবং অ্যান্ড্রয়েড ইউজারস্পেসের একটি উপসেট এবং একটি পেলোড লঞ্চার রয়েছে। হোস্ট সহ যেকোনো pVM-এর মধ্যে আপস হওয়ার ক্ষেত্রে এই বৈশিষ্ট্যগুলি ধারণ করে৷ একটি pVM-এ চলমান বিকল্প ওএসগুলিকে অনুরূপ বৈশিষ্ট্য প্রদান করা উচিত।
boot.img
,super.img
,vbmeta.img
, বাvbmeta\_system.img
যাচাই করা না গেলে মাইক্রোড্রয়েড বুট হবে না৷APK যাচাইকরণ ব্যর্থ হলে Microdroid বুট হবে না।
APK আপডেট করা হলেও একই Microdroid উদাহরণ বুট হবে না।
APEX-এর যেকোনও যাচাইকরণ ব্যর্থ হলে Microdroid বুট হবে না।
যদি
instance.img
গেস্ট pVM এর বাইরে পরিবর্তিত হয় তাহলে Microdroid বুট হবে না (বা একটি পরিষ্কার প্রাথমিক অবস্থায় বুট করবে)।মাইক্রোড্রয়েড বুট চেইনের প্রত্যয়ন প্রদান করে।
গেস্ট pVM এর সাথে শেয়ার করা ডিস্ক ইমেজে যেকোন (আনসাইন করা) পরিবর্তন করলে pVM সাইডে একটি I/O ত্রুটি দেখা দেয়।
DICE শংসাপত্রের চেইন এবং একটি pVM দৃষ্টান্তে প্রদত্ত CDI শুধুমাত্র সেই নির্দিষ্ট উদাহরণের দ্বারা প্রাপ্ত করা যেতে পারে।
একটি এনক্রিপ্ট করা স্টোরেজ ভলিউমে লেখাগুলি গোপনীয়, তবে একটি এনক্রিপশন ব্লকের গ্রানুলারিটিতে কোনও রোলব্যাক সুরক্ষা নেই৷ উপরন্তু, একটি ডেটা ব্লকের অন্যান্য নির্বিচারে বাহ্যিক টেম্পারিং সেই ব্লকটিকে একটি I/O ত্রুটি হিসাবে স্পষ্টভাবে সনাক্ত করার পরিবর্তে, মাইক্রোড্রয়েডে আবর্জনা হিসাবে দেখায়।
অ্যান্ড্রয়েড
এগুলি হোস্ট হিসাবে অ্যান্ড্রয়েড দ্বারা রক্ষণাবেক্ষণ করা বৈশিষ্ট্যগুলি কিন্তু হোস্টের সাথে আপস করার ক্ষেত্রে এটি সত্য হয় না:
একটি গেস্ট পিভিএম অন্য গেস্ট পিভিএম-এর সাথে সরাসরি ইন্টারঅ্যাক্ট করতে পারে না (যেমন একটি
vsock
সংযোগ করতে)।হোস্ট pVM-এ শুধুমাত্র
VirtualizationService
একটি pVM-এ একটি যোগাযোগ চ্যানেল তৈরি করতে পারে।শুধুমাত্র প্ল্যাটফর্ম কী দিয়ে স্বাক্ষর করা অ্যাপগুলিই পিভিএম তৈরি, মালিকানা বা ইন্টারঅ্যাক্ট করার অনুমতির অনুরোধ করতে পারে।
হোস্ট এবং pVM-এর মধ্যে
vsock
সংযোগ স্থাপনে ব্যবহৃত আইডেন্টিফায়ার, যাকে একটি প্রসঙ্গ শনাক্তকারী (CID) বলা হয়, হোস্ট pVM চলাকালীন পুনরায় ব্যবহার করা হয় না। উদাহরণস্বরূপ, আপনি একটি চলমান পিভিএমকে অন্যটির সাথে প্রতিস্থাপন করতে পারবেন না।
প্রাপ্যতা
pVM-এর পরিপ্রেক্ষিতে, প্রাপ্যতা হল হোস্টকে অতিথিদের জন্য পর্যাপ্ত সম্পদ বরাদ্দ করাকে বোঝায় যাতে অতিথিরা তাদের সঞ্চালনের জন্য ডিজাইন করা কাজগুলি সম্পাদন করতে পারে।
হোস্টের দায়িত্বের মধ্যে রয়েছে pVM-এর ভার্চুয়াল CPU-এর সময়সূচি নির্ধারণ করা। KVM, প্রচলিত টাইপ-1 হাইপারভাইজার (যেমন Xen) থেকে ভিন্ন, হোস্ট কার্নেলে কাজের চাপ নির্ধারণের জন্য সুস্পষ্ট নকশার সিদ্ধান্ত নেয়। আজকের শিডিউলারের আকার এবং জটিলতার পরিপ্রেক্ষিতে, এই নকশার সিদ্ধান্তটি বিশ্বস্ত কম্পিউটিং বেস (TCB) এর আকার উল্লেখযোগ্যভাবে হ্রাস করে এবং কর্মক্ষমতা অপ্টিমাইজ করার জন্য হোস্টকে আরও সচেতন সময় নির্ধারণের সিদ্ধান্ত নিতে সক্ষম করে। যাইহোক, একটি দূষিত হোস্ট কখনই অতিথির সময় নির্ধারণ না করা বেছে নিতে পারে।
একইভাবে, হাইপারভাইজারের জটিলতা কমাতে এবং শিডিউলিংয়ের দায়িত্বে হোস্টকে ছেড়ে দিতে pKVM হোস্ট কার্নেলের কাছে শারীরিক বাধা হ্যান্ডলিং অর্পণ করে। গেস্ট ইন্টারাপ্ট ফরওয়ার্ড করার ফলে শুধুমাত্র পরিষেবা অস্বীকার করা হয় তা নিশ্চিত করার জন্য প্রচেষ্টা নেওয়া হয় (খুব কম, খুব বেশি, বা ভুল পথে বাধা)।
অবশেষে, হোস্টের ভার্চুয়াল মেশিন মনিটর (VMM) প্রক্রিয়া মেমরি বরাদ্দ এবং ভার্চুয়াল ডিভাইস প্রদানের জন্য দায়ী, যেমন একটি নেটওয়ার্ক কার্ড। একটি দূষিত VMM অতিথির কাছ থেকে সম্পদ আটকাতে পারে।
যদিও pKVM গেস্টদের প্রাপ্যতা প্রদান করে না, ডিজাইনটি ক্ষতিকারক গেস্টদের থেকে হোস্টের প্রাপ্যতাকে রক্ষা করে কারণ হোস্ট সবসময় একটি গেস্টকে প্রিমপ্ট বা শেষ করতে পারে এবং তার সংস্থান পুনরুদ্ধার করতে পারে।
নিরাপদ বুট
ডেটা একটি পিভিএম-এর দৃষ্টান্তের সাথে আবদ্ধ, এবং সুরক্ষিত বুট নিশ্চিত করে যে একটি উদাহরণের ডেটাতে অ্যাক্সেস নিয়ন্ত্রণ করা যেতে পারে। একটি দৃষ্টান্তের প্রথম বুটটি পিভিএম-এর জন্য এলোমেলোভাবে একটি গোপন লবণ তৈরি করে এবং লোড করা চিত্রগুলি থেকে যাচাইকরণ পাবলিক কী এবং হ্যাশের মতো বিশদ বিবরণ বের করে এটির ব্যবস্থা করে। এই তথ্যটি পিভিএম ইন্সট্যান্সের পরবর্তী বুটগুলি যাচাই করতে ব্যবহার করা হয় এবং নিশ্চিত করা হয় যে ইন্সট্যান্সের গোপনীয়তাগুলি শুধুমাত্র সেই ছবিগুলিতে প্রকাশ করা হয় যা যাচাইকরণ পাস করে। এই প্রক্রিয়াটি pVM-এর মধ্যে প্রতিটি লোডিং পর্যায়ে ঘটে: pVM ফার্মওয়্যার, pVM ABL, Microdroid এবং আরও অনেক কিছু।
DICE প্রতিটি লোডিং পর্যায়কে একটি প্রত্যয়নমূলক কী জোড়া প্রদান করে, যার সর্বজনীন অংশ সেই পর্যায়ের জন্য DICE শংসাপত্রে প্রত্যয়িত হয়। এই কী জোড়া বুটগুলির মধ্যে পরিবর্তিত হতে পারে, তাই একটি সিলিং গোপনও উদ্ভূত হয় যা রিবুট জুড়ে VM উদাহরণের জন্য স্থিতিশীল এবং যেমন, স্থায়ী অবস্থা রক্ষার জন্য উপযুক্ত। সিলিং গোপন VM-এর জন্য অত্যন্ত মূল্যবান তাই এটি সরাসরি ব্যবহার করা উচিত নয়। পরিবর্তে, সিলিং কীগুলি সিলিং গোপনীয়তা থেকে প্রাপ্ত করা উচিত এবং সিলিং গোপনীয়তা যত তাড়াতাড়ি সম্ভব ধ্বংস করা উচিত।
প্রতিটি পর্যায় পরবর্তী পর্যায়ে একটি নির্ধারকভাবে এনকোড করা CBOR অবজেক্ট হস্তান্তর করে। এই অবজেক্টটিতে গোপনীয়তা এবং DICE শংসাপত্রের চেইন রয়েছে, যাতে জমা হওয়া স্থিতির তথ্য রয়েছে, যেমন শেষ পর্যায়টি নিরাপদে লোড হয়েছে কিনা।
আনলক করা ডিভাইস
যখন একটি ডিভাইস fastboot oem unlock
দিয়ে আনলক করা হয়, তখন ব্যবহারকারীর ডেটা মুছে ফেলা হয়। এই প্রক্রিয়া অননুমোদিত অ্যাক্সেস থেকে ব্যবহারকারীর ডেটা রক্ষা করে। একটি পিভিএম-এর ব্যক্তিগত ডেটাও অবৈধ হয়ে যায় যখন একটি ডিভাইস আনলক করা হয়।
একবার আনলক করা হলে, ডিভাইসের মালিক পার্টিশনগুলি রিফ্ল্যাশ করতে পারবেন যেগুলি সাধারণত যাচাইকৃত বুট দ্বারা সুরক্ষিত থাকে, যার মধ্যে pKVM বাস্তবায়ন রয়েছে এমন পার্টিশনগুলিও রয়েছে৷ অতএব, একটি আনলক করা ডিভাইসে pKVM নিরাপত্তা মডেল বজায় রাখার জন্য বিশ্বস্ত হবে না।
দূরবর্তী পক্ষগুলি একটি মূল প্রত্যয়ন শংসাপত্রে ডিভাইসের যাচাইকৃত বুট অবস্থা পরিদর্শন করে এই সম্ভাব্য অনিরাপদ অবস্থা পর্যবেক্ষণ করতে পারে।