مجموع بررسی، بایتها را با یک مرجع تطبیق میدهد. امضا، یکپارچگی را به یک کلید پیوند میزند. هیچکدام بهتنهایی ثابت نمیکند که نرمافزار امن است.
پیش از نصب یک APK اندروید، سه بررسی را از هم جدا کنید: آیا این فایل با نسخهٔ منتشرشدهٔ مورد انتظار مطابقت دارد؟ آیا با کلید مورد انتظار امضا شده است؟ آیا سازندگان مستقل میتوانند آن را از کد منبع اعلامشده بازتولید کنند؟ مجموع بررسی SHA-256، امضای APK و ساخت بازتولیدپذیر به شکلهای متفاوتی به این پرسشها پاسخ میدهند.
هیچکدام بهتنهایی حکمی دربارهٔ بدافزار بودن یا نبودن برنامه نمیدهد. برنامهای که بهدرستی امضا شده و بازتولیدپذیر است، همچنان ممکن است یک نقص امنیتی یا رفتاری عمداً زیانبار داشته باشد.
هر روش بررسی چه چیزی را مشخص میکند؟
| بررسی | نتیجهٔ مفید | محدودیت مهم |
|---|---|---|
| هش SHA-256 فایل | بایتهای فایل شما با یک هش مشخص و قابلاعتماد مطابقت دارند | مهاجمی که هم فایل و هم هش را جایگزین کند، میتواند این مقایسه را بیاثر کند |
| بررسی امضای APK | امضای بسته با استفاده از گواهی امضای آن تأیید میشود | باید مشخص کنید کدام کلید امضا مورد انتظار است؛ معتبر بودن امضا بهتنهایی هویت ناشر را ثابت نمیکند |
| مقایسهٔ ساخت بازتولیدپذیر | خروجی ساخت مشخصشده را میتوان از ورودیهای مستند دوباره ایجاد کرد | تطابق کد منبع و فایل باینری ثابت نمیکند که کد منبع امن است |
| بازبینی امنیتی | مسائل مشخصی در طراحی یا پیادهسازی ارزیابی شدهاند | دامنه، نسخه، یافتهها و مسائل حلنشدهٔ آن اهمیت دارند |
اندروید برای نصب و بهروزرسانی، امضای APK را الزامی میداند. با Play App Signing، گوگل میتواند کلید امضای برنامه را مدیریت کند و از یک App Bundle، فایلهای APK مناسب توزیع بسازد. اینها سازوکارهای اعتماد مستند هستند، نه شاهدی بر اینکه هر واسطهای میتواند بسته را بیسروصدا تغییر دهد و در عین حال امضای معتبر آن را حفظ کند. راهنمای امضای برنامه در اندروید.
گام اول: خروجی ساخت دقیق را مشخص کنید
نسخهٔ برنامه، کانال انتشار، نام فایل و گونهٔ پلتفرمی مورد نظر را ثبت کنید. از صفحهٔ رسمی توزیع ناشر استفاده کنید، نه مجموع بررسیای که از همان پیام ناخواستهٔ حاوی APK کپی شده است.
یک APK که مستقیماً از ناشر دانلود شده، ممکن است با APK ساختهشده برای یک دستگاه توسط فروشگاه برنامه متفاوت باشد. تفاوت در نسخه، معماری، بستهبندی یا سازوکار امضا میتواند بهطور مشروع به هشهای متفاوت فایل منجر شود. پیش از اینکه عدم تطابق را نشانهٔ دستکاری بدانید، موارد همسان را با هم مقایسه کنید.
پرسش عملی این است: مقدار مورد انتظار از کجا آمده و چرا به آن منبع اعتماد دارم؟ محاسبهٔ آفلاین هش، مشکل اعتماد به یک هش مرجع دریافتشده از اینترنت را حل نمیکند.
گام دوم: SHA-256 را بهصورت محلی محاسبه کنید
بهجای messenger.apk، نام فایل دانلودشدهٔ خود را بگذارید. این نمونهها فایل را میخوانند؛ آن را نصب نمیکنند.
لینوکس:
sha256sum messenger.apk
macOS:
shasum -a 256 messenger.apk
خط فرمان ویندوز:
certutil -hashfile messenger.apk SHA256
کل مقدار هش را مقایسه کنید و فقط فاصلههای مربوط به نمایش و تفاوت حروف بزرگ و کوچک را نادیده بگیرید. به مقایسهٔ چند نویسهٔ اول یا آخر بسنده نکنید. هش مورد انتظار را همراه با اطلاعات انتشار و نسخه نگه دارید تا بتوانید مقایسه را تکرار کنید.
اگر مقدارها متفاوتاند، پیش از نصب متوقف شوید. خروجی ساخت و نسخه را بررسی کنید، در صورت لزوم فایل را دوباره از منبع قابلاعتماد دانلود کنید و دربارهٔ عدم تطابق توضیحدادهنشده از ناشر بپرسید. مجموع بررسی مورد انتظار را «اصلاح» نکنید تا با فایلی که اتفاقاً به دستتان رسیده تطبیق پیدا کند.
گام سوم: امضای APK را بررسی کنید
برای کاربرانی که Android SDK Build Tools را در اختیار دارند، مستندات apksigner گوگل روش بررسی امضا و نمایش اطلاعات گواهی را شرح میدهد:
apksigner verify --verbose --print-certs messenger.apk
بررسی باید برای پلتفرمهایی که APK پشتیبانی میکند موفق باشد. اطلاعات گواهی امضاکنندهٔ آن را با یک سابقهٔ انتشار قابلاعتماد یا زنجیرهٔ کلیدهای امضای مستندشده توسط ناشر مقایسه کنید. امضایی که با کلیدی ناشناخته ایجاد شده، صرفاً با واژهٔ «تأییدشده» قابلاعتماد نمیشود. تعویض مشروع کلید امضا نیز به شواهد نیاز دارد، نه دستور نادیده گرفتن عدم تطابق.
هش SHA-256 فایل APK و اثر انگشت SHA-256 گواهی امضای آن دو مقدار متفاوتاند. یکی را با دیگری مقایسه نکنید.
گام چهارم: بهدنبال شواهد ساخت بازتولیدپذیر باشید
ادعای ساخت بازتولیدپذیر به نسخهٔ مشخصی از کد منبع، محیط ساخت، دستورالعملها و خروجی ساخت هدف نیاز دارد. اشخاص مستقل باید بتوانند همان خروجی را دوباره بسازند و نتیجه را مقایسه کنند. تعریف پروژهٔ Reproducible Builds این ورودیها را بخشی از ادعا میداند.
برای یک پیامرسان، شواهد مفید انتشار شامل برچسب کد منبع، نسخههای تثبیتشدهٔ وابستگیها و زنجیرهٔ ابزار، دستورالعمل ساخت و نتایج مقایسههای مستقل است. بپرسید دقیقاً چه چیزی مقایسه شده است: یک خروجی بدون امضا، یک APK امضاشده یا بخشهای انتخابشدهای از محتوای بسته. صرفاً به این دلیل که کد منبع و هش فایل دانلود منتشر شدهاند، بازتولیدپذیری را نتیجه نگیرید.
بازتولیدپذیری، پیوند میان کد منبع بازبینیشده و کد توزیعشده را تقویت میکند. یک پیادهسازی بازبینینشده را به پروتکلی امن تبدیل نمیکند و ثابت نمیکند که گوشی در حال کار آلوده یا تحت نفوذ نیست.
جایگاه Proof Lab لیوارا کجاست؟
Proof Lab لیوارا امکان محاسبهٔ محلی هش APK و مقایسهٔ آن با هش منتشرشده را فراهم میکند. نمایشهای رمزنگاری آن دامنهای محدودتر از ممیزی کامل پروتکل پیامرسانی دارند. بررسی هش را برای هدف اعلامشدهٔ آن، در کنار اطلاعات نسخهٔ منتشرشدهٔ مورد انتظار و امضا، به کار ببرید؛ آن را مدرکی مستقل برای ساختهای بازتولیدپذیر یا نبود درِ پشتی تلقی نکنید.
مدل تهدید بهصراحت محدودیت حالتی را بیان میکند که هم APK و هم هش نمایشدادهشدهٔ آن قابل جایگزینی باشند. به همین دلیل، منشأ مقدار مرجع شما بهاندازهٔ اجرای صحیح محاسبه اهمیت دارد.
پرسشهای متداول
آیا تطابق مجموع بررسی ثابت میکند که یک APK امن است؟
خیر. با فرض قابلاعتماد بودن مرجع و برقرار بودن ویژگیهای امنیتی تابع هش، تطابق با هش مرجع را مشخص میکند. رفتار برنامه را ارزیابی نمیکند.
اگر مجموع بررسی مطابقت داشته باشد، بررسی امضا زائد است؟
خیر. این بررسیها شواهد متفاوتی ارائه میکنند. امضا، یکپارچگی بسته را به یک کلید پیوند میزند؛ هش فایل، دنبالهٔ مشخصی از بایتها را شناسایی میکند.
آیا فایل دانلودشده از فروشگاه باید با هش APK وبسایت مطابقت داشته باشد؟
فقط اگر قرار باشد هر دو همان خروجی ساخت باشند. ابتدا کانال انتشار، نسخه و بستهبندی را بررسی کنید. عدم تطابقِ بدون توضیح نیازمند بررسی است، نه اتهامزنی خودکار یا تأیید خودکار.
آیا این بررسیها میتوانند جاسوسافزاری را که از قبل روی گوشی من است شناسایی کنند؟
خیر. آنها یک فایلِ قابل نصب را ارزیابی میکنند، نه تکتک اجزای وضعیت اجرایی فعلی دستگاه را.



