C حفاظت از. محافظت از سرور در برابر هک

اکثر برنامه ها باید با وارد کردن داده های خاص با کاربر تعامل داشته باشند، خواه نام کامل، قد، وزن برای وارد شدن به پایگاه داده، یا ابعاد هندسی شیئی که برای آن چیزی باید محاسبه شود. همه این داده ها توسط کاربر وارد می شود - یک شخص، به این معنی که هر چیزی می تواند در پاسخ باشد. اگر کاربر به جای سنی که نیاز دارد، برنامه را با کلمات بنویسد، خروجی آن چیست؟ به احتمال زیاد، برنامه از کار می افتد یا مسدود می شود، اما نه اگر "حفاظت احمقانه" داشته باشد.

چرا ممکن است یک برنامه از کار بیفتد یا مسدود شود؟ برنامه سعی می کند مجموعه کاراکترها را به یک عدد تبدیل کند، که امکان پذیر نخواهد بود، به این معنی کار بیشتربرنامه تعریف نشده است بنابراین سازماندهی ساختار برنامه به گونه ای که هنگام ورود بسیار مهم است غیر منتظرهبرای برنامه داده (از نظر فرمت مورد نیاز نادرست است: یک عدد مورد نیاز است، اما یک کلمه وارد شده است)، برنامه خراب نشد، اما به کاربر اطلاع داد که خطایی رخ داده است و درخواست کرد که ورودی را تکرار کند. این "اثبات احمقانه" است.

اجرای احکام خطا در C

برای پیاده‌سازی غلط‌گیری خوب برای وارد کردن داده‌های عددی مختلف (int، double...)، لازم است نه خود اعداد، بلکه کل رشته ورودی را بخوانید و تنها پس از آن ورودی را تجزیه و تحلیل کنید. زبان C بسیار عملکرد خوب sscanf(const char *، const char *، args)، که مشابه تابع scanf(const char *، args) کار می کند، تعداد آرگومان هایی که با موفقیت خوانده شده را برمی گرداند، فقط داده ها از آن خوانده نمی شوند. جریان استانداردورودی، اما از رشته به عنوان اولین آرگومان به آن ارسال می شود.

بیایید به چند نمونه از توابعی نگاه کنیم که بررسی احمقانه را با استفاده از تابع sscanf اجرا می کنند.

وارد کردن یک عدد صحیح با بررسی ورودی نادرست

int get_integer(const char *msg) ( char پاسخ؛ // خط برای خواندن int n؛ // عدد صحیح نهایی printf("%s"، msg)؛ // نمایش اعلان fgets(answer, sizeof(answer), stdin); // خط // را بخوانید تا زمانی که یک عدد صحیح خوانده شود while (sscanf(پاسخ، "%d"، &n) != 1) ( printf("ورودی اشتباه است. دوباره امتحان کنید:")؛ // یک پیام در مورد خطای fgets چاپ کنید (جواب، sizeof(پاسخ)، // و دوباره خط را بخوانید ) اعداد صحیح را برگردانید.

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

وارد کردن یک عدد واقعی با بررسی ورودی نادرست

double get_double(const char *msg) ( char پاسخ؛ // خط برای خواندن دو برابر x؛ // عدد واقعی نهایی printf("%s"، msg)؛ // نمایش اعلان fgets(answer, sizeof(answer), stdin) . خطای fgets(answer, sizeof(پاسخ)، // و دوباره خط را بخوانید ) عدد واقعی را برگردانید.

وارد کردن یک نقطه در صفحه مختصات (ساختار با دو میدان واقعی)

// شرح ساختار داده typedef struct point_t ( double x; // x مختصات double y; // y مختصات ) point_t; point_t get_point(const char *msg) ( char پاسخ؛ // خط برای خواندن point_t point; // نقطه نهایی printf("%s"، msg)؛ // نمایش یک اعلان ورودی fgets(answer, sizeof(answer), stdin ); دوباره امتحان کنید: ")؛ // نمایش یک پیام خطا fgets(answer, sizeof(answer)، stdin); // و دوباره خط را بخوانید ) نقطه بازگشت؛ // نقطه صحیح را برگردانید)

همانطور که از مثال ها مشخص است، ویژگی تابع sscanf که تعداد آرگومان های خوانده شده را برمی گرداند به شما امکان می دهد صحت داده های وارد شده را در قالب مشخص شده کنترل کنید و خواندن کل خط از این واقعیت محافظت می کند که کاراکترهای فاصله یا خط شکسته شوند. «\n» در جریان ورودی باقی می‌ماند، که اغلب شما را مجبور به هدر دادن می‌کند. یافتن خطا یک ساعت یا حتی یک روز طول نمی‌کشد.

سلام به همه اعضای تیم UNITWAY PW. با این موضوع می خواهیم عدم وجود رقابت ناعادلانه از طرف خود و عدم وجود رقابت سیاه، زشت و فریبکارانه را از پروژه NewDestiny نشان دهیم.

در اینجا لیستی از راه حل های حملاتی است که تاکنون توسط مدیران NewDestiny استفاده شده است loko9988، TyrikMan (حمله دیروز OOG از آدرس IP Yoshkar Ola بود)، Killer_Pooh (حمله از شهر Volzhsky نیز ثبت شد). علاوه بر حملات به ما، اطلاعاتی در مورد حمله به تعدادی سرور دیگر دریافت کردیم که با کشف ما مرتبط بود. با انتشار تعدادی اصلاحات از این حملات، علیرغم موضع نگران کننده واضح مدیر Zzebra PW (mirthost) در مورد پروژه ما، عدم دخالت خود را در حملات به هر کسی نشان می دهیم. ما مطلقاً هیچ کینه ای نسبت به همه کسانی که به مقاله زرد درباره ما افتادند، نداریم.


و این تنها بخشی از حساب های آنهاست.

یکی از دلایل انتشار این موضوع شایعاتی بود که به دست ما رسید. ماهیت این شایعات این است که loko9988 نه تنها به دلیل رقابت، بلکه به منظور ارائه حفاظت از این سرورها از طریق او به سرورها حمله می کند.

محافظت در برابر حملات OOG بر اساس iptables:
اول از همه، ما قوانین فایروال اسکریپت شده را ایجاد می کنیم، شما می توانید آنها را هر طور که می خواهید صدا کنید.

iptables -A INPUT -p tcp -m چند پورت --dports 29000 -m طول --طول 500:65535 -j LOG --log-پیشوند "PW"

برای گسترش کلیک کنید...

با این قانون، ما تمام بسته های بازی را از پورت 29000 با اندازه های بین 500 تا 65535 بایت ضبط می کنیم.

iptables -A INPUT -p tcp -m چند پورت --dports 29000 -m طول --طول 500:65535 -m اخیر -- بسته های نام -- مجموعه
iptables -A INPUT -p tcp -m چند پورت --dports 29000 -m طول --طول 500:65535 متر -- بسته های نام اخیر -- به روز رسانی -- ثانیه 1 -- تعداد بازدید 100 -j رد

برای گسترش کلیک کنید...

با این قوانین، اگر سرور از او بیش از 100 بسته به اندازه 500 - 65535 بایت در 1 ثانیه در پورت 29000 (بازی) دریافت کند، کاربر را مسدود می کنیم.

iptables -A INPUT -p tcp -m چند پورت --dports 29000 -m طول --طول SIZE -m اخیر --name packet1 --set
iptables -A INPUT -p tcp -m چند پورت --dports 29000 -m طول --طول SIZE -m اخیر --نام بسته1 --به روز رسانی -- ثانیه 15 -- تعداد بازدید 3 -j رد

برای گسترش کلیک کنید...

با این قوانین، کاربرانی که بیش از 3 بسته را در 15 ثانیه به پورت 29000 ارسال کردند، مسدود می کنیم. SIZE - اندازه بسته به بایت.
چگونه اندازه بسته را بر حسب بایت ردیابی کنیم؟
پس از قانون اول، جایی که ما همه بسته های بازی را وارد می کنیم، می توانید آنها را در فایل مشاهده کنید /var/log/syslogیا تیم dmesgدر کنسول سرور
هنگامی که حمله ای در syslog وجود دارد، بسته های مشابه زیادی در مدت زمان کوتاهی وجود خواهند داشت.

PW IN=ipip1 OUT= MAC=SRC= آدرس IP کاربر DST=*.*.*.* LEN=547 TOS=0x00 PREC=0x00 TTL=241 ID=13328 DF PROTO=TCP SPT=22511 DPT=63947 WINDOW=254 RES=0x00 ACK PSH URGP=0

برای گسترش کلیک کنید...

در مثال بالا، اندازه بسته "LEN=547" است.

ما حفاظت OOG را مرتب کردیم. بیایید به روش های دیگر رقابت NewDestiny برویم.
حساب های بی رحم همه چیز در اینجا کاملاً ساده است:
#بلاک ورود بروت فورس

iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NEW -m اخیر --name brute --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NEW -m اخیر --name brute --update --seconds 30 --hitcount 3 -j REJECT

برای گسترش کلیک کنید...

با این قانون، اگر کاربر بیش از 3 درخواست برای اتصال به پورت 29000 داشته باشد، IP را به مدت 30 ثانیه مسدود می کنیم.
  • یک محدودیت کامل در پورت ها ایجاد کنید، به جز برای بازی از طریق iptables.
  • با استفاده از کلید ssh (کلیدها) با کلمه کد به سرور متصل شوید.
  • استفاده کنید آخرین نسخه ها mysql، apache2 و سایر بسته های مهم.
  • پس از بارگذاری از طریق OOG، از logrotate استفاده کنید، در غیر این صورت وقتی پشتیبان گیریلانه ها رمسرور شما به طور کامل مورد استفاده قرار خواهد گرفت. این ممکن است منجر به هک شود.
  • از نرم افزارهای شخص ثالث روی سرور بازی استفاده نکنید.
  • از فیلتر رمز عبور پخش کننده سفارشی استفاده کنید. فقط در چند ساعت، بیش از 50000 تلاش برای مجوز نامعتبر برای ورود ما انجام شد. 30 درصد از بازیکنان ما از این جفت های لاگین-رمز ورود به سیستم یکسانی داشتند.
ما رقابت منصفانه را ترجیح می دهیم، زمان یا بودجه اضافی برای حمله نداریم. با این افراد کار نکنید، ممکن است پایان بدی داشته باشد.

محافظت از سرور در برابر دسترسی خارجی یک بار برای همیشه غیرممکن است، زیرا هر روز آسیب پذیری های جدیدی کشف می شود و راه های جدیدی برای هک سرور ظاهر می شود. در این مقاله در مورد محافظت از سرورها در برابر دسترسی غیرمجاز صحبت خواهیم کرد.

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

باید درک کرد که محافظت در برابر هک سرور مجموعه ای از اقدامات است، از جمله نظارت مداوم بر عملکرد سرور و کار برای بهبود حفاظت. محافظت از سرور در برابر دسترسی خارجی یک بار برای همیشه غیرممکن است، زیرا هر روز آسیب پذیری های جدیدی کشف می شود و راه های جدیدی برای هک سرور ظاهر می شود.

در این مقاله در مورد محافظت از سرورها در برابر دسترسی غیرمجاز صحبت خواهیم کرد.

راه ها و روش های محافظت از سرورها در برابر دسترسی غیرمجاز

حفاظت فیزیکی سرور

حفاظت فیزیکی توصیه می شود که سرور در یک مرکز داده ایمن قرار گیرد، یک اتاق بسته و محافظت شده نباید به سرور دسترسی داشته باشد.

احراز هویت SSH را تنظیم کنید

هنگام تنظیم دسترسی به سرور، از احراز هویت کلید SSH به جای رمز عبور استفاده کنید، زیرا شکستن چنین کلیدهایی با استفاده از نیروی بی رحم بسیار دشوارتر است و گاهی اوقات به سادگی غیرممکن است.

اگر فکر می کنید که هنوز به رمز عبور نیاز دارید، حتماً تعداد تلاش برای وارد کردن آن را محدود کنید.

لطفا توجه داشته باشید که در صورت مشاهده چنین پیامی هنگام ورود به سیستم:

آخرین ورود ناموفق: سه شنبه 28 سپتامبر 12:42:35 MSK 2017 از 52.15.194.10 در ssh:notty
از آخرین ورود موفق، 8243 تلاش برای ورود ناموفق وجود داشته است.

ممکن است نشان دهنده این باشد که شخصی سعی کرده است سرور شما را هک کند. در این حالت، برای پیکربندی امنیت سرور، پورت SSH را تغییر دهید، لیست IP هایی را که دسترسی به سرور از طریق آنها امکان پذیر است را محدود کنید، یا نرم افزاری را نصب کنید که به طور خودکار فعالیت های بیش از حد مکرر و مشکوک را مسدود می کند.

به طور مرتب آخرین به روز رسانی ها را نصب کنید

برای اطمینان از محافظت از سرور، به‌سرعت آخرین وصله‌ها و به‌روزرسانی‌ها را برای نرم‌افزار سروری که استفاده می‌کنید نصب کنید - سیستم عامل، هایپروایزر، سرور پایگاه داده.

برای جلوگیری از حملاتی که از آسیب‌پذیری‌های روز صفر سوء استفاده می‌کنند، توصیه می‌شود که هر روز به‌روزرسانی‌ها، به‌روزرسانی‌ها و گزارش‌های باگ/آسیب‌پذیری جدید را بررسی کنید. برای انجام این کار، مشترک اخبار شرکت توسعه نرم افزار شوید، صفحات آن را در شبکه های اجتماعی دنبال کنید.

از رمزهای عبور خود محافظت کنید

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

  • از رمزهای عبوری که به راحتی قابل حدس زدن هستند، مانند نام شرکت خود استفاده نکنید.
  • اگر همچنان از رمز عبور پیش فرض کنسول مدیر استفاده می کنید، فوراً آن را تغییر دهید.
  • رمز عبور برای سرویس های مختلف باید متفاوت باشد.
  • اگر نیاز به دادن رمز عبور به شخصی دارید، هرگز آدرس IP، ورود به سیستم و رمز عبور را در همان ایمیل یا پیام مسنجر ارسال نکنید.
  • برای ورود به حساب سرپرست خود می توانید احراز هویت دو مرحله ای را تنظیم کنید.

دیواره آتش

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

به طور خاص، فایروال برای محافظت از سرور بسیار مفید است حملات ddos، زیرا شما می توانید به سرعت قوانین فایروال منع کننده را ایجاد کنید و آدرس های IP را که از آن حمله می شود اضافه کنید، یا دسترسی به برنامه های خاص را با استفاده از پروتکل های خاص مسدود کنید.

مانیتورینگ و تشخیص نفوذ

  • نرم افزار و سرویس های در حال اجرا بر روی سرور خود را محدود کنید. هر چند وقت یکبار همه چیزهایی را که در حال اجرا هستید بررسی کنید، و اگر فرآیندهایی برای شما ناآشنا بود، فوراً آنها را حذف کنید و شروع به اسکن برای ویروس کنید.
  • به طور دوره ای علائم دستکاری را بررسی کنید. اطلاعات جدید ممکن است نشان دهنده هک باشد حساب هاکاربرانی که فایلی را ایجاد، انتقال یا حذف نکرده‌اید /etc/syslog.conf, فایل های حذف شده/etc/shadowو /etc/passwrd.
  • عملکرد سرور خود را نظارت کنید، سرعت عادی آن را ببینید و توان عملیاتی، بنابراین می توانید متوجه انحرافات شوید، به عنوان مثال، زمانی که بار روی سرور به طور قابل توجهی بیشتر از حد معمول شده است.

با استفاده از رمزگذاری VPN و SSL/TLS

در صورت لزوم دسترسی از راه دوربه سرور، فقط باید از آدرس های IP خاصی مجاز باشد و از طریق VPN رخ دهد.

گام بعدی در تضمین امنیت می‌تواند راه‌اندازی SSL باشد، که به شما امکان می‌دهد نه تنها داده‌ها را رمزگذاری کنید، بلکه هویت سایر شرکت‌کنندگان در زیرساخت شبکه را تأیید کنید و گواهی‌های مناسب را برای آنها صادر کنید.

بررسی امنیت سرور

این ایده خوبی خواهد بود که به طور مستقل امنیت سرور را با استفاده از روش پنتست بررسی کنید. مدل‌سازی حمله برای یافتن آسیب‌پذیری‌های احتمالی و از بین بردن آن‌ها به موقع. توصیه می شود متخصصان را در این امر مشارکت دهید امنیت اطلاعاتبا این حال، برخی از تست ها را می توان به طور مستقل و با استفاده از برنامه هایی برای هک سرورها انجام داد.

به جز هک چه چیز دیگری سرورها را تهدید می کند؟

یک سرور ممکن است به دلایلی غیر از هک کردن، از کار بیفتد. به عنوان مثال، این می تواند یک عفونت بدافزار یا صرفاً یک خرابی فیزیکی یکی از مؤلفه ها باشد.

بنابراین، اقدامات برای محافظت از سرور باید شامل موارد زیر باشد:

  • نصب و به روز رسانی برنامه های محافظت از سرور - آنتی ویروس ها.
  • حداقل یک بار در هفته کپی های رمزگذاری شده منظم داده ها را انجام دهید، زیرا طبق آمار، هارد دیسک هاسرورها در تعداد دفعات خرابی در رتبه اول قرار دارند. مطمئن شوید که نسخه پشتیباندر یک محیط امن فیزیکی ذخیره می شود.
  • اطمینان از برق رسانی بدون وقفه به اتاق سرور.
  • پیشگیری فیزیکی به موقع سرورها از جمله پاکسازی آنها از گرد و غبار و تعویض خمیر حرارتی.

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

برای اطمینان از امنیت سرورهای مشتریان خود، از ترکیبی از ابزارها استفاده می کنیم: فایروال ها، آنتی ویروس ها، فناوری های امنیت / مدیریت رویداد (SIM / SEM)، فناوری های تشخیص نفوذ / حفاظت (IDS / IPS)، فناوری های تجزیه و تحلیل رفتار شبکه (NBA) ، و البته سرورهای نگهداری پیشگیرانه منظم و ترتیب اتاق های سرور ایمن کلید در دست. این به شما امکان می دهد خطرات هک یا خرابی سرور به دلایل دیگر را به حداقل برسانید.

ما آماده انجام ممیزی امنیتی سرورهای شرکت شما، مشاوره با متخصصان و انجام انواع کارها برای راه اندازی حفاظت از تجهیزات سرور هستیم.

اشتراک گذاری