دسته OWASP: MASVS-PLATFORM: تعامل پلاتفرم
نمای کلی
بسیاری از برنامههای تلفن همراه از میانای برنامهسازی کاربردی خارجی برای ارائه ویژگیها استفاده میکنند. بهطور سنتی، از یک کلید یا کد ایستا برای اصالتسنجی برنامهای که به سرویس متصل میشود استفاده میشود.
بااینحال، در زمینه تنظیمات کارخواه-سرور (یا برنامه تلفن همراه و میانای برنامهسازی کاربردی) – استفاده از کلید ایستا معمولاً روش اصالتسنجی امنی برای دسترسی به دادهها یا سرویسهای حساس درنظر گرفته نمیشود. برخلاف زیرساخت داخلی، هرکسی که به این کلید دسترسی داشته باشد میتواند به میانای برنامهسازی کاربردی خارجی دسترسی پیدا کند و از این سرویس سوءاستفاده کند.
برای مثال، ممکن است یک کلید ایستا ازطریق مهندسی معکوس برنامه استخراج شود یا هنگام ارتباط برنامه تلفن همراه با میانای برنامهسازی کاربردی خارجی رهگیری شود. همچنین احتمال بیشتری وجود دارد که این کلید ثابت در برنامه بهصورت کد ثابت باشد.
خطر برای دادهها و سرویسهای API زمانی رخ میدهد که از اصالتسنجی و کنترلهای دسترسی بهاندازه کافی ایمن استفاده نشود.
هنگام استفاده از کلید ایستا، میتوان با بازپخش درخواستها یا ساختن درخواستهای جدید بااستفاده از کلید (رهگیریشده یا مهندسی معکوسشده) بدون هیچ محدودیت زمانی از API سوءاستفاده کرد.
تأثیر
اگر توسعهدهندهای برای سرویس میانای برنامهسازی کاربردی هوش مصنوعی یا یادگیری ماشین هزینه پرداخت میکند، برای مهاجم نسبتاً آسان خواهد بود که این کلید را سرقت کند و بدهی سرویس او را افزایش دهد یا از آن برای ایجاد محتوای جعلی استفاده کند.
هرگونه داده کاربر، فایل، یا اطلاعات شناساننده شخصی ذخیرهشده در میانای برنامهسازی کاربردی بهطور رایگان دردسترس خواهد بود و منجر به نشتهای مخرب میشود.
مهاجم همچنین ممکن است از این دسترسی برای کلاهبرداری، تغییر مسیر سرویسها، و در موارد نادر، بهدست آوردن کنترل کامل سرورها استفاده کند.
کاهش
میانای برنامهسازی کاربردی باحالت
اگر برنامه امکان ورود به سیستم کاربر را فراهم میکند یا توانایی ردیابی جلسههای کاربر را دارد، توصیه میکنیم توسعهدهندگان از سرویس API مانند Google Cloud برای ادغام با حفظ وضعیت با برنامه خود استفاده کنند.
علاوهبراین، از اصالتسنجی ایمن، اعتبارسنجی کارخواه، و کنترلهای جلسه ارائهشده توسط سرویس API استفاده کنید و استفاده از کد پویا را بهعنوان جایگزینی برای کلید ایستا درنظر بگیرید. مطمئن شوید که توکن در مدت زمان کوتاهی منقضی میشود (۱ ساعت معمول است).
سپس باید از کد پویا برای اصالتسنجی استفاده شود تا دسترسی به میانای برنامهسازی کاربردی فراهم شود. این دستورالعملها نشان میدهند که چگونه میتوان بااستفاده از OAuth 2.0 به این هدف دست یافت. علاوهبر این دستورالعملها، OAuth 2.0 را میتوان با پیادهسازی ویژگیهای زیر بیشتر تقویت کرد تا آسیبپذیریهای برنامه Android شما کاهش یابد.
مدیریت و ثبت مناسب خطا را پیادهسازی کنید:
- خطاهای OAuth را بهخوبی و بهطور نمایان مدیریت کنید و آنها را برای اهداف اشکالزدایی ثبت کنید.
- کاهش سطح حمله همچنین به شما کمک میکند هرگونه مشکلی را که ممکن است پیش بیاید شناسایی و عیبیابی کنید.
- مطمئن شوید هر پیامی که ثبت میشود یا به کاربر ارائه میشود واضح است اما حاوی اطلاعات مفید برای رقیب نیست.
OAuth را بهطور ایمن در برنامه پیکربندی کنید:
- پارامتر
redirect_uriرا به هر دو نقطه پایانی مجوز و کد ارسال کنید. - اگر برنامهتان از OAuth با سرویس طرف سوم استفاده میکند، «همرسانی منبع میانمبدئی» (CORS) را پیکربندی کنید تا دسترسی به منابع برنامهتان محدود شود.
- این کار به جلوگیری از حملات غیرمجاز اسکریپت بینسایتی (XSS) کمک میکند.
- از پارامتر state برای جلوگیری از حملات جعل درخواست بینسایتی استفاده کنید.
از کتابخانه امنیتی استفاده کنید:
- برای ساده کردن پیادهسازی جریانهای OAuth ایمن، بهتر است از کتابخانه امنیتی مثل AppAuth استفاده کنید.
- این کتابخانههای Android میتوانند به خودکارسازی بسیاری از روالهای مطلوب امنیتی که قبلاً ذکر شد کمک کنند.
سایر روشهای اصالتسنجی ازجمله Firebase و Google ID tokens در سند OpenAPI شرح داده شده است.
میانای برنامهسازی کاربردی بیوضعیت
اگر سرویس میانای برنامهسازی کاربردی هیچکدام از محافظتهای توصیهشده در بالا را ارائه نمیدهد و نیاز به جلسههای بدون حالت بدون ورود به سیستم کاربر وجود دارد، توسعهدهندگان ممکن است لازم باشد راهحلهای میانافزار خودشان را ارائه دهند.
این شامل درخواستهای «پراکسی» بین برنامه و نقطه پایانی میانای برنامهسازی کاربردی میشود. یک روش برای انجام این کار استفاده از JSON Web Tokens (JWT) و JSON Web Signature (JWS) یا ارائه سرویس کاملاً اصالتسنجیشده است همانطور که قبلاً توصیه شد. این کار روشی برای ذخیره کلید ثابت آسیبپذیر در سمت سرور بهجای ذخیره در برنامه (کارخواه) ارائه میدهد.
مشکلات ذاتی در ارائه راهحل بدون حالت سرتاسر در برنامههای تلفن همراه وجود دارد. برخیاز مهمترین چالشها عبارتاند از اعتبارسنجی کارخواه (برنامه) و ذخیره کردن ایمن کلید خصوصی یا رمز در دستگاه.
Play Integrity API یکپارچگی برنامه و درخواستها را اعتبارسنجی میکند. این کار میتواند برخیاز سناریوهایی را که ممکن است از این دسترسی سوءاستفاده شود کاهش دهد. درخصوص مدیریت کلید، در بسیاری از موارد ذخیرهساز کلید بهترین مکان برای ذخیرهسازی ایمن کلیدهای خصوصی است.
برخیاز برنامههای تلفن همراه از مرحله ثبتنام برای بررسی یکپارچگی برنامه استفاده میکنند و بااستفاده از تبادل امن، کلیدی ارائه میدهند. این روشها پیچیده هستند و خارج از محدوده این سند قرار دارند. بااینحال، سرویس مدیریت کلید ابری یکی از راهحلهای احتمالی است.