সুরক্ষিত বিকাশকারী বিকল্প

অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট অনুসারে, OEM-দের অবশ্যই অ্যাপ ডেভেলপমেন্ট সক্ষম করার একটি উপায় প্রদান করতে হবে। তবে, গাড়ির মধ্যে মোবাইলের মতো ডেভেলপার অপশন প্রদান করা হলে, সেই গাড়িগুলো আক্রমণের ঝুঁকিতে পড়ে। এখন একটি OEM একটি অথেনটিকেটেড ক্রিপ্টোগ্রাফিক টোকেন মেকানিজম ব্যবহার করে ডেভেলপার অপশনের অ্যাক্সেস নিয়ন্ত্রণ করতে পারে। বিশেষত, একটি OEM যা করতে পারে:

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

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

পরিভাষা

পরিভাষা ছাড়াও, এই পৃষ্ঠায় নিম্নলিখিত শব্দগুলো ব্যবহৃত হয়েছে:

  • JSON ওয়েব সিগনেচার (JWS), যা RFC 7515-এ সংজ্ঞায়িত।
  • জাতীয় মান ও প্রযুক্তি ইনস্টিটিউট (NIST)

ডিজাইন

OEM-রা JSON Web Signature (JWS) টোকেন (RFC7515) ব্যবহার করে ডেভেলপারদের অনুমোদন দিতে পারে। রেফারেন্স ইমপ্লিমেন্টেশনে, অ্যাক্সেস টোকেনগুলো OEM-দের দ্বারা ইস্যু করা হয় এবং রেস্ট্রিকশন কন্ট্রোলার অ্যাপ দ্বারা ব্যবহৃত হয়। অ্যাক্সেস টোকেনগুলো রিপ্লে অ্যাটাক এবং জাল টোকেন প্রতিরোধ করার জন্য ডিজাইন করা হয়েছে।

চিত্র ১. নকশা

একীকরণ এবং কনফিগারেশন

OEM-দের অবশ্যই প্রথম বুটের জন্য ডিফল্ট সীমাবদ্ধতা নির্দিষ্ট করতে হবে। OEM-রা AOSP ফ্রেমওয়ার্কের ডিফল্টগুলোকে ওভাররাইড করার জন্য বিভিন্ন স্ট্যাটিক রিসোর্স ওভারলে ব্যবহার করে এটি করে থাকে।

frameworks/base/core/res/res/values/config.xml ফাইলে ` config_defaultFirstUserRestrictions স্ট্রিং ব্যবহার করে হেডলেস সিস্টেম ব্যবহারকারীর জন্য ডিফল্ট বিধিনিষেধগুলি কনফিগার করা যেতে পারে, উদাহরণস্বরূপ:

<!-- User restrictions set when the first user is created.
         Note: Also update appropriate overlay files. -->
    <string-array translatable="false" name="config_defaultFirstUserRestrictions">
        <item>no_debugging_features</item>
        <item>no_install_unknown_sources</item>
        <item>no_install_unknown_sources_globally</item>
    </string-array>

ড্রাইভার, যাত্রী এবং অতিথিদের জন্য ডিফল্ট বিধিনিষেধ frameworks/base/core/res/res/xml/config_user_types.xml ফাইলে কনফিগার করা যেতে পারে। একজন OEM এই স্ট্রিংগুলিকে ওভারলে করে প্রতিটি ধরণের ব্যবহারকারীর জন্য যথাক্রমে ডিফল্ট বিধিনিষেধ সেট করতে পারেন, উদাহরণস্বরূপ:

<user-types>
    <full-type name="android.os.usertype.full.SECONDARY" >
        <default-restrictions
            no_debugging_features="true"
            no_install_unknown_sources="true"/>
    </full-type>
    <full-type name="android.os.usertype.full.GUEST" >
        <default-restrictions
            no_debugging_features="true"
            no_install_unknown_sources="true"/>
    </full-type>
</user-types>

বিল্ড নম্বর পছন্দ নিয়ন্ত্রক

AAOS-এ, সেটিংস-এর বিল্ড নাম্বার প্রেফারেন্স সারির সাথে ব্যবহারকারীর মিথস্ক্রিয়া packages/apps/Car/Settings/src/com/android/car/settings/system/BuildNumberPreferenceController.java তে অবস্থিত BuildNumberPreferenceController.java দ্বারা নিয়ন্ত্রিত হয়।

যখন no_debugging_features ( UserManager.DISALLOW_DEBUGGING_FEATURES ) ব্যবহারকারী সীমাবদ্ধতা সেট করা থাকে, তখন BuildNumberPreferenceController ট্যাপ করা হলে প্রোডাকশন ( user ) বিল্ডের ক্ষেত্রে ডেভেলপার কাউন্টডাউনটি বন্ধ করে দেয়:

@Override
protected boolean handlePreferenceClicked(Preference preference) {
    if (DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(getContext())) {
        return true;
    }

    // Enforce restriction on production (user) builds
    if (Build.IS_USER && mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) {
        showToast(R.string.dev_access_blocked_toast);
        return true;
    }

    mDevHitCountdown--;
    if (mDevHitCountdown == 0) {
        DevelopmentSettingsUtil.setDevelopmentSettingsEnabled(getContext(), true);
        showToast(R.string.show_dev_on);
    }
    return true;
}

Build.IS_USER ব্যবহার নিশ্চিত করে যে প্রোডাকশন বিল্ডগুলো কঠোরভাবে নিরাপত্তা ব্যবস্থা প্রয়োগ করে, অপরদিকে userdebug বিল্ডে থাকা অভ্যন্তরীণ ইঞ্জিনিয়ারিং টিমগুলো ম্যানুয়াল কমান্ড-লাইন ইন্টারফেস (CLI) ওভাররাইড ছাড়াই পরীক্ষার জন্য ৭-ট্যাপ জেসচার ব্যবহার করে ডেভেলপার অপশন অ্যাক্সেস করতে পারে।

ডিবাগিং রেস্ট্রিকশন কন্ট্রোলার

ডিবাগিং রেস্ট্রিকশন কন্ট্রোলার (DRC)-এর একটি রেফারেন্স ইমপ্লিমেন্টেশন AOSP-তে packages/apps/Car/DebuggingRestrictionController -এ প্রদান করা হয়েছে।

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

ডিআরসি রেফারেন্স বাস্তবায়নটি দুটি মূল উপাদান নিয়ে গঠিত:

  • ইন-ভেহিকেল ডিআরসি ক্লায়েন্ট অ্যাপ ( app/ ): হেড ইউনিটে থাকা একটি বিশেষাধিকারপ্রাপ্ত সিস্টেম অ্যাপ (যার MANAGE_USERS পারমিশন রয়েছে) যা ডেভেলপারদের প্রমাণীকরণ করে, আগত JWS টোকেনগুলির X.509 সার্টিফিকেট সিগনেচার, হোস্টনেম, ননস এবং মেয়াদোত্তীর্ণতা যাচাই করে এবং UserManager ব্যবহার করে গতিশীলভাবে no_debugging_features সীমাবদ্ধতাটি টগল করে।
  • ক্লাউড টোকেন ইস্যুকারী ( server/ ): একটি ব্যাকএন্ড ওয়েব পরিষেবা (ফায়ারবেস ক্লাউড ফাংশন হিসাবে স্থাপনযোগ্য) যা ডেভেলপারের পরিচয়পত্র প্রমাণীকরণ করে এবং একটি নির্দিষ্ট মেয়াদসহ ক্রিপ্টোগ্রাফিকভাবে স্বাক্ষরিত RS256 JWS অ্যাক্সেস টোকেন ইস্যু করে।

সম্পূর্ণ সেটআপ নির্দেশাবলী, সার্টিফিকেট তৈরির টুলিং এবং ডেপ্লয়মেন্ট ধাপগুলোর জন্য, ডিবাগিং রেস্ট্রিকশন কন্ট্রোলার ইন্টিগ্রেশন গাইডটি দেখুন।

পরীক্ষা

গুগলের পরামর্শ হলো, OEM-রা যেন রেফারেন্স ইমপ্লিমেন্টেশন দিয়ে শুরু করে এবং সেখান থেকে পর্যায়ক্রমে উন্নয়ন করে।

  1. ওভারলে ফাইলগুলিতে বিধিনিষেধগুলি কনফিগার করার পরে, AAOS কম্পাইল করুন এবং সংজ্ঞায়িত ফ্লোগুলি যাচাই করুন। আপনার অ্যাক্সেস সেটিংস যাচাই করতে রেফারেন্স অ্যাপ এবং স্থানীয় JWS-সক্ষম পরিষেবা ব্যবহার করুন।
  2. ঐচ্ছিক: আপনার JWS-সক্ষম ক্লাউড পরিষেবা ব্যবহার করার জন্য সিস্টেমটি কনফিগার করুন। আপনার ব্যাকএন্ড পরিষেবাতে প্রত্যাশিত প্রবাহ পরিলক্ষিত হচ্ছে কিনা তা যাচাই করুন।