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