فهرست مطالب
با گسترش روزافزون استفاده از دستگاههای موبایل و اپلیکیشنهای کاربردی در زندگی روزمره و کسبوکارها، امنیت این برنامهها به یکی از حیاتیترین دغدغهها تبدیل شده است. حملات سایبری به اپلیکیشنهای موبایل میتواند منجر به سرقت اطلاعات حساس کاربران، خسارات مالی، و آسیب جدی به اعتبار شرکتها شود. از این رو، تست امنیت اپلیکیشن موبایل نه یک گزینه، بلکه یک ضرورت انکارناپذیر است. در این مقاله به بررسی جامع تست امنیت اپلیکیشن موبایل، با تمرکز بر آسیبپذیریهای رایج در دو پلتفرم اصلی، اندروید و iOS، بر اساس راهنماییهای پروژه OWASP Mobile خواهیم پرداخت.
OWASP (Open Web Application Security Project) یک جامعه آنلاین آزاد است که منابع ارزشمندی را برای کمک به سازمانها در توسعه، خرید و نگهداری نرمافزارهای قابل اعتماد و امن ارائه میدهد. پروژه OWASP Mobile به طور خاص بر امنیت اپلیکیشنهای موبایل تمرکز دارد و راهنماییها و ابزارهایی را برای شناسایی و کاهش ریسکهای امنیتی در این حوزه فراهم میکند. راهنمای تست امنیت اپلیکیشن موبایل OWASP (MASTG – Mobile Application Security Testing Guide) یک مرجع جامع برای متخصصان امنیت، توسعهدهندگان و تسترهاست که روشها و تکنیکهای مختلف تست امنیت موبایل را شرح میدهد.
چرا تست امنیت اپلیکیشن موبایل اهمیت دارد؟
اپلیکیشنهای موبایل به دلیل دسترسی به اطلاعات حساس کاربران (مانند موقعیت مکانی، مخاطبین، تصاویر و اطلاعات مالی) و همچنین اتصال مداوم به اینترنت، اهداف جذابی برای مهاجمان هستند. عدم رعایت اصول امنیتی در فرآیند توسعه میتواند دربهایی را برای نفوذ باز کند. تست امنیت به شناسایی این نقاط ضعف قبل از اینکه توسط مهاجمان exploit شوند، کمک میکند. اهمیت تست امنیت موبایل در موارد زیر خلاصه میشود:
- حفاظت از دادههای حساس: جلوگیری از سرقت اطلاعات شخصی، مالی و سازمانی کاربران.
- رعایت مقررات امنیتی: بسیاری از صنایع دارای مقررات سختگیرانهای در زمینه حفاظت از دادهها هستند که تست امنیت برای انطباق با آنها ضروری است.
- حفظ اعتماد کاربر: نقض امنیت میتواند به سرعت منجر به از دست رفتن اعتماد کاربران و آسیب به اعتبار برند شود.
- جلوگیری از خسارات مالی: هزینههای ناشی از نقض امنیت، شامل بازیابی اطلاعات، جریمههای قانونی و از دست دادن کسبوکار میتواند بسیار سنگین باشد.
- بهبود کیفیت نرمافزار: فرآیند تست امنیت به شناسایی اشکالات و بهبود کلی کیفیت و پایداری اپلیکیشن نیز کمک میکند.
راهنمای OWASP Mobile Security (MAS)
پروژه OWASP Mobile Application Security (MAS) دو خروجی اصلی دارد:
- OWASP Mobile Application Security Verification Standard (MASVS): این یک استاندارد امنیتی برای اپلیکیشنهای موبایل است که الزامات امنیتی را در سطوح مختلف تشریح میکند. MASVS به توسعهدهندگان کمک میکند تا اپلیکیشنهای امنتری بسازند و به تسترها امکان میدهد تا ارزیابیهای جامعتری انجام دهند.
- OWASP Mobile Application Security Testing Guide (MASTG): این راهنما متدولوژیها، تکنیکها و ابزارهای لازم برای تست امنیت اپلیکیشنهای موبایل را شرح میدهد. MASTG شامل مجموعهای جامع از موارد تست (Test Cases) است که پوشش کاملی از جنبههای مختلف امنیتی را تضمین میکند.
تمرکز ما در این مقاله بر روی آسیبپذیریهای رایج و روشهای تست مرتبط با آنهاست که مستقیماً به MASTG و MASVS مربوط میشوند.
آسیبپذیریهای رایج در اپلیکیشنهای موبایل (بر اساس OWASP Mobile Top 10)
لیست OWASP Mobile Top 10 رایجترین و بحرانیترین آسیبپذیریهای امنیتی در اپلیکیشنهای موبایل را بر اساس دادهها و گزارشهای جمعآوری شده از منابع مختلف شناسایی و اولویتبندی میکند. نسخه ۲۰۲۴ این لیست شامل موارد زیر است:
- M1: Improper Credential Usage (استفاده نادرست از اعتبارنامهها): این آسیبپذیری شامل ذخیرهسازی ناامن اعتبارنامهها (مانند رمزهای عبور Hardcoded یا ذخیره شده در Plain Text)، استفاده از سیاستهای رمز عبور ضعیف، و عدم پیادهسازی صحیح مکانیسمهای احراز هویت قوی (مانند احراز هویت چند عاملی) است.
- تاثیر: دسترسی غیرمجاز به حسابهای کاربری و سیستمها، سرقت اطلاعات، جعل هویت.
- پلتفرمها: اندروید و iOS.
- M2: Inadequate Supply Chain Security (امنیت ناکافی زنجیره تامین): استفاده از کتابخانهها، SDKها یا کامپوننتهای شخص ثالث که دارای آسیبپذیریهای شناخته شده هستند یا به درستی بررسی امنیتی نشدهاند، میتواند کل اپلیکیشن را در معرض خطر قرار دهد.
- تاثیر: تزریق کد مخرب، دسترسی غیرمجاز، نقض دادهها.
- پلتفرمها: اندروید و iOS.
- M3: Insecure Authentication/Authorization (احراز هویت/مجوزدهی ناامن): نقص در فرآیندهای تایید هویت کاربر (Authentication) و تعیین سطح دسترسی (Authorization) میتواند به مهاجم اجازه دهد تا به عنوان یک کاربر مجاز عمل کند یا به دادهها و عملکردهایی دسترسی پیدا کند که نباید.
- تاثیر: دسترسی غیرمجاز، دور زدن کنترلهای دسترسی، نقض حریم خصوصی.
- پلتفرمها: اندروید و iOS.
- M4: Insufficient Input/Output Validation (اعتبارسنجی ورودی/خروجی ناکافی): عدم پاکسازی (Sanitization) یا اعتبارسنجی مناسب ورودیهای کاربر میتواند منجر به حملاتی مانند تزریق (Injection) یا اجرای اسکریپتهای مخرب شود. عدم اعتبارسنجی خروجی نیز میتواند به نشت اطلاعات منجر گردد.
- تاثیر: حملات تزریق (SQL Injection, Command Injection)، XSS، نشت اطلاعات حساس.
- پلتفرمها: اندروید و iOS.
- M5: Insecure Communication (ارتباطات ناامن): ارسال اطلاعات حساس از طریق کانالهای ارتباطی غیر رمزگذاری شده یا استفاده از پروتکلها و الگوریتمهای رمزنگاری ضعیف میتواند به مهاجمان اجازه دهد تا ترافیک شبکه را شنود کرده و دادهها را به سرقت ببرند یا تغییر دهند.
- تاثیر: شنود اطلاعات (Man-in-the-Middle)، نقض محرمانگی و یکپارچگی دادهها.
- پلتفرمها: اندروید و iOS.
- M6: Inadequate Privacy Controls (کنترلهای حریم خصوصی ناکافی): عدم مدیریت صحیح اطلاعات شخصی قابل شناسایی (PII) کاربران، جمعآوری بیش از حد اطلاعات، یا عدم ارائه کنترلهای لازم به کاربر برای مدیریت حریم خصوصی خود.
- تاثیر: نقض حریم خصوصی، جریمههای قانونی (مانند GDPR).
- پلتفرمها: اندروید و iOS.
- M7: Insufficient Binary Protections (حفاظت ناکافی از باینری برنامه): ضعف در محافظت از کد باینری اپلیکیشن در برابر مهندسی معکوس، دستکاری و تحلیل استاتیک میتواند مهاجمان را قادر سازد تا منطق برنامه را درک کرده، آسیبپذیریها را پیدا کنند یا عملکرد برنامه را تغییر دهند.
- تاثیر: سرقت مالکیت معنوی، دور زدن کنترلهای امنیتی، انتشار نسخههای دستکاری شده.
- پلتفرمها: اندروید و iOS (هرچند مهندسی معکوس در اندروید به دلیل Dalvik/ART و فایلهای APK معمولاً آسانتر است).
- M8: Security Misconfiguration (پیکربندی امنیتی اشتباه): تنظیمات پیشفرض ناامن، پیکربندی نادرست سرویسهای Backend، یا فعال بودن ویژگیهای غیرضروری که میتوانند مورد سوءاستفاده قرار گیرند.
- تاثیر: دسترسی غیرمجاز به منابع، نشت اطلاعات.
- پلتفرمها: اندروید و iOS.
- M9: Insecure Data Storage (ذخیرهسازی ناامن دادهها): ذخیره اطلاعات حساس (مانند اطلاعات لاگین، اطلاعات مالی، یا دادههای سلامت) به صورت رمزگذاری نشده یا در مکانهای ناامن بر روی دستگاه موبایل.
- تاثیر: سرقت اطلاعات حساس، دسترسی مهاجم به دادههای کاربر در صورت دسترسی فیزیکی به دستگاه یا آلودگی به بدافزار.
- پلتفرمها: اندروید و iOS.
- M10: Insufficient Cryptography (رمزنگاری ناکافی): استفاده از الگوریتمهای رمزنگاری ضعیف یا منسوخ، مدیریت کلیدهای رمزنگاری به صورت ناامن، یا پیادهسازی نادرست پروتکلهای رمزنگاری که میتواند منجر به شکستن رمز یا دستکاری دادهها شود.
- تاثیر: نقض محرمانگی و یکپارچگی دادهها، دور زدن کنترلهای امنیتی.
- پلتفرمها: اندروید و iOS.
آسیبپذیریهای خاص اندروید و iOS (تکمیل کننده OWASP Mobile Top 10)
علاوه بر موارد کلی بالا، هر پلتفرم موبایل دارای ویژگیها و آسیبپذیریهای خاص خود است:
اندروید:
- استفاده نادرست از Intentها: Intentها مکانیزمی برای ارتباط بین کامپوننتهای مختلف اپلیکیشن یا بین اپلیکیشنها هستند. استفاده نادرست از Intentها (مانند Intentهای صادر شده ناامن یا Pending Intentهای آسیبپذیر) میتواند منجر به حملات انکار سرویس (DoS) یا دسترسی غیرمجاز به کامپوننتهای داخلی اپلیکیشن شود.
- مشکلات مربوط به مجوزها (Permissions): درخواست مجوزهای بیش از حد یا سوء استفاده از مجوزهای اعطا شده میتواند حریم خصوصی کاربر را به خطر اندازد یا امکان دسترسی به منابع حساس را فراهم کند.
- Broadcast Receivers ناامن: Broadcast Receiverهایی که به درستی محافظت نشدهاند، میتوانند اطلاعات حساس را در معرض دید سایر اپلیکیشنها قرار دهند یا به آنها اجازه دهند Broadcastهای مخرب ارسال کنند.
- مشکلات مربوط به WebView: استفاده نادرست از WebView (کامپوننتی برای نمایش محتوای وب در اپلیکیشن) میتواند منجر به حملات XSS، تزریق کد جاوا اسکریپت، یا دسترسی به فایلهای محلی شود.
- ذخیرهسازی ناامن در External Storage: دادههای ذخیره شده در حافظه خارجی (مانند کارت SD) بدون رمزنگاری مناسب به راحتی قابل دسترسی توسط سایر اپلیکیشنها هستند.
iOS:
- مشکلات مربوط به Keychain: Keychain یک مکانیزم امن برای ذخیرهسازی اطلاعات حساس مانند رمزهای عبور است. استفاده نادرست یا پیکربندی اشتباه Keychain میتواند منجر به نشت اطلاعات شود.
- Pasteboard ناامن: دادههای حساس کپی شده در Pasteboard (کلیپبورد) میتوانند توسط سایر اپلیکیشنها قابل دسترسی باشند.
- مشکلات مربوط به Data Protection API: عدم استفاده صحیح از Data Protection API برای رمزگذاری فایلهای حساس میتواند دادهها را در معرض خطر قرار دهد.
- استفاده نادرست از Inter-App Communication: مکانیسمهای ارتباط بین اپلیکیشنها در iOS نیز میتوانند در صورت عدم پیادهسازی صحیح، منجر به نشت اطلاعات یا دسترسی غیرمجاز شوند.
- ذخیرهسازی ناامن در UserDefaults: UserDefaults برای ذخیرهسازی تنظیمات کوچک استفاده میشود، اما نباید برای ذخیره اطلاعات حساس به کار رود زیرا رمزگذاری نمیشود.
متدولوژیها و روشهای تست امنیت اپلیکیشن موبایل
تست امنیت اپلیکیشن موبایل یک فرآیند چندوجهی است که شامل روشهای مختلفی برای شناسایی آسیبپذیریها میشود. MASTG OWASP راهنماییهای دقیقی در این زمینه ارائه میدهد. روشهای اصلی تست شامل موارد زیر است:
- تحلیل استاتیک (Static Analysis – SAST):
- در این روش، کد منبع یا باینری اپلیکیشن بدون اجرای آن مورد بررسی قرار میگیرد. ابزارهای SAST به صورت خودکار الگوهای کدنویسی ناامن، استفاده نادرست از APIها، و سایر نقاط ضعف احتمالی را شناسایی میکنند.
- مزایا: قابلیت پوششدهی بالا، شناسایی آسیبپذیریها در مراحل اولیه توسعه.
- معایب: احتمال بالای گزارشهای مثبت کاذب (False Positives)، عدم شناسایی آسیبپذیریهایی که فقط در زمان اجرا ظاهر میشوند.
- تحلیل پویا (Dynamic Analysis – DAST):
- در این روش، اپلیکیشن بر روی یک دستگاه واقعی یا شبیهساز اجرا شده و رفتار آن در زمان اجرا مورد نظارت و تحلیل قرار میگیرد. ابزارهای DAST میتوانند مشکلات مربوط به ارتباطات شبکه، ذخیرهسازی دادهها در زمان اجرا، مدیریت نشستها و احراز هویت را شناسایی کنند.
- مزایا: شناسایی آسیبپذیریهای مربوط به زمان اجرا و تعامل با محیط، گزارشهای مثبت کاذب کمتر.
- معایب: نیاز به اجرای کامل اپلیکیشن، پوششدهی محدودتر به اندازه موارد تست اجرا شده.
- تحلیل تعاملی (Interactive Application Security Testing – IAST):
- این روش ترکیبی از SAST و DAST است. ابزارهای IAST هم کد برنامه را تحلیل میکنند و هم رفتار آن را در زمان اجرا نظارت میکنند. این روش میتواند دقت بالاتری در شناسایی آسیبپذیریها داشته باشد.
- مزایا: دقت بالا، شناسایی آسیبپذیریهای پیچیده.
- معایب: معمولاً نیازمند agentهایی در محیط اجرا است.
- تست نفوذ (Penetration Testing):
- در این روش، یک متخصص امنیت (Penetration Tester) با استفاده از تکنیکها و ابزارهای مختلف، سعی در نفوذ به اپلیکیشن و سیستمهای مرتبط با آن دارد. هدف شبیهسازی حملات واقعی و شناسایی نقاط ضعف امنیتی است که ممکن است با روشهای خودکار شناسایی نشوند.
- مزایا: شناسایی آسیبپذیریهای منطقی و Business Logic، ارائه دیدگاهی جامع از وضعیت امنیتی.
- معایب: نیازمند تخصص و تجربه بالا، پوششدهی وابسته به مهارت و زمان اختصاص داده شده.
- مهندسی معکوس (Reverse Engineering):
- این فرآیند شامل تجزیه کد باینری اپلیکیشن برای درک منطق داخلی آن است. مهاجمان یا متخصصان امنیت از مهندسی معکوس برای کشف اطلاعات حساس (مانند کلیدهای رمزنگاری Hardcoded)، شناسایی آسیبپذیریها، یا دستکاری عملکرد برنامه استفاده میکنند.
- پلتفرمها: در اندروید با ابزارهایی مانند Jadx یا APKTool و در iOS با ابزارهایی مانند IDA Pro یا Ghidra امکانپذیر است.
- بررسی پیکربندی (Configuration Review):
- بررسی دقیق تنظیمات اپلیکیشن، سرورهای Backend، فایروالها و سایر اجزای مرتبط برای اطمینان از اعمال صحیح سیاستهای امنیتی و جلوگیری از پیکربندیهای ناامن پیشفرض.
MASTG OWASP موارد تست مشخصی را برای هر یک از کنترلهای امنیتی MASVS ارائه میدهد که تسترها میتوانند از آنها به عنوان چکلیست برای انجام تستهای جامع استفاده کنند. این موارد تست شامل بررسی جنبههایی مانند ذخیرهسازی دادهها، ارتباطات شبکه، احراز هویت، مدیریت نشستها، تعامل با پلتفرم، کیفیت کد و … میشود.
ابزارهای تست امنیت موبایل
ابزارهای متعددی برای کمک به فرآیند تست امنیت اپلیکیشنهای موبایل وجود دارد، از جمله:
- MobSF (Mobile Security Framework): یک چارچوب تست امنیتی خودکار و All-in-One برای اندروید و iOS که امکان تحلیل استاتیک و پویا را فراهم میکند.
- OWASP ZAP (Zed Attack Proxy): یک ابزار تست امنیت وب اپلیکیشن که میتواند برای تست APIهای Backend مورد استفاده توسط اپلیکیشنهای موبایل نیز به کار رود.
- Burp Suite: ابزار محبوب برای تست نفوذ وب اپلیکیشن که قابلیتهایی برای رهگیری و دستکاری ترافیک موبایل نیز دارد.
- Frida: یک toolkit ابزاردهی پویا که به تسترها امکان میدهد کد سفارشی را به فرآیندهای در حال اجرا تزریق کرده و رفتار برنامه را در زمان اجرا دستکاری یا مشاهده کنند.
- ADB (Android Debug Bridge): ابزار خط فرمان برای ارتباط با دستگاههای اندروید که برای نصب، دیباگ و دسترسی به فایلها در حین تست پویا مفید است.
- Xcode (برای iOS): محیط توسعه اپل که ابزارهایی برای دیباگ و تحلیل اپلیکیشنهای iOS فراهم میکند.
- IDA Pro / Ghidra: دیباگرها و Disassemblerهایی قدرتمند برای مهندسی معکوس باینری اپلیکیشنها.
- Dex2jar / Jadx (برای اندروید): ابزارهایی برای تبدیل فایلهای APK به کد Java قابل فهم.
- Objection: ابزاری مبتنی بر Frida برای انجام عملیات امنیتی در زمان اجرا بدون نیاز به جیلبریک/روت.
انتخاب ابزار مناسب بستگی به نوع تست (استاتیک، پویا، تست نفوذ)، پلتفرم مورد نظر (اندروید، iOS) و سطح تخصص تستر دارد.
چالشهای تست امنیت اپلیکیشن موبایل
تست امنیت اپلیکیشن موبایل با چالشهای خاص خود روبرو است:
- تنوع دستگاهها و نسخههای سیستم عامل: تعداد زیاد تولیدکنندگان دستگاههای اندرویدی و نسخههای مختلف اندروید و iOS، تست جامع بر روی تمامی ترکیبها را دشوار میکند.
- محیطهای مختلف (On-Device vs. Server-Side): اپلیکیشنهای موبایل اغلب با سرویسهای Backend در ارتباط هستند. تست امنیت باید هم شامل بخش سمت کاربر (Client-Side) و هم بخش سمت سرور (Server-Side) باشد.
- مکانیسمهای امنیتی پلتفرم: هر پلتفرم دارای مکانیسمهای امنیتی داخلی (مانند Sandbox، Keychain، Data Protection API) است که تستر باید با آنها آشنا باشد.
- کد obfuscation و Anti-Tampering: توسعهدهندگان ممکن است از تکنیکهایی برای دشوار کردن مهندسی معکوس و دستکاری برنامه استفاده کنند که فرآیند تست را پیچیده میکند.
- بهروزرسانیهای مکرر: اپلیکیشنهای موبایل اغلب به سرعت بهروزرسانی میشوند، که نیازمند تست مداوم برای اطمینان از حفظ سطح امنیتی در نسخههای جدید است.
نتیجهگیری
تست امنیت اپلیکیشن موبایل یک فرآیند ضروری برای اطمینان از امنیت دادههای کاربران و حفظ اعتبار کسبوکارها در دنیای موبایل امروزی است. با استفاده از راهنماییها و استانداردهای OWASP Mobile، به ویژه MASVS و MASTG، و بهکارگیری متدولوژیهای تست متنوع مانند تحلیل استاتیک و پویا، تست نفوذ و مهندسی معکوس، میتوان آسیبپذیریهای رایج در اپلیکیشنهای اندروید و iOS را شناسایی و برطرف کرد. سرمایهگذاری در تست امنیت موبایل نه تنها از بروز حوادث امنیتی پرهزینه جلوگیری میکند، بلکه به ارائه تجربهای امن و قابل اعتماد برای کاربران نهایی نیز کمک مینماید. توسعهدهندگان و تیمهای امنیتی باید همواره با آخرین آسیبپذیریها و بهترین شیوههای امنیتی در دنیای پویای موبایل آشنا باشند و تست امنیت را به عنوان بخشی جداییناپذیر از چرخه عمر توسعه نرمافزار در نظر بگیرند.
سوالات متداول
OWASP Mobile Top 10 لیستی از ده آسیبپذیری امنیتی رایج و بحرانی است که اپلیکیشنهای موبایل را تهدید میکنند. این لیست توسط پروژه OWASP Mobile بر اساس دادهها و گزارشهای جمعآوری شده از جامعه امنیت تهیه میشود و به توسعهدهندگان، تسترها و متخصصان امنیت کمک میکند تا بر روی مهمترین ریسکها تمرکز کرده و اولویتبندی مناسبی در اقدامات امنیتی خود داشته باشند. این لیست یک نقطه شروع عالی برای آشنایی با تهدیدات اصلی در حوزه امنیت موبایل است.
تحلیل استاتیک (SAST) کد منبع یا باینری اپلیکیشن را بدون اجرای آن بررسی میکند و به دنبال الگوهای ناامن یا آسیبپذیریهای شناخته شده در کد است. در مقابل، تحلیل پویا (DAST) اپلیکیشن را در زمان اجرا بر روی دستگاه یا شبیهساز تست میکند و رفتار آن را زیر نظر میگیرد تا آسیبپذیریهایی که در تعامل با محیط یا سیستمهای Backend ظاهر میشوند را شناسایی کند. SAST برای شناسایی مشکلات در مراحل اولیه توسعه و DAST برای کشف آسیبپذیریهای مربوط به زمان اجرا و پیکربندی مفید است.
خیر، اگرچه بسیاری از مفاهیم و آسیبپذیریهای کلی (مانند ذخیرهسازی ناامن دادهها یا ارتباطات ناامن) بین دو پلتفرم مشترک هستند، اما تفاوتهای قابل توجهی نیز وجود دارد. هر پلتفرم دارای معماری، مکانیسمهای امنیتی داخلی (مانند سیستم مجوزها، Keychain، Data Protection API) و زبانهای برنامهنویسی متفاوتی است که نیازمند ابزارها و تکنیکهای تست مخصوص به خود میباشد. برای مثال، مهندسی معکوس فایلهای APK اندروید با مهندسی معکوس باینریهای iOS متفاوت است.
بهترین راه برای آشنایی، مطالعه منابع رسمی پروژه OWASP Mobile Application Security (MAS) است. وبسایت OWASP اطلاعات جامعی در مورد OWASP MASVS (استاندارد تایید امنیت) و OWASP MASTG (راهنمای تست امنیت) ارائه میدهد. میتوانید مستندات این پروژهها را مطالعه کرده و با متدولوژیها، موارد تست و ابزارهای معرفی شده آشنا شوید. شرکت در کارگاهها و دورههای آموزشی مرتبط با امنیت موبایل نیز میتواند بسیار مفید باشد.
علاوه بر موارد عمومی OWASP Mobile Top 10، آسیبپذیریهای رایج در اندروید شامل استفاده نادرست از Intentها (که میتواند منجر به دسترسی غیرمجاز یا DoS شود)، مشکلات مربوط به مدیریت مجوزها (درخواست مجوزهای بیش از حد یا استفاده ناامن از آنها)، Broadcast Receiverهای ناامن، مشکلات مربوط به WebView و ذخیرهسازی ناامن دادهها در حافظه خارجی است.
بیشتر بخوانید: