আপনার Android ডিভাইসে ইনস্টল করা APK বা APEX ফাইলটি দাবিদারের মডেলের সাথে মিলছে কিনা তা কীভাবে যাচাই করবেন তা এই পৃষ্ঠায় বলা হয়েছে। এই প্রসেসে আপনার ডিভাইস থেকে APK নিয়ে এক্সট্র্যাক্ট করা আর্টিফ্যাক্টে লগ ইনক্লুশন প্রুফ পারফর্ম করা হয়।
যাচাইকরণ পদ্ধতি
হ্যাশ সহ একটি মারকেল ট্রি সহ ট্রান্সপারেন্সি লগ প্রয়োগ করা হয়। লিফ নোডে ডেটা থাকে এবং পেরেন্ট নোডে তার চাইল্ডের হ্যাশ থাকে।
দুটি মৌলিক গণনা ট্রান্সপারেন্সি লগের টেম্পার-এভিডেন্ট প্রপার্টি যাচাই করে: ইনক্লুশন প্রুফ এবং কনসিস্টেন্সি প্রুফ। অন্তর্ভুক্তি প্রমাণ নিশ্চিত করে যে লগটিতে একটি নির্দিষ্ট APK ভার্সনের এন্ট্রি রয়েছে। এই লগ এন্ট্রিতে একটি হ্যাশ থাকে, এটি হল ডিভাইসে ইনস্টল করা APK ফাইলের SHA256 ডাইজেস্ট। কনসিস্টেন্সি প্রুফ নিশ্চিত করে যে নতুন এন্ট্রি যোগ করা হলে, নতুন চেকপয়েন্ট ক্রিপ্টোগ্রাফিকভাবে ট্রির আগের ভার্সনের সাথে সামঞ্জস্যপূর্ণ থাকে (অথবা ট্রির সাথে কোনও কারচুপি করা হয়নি)। এই গাইডে আমরা ইনক্লুশন প্রুফ কম্পিউট করার প্রসেসের উপর ফোকাস করি, যেখানে লেটেস্ট চেকপয়েন্টের বিরুদ্ধে ধারাবাহিকতা প্রুফ ক্রমাগত পারফর্ম করার জন্য উইটনেসদের উপর নির্ভর করা হয়।
কভার করা APK যাচাই করতে, প্রত্যক্ষ করা চেকপয়েন্টের বিরুদ্ধে ইনক্লুশন প্রুফ সম্পূর্ণ করুন। মনে রাখবেন, আমরা একটি স্ট্যান্ডার্ড সাক্ষ্য প্রোটোকল ব্যবহার করে এই লগটিকে একটি সর্বজনীন সাক্ষ্য নেটওয়ার্কের সাথে ইন্টিগ্রেট করার পরিকল্পনা করছি। এই ইন্টিগ্রেশন, লগ যাতে সামঞ্জস্যপূর্ণ থাকে তা নিশ্চিত করে, সাক্ষ্য দেওয়া চেকপয়েন্ট প্রদান করবে।
আপনার ডিভাইসে Google অ্যাপগুলি দাবিদার মডেলে করা দাবির সাথে সামঞ্জস্যপূর্ণ কিনা তা যাচাই করতে, নিচের ধাপগুলি অনুসরণ করুন।
অন্তর্ভুক্তির প্রমাণ
আপনার ডিভাইসে কভার করা APK লগ ফাইলে আছে কিনা তা যাচাই করতে, APK এক্সট্র্যাক্ট করুন, এর হ্যাশ গণনা করুন এবং প্রকাশিত চেকপয়েন্টে সেই হ্যাশ আছে কিনা তা চেক করতে ইনক্লুশন প্রুফ ব্যবহার করুন। সফলভাবে অন্তর্ভুক্তির প্রমাণ জমা দিলে, তা থ্রেট মডেলে বর্ণিত ঝুঁকি থেকে সুরক্ষা প্রদান করে এবং নিশ্চিত করে যে অ্যাপটি একটি বৈধ Google অ্যাপ।
লগে APK অন্তর্ভুক্তকরণ কীভাবে যাচাই করবেন
ফার্স্ট-পার্টি Google অ্যাপ বলে দাবি করা যেকোনও অ্যাপ এই লগের মাধ্যমে যাচাই করা যাবে।
যাচাইকরণের পূর্বশর্ত
আর্টিফ্যাক্ট (ফার্মওয়্যার বা APK) দাবি অনুযায়ী আছে কিনা তা যাচাই করার আগে, নেটওয়ার্কের সাথে কানেক্ট করা কম্পিউটারে নিম্নলিখিত টুলগুলি উপলভ্য আছে কিনা তা নিশ্চিত করুন। যাচাইকরণের লক্ষ্যের উপর নির্ভর করে, আপনার সবকটি নাও লাগতে পারে।
Golang
যাচাইকরণ টুল Go-তে লেখা হয়েছে। এটি তৈরি করতে, Go সাইট থেকে Go 1.24 বা তার পরবর্তী ভার্সন ইনস্টল করুন।
Android Debug Bridge (ADB)
ADB হল এমন একটি টুল যা Android ডিভাইসের সাথে যোগাযোগ করে ছবি পরীক্ষা করে বা
APK এক্সট্র্যাক্ট করে, এটি Android SDK প্ল্যাটফর্ম টুল ওয়েবসাইটে উপলভ্য।
ইনক্লুশন প্রুফ যাচাইকারী
ইনক্লুশন প্রুফ ভেরিফায়ার হল একটি Go মডিউল যা ট্রান্সপারেন্সি লগ কোয়েরি করে
এবং কোনও আর্টিফ্যাক্ট লগে অন্তর্ভুক্ত আছে কিনা তা আউটপুট করে।
এটি android-binary-transparency GitHub রিপোজিটরিতে প্রকাশ করা হয়েছে, যা
https://github.com/android/android-binary-transparency/tree/main লিঙ্কে রয়েছে
AOSP avb রিপোজিটরি ক্লোন করতে:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
android-binary-transparency GitHub রিপোজিটরি ক্লোন করতে:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android অ্যাসেট প্যাকেজিং টুল) হল একটি বিল্ড টুল যা Android অ্যাপের রিসোর্স কম্পাইল ও প্যাকেজ করতে ব্যবহার করা হয়। এটি Android SDK Build Tools ভার্সন 26.0.2 এবং তার পরবর্তী ভার্সনে স্ট্যান্ডঅ্যালোন টুল হিসেবে পাওয়া যাবে।
bundletool
bundletool হল Android App Bundle (AAB) তৈরি করার টুল। এছাড়াও, এটি APK কোড
সিগনেচার যাচাই করতে ব্যবহার করা যেতে পারে।
এটি GitHub থেকে ডাউনলোড করা যাবে।
wget বা curl
wget এবং curl হল এমন টুল যা ইন্টারনেট থেকে ফাইল ডাউনলোড করতে বা ফিরিয়ে আনতে ব্যবহার করা যেতে পারে। এইসব টুলের মধ্যে যেকোনও একটি ইনস্টল করা আছে কিনা তা নিশ্চিত করুন, কারণ যাচাইকরণ স্ক্রিপ্ট এগুলির উপর নির্ভর করতে পারে।
Avbtool
avbtool
ফ্যাক্টরি ইমেজের VBMeta ডাইজেস্ট গণনা করতে এবং
বাইনারি যাচাই করতে ব্যবহার করা হয়।
avb রিপোজিটরি ক্লোন করার পরে (ইনক্লুশন প্রুফ যাচাইকারী
বিভাগে যেমন দেখানো হয়েছে), ক্লোন করা avb ডিরেক্টরির মধ্যে avbtool.py পাওয়া যাবে।
আপনার $PATH এনভায়রনমেন্ট ভেরিয়েবলে এই ডিরেক্টরি যোগ করা উচিত।
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
হল একটি Python স্ক্রিপ্ট যা Pixel-এর
bootloader.img-এ স্বতন্ত্র কম্পোনেন্ট আনপ্যাক করতে ব্যবহৃত হয়।
আপনি APK যাচাই করলে এটির প্রয়োজন নেই।
এই টুলটি গুরুত্বপূর্ণ কারণ এটি avbtool.py-কে যাচাইকরণের জন্য প্রয়োজনীয়
ছবি খুঁজে পেতে সাহায্য করে।
fbpacktool-এর জন্য Python 3.6 বা তার পরবর্তী ভার্সন এবং
PyYAML প্যাকেজ প্রয়োজন
(যেমন, python3 -m pip install pyyaml)।
এই টুল ব্যবহার করতে, আপনাকে নিম্নলিখিত ছয়টি পাইথন স্ক্রিপ্ট ডাউনলোড করতে হবে
সেই ডিরেক্টরিতে যেখানে আপনার avbtool.py থাকে,
fbpacktool.py এক্সিকিউটেবল করতে হবে,
এবং fbpacktool.py-এর জন্য fbpacktool নামের একটি সিমলিঙ্ক তৈরি করতে হবে।
আপনার কাছে wget থাকলে:
computer:dir_to_avbtool$ wget https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
আপনার কাছে curl থাকলে:
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
OpenSSL
openssl যাচাইকরণ ওয়ার্কফ্লোতে টার্মিনাল ব্যবহার করে বিভিন্ন ক্রিপ্টোগ্রাফিক অপারেশন পারফর্ম করতে সাহায্য করে। আপনার সিস্টেমে এটি ইনস্টল করা আছে কিনা তা ভালোভাবে দেখে নিন। আপনি নিম্নলিখিত কমান্ড চালিয়ে টার্মিনালে চেক করতে পারেন এবং নিশ্চিত করুন যে ফিরে আসা ফলাফল খালি নেই:
computer:~$ which openssl
/usr/bin/openssl
যাচাইকরণের জন্য পেলোড তৈরি করা
আপনার এক্সট্র্যাক্ট করা APK যাচাই করতে, আপনাকে APK থেকে প্রাপ্ত তথ্য ব্যবহার করে একটি লগ পেলোড তৈরি করতে হবে।
শুরু করার আগে, adb কানেকশনের অনুমতি দিতে আপনার ডিভাইসে USB ডিবাগিং চালু করুন।
এরপর, আপনার ডিভাইসে ইনস্টল করা APK খুঁজুন। এই নির্দেশিকায় একটি কার্যকরী উদাহরণ হিসেবে
Google Play পরিষেবা APK (com.google.android.gms) ব্যবহার করা হয়েছে।
adb shell pm path com.google.android.gms
আপনি নিম্নলিখিত আউটপুটের মতো আউটপুট দেখতে পাবেন:
computer:~$ adb shell pm path com.google.android.gms
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/base.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_CronetDynamite_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_DynamiteLoader_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_DynamiteModulesA_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_DynamiteModulesC_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_GoogleCertificates_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_MapsDynamite_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_MeasurementDynamite_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_config.en.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_config.xxhdpi.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_maps_core_dynamite_ondemand.apk
এই আউটপুট থেকে বোঝা যায় যে একটি বেস APK ও একাধিক স্প্লিট APK আপনার ডিভাইসে com.google.android.gms-এর জন্য ইনস্টল করা আছে।
আপনার ডিভাইসের কনফিগারেশনের উপর নির্ভর করে স্প্লিট APK-এর সঠিক সংখ্যা পরিবর্তিত হয়।
প্রতিটি স্প্লিট APK-এর প্যাকেজের নাম ও ভার্সন কোড বেস APK-এর মতোই হয়।
নিম্নলিখিত কমান্ড ব্যবহার করে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারে তালিকাভুক্ত APK ডাউনলোড করুন (মনে রাখবেন যে আপনার আসল ফাইল পাথ আলাদা হতে পারে):
mkdir -p /tmp/testdir/gms && cd /tmp/testdir/gms && \
adb shell pm path com.google.android.gms | cut -d':' -f2 | tr -d '\r' | xargs -n1 adb pull
ডাউনলোড করা APK-এর প্যাকেজের নাম ও ভার্সন যাচাই করতে, আপনাকে
সেটির ম্যানিফেস্ট (AndroidManifest.xml) চেক করতে হবে।
APK-এর মধ্যে থাকা ম্যানিফেস্ট বাইনারি ফর্ম্যাটে থাকে, তাই APK থেকে সরাসরি
তথ্য এক্সট্র্যাক্ট ও পড়তে aapt2 টুল
(পূর্বশর্ত ধাপে ইনস্টল করা) ব্যবহার করুন:
computer:/tmp/testdir/gms$ aapt2 dump badging ./base.apk
package: name='com.google.android.gms' versionCode='260834035' versionName='26.08.34 (260400-876566425)' platformBuildVersionName='Baklava' platformBuildVersionCode='36' compileSdkVersion='36' compileSdkVersionCodename='Baklava'
minSdkVersion:'35'
targetSdkVersion:'36'
...
আপনার ডিভাইসে ইনস্টল করা সব স্প্লিট APK-এর হিসেব না পাওয়া পর্যন্ত প্রাসঙ্গিক তথ্য পেতে আপনাকে এই ধাপটি পুনরাবৃত্তি করতে হবে।
আউটপুট থেকে কনফার্ম করা হয় যে APK-এর প্যাকেজের নাম হল com.google.android.gms এবং এর
ভার্সন নম্বর (versionCode) হল 260834035।
এরপরে, প্রতিটি APK-র ক্রিপ্টোগ্রাফিক হ্যাশ গণনা করুন:
computer:/tmp/testdir/gms$ sha256sum *.apk
66aa2d7b9752cdd61065b55c8e16739d8367fa18a0f1c8c84122369f86958f1a base.apk
c20754aee886cc55a9de91ee15c623c59d94ad22b7e435a1a48afc43cf1a106c split_config.en.apk
68c09b63a1262e0d34020c139bc77deff3c32bd2b01177abac64790a62fb3be6 split_config.xxhdpi.apk
cd746820c27babd855fa5daea6fabcdf7b44abf3060bc547adc4219212410af0 split_CronetDynamite_installtime.apk
512ee48b60fdb0787a17f84a7dc448fdbf885b2b86a9cb50525d4c22d561b0f1 split_DynamiteLoader_installtime.apk
9e0c74bdc75c50c80d4e2e580a7eda6b8391423ab1161645f41ec6cadc07d678 split_DynamiteModulesA_installtime.apk
955780ac01f59b98bd9be12968f3824ad71b762620f7bf223c569c1a6ab7056c split_DynamiteModulesC_installtime.apk
34c4a2e32d31554d55fc1519e2cfc3ed5027a090fb29b54cfc99f42d1da43bc5 split_GoogleCertificates_installtime.apk
475e18dde92472cde9d8300c082b6dc269613db03398bcd9d1987dff3e68f7b5 split_maps_core_dynamite_ondemand.apk
f83faf40f08bc13f4879302e01c08c863ca2304b4b4e7c9eaf8cd1e869bb6573 split_MapsDynamite_installtime.apk
ec6d854ddda6cd1ba2ba7af2d9fdf4f28c5c78be8713c64521c785429296738c split_MeasurementDynamite_installtime.apk
লগ পেলোড তৈরি করার জন্য প্রয়োজনীয় সব তথ্য এখন আপনার কাছে আছে, এগুলি লগ কন্টেন্ট বিভাগে যেভাবে বর্ণনা করা হয়েছে সেইভাবে ফর্ম্যাট করা হয়েছে। ফলাফল থেকে একটি হ্যাশকে উদাহরণ হিসেবে বেছে নিলে (আপনাকে প্রতিটি স্প্লিট APK-র হ্যাশ যাচাই করতে হবে), লগ পেলোডটি এইরকম দেখতে হবে:
66aa2d7b9752cdd61065b55c8e16739d8367fa18a0f1c8c84122369f86958f1a
SHA256(APK)
com.google.android.gms
260834035
ফাইলের শেষে নতুন লাইন ক্যারেক্টার যোগ করতে ভুলবেন না। এই কন্টেন্ট
payload.txt-এর মতো কোনও ফাইলে সেভ করুন, যাতে পরে verifier টুলের সাথে ব্যবহার করা যায়।
প্যাকেজ অন্তর্ভুক্ত করা হয়েছে কিনা তা যাচাই করা (অন্তর্ভুক্তির প্রমাণ)
আপনার পেলোড তৈরি হয়ে গেলে, প্যাকেজটি ট্রান্সপারেন্সি লগে
অন্তর্ভুক্ত আছে কিনা তা চেক করতে পারবেন। আপনি আগে ক্লোন করেছেন এমন
android-binary-transparency রিপোজিটরি থেকে ইনক্লুশন প্রুফ টুল তৈরি করুন:
go build cmd/verifier/verifier.go
এর ফলে সেই ডিরেক্টরিতে verifier নামের একটি এক্সিকিউটেবল ফাইল তৈরি হবে।
আপনার পেলোডের পাথ প্রদান করে এবং লগ টাইপ নির্দিষ্ট করে ভেরিফায়ার চালান:
computer:android-binary-transparency$ PAYLOAD_PATH=PATH_TO_PAYLOAD_DIR/payload.txt
computer:android-binary-transparency$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=google_1p_apk
যাচাইকারী চেকপয়েন্ট ও লগ কন্টেন্ট (টাইল ডিরেক্টরি থেকে) ব্যবহার করে চেক করে যে আপনার APK পেলোড ট্রান্সপারেন্সি লগে আছে কিনা, এটি Google-এর মাধ্যমে প্রকাশ করা হয়েছে কিনা তা কনফার্ম করে।
কমান্ডটি stderr-এ আউটপুট দেয়:
OK. inclusion check success!যদি প্যাকেজটি লগে অন্তর্ভুক্ত থাকে।- না থাকলে,
FAILURE।
কোনও ডিভাইসে সব প্যাকেজ অটোমেটিক যাচাই করা
আপনার ডিভাইসে আগে থেকে ইনস্টল করা থাকতে পারে এমন Google অ্যাপের সংখ্যা বিবেচনা করে, প্রতিটি অ্যাপের তালিকা তৈরি করা এবং আলাদাভাবে অন্তর্ভুক্তির প্রমাণ দেখানো ক্লান্তিকর হতে পারে।
আমরা Uraniborg নামের আরেকটি অটোমেটিক টুল প্রদান করি যা আপনার ডিভাইসে বর্তমানে ইনস্টল করা
সব প্যাকেজ শনাক্ত ও পরিমাপ করতে পারে।
এটি সরাসরি verifier টুলে আউটপুট ফিড করে,
যার ফলে আপনি একটি ধাপেই নিজের ডিভাইসে
সব অ্যাপের স্বচ্ছতা ডিসকভার ও যাচাই করতে পারেন।
এই অটোমেটেড ওয়ার্কফ্লো ব্যবহার করতে, আপনার Android ডিভাইস ADB-এর মাধ্যমে আপনার
কম্পিউটারের সাথে কানেক্ট করা আছে কিনা তা নিশ্চিত করুন। Uraniborg সোর্স কোডও android-binary-transparency রিপোজিটরিতে
অন্তর্ভুক্ত করা হয়েছে।
scripts/python ডিরেক্টরিতে থাকা automate_observation.py স্ক্রিপ্ট চালান:
python3 automate_observation.py --pull-all-apks --perform_inclusion_proof_check --verifier_path <path_to_verifier_executable>
স্ক্রিপ্ট সম্পূর্ণ হয়ে গেলে, এই ধরনের আউটপুট দেখতে পাবেন:
INFO:automate_observation.py:main(858): SUCCESS! Hubble was successfully deployed and executed on connected device ABCDEFGHN01234.
INFO:automate_observation.py:main(860): Hubble output files can be found at: /Users/user/home/src/android-binary-transparency/uraniborg/scripts/python/results/google/lynx/lynx:16/BP4A.260105.004.E1/14587043:user/release-keys/001
স্ক্রিপ্টে উল্লেখ করা আউটপুট ডিরেক্টরিতে নেভিগেট করুন।
এর মধ্যে, packages_with_inclusion_proof_signal.txt নামের ফাইলটি খুঁজে দেখুন।
এই ফাইলে ইনস্টল করা প্রতিটি প্যাকেজের তালিকা থাকে এবং এর সাথে
inclusion_proof_verified ফিল্ড true বা false হিসেবে সেট করা থাকে।
true ভ্যালু থেকে বোঝা যায় যে প্যাকেজটি ক্রিপ্টোগ্রাফিকভাবে
স্বচ্ছতা লগের সাথে যাচাই করা হয়েছে, যা নিশ্চিত করে যে এটি
লগের দাবির সাথে সামঞ্জস্যপূর্ণ।