এই পৃষ্ঠায় মেমরি সুরক্ষা সংক্রান্ত বাগ এবং টুল সম্পর্কে বর্ণনা করা হয়েছে।
স্মৃতির অনিরাপত্তা
মেমরি সেফটি বাগ, অর্থাৎ নেটিভ প্রোগ্রামিং ল্যাঙ্গুয়েজে মেমরি পরিচালনার ত্রুটি, অ্যান্ড্রয়েড কোডবেসগুলোর মধ্যে সবচেয়ে সাধারণ সমস্যা। উচ্চ তীব্রতার নিরাপত্তা দুর্বলতার ৬০%-এরও বেশি এবং ব্যবহারকারীদের চোখে পড়া লক্ষ লক্ষ ক্র্যাশের জন্য এগুলোই দায়ী।

চিত্র ১. মেমরি নিরাপত্তা ত্রুটি এবং গুণমান, নিরাপত্তা ও খরচের উপর এর নেতিবাচক প্রভাব।
মেমরি সেফটি বাগ গুণমান ও স্থিতিশীলতার ওপর নেতিবাচক প্রভাব ফেলে এবং এন্ড-ইউজার ডিভাইসে সংঘটিত ক্র্যাশগুলোর একটি উল্লেখযোগ্য অংশের জন্য দায়ী। সুতরাং, মেমরি সেফটি বাগের উচ্চ ঘনত্ব সরাসরিভাবে দুর্বল ইউজার এক্সপেরিয়েন্সের সাথে সম্পর্কিত।
সি, সি++ এবং অ্যাসেম্বলির মতো মেমরি-অনিরাপদ ভাষায় লেখা নেটিভ কোড অ্যান্ড্রয়েড প্ল্যাটফর্ম কোডের ৭০%-এরও বেশি অংশ জুড়ে রয়েছে এবং গুগল প্লে স্টোরের প্রায় ৫০% অ্যাপে এর উপস্থিতি দেখা যায়।
কোডের ক্রমবর্ধমান জটিলতার কারণে, এগুলোর প্রতি মনোযোগ না দিলে সময়ের সাথে সাথে মেমরি সেফটি বাগ বাড়তেই থাকবে। তাই, আমাদের দীর্ঘমেয়াদী সাফল্যের জন্য, এই ধরনের বাগ শনাক্ত ও প্রশমিত করতে পারে এমন টুলস এবং প্রযুক্তি আমাদের ইকোসিস্টেমকে সরবরাহ করা অত্যন্ত গুরুত্বপূর্ণ।
বিগত কয়েক বছর ধরে আমরা আমাদের হার্ডওয়্যার অংশীদারদের সাথে ঘনিষ্ঠভাবে কাজ করে Arm মেমরি ট্যাগিং-এর মতো হার্ডওয়্যার প্রযুক্তি তৈরি করেছি এবং অ্যান্ড্রয়েড কোডবেসে Rust অন্তর্ভুক্ত করেছি।
এই প্রযুক্তিগুলো মেমোরি সুরক্ষার পথে আমাদের যাত্রাকে ত্বরান্বিত করবে এবং বৃহত্তর সফটওয়্যার শিল্পকে একটি গুরুত্বপূর্ণ সমস্যা সমাধানে সহায়তা করবে।
মেমরি সুরক্ষা ত্রুটিগুলো গুণমানকে নেতিবাচকভাবে প্রভাবিত করে।
ল্যাটেন্ট মেমোরি সেফটি বাগ সিস্টেমের অবস্থার উপর নির্ভর করে অনির্দিষ্ট ফলাফল সৃষ্টি করতে পারে। এই অপ্রত্যাশিত আচরণের ফলে সিস্টেম ক্র্যাশ করে এবং আমাদের ব্যবহারকারীরা বিরক্ত হন।
প্রতিদিন আমরা ব্যবহারকারীদের ডিভাইসে লক্ষ লক্ষ নেটিভ ক্র্যাশ হতে দেখি এবং GWP-ASan চালু করার পর, আমরা এগুলোর বেশিরভাগের কারণ হিসেবে মেমরি সেফটি বাগ শনাক্ত করতে পেরেছি।
এই তথ্যটি মেমরি সেফটি বাগের গুণমান ও ঘনত্বের মধ্যকার সম্পর্ককে প্রমাণ করে এবং এটি আমাদের ক্রোম সহকর্মীদের পর্যবেক্ষণের সাথেও সামঞ্জস্যপূর্ণ (ক্রোম GWP-ASan বাগ হট লিস্ট দেখুন)।
মেমরি সেফটি বাগ নিরাপত্তাকে নেতিবাচকভাবে প্রভাবিত করে।
প্রথম অ্যান্ড্রয়েড সংস্করণ থেকেই মেমরি সেফটি বাগগুলো ধারাবাহিকভাবে অ্যান্ড্রয়েড নিরাপত্তা দুর্বলতার প্রধান কারণ হয়ে আসছে।

চিত্র ২. অ্যান্ড্রয়েড দুর্বলতায় মেমরি সুরক্ষা ত্রুটির অবদান।
এটা যে শুধু অ্যান্ড্রয়েডের সমস্যা নয়, তা জেনে আশ্বস্ত হওয়া গেলেও ( ক্রোম ও মাইক্রোসফটের পরিসংখ্যান দেখুন), আমাদের ব্যবহারকারীদের সুরক্ষার জন্য আরও কিছু করা প্রয়োজন।
গুগলের প্রজেক্ট জিরো টিম ব্যবহারকারীদের বিরুদ্ধে বাস্তব আক্রমণে ব্যবহৃত জিরো-ডে এক্সপ্লয়েটগুলোকে জিরো-ডে ভালনারেবিলিটি হিসেবে ট্র্যাক করে । এগুলো কোনো কাল্পনিক বাগ নয়, বরং ব্যবহারকারীদের বিরুদ্ধে আক্রমণে সক্রিয়ভাবে ব্যবহৃত এক্সপ্লয়েট। এর সিংহভাগই হলো মেমরি সেফটি বাগ (মেমরি করাপশন এবং ইউজ-আফটার-ফ্রি)।
মেমরি সুরক্ষা ত্রুটি খরচ বাড়িয়ে দেয়
নিরাপত্তাজনিত ত্রুটি সংশোধনের মাধ্যমে ডিভাইসগুলোকে হালনাগাদ রাখলে আমাদের ব্যবহারকারীরা সুরক্ষিত থাকেন, কিন্তু এর জন্য আমাদের ইকোসিস্টেমকে আর্থিক ব্যয় বহন করতে হয়।
নিম্ন-স্তরের ভেন্ডর কোডে, যেখানে প্রায়শই কাস্টম পরিবর্তন করা থাকে, মেমরি সেফটি বাগের উচ্চ ঘনত্ব এর সমাধান এবং পরীক্ষার খরচ উল্লেখযোগ্যভাবে বাড়িয়ে দেয়। তবে, উন্নয়ন চক্রের শুরুতে এই বাগগুলি সনাক্ত করা গেলে এই খরচ কমানো সম্ভব।
গবেষণায় দেখা গেছে যে, বাগ আগেভাগে শনাক্ত করতে পারলে খরচ ছয় গুণ পর্যন্ত কমানো যায়। তবে, আমাদের ইকোসিস্টেমের জটিলতা, একজন ভেন্ডরের রক্ষণাবেক্ষণ করা কোডবেসের গড় সংখ্যা এবং সফটওয়্যারের ক্রমবর্ধমান জটিলতার কারণে এই সাশ্রয়ের পরিমাণ আরও বেশি হতে পারে।
মেমরি সুরক্ষা
অ্যান্ড্রয়েড ১২ এবং এর পরবর্তী সংস্করণগুলোতে অ্যান্ড্রয়েড কোডবেসে মেমরি সেফটি বাগের সংখ্যা কমানোর জন্য পদ্ধতিগত পরিবর্তন আনা হয়েছে। আমরা অ্যান্ড্রয়েড মেমরি সেফটি টুলগুলোর পরিধি বাড়াচ্ছি এবং নতুন কিছু আবশ্যকতা চালু করছি, যা আমাদের ইকোসিস্টেমকে এই ধরনের বাগগুলো সমাধান করতে উৎসাহিত করবে। সময়ের সাথে সাথে, এর ফলে আমাদের ব্যবহারকারীরা উন্নত মানের পরিষেবা ও নিরাপত্তা পাবেন এবং আমাদের ভেন্ডরদের খরচও কমবে।
আগামী বছরগুলোতে মেমরি সুরক্ষা গুণমান ও নিরাপত্তার ক্ষেত্রে একটি গুরুত্বপূর্ণ নির্ধারক হয়ে ওঠার সম্ভাবনা রয়েছে এবং অ্যান্ড্রয়েড এই ক্ষেত্রে নেতৃত্ব দেওয়ার পরিকল্পনা করছে।
স্মৃতি সুরক্ষার সমর্থনে প্রয়োজনীয়তা
অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD) ডেভেলপমেন্টের সময় মেমরি সেফটি টুল ব্যবহারের জন্য জোরালোভাবে সুপারিশ করে।
আমরা মেমরি সেফটি টুলগুলোর ব্যবহার বাড়াতে এবং সেগুলোকে কন্টিনিউয়াস ইন্টিগ্রেশন ও টেস্টিং প্রক্রিয়ায় একীভূত করতে আমাদের ইকোসিস্টেমের সাথে নিবিড়ভাবে কাজ করছি।
সময়ের সাথে সাথে, আমরা নিশ্চিত করতে চাই যে প্রতিটি ডিভাইস মেমরি সেফটি টুল ব্যবহার করে একটি সম্পূর্ণ কম্প্যাটিবিলিটি টেস্ট স্যুট ( CTS ) রান সফলভাবে সম্পন্ন করবে, যা প্রমাণ করবে যে এই ধরনের কোনো বাগ খুঁজে পাওয়া যায়নি। উদাহরণস্বরূপ, Arm v9 প্ল্যাটফর্মগুলোকে মেমরি ট্যাগিং সক্রিয় রেখে একটি CTS রান প্রদান করতে হবে, অন্যদিকে Arm v8 প্ল্যাটফর্মগুলোকে HWASAN এবং KASAN ব্যবহার করে একটি CTS রান প্রদান করার জন্য অনুরোধ করা হবে।
প্ল্যাটফর্ম কোডের জন্য একটি নতুন প্রোগ্রামিং ভাষা হিসেবে রাস্ট
অ্যান্ড্রয়েড ১২ প্ল্যাটফর্ম ল্যাঙ্গুয়েজ হিসেবে রাস্ট (Rust) চালু করেছে। রাস্ট, C/C++ এর মতো পারফরম্যান্স লেভেলে মেমরি এবং থ্রেড সেফটি প্রদান করে। আমরা আশা করি, বেশিরভাগ নতুন নেটিভ প্রজেক্টের জন্য রাস্টই হবে পছন্দের ভাষা। তবে, বর্তমানে অ্যান্ড্রয়েড প্ল্যাটফর্ম কোডের ৭০%-এরও বেশি অংশ জুড়ে থাকা সমস্ত মেমরি আনসেফ কোড রাস্টে নতুন করে লেখা সম্ভব নয়। ভবিষ্যতে রাস্ট মেমরি সেফটি টুলগুলোর পরিপূরক হিসেবে কাজ করবে।
মেমরি সুরক্ষা সরঞ্জাম
অ্যান্ড্রয়েড বিভিন্ন ধরনের টুল সমর্থন করে যা মেমরি সেফটি বাগ শনাক্ত করতে সাহায্য করে। নিচের চিত্রে উপলব্ধ অ্যান্ড্রয়েড মেমরি সেফটি টুলগুলোর একটি শ্রেণিবিন্যাস উপস্থাপন করা হয়েছে।

চিত্র ৩. অ্যান্ড্রয়েড মেমরি সুরক্ষা সরঞ্জামসমূহের সামগ্রিক চিত্র।
আমাদের টুলিং বিভিন্ন ধরনের ডেপ্লয়মেন্ট সিনারিও এবং টার্গেটকে কভার করে। এই বিভাগের ডকুমেন্টেশনে প্রতিটি টুলের বর্ণনা দেওয়া হয়েছে এবং আপনার প্রোডাক্টে সেগুলো ব্যবহারের জন্য একটি রেফারেন্স প্রদান করা হয়েছে।