اطلاعیه

Collapse
No announcement yet.

جلوگیری از وارد شدن دیتا بر روی یک پورت

Collapse
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • جلوگیری از وارد شدن دیتا بر روی یک پورت

    سلام
    برنامه ای نوشته ام که پورت مثلا 2045 بر روی سیستم سرور باز هست.
    برنامه کلاینت از طریق این پورت متصل شده و ترانسفر اطلاعات میکنه.
    جند روز بود که میدیدم سیستم سرورم یا برنامه سرور هنگ میکنه . با بررسی متوجه شدم که یه آی پی چینی برنامه منو که سمت سرور هست ، گزاشته زیر برنامه و یه جورایی برنامه رو داغون میکنه.
    وقتی tcpserver برنامه سرور من از یه حدی که کانکشن رو سیستم باز کرد ، بیشتر میشه، برنامه هنگ میکنه.
    و چون سمت برنامه سرور بر روی هر پیغامی که میاد یه پردازش کوچولو انجام میده ، این خودش باعث پرهزینه بودن برنامه میشه.
    چه روشی رو پیشنهاد میکنید که جلوی چنین حمله ای رو بگیرم؟
    دلم میخاد کاری کنم که اگه 3 بار متوالی از سمت یه آی پی دیتایی اومد، اون آی پی رو بلاک کنم. اما میترسم برنامه کلاینت خودم همچین درخواستی رو بده و این باعث بدتر شدن وضعیت میشه.
    نظر دوستان چیه؟
    صد سال ره مسجد و ميخانه بگيري
    عمرت به هدر رفته اگر دست نگيري

    بشنو از پير خرابات تو اين پند
    هر دست که دادي به همان دست بگيري...

  • #2
    دیتایی که رد و بدل میکنی خاصه؟ یا اینکه ممکنه هر دیتایی باشه؟
    اگر دیتات خاص باشه میتونی فقط اجازه رد و بدل شدن اون دیتای خاص رو بدی
    ! Security is never Complete

    Comment


    • #3
      سلام

      خوب این کاری که کردی پورت ربطی به هنگ کردن از سمت سرور نداره سرور برای باز بودن پورت هنگ نمیکنه برنامه ممکنه این حالت براش پیش بیاد اما سرور چون پورت بازه یه ایپی بهش وصل میشه ربطی نداره

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

      و در ادامه این مثل موضوعی میمونه که شما یه پورت باز کنی روسرور بعد بگی چون یه ایپی اونم معلوم نیست از چه سرویسی استفاده میکنه برای اتصال باعث هنگ میشه اگه از پورتهای 1 تا 1024 باز میکنی این پورتها رجیستر شدند

      کسی بخواد وصل شه باید دسترسی داشته باشه
      Last edited by keylogger; 12-07-2013, 05:33 PM.

      Comment


      • #4
        بنده خدا خودش گفته زمانی که تعداد درخواست های دریافتی برنامش از یه حدی بیشتر بشه برنامه هنگ میکنه
        ! Security is never Complete

        Comment


        • #5
          و در ادامه این مثل موضوعی میمونه که شما یه پورت باز کنی روسرور بعد بگی چون یه ایپی اونم معلوم نیست از چه سرویسی استفاده میکنه برای اتصال باعث هنگ میشه اگه از پورتهای 1 تا 1024 باز میکنی این پورتها رجیستر شدند
          کسی بخواد وصل شه باید دسترسی داشته باشه
          انتخاب پورت ها يک مسئله قرار داديه هيچ بايد و نبايد وجود نداره و هيچ محدوديتی هم وجود نداره و فرقی هم نداره 1 انتخاب کنيد يا 65535 به شرطی که اون پورت توسط برنامه ديگه اشغال نشده باشه.


          اگه تعداد درخواست ها خيلی زياده و زير حمله هستید بايد يه سيستم تشخيص حمله رو بنويسی به طوری که اگر ديتای دريافتی پکت اول(به خاطر اينکه پردازش زياد نشه) با با فرمت پروتکل مورد استفاده خودت مطابقت نداشت اون آيپی رو وارد بلک ليست کنيد و همچنين به نکاتی بايد توجه کنيد بعد از اکسپت کردن هر سوکت چک کنيد مثلاً بعد از 30 ثانيه يا چند دقيقه اگر پکتی از اون آيپی دريافت نشد اون سوکت رو ببندید

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

          2.با زبانهای سطح پايينتر يک نيمچه فايروالی بنويسيد که فقط قابليت بلاک کردن آيپی رو داشته باشه و به صورت کامپوننت از اون داخل برنامه استفاده کنيد و آيپی های بلک ليست رو توسط فايروال بلاک کنيد در اين صورت هيچ پردازشی روی برنامه شما انجام نميشه و اتصالی هم از طرف آيپی های بلاک شده با سرور انجام نميشه .
          فایل های پیوست شده
          Last edited by negative; 12-08-2013, 04:41 AM.

          Comment


          • #6
            ممنون از پاسخگویی دوستان.
            دقیقا منظورم حمله هست. اون آی پی چینی بر روی همون پورتی که برنامه سرور باز گزاشته شروع میکنه به ارسال پکتهای متوالی. که باعث هنگ شدن میشه.
            من از دلفی استفاده میکنم و کامپوننتهای indy . به جه صورت باید وضعیت ارسال رو بررسی کرد که با کلاینتهام اشتباه نشه.
            البته در جواب دوست عزیزم باید بگم که ، دیتایی که از طرف کلاینت میاد به صورت بیس64 هست و سمت سرور با استفاده از کلید پرویت سعی بر باز کردن دیتای رسیده میکنه. اگر تونست باز کنه که هیچ و مطابق با دستوراتی که نوشتم جوابی برای کلاینت ، از روی همون کانکشن برگشت داده میشه،و در غیر این صورت پکت خود به خود دراپ میشه.
            اما همین عملیات باعث صرف منابع برنامه و سیستم میشه.
            صد سال ره مسجد و ميخانه بگيري
            عمرت به هدر رفته اگر دست نگيري

            بشنو از پير خرابات تو اين پند
            هر دست که دادي به همان دست بگيري...

            Comment


            • #7
              نوشته اصلی توسط Delphi_7 نمایش پست ها
              البته در جواب دوست عزیزم باید بگم که ، دیتایی که از طرف کلاینت میاد به صورت بیس64 هست و سمت سرور با استفاده از کلید پرویت سعی بر باز کردن دیتای رسیده میکنه. اگر تونست باز کنه که هیچ و مطابق با دستوراتی که نوشتم جوابی برای کلاینت ، از روی همون کانکشن برگشت داده میشه،و در غیر این صورت پکت خود به خود دراپ میشه.
              اما همین عملیات باعث صرف منابع برنامه و سیستم میشه.
              من دلفی بلد نیستم اما 100% با پست هایی که از شما دیدم مطمعنا شما خوب دلفی بلدین پس دنبال راهکارید
              راهکارش به نظر من اینه عملیات بالا رو قبل از تایید هویت انجام ندین
              یعنی برنامه رو فقط زمانی درگیر کنید که تشخیص بده کلاینته
              یعنی برنامه قبل از درگیر شدن برای باز کردن دیتا و ارسال مجددش اول هویت کلاینت رو تایید کنه
              راه دیگه هم اینکه اگه کلاینت هات محدود هستن فقط به ای پی اونا اجازه کانکت شدن روی اون پورت رو بدی
              ! Security is never Complete

              Comment


              • #8
                ممنون از دوست عزیزم negative
                سمپلتون به زبان سی هست . که من دلفی کار هستم و نمیتونم باهاش کار کنم. اما بازم ممنون. اما خودم فایروال برای دلفی دارم. بیشتر دنبال راهکار هستم.
                و ممنون از دوست عزیزم Ako0ri
                درسته. دنبال کد نیستم. دنبال راه حل هستم.
                یعنی برنامه قبل از درگیر شدن برای باز کردن دیتا و ارسال مجددش اول هویت کلاینت رو تایید کنه
                ببینید : زمانی که پورتی بر روی سیستمی باز هست ، اون پورت به تمام درخواستها گوش میکنه و رسیدگی میکنه . حتی واسه اینکه بفهمه این آی پی یه آی پی خرابکاره، بازم مجبوره به درخواستش گوش کنه.
                مشکل اصلی من دقیقا اینجاست که، اگر من، برنامه رو حساس به دوره زمانی مقدار اتصال کنم ، اگر به هر دلیلی کاربر کلاینت من به طور متداول به سرور وصل بشه و بخاد استفاده کنه ، ممکنه این حساسیت باعث بشه که آی پی مشتری من هم در بلاک لیست فایروالم قرار بگیره . که این مشکل رو دو چندان میکنه.
                نمیدونم تونستم هدفم رو روشن کنم یا نه؟
                صد سال ره مسجد و ميخانه بگيري
                عمرت به هدر رفته اگر دست نگيري

                بشنو از پير خرابات تو اين پند
                هر دست که دادي به همان دست بگيري...

                Comment


                • #9
                  خب بزار ده بار اشتباه بيس64 در 2 دقيقه.
                  كاربر اگه واقعي باشه كه پكت بيس64 اشتباهي پشت سر هم در بازه زماني مثلا 2 دقيقه نميفرسته !
                  بعد آي پي را به بلك ليست اضافه كنه و قبل از پردازش محتوي سورس آي پي را ببين ، اگه شامل حالش ميشد ترتيبشو بده

                  Comment


                  • #10
                    اگه يك يو تي ام بذاري سر در شبكه مشكل حل نميشه؟
                    كلاينت ها مگه فقط از داخل شبكه سرورت رو نميبينند؟
                    با اي پي اس اسنورت ميشه يك حركت هايي زد اوپن سورسه ، خودت هم ميتوني رول بهش اضافه كني.
                    www.snort.org

                    Comment


                    • #11
                      دوست گرامی delphi_7,
                      من سورس تون رو ندارم ااما یه سری نکات رو رعایت کرده باشی نباید هیچ مشکلی پیش بیاد.
                      اول برنامه سرور(برنامه ای که در سمت سرور گوش به زنگ میمونه) رو باید به صورت multithreading نوشته باشی تا چند تا کانکشن به طور همزمان به یک پورت ساپورت بشه(یعنی عین سرویس مثل وب سرور که روی 80 چندین کلاینت رو همزمان هندل میکنه).
                      دوما توی ساختار قبل از تعریف کردن تابع accept() یه آبشنی طراحی کن که اول بلک لیست ای پی ها رو چک کنه که اگر اوکی نبود سوکت رو accept نکنه و سوکت رو ببنده.
                      سوما برای جلوگیری از حملات داس و دیداس روی اون برنامه سرورت حتما یه ابشن دیگه طراحی کن به طوری که هر کلاینت که درخواست میده اول ای پی اش سیو شه توی یک ارایه و بعد واسه بلک لیست چک شه اگر بلک بود که دیسی کن سوکت رو- اگرم نبود یه لیمیت بزار.یعنی از هر ای پی وقت مثلا 5 تا سوکت همزمان مجاز باشه و اگر تعداد بیشتر درخواست داد به لیست سیاه اضافه بشه.

                      Comment

                      Working...
                      X