پس‌کوچه
اپ‌های اندروید
برو به محتوای اصلی

فیلترشکن Line VPN بیش از آنکه سپر باشد، ریسک امنیتی است!

تیم پس‌کوچه با بررسی نسخه ۳.۷ اندروید Line VPN که تاکنون بیش از یک میلیون بار از گوگل‌پلی دانلود شده، شش ایراد امنیتی مهم در بخش‌های مختلف آن پیدا کرده است؛ از نحوه دریافت تنظیمات و احراز هویت سرور گرفته تا کلیدهای خصوصی و اطلاعات ورود ذخیره‌شده در خود اپلیکیشن. از این شش مورد در سطح بالا ارزیابی می‌شوند. مشکل اصلی و مشترک در تمام این موارد یک چیز است: اپلیکیشن در چند نقطه حساس نمی‌تواند با اطمینان تشخیص دهد آیا اطلاعاتی که دریافت می‌کند واقعاً از سرور مورد اعتماد آمده‌اند یا نه، و آیا هویتی که برای اتصال استفاده می‌کند فقط در اختیار یک کاربر مجاز قرار دارد یا خیر.

ارزیابی پس‌کوچه

سطح دسترسی (بر اساس گوگل‌پلی)

  • خواندن محتوای حافظه، کارت حافظه و امکان تغییر یا حذف فایل‌های شخصی
  • خواندن و دسترسی به حافظه سیستم
  • مشاهده اتصالات شبکه
  • دسترسی کامل به شبکه و اینترنت
  • اجرا در زمان روشن شدن دستگاه
  • جلوگیری از به خواب رفتن دستگاه

تیم پس‌کوچه با بررسی نسخه ۳.۷ اندروید Line VPN که تاکنون بیش از یک میلیون بار از گوگل‌پلی دانلود شده، شش ایراد امنیتی مهم در بخش‌های مختلف آن پیدا کرده است؛ از نحوه دریافت تنظیمات و احراز هویت سرور گرفته تا کلیدهای خصوصی و اطلاعات ورود ذخیره‌شده در خود اپلیکیشن.

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

دریافت تنظیمات وی‌پی‌ان بدون تضمین اصالت؛ بحرانی‌ترین مشکل

Line VPN در زمان شروع کار، از طریق چند درخواست HTTPS اطلاعات اولیه را از سرور می‌گیرد. پاسخ سرور حتی می‌تواند آدرس API اصلی برنامه را تغییر دهد تا کلاینت از آن پس ارتباطات خود را با آدرس جدید ادامه دهد.

مشکل اینجاست که برنامه برای این تنظیمات، یک سازوکار رمزنگاری‌شده مستقل برای اثبات اصالت ندارد. اطلاعات سرورها با روش AES-CBC رمز شده‌اند، اما کلید و اطلاعات لازم برای رمزگشایی از داده‌هایی ساخته می‌شوند که داخل خود فایل APK وجود دارند. این نوع رمزنگاری شاید محتوا را از مشاهده ساده پنهان کند، اما ثابت نمی‌کند که اطلاعات واقعاً توسط اپراتور اصلی VPN تولید شده‌اند.

موضوع مهم‌تر، فایل پروفایل OpenVPN است. سرور می‌تواند آدرس یک پروفایل را به برنامه بدهد و Line VPN آن را دانلود کرده و برای ایجاد اتصال استفاده کند، بدون اینکه قبل از استفاده، امضای دیجیتال معتبر یا هش مورد انتظار آن فایل را بررسی کند.

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

مثل این است که برنامه هر بار یک برگه راهنما دریافت کند که روی آن نوشته شده «از این مسیر برو»، اما نتواند مطمئن شود این برگه واقعاً توسط سازنده وی‌پی‌ان صادر شده است یا یک مهاجم. استفاده از روش AES-CBC فقط محرمانگی داده‌ها را تامین می‌کند و به‌تنهایی اثبات نمی‌کند که تنظیمات از سرور معتبر آمده‌اند یا دستکاری نشده‌اند. برای این کار، برنامه باید پیش از استفاده از تنظیمات یا پروفایل وی‌پی‌ان، اصالت و تمامیت آن‌ها را با امضای دیجیتال یا یک سازوکار احراز اصالت مستقل بررسی کند.

چه کسانی در خطر هستند؟

این مشکل لزوماً به این معنی نیست که همه کاربران Line VPN همین حالا در حال وصل شدن به یک سرور مخرب هستند. برای سوءاستفاده از این نقطه ضعف، مهاجم باید بتواند کنترل یکی از بخش‌های زیرساختِ توزیع تنظیمات را در دست بگیرد، ترافیک اینترنت کاربر را منحرف کند یا اپلیکیشن را مجبور کند تا یک پروفایل دستکاری‌شده را دانلود و دریافت کند.

اما اگر چنین اتفاقی بیفتد، پیامد آن بسیار جدی خواهد بود؛ چرا که مهاجم دقیقاً می‌تواند همان بخشی را تغییر دهد که کاربر برای حفاظت از ترافیک اینترنت خود به آن اعتماد کرده است. برای کاربرانی که در شبکه‌های پرریسک مثل ایران حضور دارند یا در محیط‌هایی هستند که احتمال دستکاری DNS و انحراف مسیر ارتباطی بالاست، اهمیت و خطر این نقطه ضعف به مراتب بیشتر می‌شود.

کلید خصوصی داخل اپلیکیشن که همه می‌توانند دانلود کنند

در داخل Line VPN یک پروفایل OpenVPN جایگزین قرار دارد که شامل یک گواهی کلاینت، کلید خصوصی RSA متناظر با آن و اطلاعات ثابت TLS است.

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

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

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

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

چه کسانی در خطر هستند؟

این آسیب‌پذیری به‌تنهایی لزوماً به معنی شنود مستقیم ترافیک کاربر نیست. خطر اصلی آن مربوط به جعل هویت کلاینت و سوءاستفاده از سرویس است.

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

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

نام کاربری، رمز عبور و توکن مشترک داخل اپ

علاوه بر کلید OpenVPN، بررسی‌ها یک نام کاربری و رمز عبور ثابت را هم در کد برنامه نشان‌ دادند که در درخواست ورود اولیه به API استفاده می‌شود. یک توکن ثابت دیگر هم برای مواقعی که توکن محلی وجود ندارد، در برنامه جاگذاری شده است. ممکن است این اطلاعات برای شناسایی خود اپلیکیشن طراحی شده باشند و نه حساب شخصی یک کاربر، اما این موضوع اصل مشکل را عوض نمی‌کند. هر مقداری که به شکل یک داده محرمانه داخل یک فایل عمومی APK قرار بگیرد، در عمل یک داده عمومی محسوب می‌شود.

حتی Obfuscation یا پیچیده کردن کد هم راه چاره نیست؛ چون خود برنامه برای استفاده از این اطلاعات در نهایت باید آن‌ها را خوانا و بازیابی کند و یک تحلیل‌گر هم می‌تواند دقیقاً همان مسیر را دنبال کند.

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

شدت اثر این مشکل کاملاً به میزان دسترسی‌هایی بستگی دارد که سرور به این اطلاعات می‌دهد.

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

پروتکل HTTPS فعال است، اما نام سرور بررسی نمی‌شود

پروتکل HTTPS صرفاً به معتبر بودن گواهی دیجیتال خلاصه نمی‌شود. اپلیکیشن یا کلاینت باید علاوه بر تایید اعتبار گواهی توسط یک مرجع مورد اعتماد، حتماً بررسی کند که آن گواهی دقیقاً برای همان دامنه‌ای صادر شده باشد که قصد اتصال به آن را دارد. در Line VPN این بررسی دوم کلاً غیرفعال شده است. دو کلاینت OkHttp فعال در برنامه از تنظیم ALLOW_ALL_HOSTNAME_VERIFIER استفاده می‌کنند. در نتیجه، برنامه گواهی معتبری را که حتی برای یک دامنه یا وب‌سایت کاملاً متفاوت صادر شده باشد، به عنوان گواهی مقصد اصلی خود قبول می‌کند.

به زبان ساده، تصور کنید هنگام تحویل یک بسته، مامور فقط بررسی کند که کارت شناسایی فرد تحویل‌گیرنده واقعی و معتبر است، اما اصلاً نگاه نکند که آیا نام نوشته‌شده روی کارت با نام روی بسته مطابقت دارد یا نه. گواهی ممکن است کاملاً معتبر باشد، اما برای یک سایت دیگر صادر شده باشد؛ مشکلی که Line VPN کاملاً آن را نادیده می‌گیرد.

چه کسانی در خطر هستند؟

یک مهاجم برای سوءاستفاده از این ضعف همچنان باید بتواند ترافیک کاربر را منحرف یا رهگیری کرده و گواهی ارائه دهد که دستگاه آن را معتبر بداند. بنابراین این آسیب‌پذیری به تنهایی به هر فردی در اینترنت اجازه شنود ترافیک را نمی‌دهد.

اما در شبکه‌ای که یک مرجع صدور گواهی مورد اعتماد روی دستگاه نصب شده باشد، یا مهاجم بتواند در مسیر ارتباطی قرار بگیرد و گواهی مناسب ارائه دهد، دیوارهای دفاعی که باید جلوی سرور جعلی را بگیرند به‌شدت تضعیف می‌شوند. این ایراد همچنین آسیب‌پذیری اول (دریافت تنظیمات بدون تضمین اصالت) را بسیار خطرناک‌تر می‌کند، چرا که جعل یا جایگزینی سرورِ توزیع‌کننده تنظیمات را ساده‌تر می‌سازد.

اپ مخرب روی گوشی می‌تواند سرویس SSH را کنترل کند

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

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

به زبان ساده، اپ‌های اندروید معمولا نباید بتوانند بدون اجازه وارد بخش‌های داخلی یکدیگر شوند. اما این سرویس مثل دری است که رو به بیرون باز مانده و یک اپلیکیشن دیگر می‌تواند به Line VPN بگوید: «یک اتصال SSH به این آدرس مشخص ایجاد کن.» به بیان دیگر، یک برنامه مخرب می‌تواند از قابلیت‌های شبکه‌ای Line VPN برای اهدافی استفاده کند که کاربر هرگز آن‌ها را انتخاب نکرده است.

چه کسانی در خطر هستند؟

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

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

سرویس Line VPN هویت سرور SSH را اصلا بررسی نمی‌کند

در مسیر ارتباطی فعال SSH، این برنامه تنظیمات StrictHostKeyChecking را روی مقدار no قرار داده است. در پروتکل SSH، کلید سرور نقش هویت دائمی و معتبر سرور را ایفا می‌کند. کلاینت موظف است بررسی کند کلیدی که سرور ارائه می‌دهد، دقیقاً همان کلید معتبری باشد که از قبل برای آن سرور شناخته شده است.

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

به زبان ساده، درست است که این روش ارتباط شما را رمزنگاریرمزگذاری می‌کند، اما رمزنگاریرمزگذاری به‌تنهایی کافی نیست. اگر ندانی فرد آن طرف خط دقیقاً چه کسی است، ممکن است یک مسیر کاملاً رمزنگاری‌شده را مستقیم با خود هکر برقرار کنی. Line VPN در این بخش عملاً می‌گوید: «هر سروری که آمد، بدون چون‌وجرا قبول کن.»

چه کسانی در خطر هستند؟

برای سوءاستفاده از این نقطه ضعف، مهاجم معمولاً باید بتواند مسیر شبکه، تنظیمات DNS یا مقصد SSH را دستکاری کند. اما وجود آسیب‌پذیری قبلی (مورد ۵) اوضاع را به مراتب بدتر می‌کند: اگر یک اپلیکیشن مخرب روی همان گوشی بتواند مقصد SSH را خودش تعیین کند، دیگر حتی نیازی به دور زدن یا دستکاری پیچیده شبکه هم ندارد.

در نتیجه، سرور جعلی خودش را به عنوان سرور واقعی جا می‌زند و پذیرفته می‌شود؛ سپس اطلاعات ورود کاربر یا برنامه را دریافت کرده و کنترل کاملِ سمت دیگر ارتباط (Port Forwarding) را به دست می‌گیرد.

سند حریم خصوصی اپلیکیشن

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

نتیجه‌گیری

این شش مورد وقتی کنار هم قرار می‌گیرند اهمیتشان بیشتر می‌شود. در هر وی‌پی‌ان، دو طرف باید یکدیگر را کاملا بشناسند و به هم اعتماد کنند: شما (اپلیکیشن) باید مطمئن باشید که دقیقاً به سرور اصلی وصل شده‌اید، و سرور هم باید مطمئن شود که شما یک کاربر واقعی و مجاز هستید. در Line VPN هر دو طرف این رابطه دچار مشکل شده‌اند.

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

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

اپ اندروید پس‌کوچه را دانلود کنید

دانلود
بازگشت به بالا