اجتناب از حمله نیروهای شدید به سرور مجوز oAuth

من در حال حاضر به چارچوب مجوز OAuth 2 نگاه می کنم. دیروز شروع به تعجب کردم که چگونه برای جلوگیری از حمله نیروهای بیرحمانه در جریان اعتبار مجوز کد (https://tools.ietf.org/html/rfc6749#section-4.1). برای روشن شدن، جریان به صورت زیر عمل می کند:

  1. مرورگر درخواست هایی را برای یک منبع محافظت شده در یک مشتری oAuth 2 ( client.example.com ) می فرستد.
  2. مرورگر به نقطه پایانی مجوز هدایت می شود سرور مجوز:

    GET / authorize؟ response_type = کد & client_id = s6BhdRkqt3 & state = xyz
        & redirect_uri = https٪ 3A٪ 2F٪ 2Fclient٪ 2Eexample٪ 2Ecom٪ 2Fcb

با حالت خاصی از رشته تصادفی تولید شده توسط مشتری oAuth 2

  1. ورود به سیستم مرورگر در سرور مجوز
  2. هنگامی که به درستی وارد سیستم شوید، مرورگر با پارامترهای پرس و جو redirect-uri با برخی از پارامترهای پرس و جو

    https://client.example.com/cb؟code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

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

  1. مشتری تایید می کند که آیا پارامتر حالت متعلق به جلسه عامل کاربر (برای جلوگیری از XSRF) و درخواست توالی دسترسی از سرور مجوز با استفاده از کد پارامتر پرس و پایه احراز هویت با اعتبار مشتری:

    POST / token HTTP / 1.1
    میزبان: server.example.com
    مجوز: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type : application / x-www-form-urlencoded [19659012] grant_type = authorization_code & code = SplxlOBeZQQYbYS6WxSbIA و redirect_uri = https٪ 3A٪ 2F٪ 2Fclient٪ 2Eexample٪ 2Ecom٪ 2Fcb

ممکن است یک مهاجم یک بار دیگر تکرار مراحل 2 و 4 را انجام دهد، بدون اینکه وارد سرور مجاز شوید :

  1. برو به یک منبع محدود در client.example.com .
  2. تجزیه پارامتر درخواست در مسیر هدایت (و ذخیره کوکی / شناسه جلسه) [19659018] با رفتن به https://client.example.com/cb؟code=value1&state=xyz (با کوکی / شناسه جلسه دریافت شده در 1) سعی کنید یک نشانه برای value1 دریافت کنید.

دوباره این کار را انجام دهید و دوباره برای کد = ارزش 2 ، کد = ارزش 3 ، …

هیچ چیز در بین دو تلاش مهاجم مشابه نیست، که باعث می شود سرور مجاز برای ذخیره سازی تعدادی تلاش و بلوک پس از یک شماره خاص.

با این حال، احتمالا یک پنجره کوچک برای مهاجم برای انجام atta ck، از آنجا که کد فقط در سرور بین مراحل 4 و 5 در جریان معتبر است (به جز اگر مشتری در جایی بین 4 و 5 سقوط می کند.)

دیگر

  • دارای یک کد بزرگ تولید شده توسط سرور مجوز [19659018] کدهای موجود فقط برای یک مدت زمان محدود

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