ফ্লো ইন্টিগ্রিটি নিয়ন্ত্রণ করুন

২০১ of সালের হিসাবে, অ্যান্ড্রয়েডের সমস্ত দুর্বলতার প্রায় 86% মেমরির সুরক্ষা সম্পর্কিত। বেশিরভাগ দুর্বলতা শোষক অ্যাপ্লিকেশনটির সমস্ত সুযোগ-সুবিধা সহ নির্বিচারে দূষিত ক্রিয়াকলাপ সম্পাদনের জন্য কোনও অ্যাপ্লিকেশনটির সাধারণ নিয়ন্ত্রণ প্রবাহকে পরিবর্তন করে আক্রমণ করা হয়। কন্ট্রোল ফ্লো অখণ্ডতা (সিএফআই) একটি সুরক্ষা ব্যবস্থা যা একটি সংকলিত বাইনারিটির মূল নিয়ন্ত্রণ প্রবাহের গ্রাফের পরিবর্তনগুলি অস্বীকার করে, এ জাতীয় আক্রমণ চালানো উল্লেখযোগ্যভাবে শক্ত করে তোলে।

অ্যান্ড্রয়েড 8.1-এ, আমরা মিডিয়া স্ট্যাকে এলএলভিএমের সিএফআই বাস্তবায়ন সক্ষম করেছি। অ্যান্ড্রয়েড 9 এ, আমরা আরও উপাদান এবং কার্নেল সিএফআই সক্ষম করেছি। সিস্টেম সিএফআই ডিফল্ট হিসাবে চালু আছে তবে আপনাকে কার্নেল সিএফআই সক্ষম করতে হবে।

এলএলভিএমের সিএফআই-র লিঙ্ক-টাইম অপটিমাইজেশন (এলটিও) দিয়ে সংকলন প্রয়োজন। এলটিও লিংক-টাইম অবধি অবজেক্ট ফাইলগুলির এলএলভিএম বিটকোড উপস্থাপনাকে সংরক্ষণ করে, যা সংযোজনকারীকে কী অপ্টিমাইজেশান সম্পাদন করা যায় সে সম্পর্কে আরও ভাল কারণের অনুমতি দেয়। এলটিও সক্ষম করা চূড়ান্ত বাইনারিগুলির আকার হ্রাস করে এবং কার্যকারিতা উন্নত করে, তবে সংকলনের সময় বাড়ায়। অ্যান্ড্রয়েডের পরীক্ষায়, এলটিও এবং সিএফআইয়ের সংমিশ্রণের ফলে কোডের আকার এবং কার্য সম্পাদনের জন্য উপেক্ষিত ওভারহেডের ফলাফল হয়; কয়েকটি ক্ষেত্রে উভয়ের উন্নতি হয়েছে।

সিএফআই এবং অন্যান্য ফরোয়ার্ড-নিয়ন্ত্রণ চেকগুলি কীভাবে পরিচালনা করা হয় সে সম্পর্কে আরও প্রযুক্তিগত বিশদের জন্য, এলএলভিএম ডিজাইনের ডকুমেন্টেশন দেখুন

উদাহরণ এবং উত্স

সিএফআই সংকলক দ্বারা সরবরাহ করা হয় এবং সংকলনের সময় বাইনারি মধ্যে উপকরণ যুক্ত করে। আমরা ক্ল্যাং টুলচেইনে সিএফআই এবং এওএসপিতে অ্যান্ড্রয়েড বিল্ড সিস্টেমকে সমর্থন করি।

/ প্ল্যাটফর্ম / /platform/build/target/product/cfi-common.mk উপাদানগুলির সেট করার জন্য আর্ম 64 ডিভাইসের জন্য সিএফআই ডিফল্টরূপে সক্ষম করা হয়েছে। এছাড়া সরাসরি যেমন মিডিয়া উপাদান 'ফাইল তৈরী / নীল নকশা ফাইল, একটি সেট সক্রিয় হচ্ছে /platform/frameworks/av/media/libmedia/Android.bp এবং /platform/frameworks/av/cmds/stagefright/Android.mk

প্রয়োগকারী সিস্টেম সিএফআই

আপনি যদি ক্ল্যাং এবং অ্যান্ড্রয়েড বিল্ড সিস্টেম ব্যবহার করেন তবে সিএফআই ডিফল্টরূপে সক্ষম হয়। সিএফআই অ্যান্ড্রয়েড ব্যবহারকারীদের সুরক্ষিত রাখতে সহায়তা করার কারণে আপনার এটি অক্ষম করা উচিত নয়।

আসলে, আমরা আপনাকে দৃ components়ভাবে অতিরিক্ত উপাদানগুলির জন্য সিএফআই সক্ষম করতে উত্সাহিত করি। আদর্শ প্রার্থীরা সুবিধাভোগী নেটিভ কোড বা স্থানীয় কোড যা অবিশ্বস্ত ব্যবহারকারী ইনপুট প্রসেস করে। আপনি যদি ঝনঝন এবং অ্যান্ড্রয়েড বিল্ড সিস্টেম ব্যবহার করছেন তবে আপনি নিজের মেকফিলগুলি বা ব্লুপ্রিন্ট ফাইলগুলিতে কয়েকটি লাইন যুক্ত করে নতুন উপাদানগুলিতে সিএফআই সক্ষম করতে পারবেন।

মেকফিলগুলিতে সিএফআই সমর্থন করে

যেমন একটি মেক ফাইল, মধ্যে CFI সক্রিয় করার জন্য /platform/frameworks/av/cmds/stagefright/Android.mk , যোগ করুন:

LOCAL_SANITIZE := cfi
# Optional features
LOCAL_SANITIZE_DIAG := cfi
LOCAL_SANITIZE_BLACKLIST := cfi_blacklist.txt
  • LOCAL_SANITIZE বিল্ড চলাকালীন স্যানিটাইজার হিসাবে সিএফআই নির্দিষ্ট করে।
  • LOCAL_SANITIZE_DIAG জন্য ডায়াগনস্টিক মোড চালু করে। ডায়াগনস্টিক মোড ক্র্যাশগুলির সময় লগকটে অতিরিক্ত ডিবাগ তথ্য মুদ্রণ করে, যা আপনার বিল্ডগুলি বিকাশ এবং পরীক্ষার সময় দরকারী। প্রযোজনা বিল্ডগুলিতে ডায়াগনস্টিক মোড সরাতে নিশ্চিত করুন, যদিও।
  • LOCAL_SANITIZE_BLACKLIST উপাদানগুলি পৃথক ফাংশন বা উত্স ফাইলগুলির জন্য সিএফআই ইনস্ট্রুমেন্টেশন নির্বাচন করে অক্ষম করতে দেয়। অন্যথায় উপস্থিত থাকা যে কোনও ব্যবহারকারী-মুখোমুখি সমস্যাগুলি সমাধান করতে আপনি একটি শেষ অবলম্বন হিসাবে একটি কালো তালিকাভুক্ত ব্যবহার করতে পারেন। আরও তথ্যের জন্য দেখুন সিএফআই অক্ষম করা

ব্লুপ্রিন্ট ফাইলগুলিতে সিএফআই সমর্থন করছে

ব্লুপ্রিন্ট ফাইলে সিএফআই সক্ষম করতে, যেমন / /platform/frameworks/av/media/libmedia/Android.bp / /platform/frameworks/av/media/libmedia/Android.bp / /platform/frameworks/av/media/libmedia/Android.bp / /platform/frameworks/av/media/libmedia/Android.bp / /platform/frameworks/av/media/libmedia/Android.bp / /platform/frameworks/av/media/libmedia/Android.bp , যুক্ত করুন:

   sanitize: {
        cfi: true,
        diag: {
            cfi: true,
        },
        blacklist: "cfi_blacklist.txt",
    },

সমস্যা সমাধান

আপনি যদি নতুন উপাদানগুলিতে সিএফআই সক্ষম করছেন, তবে আপনি ফাংশন টাইপের অমিল ত্রুটি এবং সমাবেশ কোড প্রকারের অমিল ত্রুটি সহ কয়েকটি সমস্যা সমাধান করতে পারেন।

ফাংশন ধরণের অমিল ত্রুটিগুলি ঘটে কারণ সিএফআই কলটিতে ব্যবহৃত স্থির ধরণের মতো একই গতিশীল টাইপযুক্ত ফাংশনগুলিতে অপ্রত্যক্ষ কলকে সীমাবদ্ধ করে। সিএফআই কেবল কল করার জন্য ব্যবহৃত অবজেক্টের স্ট্যাটিক ধরণের ডাইর্টেড ক্লাসের মধ্যে কেবল অবজেক্টগুলিতে ঝাঁপ দেওয়ার জন্য ভার্চুয়াল এবং অ-ভার্চুয়াল সদস্য ফাংশন কলগুলিকে সীমাবদ্ধ করে। এর অর্থ হ'ল, যখন আপনার কাছে কোড রয়েছে যা এই অনুমানগুলির কোনও একটিকে লঙ্ঘন করে, তখন সিএফআই যুক্ত করা উপকরণ বাতিল করে দেবে। উদাহরণস্বরূপ, স্ট্যাক ট্রেসটি একটি SIGABRT দেখায় এবং লগক্যাটটিতে নিয়ন্ত্রণ প্রবাহের অখণ্ডতা সম্পর্কে একটি মিল খুঁজে পাওয়া যায় না।

এটির সমাধানের জন্য, নিশ্চিত হয়ে নিন যে ডাকা ফাংশনটি একই ধরণের রয়েছে যা স্থিরভাবে ঘোষিত হয়েছিল। এখানে দুটি উদাহরণ সিএল রয়েছে:

আর একটি সম্ভাব্য সমস্যা হ'ল কোডে সিএফআই সক্ষম করার চেষ্টা করছে যা সমাবেশে অপ্রত্যক্ষ কল রয়েছে। যেহেতু অ্যাসেম্বলি কোডটি টাইপ করা হয়নি, এর ফলস্বরূপ একটি ধরনের মিল নেই।

এটি ঠিক করতে, প্রতিটি অ্যাসেম্বলি কলের জন্য নেটিভ কোড র‌্যাপার তৈরি করুন এবং মোড়কগুলিকে কলিং পয়েন্টার হিসাবে একই ফাংশনের স্বাক্ষর দিন। এর পরে মোড়ক সরাসরি সমাবেশ কোডটি কল করতে পারে। যেহেতু ডাইরেক্ট ব্রাঞ্চগুলি সিএফআই দ্বারা চালিত হয় না (রানটাইমগুলিতে এগুলি দমন করা যায় না এবং তাই কোনও সুরক্ষা ঝুঁকি তৈরি করে না), এটি সমস্যার সমাধান করবে।

যদি অনেকগুলি অ্যাসেম্বলি ফাংশন থাকে এবং সেগুলি সব ঠিক করা যায় না, তবে আপনি সমস্ত ফাংশনকে কালো তালিকাভুক্ত করতে পারেন যেখানে অ্যাসেমব্লিতে পরোক্ষ কল রয়েছে। এটি সুপারিশ করা হয় না কারণ এটি এই ফাংশনগুলির সিএফআই চেকগুলি অক্ষম করে, যার ফলে আক্রমণ পৃষ্ঠের উদ্বোধন হয়।

সিএফআই অক্ষম করা হচ্ছে

আমরা কোনও কর্মক্ষমতা ওভারহেড পর্যবেক্ষণ করিনি, সুতরাং আপনার সিএফআই অক্ষম করার দরকার নেই। তবে, যদি কোনও ব্যবহারকারীর মুখোমুখি প্রভাব থাকে তবে আপনি সংকলনের সময় স্যানিটাইজার ব্ল্যাকলিস্ট ফাইল সরবরাহ করে স্বতন্ত্র ফাংশন বা উত্স ফাইলগুলির জন্য সিএফআই নির্বাচন করে অক্ষম করতে পারেন। ব্ল্যাকলিস্ট সংকলককে নির্দিষ্ট স্থানে সিএফআই ইনস্ট্রুমেন্টেশন অক্ষম করার নির্দেশ দেয়।

অ্যান্ড্রয়েড বিল্ড সিস্টেম মেক এবং সুং উভয়ের জন্য প্রতি-উপাদান ব্ল্যাকলিস্টগুলির জন্য (আপনাকে উত্স ফাইল বা স্বতন্ত্র ফাংশনগুলি নির্বাচন করতে দেয় যা সিএফআই উপকরণ গ্রহণ করবে না) সমর্থন করে। একটি কালো তালিকাভুক্ত ফাইলের ফর্ম্যাট সম্পর্কে আরও তথ্যের জন্য আপস্ট্রিম ক্ল্যাং ডক্স দেখুন

বৈধতা

বর্তমানে বিশেষত সিএফআইয়ের জন্য কোনও সিটিএস পরীক্ষা নেই। পরিবর্তে, নিশ্চিত করুন যে সিটিএস পরীক্ষাগুলি সিএফআই ডিভাইসটির উপর প্রভাব ফেলছে না তা যাচাই করতে সিএফআই সক্ষম হয়েছে বা ছাড়িয়েছে।