ডিভাইসের নিরাপত্তা সংক্রান্ত অবস্থা বোঝা

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

AndroidX Security State হল একটি Jetpack লাইব্রেরি যা Android-পরিচালিত ডিভাইসের নিরাপত্তা সংক্রান্ত অবস্থার একত্রিত অ্যাক্সেস প্রদান করে। এটি AOSP API এবং Android-এর সর্বজনীন দুর্বলতা ফিডকে একত্রিত করে, যাতে শুধু নিরাপত্তা প্যাচ লেভেল (SPL)-এর বাইরেও একটি ব্যাপক, সুনির্দিষ্ট এবং অ্যাকশনযোগ্য ডিভাইস নিরাপত্তা স্ট্যাটাস প্রদান করা যায়।

আর্কিটেকচার ওভারভিউ

নিচের ডায়াগ্রাম থেকে বোঝা যায় যে কীভাবে AndroidX Security State লাইব্রেরি ডিভাইসে থাকা প্ল্যাটফর্ম প্রপার্টি, ইন্টারপ্রসেস কমিউনিকেশন (IPC) আপডেট প্রদানকারী এবং পাবলিক দুর্বলতা ফিডকে একটি, সুসংহত API সেটে একত্রিত করে।

AndroidX Security State লাইব্রেরি, অন-ডিভাইস প্ল্যাটফর্ম প্রপার্টি, IPC আপডেট প্রদানকারী এবং পাবলিক দুর্বলতা ফিডকে একত্রিত API-এর একটি সেটে একত্রিত করে

সিকিউরিটি প্যাচ স্ট্যাটাস ও কম্পোনেন্ট

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

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

স্বচ্ছতা বাড়াতে, নিরাপত্তা সংক্রান্ত স্ট্যাটাস লাইব্রেরি তিনটি কম্পোনেন্টের প্রত্যেকটির জন্য আলাদা আলাদাভাবে কার্যকর প্যাচ লেভেল প্রদান করে:

  • সিস্টেম (COMPONENT_SYSTEM): স্ট্যান্ডার্ড OS এবং সিস্টেম নিরাপত্তা স্ট্যাটাস বোঝায় যা স্ট্যান্ডার্ড নিরাপত্তা প্যাচ লেভেল ফিল্ড থেকে পাওয়া যায়।
  • সিস্টেম মেইনলাইন মডিউল (COMPONENT_SYSTEM_MODULES): নির্দিষ্ট মডিউল রিলিজ ভার্সন থেকে প্রাপ্ত মডুলার সিস্টেম কম্পোনেন্ট (Google Play সিস্টেম আপডেট)-এর নিরাপত্তা স্ট্যাটাস দেখায়।
  • কার্নেল (COMPONENT_KERNEL): ডিভাইস কার্নেলের নিরাপত্তা স্ট্যাটাস প্রতিনিধিত্ব করে, যা সরাসরি কার্নেল ভার্সন স্ট্রিং থেকে পাওয়া যায়।

কম্পোনেন্টের উপর নির্ভর করে, লাইব্রেরি প্যাচ লেভেল সংক্রান্ত সর্বাধিক ৩টি ডাইমেনশন সম্পর্কিত তথ্য প্রদান করে:

  • ডিভাইস SPL (DSPL): ডিভাইসে রান করছে এমন স্বতন্ত্র কম্পোনেন্টের বর্তমান প্যাচ লেভেল নেটওয়ার্ক অনুরোধ ছাড়াই সিঙ্ক্রোনাস কোয়েরি করা হয়। সিস্টেম ও মেইনলাইন রিপোর্ট ক্যালেন্ডারের তারিখ (DateBasedSecurityPatchLevel), অন্যদিকে কার্নেল তার রিলিজ ভার্সন রিপোর্ট করে (VersionedSecurityPatchLevel, যেমন, 5.15.148)।
  • প্রকাশিত SPL (PSPL): Android নিরাপত্তা বুলেটিন এবং ওপেন সোর্স ভালনারেবিলিটি (OSV) ডেটাবেস রিপোর্টে আনুষ্ঠানিকভাবে প্রকাশিত বেসলাইন। ডিভাইস SPL-এর দেওয়া তারিখ বা ভার্সন স্ট্রিং তুলনা করে আপনার অ্যাপ সম্মতি মূল্যায়ন করতে পারে।
  • উপলভ্য SPL (ASPL): IPC ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোয়েরি করা আপডেট প্রদানকারীর থেকে উপলভ্য পেন্ডিং আপডেট কোনও ডিভাইসে আছে কিনা তা নির্দেশ করে। Android Google Play সিস্টেম আপডেট ফিচার মডিউল উপলভ্য করে তোলে, এবং OEM OTA ক্লায়েন্ট সিস্টেম আপডেট উপলভ্য করে তোলে। কারণ, অপারেটিং সিস্টেম ইমেজে কার্নেল আপডেট বান্ডেল করা থাকে, তাই COMPONENT_SYSTEM ব্যবহার করে কার্নেল আপডেট উপলভ্যতা মূল্যায়ন করা হয়।

গেট নিরাপত্তা-সংবেদনশীল ফিচার

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

প্ল্যাটফর্ম ভার্সন সংক্রান্ত বিবেচ্য বিষয়

নিরাপত্তা সংক্রান্ত নির্দিষ্ট কিছু ক্ষমতা অন্তর্নিহিত প্ল্যাটফর্ম আর্কিটেকচারের উপর নির্ভর করে এবং Android-এর আগের ভার্সনে উপলভ্য থাকে না:

  • Android 11 (API লেভেল ৩০) ও এর পরের যেকোনও ভার্সন: বুলেটিন-প্রকাশিত কার্নেল LTS ভার্সন ও আপডেট উপলভ্যতা (ASPL) কোয়েরি সহ সব কম্পোনেন্টের জন্য সম্পূর্ণ সহায়তা।
  • Android 10 (API লেভেল 29): সিস্টেম ও সিস্টেম মডিউল প্যাচ লেভেলে কাজ করে; তবে, বুলেটিনে প্রকাশিত কার্নেল ভার্সন উপলভ্য নেই কারণ Android 11-এ জেনেরিক কার্নেল ইমেজ (GKI) ট্র্যাকিং ও কার্নেল LTS টার্গেট Android Security বুলেটিনে শুরু হয়েছে—ডিভাইসে থাকা কার্নেল ভার্সন এখনও লোকালি পড়া যায়।
  • Android 9 (API লেভেল ২৮) ও এর আগের ভার্সন: Android 10-এর সীমাবদ্ধতা ছাড়াও, মডুলার সিস্টেম কম্পোনেন্ট (Project Mainline) Android 10-এর আগে ছিল না। সিস্টেম মডিউল SPL উপলভ্য না থাকলে, কলিং getDeviceSecurityPatchLevel(COMPONENT_SYSTEM_MODULES) নিরাপদে বেসলাইন Unix epoch তারিখে (১৯৭০-০১-০১) ফিরে যায়।

আপডেটের উপলভ্যতা ও উপলভ্য SPL (ASPL) সম্পর্কে জানুন

কোনও ডিভাইসের নিরাপত্তা সংক্রান্ত অবস্থা নির্ধারণ করার জন্য, স্বতন্ত্র কম্পোনেন্টের জন্য পেন্ডিং নিরাপত্তা আপডেট উপলভ্য আছে কিনা তা জানতে হবে। Android ডিভাইস বিভিন্ন ধরনের ডেলিভারি মেকানিজমের মাধ্যমে নিরাপত্তা আপডেট পায়, যেমন মডুলার কম্পোনেন্টের জন্য সিস্টেম ওভার-দ্য-এয়ার (OTA) আপডেট এবং Google Play সিস্টেম আপডেট ।

কোনও নির্দিষ্ট কম্পোনেন্টের জন্য আপনার অ্যাপ ASPL রিট্রিভ করার আগে, সংশ্লিষ্ট আপডেট প্রদানকারীকে সেই তথ্য প্রকাশ করতে হবে। এইসব আলাদা আলাদা আপডেট সোর্স জুড়ে কোঅর্ডিনেট করতে, ক্লায়েন্ট অ্যাপ্লিকেশন AndroidX Security State লাইব্রেরি ব্যবহার করে নিরাপত্তা সংক্রান্ত স্ট্যাটাস কোয়েরি করে, অন্যদিকে অন-ডিভাইস আপডেট ক্লায়েন্ট, AndroidX Security State Provider লাইব্রেরি ব্যবহার করে উপলভ্য নিরাপত্তা প্যাচ লেভেল (ASPL) প্রকাশ করে।

Google, সব GMS Android ডিভাইসে মেনলাইন মডিউল সংক্রান্ত আপডেট তথ্য এবং Google OTA ক্লায়েন্ট (GOTA) ব্যবহার করা ডিভাইসে সিস্টেম OTA সংক্রান্ত তথ্য প্রদান করে।

নিচের ডায়াগ্রাম থেকে বোঝা যায় যে কীভাবে ক্লায়েন্ট অ্যাপ্লিকেশন, Google Play সিস্টেম আপডেট ও সিস্টেম OTA আপডেট, দু'টি ক্ষেত্রেই নিরাপত্তা সংক্রান্ত অবস্থান কোয়েরি করার জন্য AndroidX Security State লাইব্রেরি ব্যবহার করে:

Google Play সিস্টেম আপডেট ও সিস্টেম OTA আপডেট, দু'টি ক্ষেত্রেই নিরাপত্তা সংক্রান্ত অবস্থান কোয়েরি করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশন AndroidX Security State লাইব্রেরি ব্যবহার করে

ডিপেন্ডেন্সি যোগ করা

AndroidX Security State-এ কোনও ডিপেন্ডেন্সি যোগ করতে, আপনাকে অবশ্যই নিজের প্রোজেক্টে Google Maven রিপোজিটরি অন্তর্ভুক্ত করতে হবে। আপনার অ্যাপের build.gradle.kts বা build.gradle ফাইলে নির্ভরতা যোগ করুন:

Kotlin

// Kotlin DSL (build.gradle.kts)
dependencies {
    implementation("androidx.security:security-state:1.1.0")
}

গ্ৰুভি

// Groovy DSL (build.gradle)
dependencies {
    implementation "androidx.security:security-state:1.1.0"
}

ঘোষিত অনুমতি সংক্রান্ত ম্যাট্রিক্স

টার্গেট API AndroidManifest.xml-এ প্রয়োজনীয় অনুমতি অপারেশনাল নোট
getDeviceSecurityPatchLevel() কোনওটিই নয় লোকাল নেটিভ সিস্টেম প্রপার্টি ও প্যাকেজ মেটাডেটা সিঙ্ক্রোনাসলি পড়ে।
fetchAvailableSecurityPatchLevel()
queryAllAvailableUpdates()
কোনওটিই নয় অন-ডিভাইস IPC ব্যবহার করে যোগাযোগ করে। লাইব্রেরি শুধুমাত্র ডিভাইসে বিশ্বস্ত কম্পোনেন্ট কোয়েরি করে (আপডেট প্রদানকারীকে বিশেষ READ_PRIVILEGED_PHONE_STATE অনুমতি রাখতে হবে), তাই আপনার অ্যাপ, প্রাপ্ত তথ্যের সত্যতা সম্পর্কে নিশ্চিত থাকতে পারে।
createVulnerabilityReportUrl()
loadVulnerabilityReport()
getPublishedSecurityPatchLevel()
areCvesPatched()
isDeviceFullyUpdated()
android.permission.INTERNET সর্বজনীন OSV রিপোর্ট সংগ্রহ করার জন্য প্রয়োজন। loadVulnerabilityReport() ব্যবহার করে মেমরিতে লোড করা হয়ে গেলে, কোয়েরি করার পদ্ধতি নেটওয়ার্ক অ্যাক্সেস ছাড়াই লোকালি এক্সিকিউট হয়।

লাইব্রেরি ইনিশিয়ালাইজ করা

Android Context দিয়ে SecurityPatchState ইনিশিয়ালাইজ করুন:

Kotlin

import androidx.security.state.SecurityPatchState

val securityPatchState = SecurityPatchState(context)

জাভা

import androidx.security.state.SecurityPatchState;

SecurityPatchState securityPatchState = new SecurityPatchState(context);

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

আপনার অ্যাপ যদি CVE কমপ্লায়েন্স মূল্যায়ন করে এবং আগে থেকেই মেমরিতে OSV দুর্বলতা রিপোর্ট লোড করে থাকে, তাহলে Kotlin কলাররা সরাসরি Kotlin-এর কনস্ট্রাক্টরে JSON স্ট্রিং পাস করতে পারবেন:

val securityPatchState = SecurityPatchState(context, vulnerabilityReportJsonString = jsonString)

Java-তে অথবা স্টার্ট-আপের পরে অ্যাসিঙ্ক্রোনাস রিপোর্ট লোড করার সময়, context দিয়ে ইনিশিয়ালাইজ করুন এবং securityPatchState.loadVulnerabilityReport(jsonString) কল করুন।

ডিভাইসের প্যাচ লেভেল চেক করা

সিঙ্ক্রোনাস পদ্ধতিতে অন-ডিভাইস প্যাচ লেভেল কোয়েরি করা:

Kotlin

val deviceSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)
val mainlineSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM_MODULES)
val kernelVersion = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_KERNEL)

// Gatekeeping check: compare against a required baseline patch date
val requiredSpl = SecurityPatchState.DateBasedSecurityPatchLevel.fromString("2026-01-01")
if (deviceSpl < requiredSpl) {
    // Restrict access to sensitive features or guide user to update
}

জাভা

SecurityPatchState.SecurityPatchLevel deviceSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM);
SecurityPatchState.SecurityPatchLevel mainlineSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM_MODULES);
SecurityPatchState.SecurityPatchLevel kernelVersion = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_KERNEL);

// Gatekeeping check: compare against a required baseline patch date
SecurityPatchState.SecurityPatchLevel requiredSpl = SecurityPatchState.DateBasedSecurityPatchLevel.fromString("2026-01-01");
if (deviceSpl.compareTo(requiredSpl) < 0) {
    // Restrict access to sensitive features or guide user to update
}

পেন্ডিং সিস্টেম আপডেট আছে কিনা চেক করুন

অ্যাপ, বিশ্বস্ত অন-ডিভাইস আপডেট প্রদানকারীর সাথে অ্যাসিঙ্ক্রোনাস যোগাযোগ করে, পেন্ডিং আপডেটের উপলভ্যতা মূল্যায়ন করতে পারে। সাধারণত, Google Play সিস্টেম আপডেট এবং OEM OTA ক্লায়েন্ট:

  • fetchAvailableSecurityPatchLevel(): নির্দিষ্ট কম্পোনেন্টের জন্য উপলভ্য SPL ফেরায় (কোনও নতুন আপডেট উপলভ্য না থাকলে, বর্তমান ডিভাইস SPL-এ ফিরে যায়) যা ডিভাইস SPL ও প্রকাশিত SPL-এর সাথে তুলনা করতে ব্যবহার করা যেতে পারে।
  • queryAllAvailableUpdates(): ডিভাইসে সব বিশ্বস্ত আপডেট প্রদানকারীকে খুঁজে পায় এবং সোর্স ও ডেটার ফ্রেশনেস সংক্রান্ত মেটাডেটা সহ গ্র্যানুলার UpdateCheckResult রিটার্ন করে।
ব্যবহার করা উচিত।

উদাহরণ ১: বাকি থাকা আপডেটের জন্য ব্যবহারকারীদের প্রম্পট করা

নিরাপত্তা আপডেট উপলভ্য হলে ব্যবহারকারীদের প্রম্পট করতে fetchAvailableSecurityPatchLevel() ব্যবহার করুন (যেমন, Settings.ACTION_SYSTEM_UPDATE_SETTINGS লঞ্চ করে):

Kotlin

import androidx.lifecycle.lifecycleScope
import androidx.security.state.SecurityPatchState
import kotlinx.coroutines.launch

// Pattern A: Prompt users for pending updates (with automatic offline fallback)
lifecycleScope.launch {
    val currentSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)
    val availableSpl = securityPatchState.fetchAvailableSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)
    if (availableSpl > currentSpl) {
        // Prompt the user to install pending updates in system settings
    }
}

জাভা

Java-তে, অ্যাসিঙ্ক্রোনাস পদ্ধতি একটি ListenableFuture এবং ContextCompat.getMainExecutor() ব্যবহার করে রুট কলব্যাক রিটার্ন করে:

import androidx.core.content.ContextCompat;
import androidx.security.state.SecurityPatchState;
import androidx.security.state.SecurityPatchState.SecurityPatchLevel;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;

// Pattern A: Prompt users for pending updates (with automatic offline fallback)
SecurityPatchLevel currentSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM);
ListenableFuture<SecurityPatchLevel> availableSpl = securityPatchState.fetchAvailableSecurityPatchLevelAsync(
    SecurityPatchState.COMPONENT_SYSTEM,
    SecurityPatchState.UPDATE_INFO_SERVICE_BINDING_TIMEOUT_MS
);

Futures.addCallback(availableSpl, new FutureCallback<SecurityPatchLevel>() {
    @Override
    public void onSuccess(SecurityPatchLevel available) {
        if (available.compareTo(currentSpl) > 0) {
            // Prompt the user to install pending updates in system settings
        }
    }

    @Override
    public void onFailure(Throwable t) {
        // Handle timeout or IPC communication error
    }
}, ContextCompat.getMainExecutor(context));

উদাহরণ ২: প্রদানকারীর বিস্তারিত স্ট্যাটাস চেক করা

আলাদা আলাদা পরিষেবা প্রদানকারী, টাইমস্ট্যাম্প এবং UpdateInfo রেকর্ড চেক করতে queryAllAvailableUpdates() ব্যবহার করুন:

Kotlin

import androidx.lifecycle.lifecycleScope
import androidx.security.state.SecurityPatchState
import kotlinx.coroutines.launch

// Pattern B: Inspect detailed provider status
lifecycleScope.launch {
    val updateResults = securityPatchState.queryAllAvailableUpdates()
    for (result in updateResults) {
        val provider = result.providerPackageName
        val lastCheck = result.lastCheckTimeMillis
        val updates = result.updates // List<UpdateInfo>
    }
}

জাভা

import androidx.core.content.ContextCompat;
import androidx.security.state.SecurityPatchState;
import androidx.security.state.UpdateCheckResult;
import androidx.security.state.UpdateInfo;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;

// Pattern B: Inspect detailed provider status
ListenableFuture<List<UpdateCheckResult>> updateResults = securityPatchState.queryAllAvailableUpdatesAsync(
    SecurityPatchState.UPDATE_INFO_SERVICE_BINDING_TIMEOUT_MS
);

Futures.addCallback(updateResults, new FutureCallback<List<UpdateCheckResult>>() {
    @Override
    public void onSuccess(List<UpdateCheckResult> results) {
        for (UpdateCheckResult result : results) {
            String provider = result.getProviderPackageName();
            long lastCheck = result.getLastCheckTimeMillis();
            List<UpdateInfo> updates = result.getUpdates();
        }
    }

    @Override
    public void onFailure(Throwable t) {
        // Handle error
    }
}, ContextCompat.getMainExecutor(context));

দুর্বলতা সংক্রান্ত সমস্যার সমাধান যাচাই করা এবং CVE চেক করা

CVE প্রশমন মূল্যায়ন করতে, সামগ্রিক আপডেট মেনে চলা চেক করতে অথবা প্রকাশিত নিরাপত্তা প্যাচ লেভেল (PSPL) পরিদর্শন করতে, SecurityPatchState-এর জন্য API রেফারেন্সে বিশদে বলা হয়েছে সেই অনুযায়ী আপনার অ্যাপকে প্রথমে একটি OSV দুর্বলতা সংক্রান্ত রিপোর্ট পেতে ও লোড করতে হবে।

Kotlin

// Load vulnerability report
val reportUrl = SecurityPatchState.createVulnerabilityReportUrl()
// ... download JSON string from reportUrl ...
securityPatchState.loadVulnerabilityReport(jsonString)

// Check overall update compliance against published bulletin
val isFullyUpdated = securityPatchState.isDeviceFullyUpdated()

val cves = listOf("CVE-2019-9501", "CVE-2020-3699", "CVE-2024-0016")
val isPatched = securityPatchState.areCvesPatched(cves)

// Get a list of all patched CVEs for a specific component and SPL
val deviceSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)
val patchedSystemCVEs = securityPatchState.getPatchedCves(SecurityPatchState.COMPONENT_SYSTEM, deviceSpl)

// Inspect published SPL and kernel LTS target versions from the bulletin
val publishedSystemSpl = securityPatchState.getPublishedSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)
val kernelLtsTargets = securityPatchState.getPublishedSecurityPatchLevel(SecurityPatchState.COMPONENT_KERNEL)

জাভা

// Load vulnerability report
Uri reportUrl = SecurityPatchState.createVulnerabilityReportUrl();
// ... download JSON string from reportUrl ...
securityPatchState.loadVulnerabilityReport(jsonString);

// Check overall update compliance against published bulletin
boolean isFullyUpdated = securityPatchState.isDeviceFullyUpdated();

List<String> cves = Arrays.asList("CVE-2019-9501", "CVE-2020-3699", "CVE-2024-0016");
boolean isPatched = securityPatchState.areCvesPatched(cves);

// Get a list of all patched CVEs for a specific component and SPL
SecurityPatchState.SecurityPatchLevel deviceSpl = securityPatchState.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM);
Map<SecurityPatchState.Severity, Set<String>> patchedSystemCVEs =
    securityPatchState.getPatchedCves(SecurityPatchState.COMPONENT_SYSTEM, deviceSpl);

// Inspect published SPL and kernel LTS target versions from the bulletin
List<SecurityPatchState.SecurityPatchLevel> publishedSystemSpl =
    securityPatchState.getPublishedSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM);
List<SecurityPatchState.SecurityPatchLevel> kernelLtsTargets =
    securityPatchState.getPublishedSecurityPatchLevel(SecurityPatchState.COMPONENT_KERNEL);

ভালনারেবিলিটি রিপোর্ট লোড করা

  1. লোকাল ক্যাশিং ও WorkManager রিফ্রেশ: যেহেতু Android Security Bulletins প্রতি মাসে প্রকাশিত হয়, তাই ডাউনলোড করা JSON-কে ইন্টার্নাল স্টোরেজে (context.filesDir) ক্যাশে করুন এবং রিপোর্ট রিফ্রেশ করার জন্য WorkManager (সম্ভব হলে প্রতি ২৪–৪৮ ঘণ্টা অন্তর) সহ একটি পর্যায়ক্রমিক ব্যাকগ্রাউন্ড টাস্ক শিডিউল করুন, অ্যাপ লঞ্চ করার সময় লোকাল ক্যাশে থেকে সিঙ্ক্রোনাসভাবে পড়ুন।
  2. ব্যাকগ্রাউন্ড থ্রেডিং: CVE রেকর্ড পার্স করার সময় মূল UI থ্রেড ব্লক করা এড়াতে, ব্যাকগ্রাউন্ড থ্রেডে (Kotlin-এ Dispatchers.IO বা Java-তে Executor) loadVulnerabilityReport() ইনভোক করুন।
  3. Kernel LTS মূল্যায়ন: getPatchedCves(COMPONENT_KERNEL, ...) কল করলে IllegalArgumentException হয় এবং areCvesPatched() kernel CVE মূল্যায়ন করে না। পরিবর্তে, getPublishedSecurityPatchLevel(COMPONENT_KERNEL)-এর দেওয়া Android Common Kernel LTS টার্গেটের সাথে ডিভাইসের কার্নেল ভার্সন তুলনা করে কার্নেল নিরাপত্তা মূল্যায়ন করুন। এর মেজর ও মাইনর ব্রাঞ্চ (যেমন, 5.15.140 কার্নেলের সাথে 5.15.159 টার্গেট তুলনা করা) ম্যাচ করে।

অতিরিক্ত রিসোর্স

ডিভাইসের নিরাপত্তা সংক্রান্ত অবস্থার ব্যাপারে আরও তথ্য পেতে, নিম্নলিখিত রিসোর্স দেখুন:

ডকুমেন্টেশন

API রেফারেন্স