استفاده ناامن از API

دسته OWASP: MASVS-PLATFORM: پلتفرم تعامل

نمای کلی

بسیاری از برنامه های تلفن همراه از یک API خارجی برای ارائه ویژگی ها استفاده می کنند. به طور سنتی، یک رمز یا کلید ثابت برای تأیید اعتبار برنامه متصل به سرویس استفاده می شود.

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

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

خطر برای داده ها و سرویس های API زمانی رخ می دهد که از احراز هویت و کنترل های دسترسی به اندازه کافی ایمن استفاده نشود.

هنگام استفاده از یک کلید استاتیک، API را می توان با پخش مجدد درخواست ها یا ساخت درخواست های جدید با استفاده از کلید (رهگیری یا مهندسی معکوس) بدون هیچ محدودیت زمانی مورد سوء استفاده قرار داد.

تاثیر

اگر یک توسعه دهنده برای یک سرویس AI یا ML API پرداخت کند، برای مهاجم نسبتاً آسان است که این کلید را بدزدد و روی سرویس خود بدهی بدهد یا از آن برای ایجاد محتوای جعلی استفاده کند.

هر گونه داده کاربر، فایل یا PII ذخیره شده در API آزادانه در دسترس خواهد بود و منجر به نشت مخرب می شود.

مهاجم همچنین ممکن است از این دسترسی برای انجام کلاهبرداری، تغییر مسیر خدمات، و در موارد نادر، کنترل کامل سرورها استفاده کند.

اقدامات کاهشی

Stateful API

اگر برنامه ورود به سیستم کاربر را ارائه می دهد یا توانایی ردیابی جلسات کاربر را دارد، به توسعه دهندگان توصیه می کنیم از یک سرویس API مانند Google Cloud برای ادغام حالت با برنامه خود استفاده کنند.

علاوه بر این، از احراز هویت امن، اعتبار سنجی کلاینت و کنترل‌های جلسه ارائه شده توسط سرویس API استفاده کنید و از یک توکن پویا به عنوان جایگزینی برای کلید استاتیک استفاده کنید. مطمئن شوید که توکن در مدت زمان نسبتاً کوتاهی منقضی می شود (1 ساعت معمولی است).

سپس رمز پویا باید برای احراز هویت استفاده شود تا دسترسی به API فراهم شود. این دستورالعمل ها نشان می دهد که چگونه می توان با استفاده از OAuth 2.0 به این امر دست یافت. علاوه بر این دستورالعمل‌ها، OAuth 2.0 می‌تواند برای کاهش آسیب‌پذیری‌ها در برنامه اندروید شما با اجرای ویژگی‌های زیر تقویت شود.

مدیریت و ثبت صحیح خطاها را اجرا کنید:

  • خطاهای OAuth را با ظرافت، به وضوح مدیریت کنید و آنها را برای اهداف اشکال زدایی ثبت کنید.
    • کاهش سطح حمله همچنین به شما کمک می کند تا مشکلاتی را که ممکن است ایجاد شود شناسایی و عیب یابی کنید.
    • اطمینان حاصل کنید که هر پیام ثبت شده یا ارائه شده به کاربر واضح است اما حاوی اطلاعات مفید برای دشمن نیست.

به طور ایمن OAuth را در برنامه پیکربندی کنید:

  • پارامتر redirect_uri را به نقطه پایانی مجوز و نشانه ارسال کنید.
  • اگر برنامه شما از OAuth با یک سرویس شخص ثالث استفاده می‌کند، اشتراک‌گذاری منابع متقاطع ( CORS ) را برای محدود کردن دسترسی به منابع برنامه خود پیکربندی کنید.
    • این به جلوگیری از حملات غیرمجاز اسکریپت بین سایتی ( XSS ) کمک می کند.
  • از پارامتر state برای جلوگیری از حملات CSRF استفاده کنید.

از یک کتابخانه امنیتی استفاده کنید:

  • استفاده از یک کتابخانه امنیتی مانند AppAuth را برای ساده‌سازی اجرای جریان‌های OAuth امن در نظر بگیرید.
    • این کتابخانه‌های اندرویدی می‌توانند به خودکارسازی بسیاری از بهترین اقدامات امنیتی که قبلاً ذکر شد کمک کنند.

سایر روش‌های احراز هویت از جمله توکن‌های Firebase و Google ID در اسناد OpenAPI توضیح داده شده‌اند.

API بدون حالت

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

این شامل درخواست‌های «پروکسی» بین برنامه و نقطه پایانی API است. یک روش برای انجام این کار استفاده از JSON Web Tokens (JWT) و JSON Web Signature (JWS) یا ارائه یک سرویس کاملاً احراز هویت شده طبق توصیه قبلی است. این روشی را برای ذخیره کلید استاتیک آسیب پذیر در سمت سرور به جای برنامه (مشتری) فراهم می کند.

مشکلات ذاتی در ارائه راه حل بدون حالت انتها به انتها در برنامه های تلفن همراه وجود دارد. برخی از مهم ترین چالش ها اعتبار سنجی مشتری (برنامه) و ذخیره ایمن کلید خصوصی یا راز در دستگاه است.

Play Integrity API اعتبار سنجی یکپارچگی برنامه و درخواست ها را فراهم می کند. این می تواند برخی از سناریوهایی را که از این دسترسی می تواند سوء استفاده شود را کاهش دهد. در مورد مدیریت کلید، در بسیاری از موارد فروشگاه کلید بهترین مکان برای ذخیره امن کلیدهای خصوصی است.

برخی از برنامه های تلفن همراه از مرحله ثبت نام برای بررسی یکپارچگی برنامه و ارائه کلید با استفاده از یک تبادل امن استفاده می کنند. این روش ها پیچیده و خارج از محدوده این سند هستند. با این حال، یک سرویس مدیریت کلید ابری یک راه حل بالقوه است.

منابع