اندروید

گوگل یک ویژگی امنیتی جدید را به آخرین کرنل‌های لینوکس برای دستگاه‌های اندروید اضافه کرده است تا از آن در برابر حملات استفاده مجدد کد(۱) محافظت کند که به مهاجمان اجازه می‌دهد تا با بهره‌برداری از آسیب‌پذیری‌های ربودن کنترل-جریان(۲) به اجرای کد دلخواه دسترسی داشته باشند.

در حملات استفاده مجدد کد، مهاجمان از اشکالات فیزیکی حافظه (سرریز بافر(۳)، نوع سردرگمی(۴)، یا سرریز عدد صحیح(۵)) بهره‌برداری می‌کنند تا نشانگرهای(۶) کد ذخیره‌شده در حافظه را کنترل و کد موجود را بازنویسی کنند به‌طوری‌که جریان کنترل انتخاب آن‌ها را هدایت کرده و موجب یک اقدام موذی شوند.

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

در تلاش برای جلوگیری از این حمله، گوگل در حال حاضر پشتیبانی از یکپارچگی کنترل جریانِ(۷) LLVM را به کرنل اندروید به‌عنوان یک اقدام برای شناسایی رفتارهای غیرمعمول مهاجمین که سعی در دخالت یا تغییر جریان کنترل یک برنامه را دارند، افزوده است[۱].

اساساً یکپارچگی کنترل جریان یک سیاست امنیتی است که اجرای نرم‌افزار را در زمان اجرا تضمین می‌کند که از طریق یک کامپایلر در زمان کامپایل و از یک گراف کنترل جریان از پیش تعیین‌شده عبور کند.

Sami Tolvanen، مهندس نرم‌افزار امنیت اندروید، گفت: “CFI تلاش می‌کند تا از این حملات با اضافه کردن بررسی‌های اضافی برای تأیید اینکه جریان کنترل کرنل در یک گراف precomputed باقی‌ بماند، جلوگیری کند.

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

بررسی‌های بیشتر اضافه‌شده توسط CFI اطمینان حاصل خواهد داد که برنامه‌ها با رفتار غیرمعمول به‌صورت خودکار از چرخه خارج شوند.

یکپارچگی کنترل-جریان به کرنل ۴٫۹ و ۴٫۱۴ اضافه شده است.

به گفته گوگل، Google Pixel 3 در اوایل این هفته راه‌اندازی شده است و اولین دستگاه اندرویدی است که دارای یکپارچگی سیستم حفاظت از کدهای جدید کرنل است.

بااین‌حال، پشتیبانی CFI در حال حاضر به کرنل نسخه‌های ۴٫۹ و ۴٫۱۴ اضافه شده است[۲]، و گوگل به همه فروشندگان دستگاه‌های اندرویدی توصیه می‌کند تا این ویژگی را در کرنل دستگاه‌های arm64 جدید خود که در حال اجرای اندروید ۹ هستند به‌منظور حفاظت بیشتر در برابر آسیب‌پذیری کرنل، فعال کنند.

Tolvenen به این نتیجه رسید که: “CFI LLVM از شاخه‌های غیرمستقیم در برابر مهاجمان محافظت می‌کند که قادر به دسترسی به یک اشاره‌گر عملکرد ذخیره‌شده در حافظه کرنل می‌باشند. این باعث می‌شود روش معمول برای بهره‌برداری از کرنل مشکل‌تر شود.”

گوگل همچنین قصد دارد از آدرس‌های بازگشت تابع(۸) نسبت به حملات مشابه از طریق افزودن Stack Call Shadow Call LLVM در نسخه کامپایلر در پیش رو، محافظت کند.

منابع

[۱]https://android-developers.googleblog.com/2018/10/control-flow-integrity-in-android-kernel.html

[۲] https://source.android.com/devices/tech/debug/kcfi

[۳] https://thehackernews.com/2018/10/android-linux-kernel-cfi.html


(۱) code reuse attacks
(۲) control-flow
(۳) buffer overflows
(۴) type confusion
(۵) integer overflows
(۶) pointers
(۷) Control Flow Integrity (CFI)
(۸) function return addresses