یکی از حملات رایج که توسعه دهندگان با آن روبرو هستند Brute-Force Attack میباشد.در این حملات برای کشف رمزعبور کاربران هر ترکیب احتمالی از حروف, اعداد و نمادها را استفاده میکنند تا یک ترکیب صحیح را بدست آورند. اگر وب سایت شما نیاز به احرازهویت دارد شما یک هدف مناسب برای حملات Brute-Force هستید! یک هکر میتواند رمزعبور را از این طریق بدست آورد اما برای یافتن آن شاید سالها طول بکشد. که بستگی به طول رمز, پیچیدگی آن ممکن است چندین سال طول بکشد. اما یک حمله Brute-Force میتواند سریع تر انجام شود, میتواند از فرهنگ لغت استفاده کند و یا کلمات فرهنگ لغت را کمی تغییر دهد زیرا بیشتر افراد به جای یک کلمه عبور تصادفی و پیچیده از آن کلمات استفاده میکنند. به این حملات dictionary attacks یا hybrid brute-force attacks نیز گفته میشود. این حملات حساب های کاربران را در معرض خطر قرار میدهد و باعث افزایش ترافیک غیرضروری سایت شما میشود.

هکرها از ابزارهای گسترده ای که لیست کلمات و قواعد هوشمندانه را دارند استفاده میکنند تا به طور هوشمندانه و به طور خودکار کلمه های عبور کاربران را حدس بزنند. اگرچه شناسایی چنین حملاتی آسان است اما جلوگیری از آن کار آسانی نیست. به طور مثال برخی از ابزارهای HTTP brute-force میتوانند درخواست ها را از طریق پروکسی های باز سرور انجام دهند و از آنجاکه هر درخواست از یک IP متفاوت میرسد نمیتوانید با مسدود کردن IP حملات را مسدود کنید. حتی برخی از ابزارها برای هر بار درخواست یک نام کاربری و یک کلمه عبور را امتحان میکنند و شما نمیتوانید هر حساب کاربری را برای یک بار عملیات ناموفق مسدود کنید.

مسدود کردن حساب ها

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

  • یک مهاجم میتواند تعداد زیادی از حساب هارا مسدود کند
  • به دلیل اینکه شما نمیتوانید حسابی که وجود ندارد را مسدود کنید و فقط حساب های معتبر قفل میشوند, یک مهاجم با استفاده از پاسخ خطای مربوط به مسدود شدن حساب کاربری میتواند از این کار برای برداشتن نام کاربری استفاده کند.
  • یک مهاجم میتواند با مسدود کردن تعداد زیادی از حساب ها و جاری شدن تماس های پشتیبانی برای بازیابی حساب باعث انحراف آنها شود.
  • یک مهاجم میتواند به طور مداوم یک حساب کاربری را مسدود کند, حتی چند ثانیه بعد از آنکه ادمین سایت حساب را فعال کند. مجددا به مسدود کردن آن اقدام کند.
  • مسدود کردن حساب ها برای حملاتی که کند هستند و هر ساعت فقط چند رمز عبور را امتحان میکند بی تاثیر است.
  • مسدود کردن حساب ها در برابر حملاتی که یک رمز عبور را در برابر لیستی از نام کاربری امتحان میکند بی تاثیر است
  • مسدود کردن حساب ها در برابر حملاتی که از لیستی از ( کلمه عبور/نام کاربری ) استفاده میکند و در اولین بار به طور صحیح حدس میزند بی تاثیر است.

مسدود کردن حساب ها  گاهی اوقات تاثیرگذار است, اما در محیط های کنترل شده. با این حال در بیشتر موارد مسدود کردن حساب ها برای متوقف کردن حملات brute-force کافی نیست. به عنوان مثال یک سایت حراجی را در نظر بگیرید که چندین داوطلب برای یک کالا در حال مسابقه هستند. اگر وبسایت حراجی حساب هارا مسدود کند, یک پیشنهاد دهنده میتواند در لحظات آخر نسبت به مسدود کردن حساب های دیگران اقدام کند و مانع از ارائه هرگونه پیشنهادی شود و خود برنده شود. یک مهاجم میتواند از همین تکنیک برای مسدود کردن معاملات حساس مالی و ... اقدام کند.

اقدامات متقابل 

همان طور که توضیخ داده شد مسدود کردن حساب ها یک راه کامل برای مقابله با این حملات نیست. اما ترفندهای دیگری برای نیز برای مقابله با این حملات وجود دارد. از آنجاکه موفقیت این حملات به زمان بستگی دارد, یک راه حل آسان تزریق مکث های تصادفی هنگام چک کردن رمز عبور است. افزودن مکث حتی چند ثانیه ای میتواند یک حمله را بسیار کند کند  اما بیشتر کاربران را هنگام ورود به سایت را ناراحت نمیکند. توجه داشته باشید که اگرچه اضافه کردن تاخیر میتواند یک حمله single-thread را کند کند اما اگر مهاجم چندین درخواست را همزمان ارسال کند کمتر موثر است. 

راه حل دیگر مسدود کردن یک IP با چند عملیات ناموفق است. اما مشکل این راه حل آن است که شما سهوا گروه هایی از کاربران را بلاک میکند که با بلاک کردن یک پراکسی سرور که توسط یک ISP استفاده میشود. مشکل دیگر این راه حل آن است که بسیاری از ابزارها از لیستی از پراکسی ها استفاده میکنند و با هر IP دو یا سه درخواست ارسال میکنند و سپس به دنبال بعدی میروند. یک مهاجم میتواند به راحتی فرایند مسدود کردن IP را دور بزند. بیشتر سایت ها حساب هارا بعد از یک عملیات موفق مسدود نخواهند کرد به همین دلیل یک مهاجم میتواند از هر پراکسی دو یا سه درخواست را امتحان کند. یک هکر با داشتن لیستی از 1000 پراکسی میتواند 2000 یا 3000  کلمه عبور را امتحان کند بدون مسدود شدن حساب ها. یک راه حل ساده در عین حال موثر آن است رفتار وب سایت خود را برای پاسخ به عملیات ناموفق درست طراحی نکنید. برای مثال اکثر وب سایت ها کد "HTTP 401 error" را برای کلمه عبور اشتباه میفرستند. اگرچه بعضی وب سایت ها کد "HTTP 200 SUCCESS" را برمیگردانند اما کاربر را به صفحه ای هدایت میکند و توضیح میدهد که رمز عبور را اشتباه وارد کرده است. این کار برخی سیستم ها را فریب می دهد اما دور زدن آن نیز راحت است. یک راه حل بهتر آن است که هر بار از پیام های خطای مختلفی استفاده کنید و یا گاهی به کاربر اجازه رفتن به یک صفحه را بدهید و دوباره کاربر را وادر به وارد کردن رمز عبور نمایید.

بعضی از ابزارها این امکان را دارند که مهاجم یک رشته را وارد میکند تا به دنبال آن باشند که نشان میدهد عملیات ورود ناموفق بوده است. به عنوان مثال اگر صفحه شامل عبارت "Bad username or password" باشد به معنای آن است که عملیات ناموفق بوده است و نام کاربری یا کلمه عبور بعدی را امتحان میکند. یک راه ساده برای مقابله با این راه این است که از عبارت هایی استفاده کنیم که در هنگام ورود موفق استفاده میشود.

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

سایر تکنیک هایی که میتوانید در نظر بگیرید عبارت اند از:

  • برای کاربران مهم که میخواهند از حساب خود در مقابل این نوع حملات جلوگیری کنند به آنها این امکان را  بدهید که بتوانند فقط از IP خاص وارد سیستم شوند.
  • برای جلوگیری از حملات خودکار از captcha استفاده کنید
  • به جای قفل کردن حساب کاربری آنرا در حالت قفل با دسترسی محدود قرار دهید.

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

شرایطی که میتوان حملات brute-force یا سو استفاده از یک حساب را نشان داد:

  • تعداد زیادی ورود ناموفق از یک IP
  • تلاش برای ورود به سایت با چند نام کاربری از طرف یک IP
  • تلاش برای ورود به یک حساب کاربری از طرف چندی IP
  • تلاش برای ورود با وارد کردن نام کاربری و کلمه عبور به  ترتیب حروف الفبا
  • تلاش برای ورود با نام کاربری یا کلمات عبور مانند ownsyou,washere,zealots ,hacksyou یا مشابه آنها که هکرها معمولا از آنها استفاده میکنند

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

Powered by Froala Editor