برنامه نویسی

نحوه انجام تست امنیت برنامه اندروید: راهنمای توسعه دهندگان و آزمایش کنندگان

Summarize this content to 400 words in Persian Lang

معرفی

به عنوان یکی از طرفداران پر و پا قرص گوشی های اندرویدی، اگر ناگهان گوشی تان بیفتد، آیا اولین فکرتان «اوه خدای من» خواهد بود! یا اینکه پول شما در Google Pay یا Paypal ایمن نیست؟ اگر آخرین برنامه دانلود شده نه تنها تبلیغات خسته کننده مختلفی را نمایش می دهد، بلکه اعلان های غیرمنتظره ای را نیز نشان می دهد، آیا فکر می کنید ممکن است یک تلاش فیشینگ باشد و بلافاصله برنامه را حذف نصب کنید؟

چگونه می توانیم اطمینان حاصل کنیم که برنامه ما تجربه ای امن را برای کاربرانی که آگاهی کافی از آسیب پذیری های امنیتی اندروید ندارند ارائه می دهد؟ آسیب پذیری های امنیتی در اکوسیستم اندروید چیست؟ کجا می توانیم تکنیک های جدید تست امنیت اندروید را کشف کنیم؟ چگونه می توانیم فرآیند تست امنیتی را ساده کنیم؟

آسیب پذیری های امنیتی رایج اندروید

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

ثانیا، خطرات امنیتی در فرآیند توسعه APP/SDK Android مانند سیاه‌چاله‌های ناشناخته هستند. ما هرگز نمی دانیم که نقطه پایانی رویارویی امنیتی کجاست، مهاجمان چه کسانی هستند، چه کسانی نابودگر هستند و چگونه در برابر آنها دفاع کنیم.

در نهایت، در سطح کاربر، برخی از آسیب پذیری های رفتار امنیتی رایج و قابل تشخیص کدامند؟

هم برنامه های اندروید و هم SDK ها تا حدودی دارای آسیب پذیری های امنیتی هستند. شاید روزی برنامه شما تحت تأثیر یکی از آسیب پذیری های امنیتی فوق قرار گیرد. به طور تصادفی، اخیراً هنگام آزمایش یک Android SDK، یک آسیب پذیری امنیتی مربوط به اجزای برنامه Android را کشف کردیم. بر اساس این مثال، روش‌ها، تکنیک‌ها و فرآیندهای تست امنیت Android SDK خلاصه می‌شوند.

نمونه‌های تست امنیت برنامه‌های Android

مروری بر علل آسیب پذیرییکی از اجزای اختیاری یک برنامه (که از این پس برنامه نامیده می شود) Android SDK یک پورت تصادفی را به صورت محلی برای نظارت بر فعال بودن سرویس لایه جاوا باز کرده است. با این حال، هنگامی که لایه جاوا با کامپوننت ارتباط برقرار می کند، پارامترهای ورودی را به شدت بررسی نمی کند، در نتیجه احتمال پر شدن با کد حمله و حملات مخرب هنگام فراخوانی تابع “system()” سیستم لینوکس وجود دارد.

تصویر زیر نشان می‌دهد که پس از حمله به پورت شبیه‌سازی، هدف مؤلفه برنامه محتوای URL را در طول ارتباط تغییر می‌دهد و Webview کد مخدوش را نمایش می‌دهد:

خطرات امنیتی بالقوه آسیب پذیری

چهار مؤلفه برنامه اصلی برنامه‌های Android: Activity، Receiver، Service و Content Provider، و همچنین نقش‌های امنیتی مؤلفه‌های برنامه که از طریق intent برای IPC ارتباط برقرار می‌کنند، در اینجا به تفصیل مورد بحث قرار نخواهند گرفت. با استفاده از آسیب‌پذیری مرتبط با مؤلفه در مثال بالا، نمودار زیر ابعاد حمله مربوط به سمت ترمینال APP را نشان می‌دهد:

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

اجرای دستور محلی: زمانی که نام بسته برنامه تعبیه شده به عنوان خود برنامه و نام کامپوننت به عنوان فعالیت برنامه مشخص می شود، می توان هر گونه فعالیت برنامه از جمله فعالیت غیر صادراتی محافظت شده را شروع کرد و در نتیجه باعث ایجاد خطر امنیتی می شود. . به عنوان مثال، آسیب پذیری انکار سرویس را می توان با شروع چندین فعالیت صادر نشده یک به یک از طریق درخواست های HTTP پیدا کرد.
کنترل فرمان برای تغییر مجوزهای برنامه: قصد راه اندازی اجزای برنامه اندروید را از طریق پورت سوکت باز انجام دهید و سپس عملیاتی مانند شروع فعالیت و ارسال پخش را با مجوزهای برنامه مورد حمله اجرا کنید. از آنجا که مقاصد ارسال شده از طریق سوکت نمی توانند بررسی دقیق هویت و مجوزهای فرستنده را انجام دهند، از حفاظت مجوز ارائه شده توسط Android برای اجزای برنامه عبور می کنند، و می توانند مؤلفه های برنامه صادر نشده و محافظت شده با مجوز را راه اندازی کنند، که یک خطر امنیتی ایجاد می کند.
افشای اطلاعات حساس، کنترل تلفن همراه: یک سرویس محلی پورت UDP را برای گوش دادن باز می کند و پس از دریافت یک کلمه دستوری خاص می تواند اطلاعات حساس تلفن همراه را برگرداند. به عنوان مثال، پیشخدمت تلفن همراه Baidu می تواند از راه دور کلید مخفی تلفن همراه را مدیریت کند و سپس مهاجمان غیرمجاز می توانند تلفن همراه را به طور کامل از طریق شبکه مدیریت کنند.

اجرای تست امنیت اندروید

بهینه سازی نسخه سخت شده امنیتی اندروید

چک هایی را برای دستورات سیستم و فیلتر کاراکترهای ویژه در لایه های Native و Java اضافه کنید.
رمزگذاری ارتباطات سوکت برای فرآیند دیمون JNI Watchdog.
برای جلوگیری از هدایت مجدد به پیوندهای مخرب هنگام کلیک بر روی اعلان ها، تأیید ویژگی را برای URL ها، اهداف و فعالیت ها در عملکردهای اعلان محلی اضافه کنید.
مکان ذخیره سازی نام بسته را در حافظه محلی برنامه تغییر دهید.
قابلیت پیکربندی آنلاین را اضافه کنید.

اینها الزامات مهم برای این بهینه سازی سخت شدن امنیت هستند.

تست امنیتی ویژه

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

تست رگرسیون امنیتی منظم اندروید

داده های حریم خصوصی: امنیت ذخیره سازی خارجی و امنیت ذخیره سازی داخلی; بررسی کنید که آیا نام کاربری، رمز عبور، سوابق چت، اطلاعات پیکربندی و سایر اطلاعات خصوصی به صورت محلی ذخیره شده و رمزگذاری شده است یا خیر. قبل از استفاده از یکپارچگی اطلاعات اطمینان حاصل کنید.
حملات مجوز: دایرکتوری برنامه را بررسی کنید و مطمئن شوید که مجوزهای آن به دیگر اعضای گروه اجازه خواندن یا نوشتن را نمی دهد. بررسی کنید که آیا مجوزهای سیستم مورد حمله قرار می گیرند.
حفاظت از مجوز اجزای اندروید: جلوگیری از فراخوانی خودسرانه اجزای داخلی برنامه توسط برنامه های شخص ثالث: جلوگیری از فراخوانی فعالیت ها توسط برنامه های شخص ثالث، جلوگیری از ربودن فعالیت. از امنیت دریافت و انتقال پخش اطمینان حاصل کنید، فقط پخش‌های ارسال شده توسط برنامه را دریافت کنید و از دریافت محتوای ارسالی توسط اشخاص ثالث جلوگیری کنید. جلوگیری از شروع یا توقف مخرب خدمات؛ مجوزهای عملیات ارائه دهنده محتوا را بررسی کنید. اگر اجزاء نیاز به فراخوانی خارجی دارند، بررسی کنید که آیا محدودیت های امضا برای تماس گیرنده اعمال شده است یا خیر.
ارتقاء: یکپارچگی و قانونی بودن بسته ارتقا را بررسی کنید تا از ربوده شدن آن جلوگیری کنید.
کتابخانه های شخص ثالث: اگر از کتابخانه های شخص ثالث استفاده می شود، به روز رسانی آنها را پیگیری کرده و امنیت آنها را بررسی کنید.
امنیت رام: از رام های رسمی یا رام های ارائه شده توسط تیم های معتبر برای جلوگیری از افزودن تبلیغات کاشته شده، تروجان ها و غیره استفاده کنید.
اقدامات متقابل ضد ترک خوردگی: مقابله با دیکامپایل، غیرممکن کردن کامپایل کردن با استفاده از ابزارهای دکامپایل یا به دست آوردن کد جداسازی صحیح پس از دیکامپایل. مقابله با تجزیه و تحلیل استاتیک با استفاده از مبهم سازی کد و رمزگذاری. با افزودن کد برای شناسایی اشکال زداها و شبیه سازها با اشکال زدایی پویا مقابله کنید. با بررسی امضاها و تأیید مقدار هش فایل dex کامپایل شده از کامپایل مجدد جلوگیری کنید.

پس از اتمام تست امنیتی ویژه و تست فرآیند منظم، تست رگرسیون نورد را برای ویژگی های موجود برنامه، سازگاری بین نسخه های جدید و قدیمی و سازگاری با نسخه های مختلف سیستم عامل اندروید انجام دهید.

بسته شدن

در مقایسه با نمونه های معمولی تست عملکرد و عملکرد سیستم، موارد تست امنیتی نیاز به درک جامع تری از اکوسیستم اندروید دارد، مانند: پوشش سطح ظاهر امنیت کاربر، سطح حمله محلی و راه دور سیستم برنامه، و سطح آسیب پذیری سیستم عامل، با تمرکز بیشتر بر روی طراحی موارد تست تفکر حمله معکوس

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

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

به WeTest اعتماد کنید تا از برنامه شما در برابر تهدیدات احتمالی محافظت کند و تجربه کاربری ایمن را حفظ کند.

معرفی

به عنوان یکی از طرفداران پر و پا قرص گوشی های اندرویدی، اگر ناگهان گوشی تان بیفتد، آیا اولین فکرتان «اوه خدای من» خواهد بود! یا اینکه پول شما در Google Pay یا Paypal ایمن نیست؟ اگر آخرین برنامه دانلود شده نه تنها تبلیغات خسته کننده مختلفی را نمایش می دهد، بلکه اعلان های غیرمنتظره ای را نیز نشان می دهد، آیا فکر می کنید ممکن است یک تلاش فیشینگ باشد و بلافاصله برنامه را حذف نصب کنید؟

چگونه می توانیم اطمینان حاصل کنیم که برنامه ما تجربه ای امن را برای کاربرانی که آگاهی کافی از آسیب پذیری های امنیتی اندروید ندارند ارائه می دهد؟ آسیب پذیری های امنیتی در اکوسیستم اندروید چیست؟ کجا می توانیم تکنیک های جدید تست امنیت اندروید را کشف کنیم؟ چگونه می توانیم فرآیند تست امنیتی را ساده کنیم؟

آسیب پذیری های امنیتی رایج اندروید

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

ثانیا، خطرات امنیتی در فرآیند توسعه APP/SDK Android مانند سیاه‌چاله‌های ناشناخته هستند. ما هرگز نمی دانیم که نقطه پایانی رویارویی امنیتی کجاست، مهاجمان چه کسانی هستند، چه کسانی نابودگر هستند و چگونه در برابر آنها دفاع کنیم.

در نهایت، در سطح کاربر، برخی از آسیب پذیری های رفتار امنیتی رایج و قابل تشخیص کدامند؟

هم برنامه های اندروید و هم SDK ها تا حدودی دارای آسیب پذیری های امنیتی هستند. شاید روزی برنامه شما تحت تأثیر یکی از آسیب پذیری های امنیتی فوق قرار گیرد. به طور تصادفی، اخیراً هنگام آزمایش یک Android SDK، یک آسیب پذیری امنیتی مربوط به اجزای برنامه Android را کشف کردیم. بر اساس این مثال، روش‌ها، تکنیک‌ها و فرآیندهای تست امنیت Android SDK خلاصه می‌شوند.

نمونه‌های تست امنیت برنامه‌های Android

مروری بر علل آسیب پذیری
یکی از اجزای اختیاری یک برنامه (که از این پس برنامه نامیده می شود) Android SDK یک پورت تصادفی را به صورت محلی برای نظارت بر فعال بودن سرویس لایه جاوا باز کرده است. با این حال، هنگامی که لایه جاوا با کامپوننت ارتباط برقرار می کند، پارامترهای ورودی را به شدت بررسی نمی کند، در نتیجه احتمال پر شدن با کد حمله و حملات مخرب هنگام فراخوانی تابع “system()” سیستم لینوکس وجود دارد.

تصویر زیر نشان می‌دهد که پس از حمله به پورت شبیه‌سازی، هدف مؤلفه برنامه محتوای URL را در طول ارتباط تغییر می‌دهد و Webview کد مخدوش را نمایش می‌دهد:

کد مخدوش

خطرات امنیتی بالقوه آسیب پذیری

چهار مؤلفه برنامه اصلی برنامه‌های Android: Activity، Receiver، Service و Content Provider، و همچنین نقش‌های امنیتی مؤلفه‌های برنامه که از طریق intent برای IPC ارتباط برقرار می‌کنند، در اینجا به تفصیل مورد بحث قرار نخواهند گرفت. با استفاده از آسیب‌پذیری مرتبط با مؤلفه در مثال بالا، نمودار زیر ابعاد حمله مربوط به سمت ترمینال APP را نشان می‌دهد:

ابعاد حمله

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

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

  2. کنترل فرمان برای تغییر مجوزهای برنامه: قصد راه اندازی اجزای برنامه اندروید را از طریق پورت سوکت باز انجام دهید و سپس عملیاتی مانند شروع فعالیت و ارسال پخش را با مجوزهای برنامه مورد حمله اجرا کنید. از آنجا که مقاصد ارسال شده از طریق سوکت نمی توانند بررسی دقیق هویت و مجوزهای فرستنده را انجام دهند، از حفاظت مجوز ارائه شده توسط Android برای اجزای برنامه عبور می کنند، و می توانند مؤلفه های برنامه صادر نشده و محافظت شده با مجوز را راه اندازی کنند، که یک خطر امنیتی ایجاد می کند.

  3. افشای اطلاعات حساس، کنترل تلفن همراه: یک سرویس محلی پورت UDP را برای گوش دادن باز می کند و پس از دریافت یک کلمه دستوری خاص می تواند اطلاعات حساس تلفن همراه را برگرداند. به عنوان مثال، پیشخدمت تلفن همراه Baidu می تواند از راه دور کلید مخفی تلفن همراه را مدیریت کند و سپس مهاجمان غیرمجاز می توانند تلفن همراه را به طور کامل از طریق شبکه مدیریت کنند.

اجرای تست امنیت اندروید

بهینه سازی نسخه سخت شده امنیتی اندروید

  1. چک هایی را برای دستورات سیستم و فیلتر کاراکترهای ویژه در لایه های Native و Java اضافه کنید.

  2. رمزگذاری ارتباطات سوکت برای فرآیند دیمون JNI Watchdog.

  3. برای جلوگیری از هدایت مجدد به پیوندهای مخرب هنگام کلیک بر روی اعلان ها، تأیید ویژگی را برای URL ها، اهداف و فعالیت ها در عملکردهای اعلان محلی اضافه کنید.

  4. مکان ذخیره سازی نام بسته را در حافظه محلی برنامه تغییر دهید.

  5. قابلیت پیکربندی آنلاین را اضافه کنید.

اینها الزامات مهم برای این بهینه سازی سخت شدن امنیت هستند.

تست امنیتی ویژه

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

تست رگرسیون امنیتی منظم اندروید

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

  2. حملات مجوز: دایرکتوری برنامه را بررسی کنید و مطمئن شوید که مجوزهای آن به دیگر اعضای گروه اجازه خواندن یا نوشتن را نمی دهد. بررسی کنید که آیا مجوزهای سیستم مورد حمله قرار می گیرند.

  3. حفاظت از مجوز اجزای اندروید: جلوگیری از فراخوانی خودسرانه اجزای داخلی برنامه توسط برنامه های شخص ثالث: جلوگیری از فراخوانی فعالیت ها توسط برنامه های شخص ثالث، جلوگیری از ربودن فعالیت. از امنیت دریافت و انتقال پخش اطمینان حاصل کنید، فقط پخش‌های ارسال شده توسط برنامه را دریافت کنید و از دریافت محتوای ارسالی توسط اشخاص ثالث جلوگیری کنید. جلوگیری از شروع یا توقف مخرب خدمات؛ مجوزهای عملیات ارائه دهنده محتوا را بررسی کنید. اگر اجزاء نیاز به فراخوانی خارجی دارند، بررسی کنید که آیا محدودیت های امضا برای تماس گیرنده اعمال شده است یا خیر.

  4. ارتقاء: یکپارچگی و قانونی بودن بسته ارتقا را بررسی کنید تا از ربوده شدن آن جلوگیری کنید.

  5. کتابخانه های شخص ثالث: اگر از کتابخانه های شخص ثالث استفاده می شود، به روز رسانی آنها را پیگیری کرده و امنیت آنها را بررسی کنید.

  6. امنیت رام: از رام های رسمی یا رام های ارائه شده توسط تیم های معتبر برای جلوگیری از افزودن تبلیغات کاشته شده، تروجان ها و غیره استفاده کنید.

  7. اقدامات متقابل ضد ترک خوردگی: مقابله با دیکامپایل، غیرممکن کردن کامپایل کردن با استفاده از ابزارهای دکامپایل یا به دست آوردن کد جداسازی صحیح پس از دیکامپایل. مقابله با تجزیه و تحلیل استاتیک با استفاده از مبهم سازی کد و رمزگذاری. با افزودن کد برای شناسایی اشکال زداها و شبیه سازها با اشکال زدایی پویا مقابله کنید. با بررسی امضاها و تأیید مقدار هش فایل dex کامپایل شده از کامپایل مجدد جلوگیری کنید.

پس از اتمام تست امنیتی ویژه و تست فرآیند منظم، تست رگرسیون نورد را برای ویژگی های موجود برنامه، سازگاری بین نسخه های جدید و قدیمی و سازگاری با نسخه های مختلف سیستم عامل اندروید انجام دهید.

بسته شدن

در مقایسه با نمونه های معمولی تست عملکرد و عملکرد سیستم، موارد تست امنیتی نیاز به درک جامع تری از اکوسیستم اندروید دارد، مانند: پوشش سطح ظاهر امنیت کاربر، سطح حمله محلی و راه دور سیستم برنامه، و سطح آسیب پذیری سیستم عامل، با تمرکز بیشتر بر روی طراحی موارد تست تفکر حمله معکوس

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

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

به WeTest اعتماد کنید تا از برنامه شما در برابر تهدیدات احتمالی محافظت کند و تجربه کاربری ایمن را حفظ کند.

توضیحات تصویر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا