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