امنیت ورود همزمان (Concurrent Login Security)
ورودهای نامحدود میتوانند نقصهای جدی در منطق کسبوکار (business logic) را پنهان کنند.
یک کاربر با لپتاپ وارد میشود. چند ثانیه بعد، همان حساب در مرورگر دیگری وارد میشود. سپس یک دستگاه موبایل. سپس یک کلاینت API. همه چیز به درستی کار میکند.
این موضوع عادی به نظر میرسد زیرا بسیاری از اپلیکیشنها از چندین دستگاه پشتیبانی میکنند. اما باید پرسید: آیا هر اپلیکیشنی باید اجازه نشستهای (sessions) نامحدود را بدهد؟
در برخی سیستمها، چندین نشست یک ویژگی (feature) محسوب میشود. در برخی دیگر، نقص است که مهاجمان از آن برای پنهان ماندن استفاده میکنند. این یک آسیبپذیری منطق کسبوکار است. کد طبق طراحی کار میکند، اما خودِ طراحی ضعیف است.
تفاوت در چیست: • باگهای سنتی از اشتباهات کدنویسی سوءاستفاده میکنند. • باگهای منطق کسبوکار از تصمیمات طراحی سوءاستفاده میکنند.
یک سرویس استریم فیلم را در نظر بگیرید. اگر یک اشتراک به ده نفر اجازه دهد همزمان تماشا کنند، سیستم ورود درست کار میکند، اما قانون کسبوکار شکست خورده است.
این موضوع در بانکداری، پنلهای مدیریت و محصولات SaaS صدق میکند.
نحوه تست این مورد:
- از طریق مرورگر A وارد شوید و آن را فعال نگه دارید.
- یک پنجره ناشناس (incognito) در مرورگر B باز کنید.
- با همان اطلاعات کاربری (credentials) وارد شوید.
- بررسی کنید که آیا نشست اول هنوز کار میکند یا خیر.
- بررسی کنید که آیا میتوانید در هر دو نشست، اقدامات حساس انجام دهید یا خیر.
اپلیکیشنهای با امنیت بالا اغلب این قوانین را اعمال میکنند:
- یک نشست فعال برای هر حساب کاربری.
- خروج از نشستهای قدیمی هنگام وقوع یک ورود جدید.
- کنترلهایی برای مدیریت دستگاهها.
- هشدار برای ورودهای جدید.
اگر مهاجمی اطلاعات کاربری را سرقت کند، اگر اجازه ورودهای نامحدود را داده باشید، میتواند برای همیشه وارد بماند. آنها در حالی که کاربر واقعی فعال است، فعال میمانند. هیچکدام متوجه حضور فرد مزاحم نمیشوند.
زمینه (Context) همه چیز است. اپلیکیشنهایی که به نشستهای زیاد نیاز دارند:
- اپلیکیشنهای پیامرسان.
- شبکههای اجتماعی.
- سرویسهای ایمیل.
اپلیکیشنهایی که به کنترل دقیق نیاز دارند:
- سیستمهای بانکی.
- داشبوردهای مدیریت.
- پلتفرمهای سلامت و مراقبتهای پزشکی.
نحوه رفع آن:
- ذخیره شناسههای نشست (session IDs) فعال در یک پایگاه داده.
- هنگام وقوع ورود جدید، نشست قدیمی را از کار بیندازید.
- اجازه دهید کاربران دستگاهها و مکانهای فعال را مشاهده کنند.
- افزودن دکمه «خروج از تمام دستگاهها».
- ارسال هشدار ایمیلی یا پیامکی برای ورودهای جدید.
فقط به دنبال باگهای کد مانند SQL injection نباشید. به دنبال شکافهای بین آنچه اپلیکیشن شما انجام میدهد و آنچه کسبوکار شما نیاز دارد، باشید.
سیاست نشستهای خود را همین امروز بازبینی کنید. بزرگترین ریسک شما ممکن است کد خراب نباشد، بلکه منطق خراب باشد.