محدود کننده نرخ

اندروید از داده‌های کاربر، شامل حافظه رمزگذاری‌شده با اعتبارنامه و کلیدهای Keystore مرتبط با احراز هویت، با استفاده از فاکتورهای دانش صفحه قفل (LSKF) پیکربندی‌شده توسط کاربر مانند پین‌ها، الگوها و رمزهای عبور محافظت می‌کند. LSKFها معمولاً مقادیری با آنتروپی کم مانند پین‌های ۴ یا ۶ رقمی هستند، بنابراین محافظت در برابر حملات جستجوی فراگیر (brute-force) ضروری است.

اندروید از محدودکننده‌های سرعت Trusted Execution Environment (TEE) یا Secure Element (SE) برای کاهش سرعت استفاده می‌کند و با توجه به تلاش‌های کافی، مهاجمانی را که حملات brute-force روی LSKFها انجام می‌دهند، مسدود می‌کند. CDD 9.11 حداقل الزامات امنیتی و توصیه‌هایی را برای محدودکننده‌های سرعت LSKF مشخص می‌کند. اندروید 16 QPR2 و بالاتر، سیاست‌های محدودکننده سرعت بسیار قوی‌تری را نسبت به نسخه‌های پایین‌تر اندروید پیاده‌سازی می‌کند. برای جزئیات بیشتر، به سیاست محدودکننده سرعت پیش‌فرض قوی‌تر در اندروید 16 QPR2 و بالاتر مراجعه کنید.

باز کردن قفل داده‌های کاربر محافظت‌شده با LSKFها

LockSettingsService مدیریت ذخیره‌سازی و تأیید LSKFها را بر عهده دارد. هر کاربر در هر زمان فقط یک LSKF فعال دارد. اختصاص یک LSKF جدید، LSKF قبلی را نامعتبر می‌کند و سیاست محدودسازی نرخ را از ابتدا آغاز می‌کند.

یک محدودکننده سرعت اصلی در TEE یا SE، یکی از Gatekeeper یا Weaver، محدودکننده سرعت را برای LSKF فعال اعمال می‌کند. LockSettingsService در صورت وجود پیاده‌سازی، Weaver را ترجیح می‌دهد.

داده‌های محافظت‌شده کاربر تنها زمانی قفل‌گشایی می‌شوند که LSKF صحیح به محدودکننده نرخ اولیه ارائه شود. اگر LSKF نادرست باشد، محدودکننده نرخ یک شمارنده خطا را افزایش می‌دهد و پس از شمارش خطاهای خاص، یک مهلت زمانی اعمال می‌کند. در طول مهلت زمانی، همه حدس‌ها را رد می‌کند و مهلت زمانی باقی‌مانده را ارائه می‌دهد.

سیاست محدودکننده نرخ پیش‌فرض قوی‌تر در اندروید ۱۶ QPR2 و بالاتر

CDD 9.11 در اندروید ۶ و بالاتر، محدودسازی نرخ LSKF را الزامی می‌کند. از نظر تاریخی، سیاست محدودسازی نرخ مورد نیاز نسبتاً سهل‌گیرانه بوده است. برای مثال، پیاده‌سازی که حداقل الزامات اندروید ۱۶ را برآورده می‌کند، امکان حدس زدن تا ۱۰ حدس در دقیقه اول، ۲۰ حدس در ۶ دقیقه، ۵۰ حدس در ۲۵ دقیقه، ۱۱۰ حدس در ۲۴ ساعت و ۱۸۰۰ حدس در ۵ سال را فراهم می‌کند.

اگرچه این سیاست برای LSKFهایی که به طور یکنواخت و تصادفی انتخاب می‌شوند، به طور معقولی امن است، اما در عمل کاربران LSKFها را به طور یکنواخت و تصادفی انتخاب نمی‌کنند. برخی از LSKFها بسیار بیشتر از بقیه رخ می‌دهند. مهاجمان می‌توانند با امتحان کردن LSKFها به ترتیب کاهش فرکانس، به میزان موفقیت قابل توجهی دست یابند.

برای مثال، مطالعه‌ای با عنوان «این پین را می‌توان به راحتی حدس زد» نشان داد که نرخ موفقیت برای حدس زدن پین‌های دنیای واقعی پس از ۱۰۰ بار حدس زدن ۱۶.۲٪ و برای الگوها ۳۵.۵٪ است. مهاجمانی که اطلاعات خاص کاربر مانند تاریخ تولد را می‌دانند، می‌توانند به نرخ موفقیت حتی بالاتری دست یابند.

بنابراین، اندروید ۱۶ QPR2 و بالاتر، سیاست محدودکننده نرخ LSKF پیش‌فرض قوی‌تری را ارائه می‌دهد. این سیاست اجازه می‌دهد تا ۶ حدس در دقیقه اول، ۷ حدس در ۶ دقیقه، ۸ حدس در ۲۵ دقیقه، ۱۲ حدس در ۲۴ ساعت و ۱۹ حدس در ۵ سال زده شود. پس از ۲۰ حدس نادرست، هیچ حدس دیگری مجاز نیست. برنامه کامل زمان‌بندی در جدول زیر نشان داده شده است. این برنامه ممکن است در نسخه‌های بعدی اندروید تغییر کند.

تعداد حدس‌های نادرست تایم اوت بعد از حدس نادرست
0 قابل اجرا نیست
۱-۴ ۰ ثانیه
۵ ۱ دقیقه
۶ ۵ دقیقه
۷ ۱۵ دقیقه
۸ ۳۰ دقیقه
۹ ۹۰ دقیقه
۱۰ ۴ ساعت
۱۱ ۱۲ ساعت
۱۲ ۳۶ ساعت
۱۳ ۴ روز
۱۴ ۱۳ روز
۱۵ ۴۱ روز
۱۶ ۱۲۳ روز
۱۷ ۱ سال
۱۸ ۳ سال
۱۹ ۹ سال
۲۰+ حدس و گمان بیشتر مجاز نیست

محدودکننده‌های نرخ به‌روزرسانی‌شده

اندروید ۱۶ QPR2 و بالاتر شامل پیاده‌سازی‌های به‌روزرسانی‌شده‌ی Gatekeeper و Weaver است که سیاست محدودکننده‌ی نرخ را در جدول اعمال می‌کنند.

محدودکننده نرخ نرم‌افزاری

اندروید ۱۶ QPR2 و بالاتر شامل یک محدودکننده نرخ ثانویه اختیاری، SoftwareRateLimiter. این محدودکننده در سرور سیستم پیاده‌سازی شده و به دستگاه‌ها اجازه می‌دهد تا در صورت عدم امکان به‌روزرسانی TEE یا SE، سیاست محدودکننده نرخ قوی‌تری ارائه دهند.

SoftwareRateLimiter در حالت اجباری از طریق مقدار پیکربندی config_softwareLskfRateLimiterEnforcing پیکربندی کنید. در حالت اجباری، SoftwareRateLimiter سیاست محدودکننده نرخ خود را همزمان با محدودکننده نرخ اولیه اعمال می‌کند. برای یک تعداد حدس نادرست مشخص، زمان انقضا طولانی‌تر از زمانی است که محدودکننده نرخ اولیه و SoftwareRateLimiter لازم دارند. در حالت غیر اجباری، SoftwareRateLimiter تمام درخواست‌های تأیید را بدون اعمال سیاست محدودکننده نرخ ثانویه به محدودکننده نرخ اولیه ارسال می‌کند.

تشخیص حدس تکراری

برای بهبود قابلیت استفاده و فعال کردن استفاده از یک سیاست محدودکننده نرخ قوی‌تر، اندروید ۱۶ QPR2 و بالاتر از تشخیص حدس تکراری پشتیبانی می‌کند. در صورت فعال بودن، کاربران برای وارد کردن چندین بار LSKF نادرست جریمه نمی‌شوند.

کاربران مجاز گاهی اوقات چندین بار LSKF نادرست یکسانی را اشتباه وارد می‌کنند. اگر این به عنوان حدس‌های چندگانه در نظر گرفته شود، منجر به وقفه‌های زمانی غیرضروری می‌شود. مهاجمان توانمند بیش از یک بار برای یک LSKF خاص تلاش نمی‌کنند. سیاستی که حدس‌های تکراری را در نظر نمی‌گیرد، قابلیت استفاده از ورودی LSKF را برای کاربران مجاز بهبود می‌بخشد، بدون اینکه حدس زدن LSKFها را برای مهاجمان توانمند آسان‌تر کند و امکان اجرای سیاست‌های محدودکننده نرخ قوی‌تر را فراهم می‌کند. احتمال کمتری وجود دارد که کاربران مجاز حتی با وقفه زمانی مواجه شوند، زیرا کاربر باید به جای 5 حدس نادرست شامل حدس‌های تکراری، 5 حدس نادرست منحصر به فرد وارد کند.

در دستگاه‌هایی با اندروید ۱۶ QPR2 و بالاتر، پیاده‌سازی Weaver و SoftwareRateLimiter که در حالت اجرا پیکربندی شده‌اند، حدس‌های تکراری قبل از ارسال به Weaver شناسایی و رد می‌شوند. چنین ردهایی تعداد حدس‌های نادرست را افزایش نمی‌دهند. حداکثر ۵ حدس نادرست منحصر به فرد در حافظه ردیابی می‌شوند. اگر ردیاب پر باشد، جدیدترین حدس برای ایجاد فضا حذف می‌شود. تمام حدس‌های ردیابی شده ۵ دقیقه پس از ارائه آخرین حدس نادرست ردیابی نشده حذف می‌شوند.

Gatekeeper حدس‌های اشتباه را از سایر خطاهای تأیید جدا نمی‌کند، بنابراین SoftwareRateLimiter وقتی Gatekeeper محدودکننده نرخ اصلی است، از تشخیص حدس تکراری پشتیبانی نمی‌کند.

پیاده‌سازی‌کنندگان ویور می‌توانند پشتیبانی از تشخیص حدس تکراری را در پیاده‌سازی ویور انتخاب کنند.