دستگاه‌های اندرویدی در برابر نوعی حمله جدید آسیب‌پذیر هستند که می‌تواند در کمتر از ۳۰ ثانیه، کدهای احراز هویت دومرحله‌ای، داده‌های موقعیت مکانی و سایر اطلاعات خصوصی را به‌صورت مخفیانه سرقت کند.

این حمله که توسط گروهی از پژوهشگران دانشگاهی طراحی شده و «پیکس‌نپینگ» (Pixnapping) نام گرفته است، زمانی انجام می‌شود که قربانی ابتدا یک برنامه مخرب را روی گوشی یا تبلت اندرویدی خود نصب کند. این برنامه که به هیچ مجوز سیستمی نیاز ندارد، می‌تواند داده‌هایی را که هر اپلیکیشن دیگر روی صفحه‌نمایش نشان می‌دهد، به‌طور مؤثر بخواند. پیکس‌نپینگ تاکنون روی گوشی‌های گوگل پیکسل و سامسونگ گلکسی S25 آزمایش شده و با کمی تغییر می‌تواند روی سایر مدل‌ها نیز عمل کند. شرکت گوگل در ماه گذشته به‌روزرسانی‌هایی برای کاهش خطر ارائه کرده، اما پژوهشگران اعلام کردند نسخه اصلاح‌شده این حمله حتی پس از نصب این وصله امنیتی نیز قابل اجراست.

شبیه به گرفتن اسکرین‌شات

هشدار: هکرها می‌توانند کدهای 2FA و پیام‌های خصوصی کاربران اندروید را بدزدند - دیجینوی

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

پژوهشگران نوشتند: «هر آنچه در هنگام باز بودن برنامه هدف قابل مشاهده باشد، می‌تواند توسط اپلیکیشن مخرب از طریق پیکس‌نپینگ سرقت شود. پیام‌های گفت‌وگو، کدهای احراز هویت دومرحله‌ای، ایمیل‌ها و سایر داده‌ها همگی آسیب‌پذیر هستند، زیرا روی صفحه نمایش داده می‌شوند. با این حال، اگر اطلاعاتی محرمانه در برنامه وجود داشته باشد که هرگز روی صفحه ظاهر نشود، مانند کلید رمزگذاری ذخیره‌شده، پیکس‌نپینگ قادر به دسترسی به آن نخواهد بود.»

این نوع جدید از حملات یادآور حمله معروف GPU.zip در سال ۲۰۲۳ است که به وب‌سایت‌های مخرب اجازه می‌داد نام‌های کاربری، گذرواژه‌ها و سایر داده‌های حساس تصویری نمایش‌داده‌شده توسط وب‌سایت‌های دیگر را بخوانند. این حمله از طریق بهره‌برداری از کانال‌های جانبی موجود در پردازنده‌های گرافیکی تمامی تولیدکنندگان بزرگ انجام می‌شد. آسیب‌پذیری‌هایی که GPU.zip از آن‌ها استفاده می‌کرد تاکنون اصلاح نشده‌اند و در عوض، مرورگرها با محدود کردن قابلیت باز کردن iframe (عنصری در HTML که به وب‌سایت‌ها اجازه می‌دهد محتوای سایت دیگری را درون خود جاسازی کنند) جلوی اجرای آن را گرفتند.

پیکس‌نپینگ نیز دقیقاً همان کانال جانبی را هدف قرار می‌دهد، یعنی مدت‌زمان دقیقی که برای رندر شدن هر فریم روی صفحه صرف می‌شود. آلن لینگ‌هائو وانگ، نویسنده اصلی مقاله پژوهشی با عنوان Pixnapping: Bringing Pixel Stealing out of the Stone Age، در گفت‌وگویی توضیح داد: «این روش به برنامه‌های مخرب اجازه می‌دهد تا اطلاعات حساس نمایش‌داده‌شده توسط سایر اپلیکیشن‌ها یا حتی وب‌سایت‌ها را به‌صورت پیکسل‌به‌پیکسل سرقت کنند. از نظر مفهومی، می‌توان گفت اپلیکیشن مخرب همانند گرفتن اسکرین‌شات از محتوای تصویری عمل می‌کند که در حالت عادی نباید به آن دسترسی داشته باشد. حملات ما صرفاً با اندازه‌گیری زمان رندر هر فریم در عملیات گرافیکی مشخص می‌کنند که آیا پیکسل سفید است یا غیرسفید.»

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

گزارش‌های مربوط به جزئیات فنی پیکس‌نپینگ و کدهای اثبات مفهومی آن در وب‌سایت رسمی پژوهش منتشر شده است. این کشف، اهمیت کنترل دقیق‌تر دسترسی گرافیکی و پایش رفتار غیرمعمول اپلیکیشن‌ها را در سیستم‌عامل اندروید دوچندان کرده است.

حمله پیکس‌نپینگ در سه مرحله

هشدار: هکرها می‌توانند کدهای 2FA و پیام‌های خصوصی کاربران اندروید را بدزدند - دیجینوی

این حمله در سه گام اصلی انجام می‌شود. در نخستین مرحله، برنامه مخرب از رابط‌های برنامه‌نویسی (API) سیستم‌عامل اندروید استفاده می‌کند تا تماس‌هایی را به اپلیکیشنی که مهاجم قصد جاسوسی از آن را دارد، ارسال نماید. این تماس‌ها همچنین می‌توانند برای اسکن دستگاه آلوده و شناسایی اپلیکیشن‌های نصب‌شده مورد نظر استفاده شوند. علاوه بر این، تماس‌های یادشده قادرند اپلیکیشن هدف را وادار کنند تا داده‌های خاصی را که به آن‌ها دسترسی دارد، نمایش دهد؛ برای نمونه، یک رشته گفت‌وگو در یک برنامه پیام‌رسان یا یک کد تأیید دو مرحله‌ای (2FA) برای سایتی مشخص. این فراخوانی موجب می‌شود داده‌ها به خط لوله رندرینگ اندروید ارسال شوند؛ سیستمی که پیکسل‌های هر برنامه را پردازش کرده تا بر روی صفحه‌نمایش به تصویر درآیند. فراخوانی‌های خاص اندرویدی مورد استفاده شامل فعالیت‌ها، مقاصد و وظایف هستند.

در گام دوم، پیکس‌نپینگ عملیات گرافیکی را بر روی پیکسل‌های منفردی که اپلیکیشن هدف به خط لوله رندرینگ فرستاده است، انجام می‌دهد. این عملیات مختصات پیکسل‌هایی را که باید سرقت شوند، انتخاب کرده و شروع به بررسی می‌کند که آیا رنگ آن مختصات سفید است یا غیر سفید، یا به شکل کلی‌تر، آیا رنگ آن برابر با c است یا غیر از c (برای رنگ دلخواه c).

به گفته وانگ: «فرض کنید مهاجم می‌خواهد پیکسلی را سرقت کند که بخشی از ناحیه‌ای از صفحه است که یکی از کاراکترهای کد تأیید دو مرحله‌ای (2FA) در برنامه Google Authenticator در آن رندر می‌شود. این پیکسل یا سفید است (در صورتی که چیزی در آن ناحیه نمایش داده نشده باشد) یا غیر سفید (اگر بخشی از عدد 2FA در آنجا رندر شده باشد). به‌صورت مفهومی، مهاجم قصد دارد عملیاتی گرافیکی ایجاد کند که زمان رندر آن طولانی باشد اگر پیکسل هدف غیر سفید است، و کوتاه باشد اگر سفید است. برنامه مخرب این کار را با باز کردن فعالیت‌ها یا پنجره‌های مخرب در جلوی اپلیکیشن قربانی که در گام اول باز شده بود، انجام می‌دهد.»

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

در واقع مهاجم چیزی شفاف را در مقابل اپلیکیشن هدف رندر می‌کند و سپس با بهره‌گیری از یک حمله زمان‌بندی مبتنی بر فشرده‌سازی داده‌های گرافیکی GPU، سعی می‌کند رنگ پیکسل‌ها را حدس بزند. این حمله صرفا دستور «به من پیکسل‌های برنامه دیگر را که اکنون روی صفحه است بده» نیست. به همین دلیل، انجام آن زمان‌بر بوده و ممکن است آن‌قدر کند باشد که نتواند در بازه ۳۰ ثانیه‌ای برنامه Google Authenticator جای گیرد.

ریکاردو پاکانلا، یکی از نویسندگان مقاله پژوهشی، این حمله را با جزئیات بیشتری شرح داده است:

  • گام ۱: برنامه مخرب اپلیکیشن هدف را فراخوانی می‌کند تا محتوای بصری حساسی را وادار به رندر شدن کند.
  • گام ۲: برنامه مخرب از APIهای اندروید استفاده می‌کند تا بر روی محتوای بصری رندر شده «ترسیم» کند و موجب ایجاد یک کانال جانبی شود (در این مورد GPU.zip) که بر اساس رنگ پیکسل‌های منفرد مرحله ۱ نشت اطلاعات دارد (برای مثال فقط در صورتی فعال می‌شود که رنگ پیکسل برابر c باشد).
  • گام ۳: برنامه مخرب آثار جانبی مرحله ۲ را رصد می‌کند تا استنباط نماید که آیا رنگ آن پیکسل‌ها برابر c بوده یا خیر، و این کار را به‌صورت پیکسل‌به‌پیکسل انجام می‌دهد.گام‌های ۲ و ۳ را می‌توان بسته به کانال جانبی که مهاجم قصد بهره‌برداری از آن را دارد به شیوه‌های متفاوتی پیاده‌سازی کرد. در نمونه‌های اجرایی روی گوشی‌های گوگل پیکسل و سامسونگ گلکسی، از کانال جانبی GPU.zip بهره برده شد. هنگام استفاده از GPU.zip، اندازه‌گیری زمان رندر در هر فریم برای تشخیص اینکه رنگ هر پیکسل برابر با c است یا خیر کافی بود. پیاده‌سازی‌های آتی حمله ممکن است از کانال‌های جانبی دیگری استفاده کنند که در آن‌ها کنترل مدیریت حافظه و دسترسی به تایمرهای دقیق ضرروی باشد. در آن صورت نیز Pixnapping همچنان کار خواهد کرد و مهاجم صرفاً باید نحوه اجرای گام‌های ۲ و ۳ را تغییر دهد.

مدت زمان مورد نیاز برای اجرای این حمله به متغیرهای متعددی بستگی دارد، از جمله تعداد مختصاتی که باید اندازه‌گیری شوند. در بعضی موارد، هیچ ضرب‌الاجلی سختی برای به‌دست‌آوردن اطلاعات مورد نظر مهاجم وجود ندارد. اما در سایر موقعیت‌ها، مانند سرقت کد 2FA، هر ثانیه اهمیت دارد، چون هر کدام تنها به مدت ۳۰ ثانیه معتبر هستند. در مقاله، پژوهشگران توضیح دادند:

برای برآورده ساختن مهلت سخت ۳۰ ثانیه‌ای برای حمله، ما همچنین تعداد نمونه‌ها برای هر پیکسل هدف را به ۱۶ کاهش دادیم (در مقایسه با ۳۴ یا ۶۴ که در حملات قبلی استفاده شده بود) و زمان بیکار بین نشت پیکسل‌ها را از ۱.۵ ثانیه به ۷۰ میلی‌ثانیه پایین آوردیم. برای اطمینان از اینکه مهاجم تمام ۳۰ ثانیه را برای نشت کد 2FA در اختیار دارد، پیاده‌سازی ما منتظر شروع یک بازه زمانی جهانی ۳۰ ثانیه‌ای جدید می‌ماند که با استفاده از ساعت سیستم تعیین می‌شود.

ما از حمله سرتاسری خود برای فاش‌ساختن ۱۰۰ کد 2FA متفاوت از Google Authenticator روی هر یک از گوشی‌های گوگل پیکسل خود استفاده کردیم. حمله ما در بازیابی کامل کد ۶ رقمی 2FA به ترتیب در ۷۳٪، ۵۳٪، ۲۹٪ و ۵۳٪ از آزمایش‌ها روی پیکسل ۶، پیکسل ۷، پیکسل ۸ و پیکسل ۹ موفق بود. میانگین زمان بازیابی هر کد 2FA به ترتیب ۱۴.۳، ۲۵.۸، ۲۴.۹ و ۲۵.۳ ثانیه برای پیکسل ۶، پیکسل ۷، پیکسل ۸ و پیکسل ۹ بود. ما به دلیل نویز قابل‌توجه، قادر به نشت کدهای 2FA ظرف ۳۰ ثانیه با پیاده‌سازی خود روی دستگاه سامسونگ گلکسی S25 نبودیم. بررسی دقیق‌تر چگونگی تنظیم حمله برای کارکرد روی این دستگاه را به کارهای آینده موکول می‌کنیم.

در واکنش به این موضوع، نماینده‌ای از گوگل گفته است: «ما یک وصله برای CVE-2025-48561 در بولتن امنیتی اندروید ماه سپتامبر منتشر کردیم که تا حدودی این رفتار را کاهش می‌دهد. ما یک وصله اضافی برای این آسیب‌پذیری در بولتن امنیتی اندروید ماه دسامبر منتشر خواهیم کرد. تاکنون هیچ شواهدی از بهره‌برداری آن در دنیای واقعی مشاهده نکرده‌ایم.»

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