এই পৃষ্ঠাটি আপনার Android ডিভাইসে ইনস্টল করা APK দাবিকারী মডেলে করা দাবির সাথে মিলে যায় তা নিশ্চিত করতে বিভিন্ন পদ্ধতির রূপরেখা দেয়৷ এর মধ্যে রয়েছে আপনার ডিভাইস থেকে প্রশ্নযুক্ত APK টেনে আনা, এর কোডের অখণ্ডতা পরীক্ষা করা এবং নিষ্কাশিত আর্টিফ্যাক্টে লগ ইনক্লুশন প্রুফ সম্পাদন করা।
যাচাইকরণ প্রক্রিয়া
হ্যাশ সমন্বিত একটি Merkle গাছের সাথে একটি স্বচ্ছতা লগ প্রয়োগ করা হয়। একটি লিফ নোডে ডেটা থাকে এবং একটি প্যারেন্ট নোডে এর বাচ্চাদের হ্যাশ থাকে।
মূলত, দুটি গণনা করা হয় মার্কেল গাছে স্বচ্ছতা লগের টেম্পার-স্পষ্ট সম্পত্তি যাচাই করার জন্য: অন্তর্ভুক্তি প্রমাণ এবং সামঞ্জস্য প্রমাণ। প্রাক্তনটি প্রমাণ করে যে লগটিতে একটি নির্দিষ্ট APK সংস্করণের সাথে সম্পর্কিত একটি এন্ট্রি রয়েছে৷ লগ এন্ট্রিতে একটি হ্যাশ রয়েছে, যা একটি JSON ওয়েব টোকেন (JWT) আকারে কোড স্বাক্ষর টোকেনের SHA256 ডাইজেস্ট, যা সংশ্লিষ্ট APK থেকে পাওয়া যেতে পারে। পরবর্তীটি প্রমাণ করে যে যখন গাছে নতুন এন্ট্রি যুক্ত করা হয়, তখন নতুন চেকপয়েন্টটি (ক্রিপ্টোগ্রাফিকভাবে) গাছের পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্যপূর্ণ।
একটি আচ্ছাদিত APK যাচাই করতে, একটি প্রত্যক্ষ চেকপয়েন্টের উপর ভিত্তি করে একটি অন্তর্ভুক্তি প্রমাণ পরীক্ষা করুন৷ মনে রাখবেন যে আমরা একটি প্রমিত সাক্ষী প্রোটোকল ব্যবহার করে একটি পাবলিক উইটনেস নেটওয়ার্কের সাথে এই লগটিকে সংহত করার পরিকল্পনা করছি৷ এটি একটি সাক্ষী চেকপয়েন্ট প্রদান করবে, যা লগের ধারাবাহিকতার নিশ্চয়তা দেয়।
আপনি যদি নিজেকে বোঝাতে চান যে আপনার ডিভাইসে আপনার কাছে থাকা APK দাবিদার মডেলে করা দাবির সাথে সঙ্গতিপূর্ণ, নীচের লেখাটি পড়ুন৷
অন্তর্ভুক্তি প্রমাণ
একজন Android ব্যবহারকারী প্রথমে APK এবং এর প্রাসঙ্গিক মেটাডেটা বের করে, তারপর প্রকাশিত চেকপয়েন্টে থাকা রুট হ্যাশের সাথে তাদের পুনঃগণনা করা রুট হ্যাশের তুলনা করে তাদের ডিভাইসে একটি কভার করা APK লগে আছে কিনা তা পরীক্ষা করতে পারেন। যদি তারা মিলে যায়, তাহলে অ্যান্ড্রয়েড ব্যবহারকারী থ্রেট মডেলে বর্ণিত কিছু সুরক্ষার বিষয়ে আশ্বস্ত হতে পারেন।
লগ ইন একটি APK অন্তর্ভুক্তি যাচাই কিভাবে
পূর্বে বর্ণিত হিসাবে, বর্তমানে কভার করা APKগুলির তালিকা ওভারভিউ পৃষ্ঠায় তালিকাভুক্ত পাওয়া যাবে।
যাচাই করার পূর্বশর্ত
আপনি এইমাত্র আপনার ডিভাইস থেকে যে APKটি বের করেছেন তা আমাদের দাবি অনুসারে যাচাই করার জন্য এগিয়ে যাওয়ার আগে, আপনাকে একটি নেটওয়ার্ক-সংযুক্ত কম্পিউটার থেকে ইনস্টল করার মাধ্যমে নিম্নলিখিত সরঞ্জামগুলির প্রয়োজন হবে৷
অ্যান্ড্রয়েড ডিবাগ ব্রিজ (ADB)
ADB
হল একটি টুল যা একটি Android ডিভাইসের সাথে যোগাযোগ করে, Android SDK Platform Tools ওয়েবসাইটে উপলব্ধ।
বান্ডিল টুল
bundletool
হল একটি টুল যা একটি Android App Bundle (AAB) তৈরি করতে ব্যবহৃত হয়। এটি একটি AAB কে APKগুলিতে রূপান্তর করতেও ব্যবহার করা যেতে পারে যা ডিভাইসে ইনস্টল করা যেতে পারে। এটি GitHub থেকে ডাউনলোড করা যেতে পারে।
এন্ড্রোগার্ড
Androguard হল টুলের একটি সংগ্রহ যা APK বিশ্লেষণ করতে ব্যবহৃত হয়। এটি Androguard ওয়েবসাইট থেকে ডাউনলোড এবং ইনস্টল করা যেতে পারে।
অন্তর্ভুক্তি প্রমাণ যাচাইকারী
এটি একটি Go মডিউল যা আমরা avb
নামে Android ওপেন সোর্স প্রজেক্ট (AOSP) এর মধ্যে একটি গিট রিপোজিটরিতে প্রকাশ করেছি। এটি Google সিস্টেম পরিষেবার APK স্বচ্ছতা লগ অনুসন্ধান করতে সক্ষম এবং লগটিতে একটি প্যাকেজ অন্তর্ভুক্ত কিনা তা আউটপুট করে৷ এটি কীভাবে ব্যবহার করা হয় তার একটি উদাহরণ পরবর্তী বিভাগে পাওয়া যাবে।
এই টুলটি ডাউনলোড করতে, আপনাকে প্রথমে avb
সংগ্রহস্থল ক্লোন করতে হবে।
computer:~$ git clone https://android.googlesource.com/platform/external/avb
যাচাইকারীর সোর্স কোডটি avb
সংগ্রহস্থলের মধ্যে tools/transparency/verify
পাওয়া যাবে।
যাচাইকরণের জন্য একটি পেলোড তৈরি করুন
আপনি আমাদের দাবি অনুযায়ী আপনার ডিভাইস থেকে যে APK বের করেছেন তা যাচাই করতে, আপনাকে অবশ্যই APK থেকে প্রাপ্ত তথ্য থেকে একটি লগ পেলোড তৈরি করতে হবে।
আপনি শুরু করার আগে, আপনার ডিভাইসে adb ডিবাগিং সক্ষম করে আপনার ডিভাইসে adb
ব্যবহার করা যেতে পারে তা নিশ্চিত করুন৷
তারপরে, আপনার ডিভাইসে APK কোথায় ইনস্টল করা আছে তা সনাক্ত করুন। এই গাইডের উদ্দেশ্যে, আমরা আমাদের কাজের উদাহরণ হিসাবে Android সিস্টেম কী যাচাইকারী APK (com.google.android.contactkeys) ব্যবহার করব।
computer:~$ adb shell pm list packages -f | grep contactkeys
package:/data/app/~~i5WYSO4PuAAv798-eHdM7A==/com.google.android.contactkeys-PQCKjnn7xDqjeVhcUDibBA==/base.apk=com.google.android.contactkeys
যদি আপনার ডিভাইসে অ্যান্ড্রয়েড সিস্টেম কী যাচাইকারী APK ইনস্টল করা থাকে, তাহলে উপরের কমান্ডটি আপনার ডিভাইসে কোথায় ইনস্টল করা আছে তা নির্দেশ করে এমন একটি পথ দেখাবে। অন্যথায়, আপনি কোন আউটপুট দেখতে পাবেন না ।
তারপর, আপনি এই কমান্ডটি ব্যবহার করে যে কম্পিউটারে কাজ করছেন তাতে আপনার অ্যান্ড্রয়েড ডিভাইস থেকে APK ডাউনলোড করুন (মনে রাখবেন যে আপনার ডিভাইসে প্রকৃত অবস্থান এবং APK ফাইলের নাম পরিবর্তিত হতে পারে):
computer:~$ mkdir -p /tmp/testdir && cd /tmp/testdir
computer:/tmp/testdir$ adb pull /data/app/~~i5WYSO4PuAAv798-eHdM7A==/com.google.android.contactkeys-PQCKjnn7xDqjeVhcUDibBA==/base.apk ./contactkeys_candidate.apk
আপনি যে APKটি ডাউনলোড করেছেন তার প্যাকেজ নামটি পেতে এবং এইভাবে যাচাই করতে, আপনাকে প্রথমে APK আনজিপ করতে হবে, কারণ একটি APK শেষ পর্যন্ত একটি বিশেষ ধরনের জিপ ফাইল।
computer:/tmp/testdir$ mkdir extracted && unzip contactkeys_candidate.apk -d extracted/
এই পদক্ষেপটি APK তৈরি করা সমস্ত ফাইল আনপ্যাক করে। প্যাকেজের নাম এবং সংস্করণটি APK-এর ম্যানিফেস্টে পাওয়া যাবে, যা সাধারণত AndroidManifest.xml
নামে একটি ফাইলে থাকে।
যাইহোক, প্রাপ্ত ম্যানিফেস্ট ফাইলটি একটি বাইনারি আকারে, যা মানুষের পাঠযোগ্য নয়। বাইনারি এক্সএমএলকে মানুষের পঠনযোগ্য আকারে রূপান্তর করার জন্য, আমরা androguard
স্যুট ( পূর্বশর্ত ) বিভাগ থেকে axml
টুল ব্যবহার করি।
computer:/tmp/testdir$ androguard axml extracted/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1413" android:versionName="1.48.688082145" android:compileSdkVersion="35" android:compileSdkVersionCodename="VanillaIceCream" android:requiredSplitTypes="" android:splitTypes="" package="com.google.android.contactkeys" platformBuildVersionCode="35" platformBuildVersionName="VanillaIceCream">
উপরের আউটপুট থেকে, আমরা এখন নিশ্চিত হতে পারি যে এই APK-এর প্যাকেজের নাম com.google.android.contactkeys
এবং সংস্করণ নম্বর (versionCode) হল 1413
।
এখন, আমরা APK-এর মধ্যে কোড ট্রান্সপারেন্সি স্বাক্ষর অনুসন্ধান করব। এটি code_transparency_signed.jwt
নামের একটি ফাইল হওয়া উচিত যেটি APK থেকে অন্যান্য এক্সট্র্যাক্ট করা ফাইলগুলির মধ্যে META-INF
ফোল্ডারের মধ্যে রয়েছে।
computer:/tmp/testdir$ sha256sum extracted/META-INF/code_transparency_signed.jwt
1779a2aee029112c2c9bfc9390b9678f3e5f4595b39705e8528dd522e8042f11 code_transparency_signed.jwt
এই হ্যাশ স্ট্রিংটির সাহায্যে, আমাদের কাছে এখন লগ কন্টেন্ট বিভাগে বর্ণিত বিন্যাস অনুসারে একটি লগ পেলোড একত্রিত করার জন্য প্রয়োজনীয় প্রতিটি তথ্য রয়েছে। এই উদাহরণে, একটি সংশ্লিষ্ট লগ পেলোড নিম্নলিখিত মত হওয়া উচিত:
1779a2aee029112c2c9bfc9390b9678f3e5f4595b39705e8528dd522e8042f11
SHA256(Signed Code Transparency JWT)
com.google.android.contactkeys
1143
প্যাকেজ সংস্করণের পরে নতুন লাইনের অক্ষরটিও নোট করুন।
আপনি একটি ফাইলে সামগ্রী সংরক্ষণ করতে পারেন, যেমন payload.txt
। পরে অন্তর্ভুক্তি প্রমাণ পরীক্ষা করার সময় এটি কাজে আসবে।
APK কোড স্বাক্ষরের সত্যতা যাচাই করুন
এখন, আমাদের APK-এর মধ্যে এমবেড করা কোড স্বাক্ষর টোকেনের সত্যতা যাচাই করা উচিত। এটি করার জন্য, আমরা bundletool
এবং কী জোড়ার সর্বজনীন কী ব্যবহার করি যা প্রথমে এটি স্বাক্ষর করতে ব্যবহৃত হয়েছে। সেগুলি সংশ্লিষ্ট APK-এর প্রতিটি বিভাগে প্রকাশিত হয়। আপনি signing_cert_pubkey.pem
নামের একটি ফাইলে সর্বজনীন কী শংসাপত্র (যেমন Android সিস্টেম কী যাচাইকারীর জন্য) সংরক্ষণ করেছেন বলে ধরে নিচ্ছেন, কোড স্বাক্ষর যাচাইকরণ সম্পাদন করতে নীচের নির্দেশিকা অনুসরণ করুন৷
প্রথমে, আপনাকে একটি জিপ সংরক্ষণাগার তৈরি করতে হবে এবং জিপ সংরক্ষণাগারে প্রার্থী APK যোগ করতে হবে।
computer:/tmp/testdir$ zip -u test.zip contactkeys_candidate.apk
zip warning: test.zip not found or empty
adding: contactkeys_candidate.apk (deflated 58%)
computer:/tmp/testdir$ file test.zip
test.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
প্রার্থীর APK-এর মধ্যে এমবেড করা কোড স্বাক্ষর প্রকাশিত হয়েছে কিনা তা যাচাই করতে আমরা এখন bundletool
এর check-transparency
কমান্ড ব্যবহার করতে প্রস্তুত।
computer:/tmp/testdir$ java -jar BUNDLETOOL_INSTALL_PATH/bundletool-all-version.jar check-transparency \
--mode=apk \
--apk-zip=test.zip \
--transparency-key-certificate=signing_cert_pubkey.pem
APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): D9 E1 73 5B 2A 39 51 27 3A 87 35 B7 66 9E F1 9E F5 3A F1 C1 27 5C BA 31 39 3C 18 40 8B 03 79 D0
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.
আপনার নিশ্চিত হওয়া উচিত যে উপরের কমান্ডের আউটপুটটি বলে যে কোড স্বচ্ছতা স্বাক্ষর এবং কোড স্বচ্ছতা উভয়ই যাচাই করা হয়েছে। যদি সেগুলি না হয়, উদাহরণস্বরূপ, আপনি যদি দেখেন যে Code transparency verification failed because the provided public key certificate does not match the transparency file
, তাহলে এর অর্থ প্রশ্নে থাকা APK-এর কোড অখণ্ডতা সম্ভাব্যভাবে আপস করা হতে পারে এবং আপনার APK কে বিশ্বাস করা উচিত নয় ৷ আপনি সঠিক পাবলিক কী শংসাপত্রের বিরুদ্ধে তাদের যাচাই করছেন কিনা তা দুবার চেক করতে ভুলবেন না। অন্যথায়, যদি অন্য সবকিছু চেক আউট হয়, তাহলে এটি বোঝায় যে আপনি যে APK যাচাই করছেন তার জন্য কোড স্বাক্ষরের সত্যতা যাচাই করা হয়েছে।
প্যাকেজ অন্তর্ভুক্তি যাচাই করা (অন্তর্ভুক্তি প্রমাণ)
আপনি আগে যে পেলোডটি তৈরি করেছেন তা ব্যবহার করে, আপনি এখন পরীক্ষা করতে প্রস্তুত যে প্রশ্নে থাকা প্যাকেজটি স্বচ্ছতা লগে অন্তর্ভুক্ত করা হয়েছে কিনা।
অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্টের মধ্যে avb
রিপোজিটরিতে একটি অন্তর্ভুক্তি প্রমাণ টুল প্রকাশিত হয়েছে। এটি চালানোর জন্য:
computer:external/avb/tools/transparency/verify$ PAYLOAD_PATH=PATH_TO_PAYLOAD_DIR/payload.txt
computer:external/avb/tools/transparency/verify$ go build cmd/verifier/verifier.go
computer:external/avb/tools/transparency/verify$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=google_system_apk
আপনার APK পেলোডটি স্বচ্ছতা লগে আছে কিনা তা যাচাই করতে যাচাইকারী সংশ্লিষ্ট চেকপয়েন্ট এবং লগ বিষয়বস্তু ( টাইল ডিরেক্টরিতে পাওয়া যায়) ব্যবহার করে, এটি সত্যই Google দ্বারা প্রকাশিত হয়েছে কিনা তা যাচাই করে৷
কমান্ডের আউটপুট stdout এ লেখা হয়:
-
OK. inclusion check success!
যদি প্যাকেজের কোড লগে অন্তর্ভুক্ত করা হয়, -
FAILURE
যদি তা না হয়।