আপনার অ্যাপটি তার অন্তর্নিহিত অপারেটিং সিস্টেমের মতোই সুরক্ষিত। ঝুঁকি কমাতে, আপনার অ্যাপের উচিত ডিভাইসের নিরাপত্তা অবস্থার রিয়েল-টাইম মূল্যায়নের মাধ্যমে নিরাপত্তা-সংবেদনশীল অপারেশনগুলোকে নিয়ন্ত্রণ করা। এর মাধ্যমে নির্ধারণ করা উচিত যে ডিভাইসটি, বিশেষ করে এর মূল সিস্টেম উপাদানগুলো, অ্যান্ড্রয়েড সিকিউরিটি বুলেটিনে প্রকাশিত দুর্বলতাগুলোর বিরুদ্ধে সম্পূর্ণরূপে আপডেট এবং সুরক্ষিত আছে কিনা। ডিভাইসের নিরাপত্তা অবস্থা সম্পর্কে স্বচ্ছতা আপনার অ্যাপকে উচ্চ-ঝুঁকিপূর্ণ অপারেশনগুলো সম্পাদন করার আগেই সুরক্ষাব্যবস্থা স্থাপন করতে সাহায্য করে।
AndroidX Security State হলো একটি Jetpack লাইব্রেরি যা একটি অ্যান্ড্রয়েড-চালিত ডিভাইসের নিরাপত্তা অবস্থার সমন্বিত অ্যাক্সেস প্রদান করে। এটি AOSP API এবং অ্যান্ড্রয়েডের পাবলিক ভালনারেবিলিটি ফিডগুলোকে একত্রিত করে শুধুমাত্র সিকিউরিটি প্যাচ লেভেল (SPL)-এর বাইরেও ডিভাইসের একটি ব্যাপক, সুনির্দিষ্ট এবং কার্যকর নিরাপত্তা অবস্থা প্রদান করে।
স্থাপত্যের সংক্ষিপ্ত বিবরণ
নিম্নলিখিত ডায়াগ্রামটি দেখায় কিভাবে AndroidX সিকিউরিটি স্টেট লাইব্রেরি অন-ডিভাইস প্ল্যাটফর্ম প্রোপার্টি, ইন্টারপ্রসেস কমিউনিকেশন (IPC) আপডেট প্রোভাইডার এবং পাবলিক ভালনারেবিলিটি ফিডগুলিকে একটি একক, সুসংহত API সেটে একীভূত করে।

নিরাপত্তা প্যাচের অবস্থা এবং উপাদানসমূহ
সিকিউরিটি স্টেট লাইব্রেরি ব্যবহারের প্রধান সুবিধা হলো এটি কম্পোনেন্ট পর্যায়ে অত্যন্ত সূক্ষ্মভাবে সিকিউরিটি প্যাচ লেভেল (SPL) প্রদান করতে পারে। বিগত বছরগুলোতে, অ্যান্ড্রয়েড গুগল প্লে সিস্টেম আপডেটে (প্রজেক্ট মেইনলাইন) আরও মডিউল যুক্ত করেছে, যেগুলো সাধারণ সিস্টেম ওভার-দ্য-এয়ার (OTA) আপডেট থেকে স্বাধীনভাবে গুগল প্লে ব্যবহার করে আপডেট করা হয় এবং ভিন্ন গতিতে গুরুত্বপূর্ণ নিরাপত্তা সমাধান প্রদান করে।
একইভাবে, যদিও সিকিউরিটি প্যাচ লেভেল সাধারণত ন্যূনতম প্রয়োজনীয় জেনেরিক কার্নেল ইমেজ (GKI) সংস্করণ বাধ্যতামূলক করে, কার্নেল আপডেটগুলো আসলে সিস্টেমের নির্ধারিত সময়ের আগেই সম্পন্ন হতে পারে। এই কার্নেল-নির্দিষ্ট সমাধানগুলো সিস্টেমের প্রধান SPL স্ট্রিং দ্বারা সম্পূর্ণরূপে অন্তর্ভুক্ত নাও হতে পারে।
স্বচ্ছতা বাড়ানোর জন্য, নিরাপত্তা অবস্থা লাইব্রেরিটি তিনটি উপাদানের প্রত্যেকটির জন্য আলাদাভাবে একটি কার্যকর প্যাচ স্তর প্রদান করে:
- সিস্টেম (
COMPONENT_SYSTEM): স্ট্যান্ডার্ড সিকিউরিটি প্যাচ লেভেল ফিল্ড থেকে প্রাপ্ত স্ট্যান্ডার্ড ওএস এবং সিস্টেমের নিরাপত্তা অবস্থাকে নির্দেশ করে। - সিস্টেম মেইনলাইন মডিউল (
COMPONENT_SYSTEM_MODULES): নির্দিষ্ট মডিউল রিলিজ সংস্করণ থেকে প্রাপ্ত মডিউলার সিস্টেম উপাদানগুলির (Google Play সিস্টেম আপডেট) নিরাপত্তা স্থিতি উপস্থাপন করে। - কার্নেল (
COMPONENT_KERNEL): ডিভাইস কার্নেলের নিরাপত্তা অবস্থা নির্দেশ করে, যা সরাসরি কার্নেল ভার্সন স্ট্রিং থেকে প্রাপ্ত হয়।
কম্পোনেন্টের উপর নির্ভর করে, লাইব্রেরিটি প্যাচ লেভেল তথ্যের সর্বোচ্চ ৩টি ডাইমেনশন প্রদান করে:
- ডিভাইস এসপিএল (DSPL): ডিভাইসে চলমান স্বতন্ত্র কম্পোনেন্টগুলোর বর্তমান প্যাচ লেভেল, যা নেটওয়ার্ক রিকোয়েস্ট ছাড়াই সিনক্রোনাসভাবে কোয়েরি করা হয়। সিস্টেম এবং মেইনলাইন ক্যালেন্ডার তারিখ (
DateBasedSecurityPatchLevel) রিপোর্ট করে, অন্যদিকে কার্নেল তার রিলিজ ভার্সন (VersionedSecurityPatchLevel, উদাহরণস্বরূপ,5.15.148) রিপোর্ট করে। - প্রকাশিত এসপিএল (পিএসপিএল): অ্যান্ড্রয়েড সিকিউরিটি বুলেটিন এবং ওপেন সোর্স ভালনারেবিলিটিজ (ওএসভি) ডাটাবেস রিপোর্টে আনুষ্ঠানিকভাবে প্রকাশিত বেসলাইন। আপনার অ্যাপ ডিভাইস এসপিএল দ্বারা প্রদত্ত তারিখ বা সংস্করণ স্ট্রিংগুলির সাথে তুলনা করে এর সামঞ্জস্যতা মূল্যায়ন করতে পারে।
- অ্যাভেইলেবল এসপিএল (ASPL): এটি নির্দেশ করে যে কোনো ডিভাইসে আপডেট প্রোভাইডারদের কাছ থেকে কোনো পেন্ডিং আপডেট উপলব্ধ আছে কিনা, যা আইপিসি (IPC) ব্যবহার করে অ্যাসিঙ্ক্রোনাসভাবে কোয়েরি করা হয়। অ্যান্ড্রয়েড গুগল প্লে সিস্টেম আপডেট ফিচারটি মেইনলাইন মডিউলগুলোর জন্য প্রাপ্যতা প্রদান করে এবং ওইএম ওটিএ (OEM OTA) ক্লায়েন্টগুলো সিস্টেম আপডেটের জন্য প্রাপ্যতা প্রদান করে। যেহেতু কার্নেল আপডেটগুলো অপারেটিং সিস্টেম ইমেজের সাথে বান্ডল করা থাকে, তাই কার্নেল আপডেটের প্রাপ্যতা
COMPONENT_SYSTEM) ব্যবহার করে মূল্যায়ন করা হয়।
গেটের নিরাপত্তা-সংবেদনশীল বৈশিষ্ট্য
নিরাপত্তা-সংবেদনশীল ফিচারগুলো গেটিং করার জন্য প্রাসঙ্গিক সিদ্ধান্ত নিতে আপনি ডিভাইস এসপিএল (DSPL), অ্যাভেইলেবল এসপিএল (ASPL), এবং পাবলিশড এসপিএল (PSPL) থেকে তথ্য একত্রিত করতে পারেন। উদাহরণস্বরূপ, ব্যবহারকারী এখনও ইনস্টল করেননি এমন কোনো নতুন নিরাপত্তা প্যাচ উপলব্ধ আছে কিনা তা নির্ধারণ করতে আপনি DSPL-এর সাথে ASPL তুলনা করতে পারেন, যা পেমেন্ট বা ক্রেডেনশিয়াল এনরোলমেন্টের মতো সংবেদনশীল অপারেশন শুরু করার আগে তাদের আপডেট করার জন্য অনুরোধ করবে। এছাড়াও, ঝুঁকিপূর্ণ সাবসিস্টেমগুলো চালু করার আগে ডিভাইসে নির্দিষ্ট, উচ্চ-ঝুঁকিপূর্ণ দুর্বলতাগুলো প্রতিকার করা হয়েছে কিনা তা যাচাই করতে আপনি areCvesPatched() ব্যবহার করতে পারেন; যেমন, প্রক্সিমিটি-ভিত্তিক পেমেন্ট বা ডেটা শেয়ারিং অনুমোদন করার আগে গুরুত্বপূর্ণ NFC বা ব্লুটুথ দুর্বলতা পরীক্ষা করা।
প্ল্যাটফর্ম সংস্করণ বিবেচনা
কিছু নির্দিষ্ট নিরাপত্তা অবস্থার সক্ষমতা অন্তর্নিহিত প্ল্যাটফর্ম আর্কিটেকচারের উপর নির্ভর করে এবং অ্যান্ড্রয়েডের নিম্ন সংস্করণগুলিতে উপলব্ধ নয়:
- অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) এবং উচ্চতর সংস্করণ: বুলেটিনে প্রকাশিত কার্নেল এলটিএস সংস্করণ এবং আপডেট প্রাপ্যতা (এএসপিএল) কোয়েরি সহ সকল উপাদানের জন্য পূর্ণ সমর্থন।
- অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯): সিস্টেম এবং সিস্টেম মডিউল প্যাচ লেভেল সমর্থন করে; তবে, বুলেটিনে প্রকাশিত কার্নেল সংস্করণগুলো পাওয়া যায় না, কারণ অ্যান্ড্রয়েড সিকিউরিটি বুলেটিনে জেনেরিক কার্নেল ইমেজ (জিকেআই) ট্র্যাকিং এবং কার্নেল এলটিএস টার্গেট অ্যান্ড্রয়েড ১১ থেকে শুরু হয়েছে—ডিভাইসের কার্নেল সংস্করণ এখনও স্থানীয়ভাবে পড়া যায়।
- অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) এবং পুরোনো সংস্করণ: অ্যান্ড্রয়েড ১০-এর সীমাবদ্ধতা ছাড়াও, অ্যান্ড্রয়েড ১০-এর আগে মডিউলার সিস্টেম কম্পোনেন্ট (প্রজেক্ট মেইনলাইন)-এর অস্তিত্ব ছিল না। যখন সিস্টেম মডিউলের এসপিএল (SPL) অনুপলব্ধ থাকে, তখন
getDeviceSecurityPatchLevel(COMPONENT_SYSTEM_MODULES)কল করলে তা নিরাপদে বেসলাইন ইউনিক্স ইপক ডেট (১৯৭০-০১-০১)-এ ফিরে যায়।
আপডেট প্রাপ্যতা এবং উপলব্ধ এসপিএল (ASPL) বুঝুন
একটি ডিভাইসের নিরাপত্তা পরিস্থিতি নির্ধারণ করতে হলে, এর প্রতিটি উপাদানের জন্য কোনো অপেক্ষাধীন নিরাপত্তা আপডেট উপলব্ধ আছে কিনা তা জানা প্রয়োজন। অ্যান্ড্রয়েড ডিভাইসগুলো একাধিক স্বতন্ত্র ডেলিভারি পদ্ধতির মাধ্যমে নিরাপত্তা আপডেট গ্রহণ করে, যেমন সিস্টেম ওভার-দ্য-এয়ার (OTA) আপডেট এবং মডিউলার উপাদানগুলোর জন্য গুগল প্লে সিস্টেম আপডেট ।
আপনার অ্যাপ কোনো নির্দিষ্ট কম্পোনেন্টের জন্য ASPL সংগ্রহ করার আগে, সংশ্লিষ্ট আপডেট প্রোভাইডারকে অবশ্যই সেই তথ্য প্রকাশ করতে হবে। এই বিভিন্ন আপডেট সোর্সগুলোর মধ্যে সমন্বয় সাধনের জন্য, ক্লায়েন্ট অ্যাপ্লিকেশনগুলো সিকিউরিটি স্টেট জানতে AndroidX Security State লাইব্রেরি ব্যবহার করে, অন্যদিকে অন-ডিভাইস আপডেট ক্লায়েন্টগুলো তাদের Available Security Patch Level (ASPL) প্রকাশ করার জন্য সহযোগী AndroidX Security State Provider লাইব্রেরি ব্যবহার করে।
গুগল সমস্ত জিএমএস অ্যান্ড্রয়েড ডিভাইসে মেইনলাইন মডিউলের আপডেট তথ্য সরবরাহ করে, সেইসাথে গুগল ওটিএ ক্লায়েন্ট (GOTA) ব্যবহারকারী ডিভাইসগুলির জন্য সিস্টেম ওটিএ তথ্যও প্রদান করে।
নিম্নলিখিত ডায়াগ্রামটি দেখায় কিভাবে ক্লায়েন্ট অ্যাপ্লিকেশনগুলি Google Play সিস্টেম আপডেট এবং সিস্টেম OTA আপডেট উভয় ক্ষেত্রেই নিরাপত্তা পরিস্থিতি জানতে AndroidX Security State লাইব্রেরি ব্যবহার করে:

নির্ভরতা যোগ করুন
AndroidX Security State-এর উপর ডিপেন্ডেন্সি যোগ করতে, আপনাকে অবশ্যই আপনার প্রজেক্টে Google Maven রিপোজিটরি অন্তর্ভুক্ত করতে হবে। আপনার অ্যাপের build.gradle.kts অথবা build.gradle ফাইলে ডিপেন্ডেন্সিটি যোগ করুন:
কোটলিন
// 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"
}
ঘোষিত অনুমতি ম্যাট্রিক্স
| লক্ষ্য এপিআই | AndroidManifest.xml এ প্রয়োজনীয় অনুমতিসমূহ | অপারেশনাল নোট |
|---|---|---|
getDeviceSecurityPatchLevel() | কোনোটিই না | স্থানীয় নেটিভ সিস্টেম প্রোপার্টি এবং প্যাকেজ মেটাডেটা সিনক্রোনাসভাবে পড়ে। |
fetchAvailableSecurityPatchLevel()queryAllAvailableUpdates() | কোনোটিই না | ডিভাইসের নিজস্ব আইপিসি (IPC) ব্যবহার করে যোগাযোগ করে। লাইব্রেরিটি ডিভাইসের শুধুমাত্র বিশ্বস্ত উপাদানগুলোকেই কোয়েরি করে (এর জন্য আপডেট প্রোভাইডারদের বিশেষাধিকারপ্রাপ্ত READ_PRIVILEGED_PHONE_STATE পারমিশন থাকা আবশ্যক), ফলে আপনার অ্যাপ প্রাপ্ত তথ্যের সত্যতা সম্পর্কে নিশ্চিত থাকতে পারে। |
createVulnerabilityReportUrl()loadVulnerabilityReport()getPublishedSecurityPatchLevel()areCvesPatched()isDeviceFullyUpdated() | android.permission.INTERNET | পাবলিক OSV রিপোর্ট আনার জন্য এটি প্রয়োজন। loadVulnerabilityReport() ব্যবহার করে একবার মেমরিতে লোড হয়ে গেলে, কোয়েরি করার মেথডগুলো নেটওয়ার্ক অ্যাক্সেস ছাড়াই স্থানীয়ভাবে কার্যকর হয়। |
লাইব্রেরিটি প্রারম্ভিক করুন
একটি অ্যান্ড্রয়েড Context দিয়ে SecurityPatchState শুরু করুন:
কোটলিন
import androidx.security.state.SecurityPatchState
val securityPatchState = SecurityPatchState(context)
জাভা
import androidx.security.state.SecurityPatchState;
SecurityPatchState securityPatchState = new SecurityPatchState(context);
শুধুমাত্র context দিয়ে ইনিশিয়ালাইজ করলে নেটওয়ার্ক নির্ভরতা ছাড়াই অফলাইন ডিভাইস প্যাচ লেভেলে তাৎক্ষণিক অ্যাক্সেস পাওয়া যায়। (আপডেট প্রাপ্যতা কোয়েরিগুলো অন-ডিভাইস প্রোভাইডারদের সাথে অ্যাসিঙ্ক্রোনাসভাবে যোগাযোগ করে)।
যদি আপনার অ্যাপ CVE কমপ্লায়েন্স মূল্যায়ন করে এবং ইতিমধ্যেই একটি OSV ভালনারেবিলিটি রিপোর্ট মেমরিতে লোড করে থাকে, তাহলে Kotlin ব্যবহারকারীরা JSON স্ট্রিংটি সরাসরি Kotlin-এর কনস্ট্রাক্টরে পাস করতে পারেন:
val securityPatchState = SecurityPatchState(context, vulnerabilityReportJsonString = jsonString)
জাভাতে, অথবা স্টার্টআপের পরে অ্যাসিঙ্ক্রোনাসভাবে রিপোর্ট লোড করার সময়, কন্টেক্সট দিয়ে ইনিশিয়ালাইজ করুন এবং securityPatchState.loadVulnerabilityReport(jsonString) কল করুন।
ডিভাইসের প্যাচ লেভেল পরীক্ষা করুন
ডিভাইসের প্যাচ লেভেলগুলো একযোগে জিজ্ঞাসা করুন:
কোটলিন
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
}
অপেক্ষাধীন সিস্টেম আপডেটগুলি পরীক্ষা করুন
অ্যাপগুলি বিশ্বস্ত অন-ডিভাইস আপডেট প্রদানকারীদের সাথে অ্যাসিঙ্ক্রোনাসভাবে যোগাযোগ করে অপেক্ষমান আপডেটের প্রাপ্যতা মূল্যায়ন করতে পারে, যার মধ্যে সবচেয়ে সাধারণ হলো গুগল প্লে সিস্টেম আপডেট এবং OEM OTA ক্লায়েন্ট।
-
fetchAvailableSecurityPatchLevel(): একটি নির্দিষ্ট কম্পোনেন্টের জন্য কার্যকর Available SPL রিটার্ন করে (কোনো নতুন আপডেট উপলব্ধ না থাকলে বর্তমান Device SPL-এ ফিরে যায়), যা Device SPL এবং Published SPL-এর সাথে তুলনা করার জন্য ব্যবহার করা যেতে পারে। -
queryAllAvailableUpdates(): ডিভাইসের সমস্ত বিশ্বস্ত আপডেট প্রদানকারীকে খুঁজে বের করে এবং ডেটার উৎস ও সতেজতা সম্পর্কিত মেটাডেটা সহ বিস্তারিতUpdateCheckResultপ্রদান করে।
উদাহরণ ১: ব্যবহারকারীদেরকে অপেক্ষমান আপডেট সম্পর্কে অবহিত করুন
নিরাপত্তা আপডেট উপলব্ধ হলে ব্যবহারকারীদের জানানোর জন্য fetchAvailableSecurityPatchLevel() ব্যবহার করুন (উদাহরণস্বরূপ, Settings.ACTION_SYSTEM_UPDATE_SETTINGS চালু করার মাধ্যমে):
কোটলিন
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
}
}
জাভা
জাভাতে, অ্যাসিঙ্ক্রোনাস মেথডগুলো একটি 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() ব্যবহার করুন:
কোটলিন
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) পরিদর্শন করতে, আপনার অ্যাপকে প্রথমে একটি OSV দুর্বলতা প্রতিবেদন সংগ্রহ এবং লোড করতে হবে, যেমনটি SecurityPatchState-এর API রেফারেন্সে বিস্তারিতভাবে বলা হয়েছে।
কোটলিন
// 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);
দুর্বলতার প্রতিবেদন লোড করুন
- লোকাল ক্যাশিং এবং ওয়ার্কম্যানেজার রিফ্রেশ: যেহেতু অ্যান্ড্রয়েড সিকিউরিটি বুলেটিনগুলো মাসিক ভিত্তিতে প্রকাশিত হয়, তাই ডাউনলোড করা JSON ফাইলটি ইন্টারনাল স্টোরেজে (
context.filesDir) ক্যাশ করুন এবংWorkManagerমাধ্যমে একটি পর্যায়ক্রমিক ব্যাকগ্রাউন্ড টাস্ক শিডিউল করুন (বিশেষত প্রতি ২৪-৪৮ ঘণ্টা পর পর), যা অ্যাপ চালু হওয়ার সাথে সাথে সিনক্রোনাসভাবে লোকাল ক্যাশ থেকে ডেটা রিড করে রিপোর্টটি রিফ্রেশ করবে। - ব্যাকগ্রাউন্ড থ্রেডিং: CVE রেকর্ড পার্স করার সময় প্রধান UI থ্রেডকে ব্লক করা এড়াতে, একটি ব্যাকগ্রাউন্ড থ্রেডে (কোটলিনে
Dispatchers.IOঅথবা জাভাতেExecutor)loadVulnerabilityReport()ফাংশনটি কল করুন। - কার্নেল LTS মূল্যায়ন:
getPatchedCves(COMPONENT_KERNEL, ...)কল করলে একটিIllegalArgumentExceptionথ্রো হয়, এবংareCvesPatched()কার্নেল CVE মূল্যায়ন করে না। এর পরিবর্তে, ডিভাইসের কার্নেল ভার্সনকেgetPublishedSecurityPatchLevel(COMPONENT_KERNEL)দ্বারা রিটার্ন করা Android Common Kernel LTS টার্গেটের সাথে তুলনা করে কার্নেলের নিরাপত্তা মূল্যায়ন করা হয়, যা এর মেজর এবং মাইনর ব্রাঞ্চের সাথে মেলে (যেমন, একটি5.15.140কার্নেলকে5.15.159টার্গেটের সাথে তুলনা করা)।
অতিরিক্ত সম্পদ
ডিভাইসের নিরাপত্তা অবস্থা সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত উৎসগুলো দেখুন:
ডকুমেন্টেশন
- অ্যান্ড্রয়েড নিরাপত্তা বুলেটিন
- মডুলার সিস্টেমের উপাদানসমূহ
- জেনেরিক কার্নেল ইমেজ (GKI)
- অতিরিক্ত নিরাপত্তা প্যাচ
- প্লে ইন্টিগ্রিটি এপিআই
- ওপেন সোর্স দুর্বলতা (OSV) ডাটাবেস
- নিরাপত্তা অবস্থা ১.১.০ রিলিজ নোট