C защита от. Защита на сървъра от хакване

Повечето програми трябва да взаимодействат с потребителя чрез въвеждане на определени данни, било то пълно име, височина, тегло, които да бъдат въведени в базата данни, или геометричните размери на някакъв обект, за който трябва да се изчисли нещо. Всички тези данни се въвеждат от потребителя - лице, което означава, че всичко може да дойде в отговор. Какво ще произведе програмата, ако потребителят я напише с думи вместо възрастта, която изисква? Най-вероятно програмата ще се срине или ще замръзне, но не и ако има „защита от глупаци“.

Защо дадена програма може да се срине или да замръзне? Програмата ще се опита да преобразува набора от знаци в число, което няма да е възможно, което означава по-нататъшна работаприложението не е дефинирано. Ето защо е много важно да организирате структурата на програмата така, че при влизане неочакваноза програмата за данни (неправилно от гледна точка на необходимия формат: необходимо е число, но се въвежда дума), приложението не се срива, но информира потребителя, че е възникнала грешка и иска да повтори въвеждането. Това е „доказателство за глупаци“.

Внедряване на защита от грешки в C

За да се реализира добра защита от грешки при въвеждане на различни числови (int, double...) данни, е необходимо да се четат не самите числа, а целият входен низ и едва след това да се анализира входа. Езикът C има много добра функция sscanf(const char *, const char *, args) , която работи подобно на функцията scanf(const char *, args), връщайки броя на успешно прочетените аргументи, само данните не се четат от стандартен потоквход, но от низа, предаден му като първи аргумент.

Нека да разгледаме някои примери за функции, които прилагат проверка на грешки с помощта на функцията sscanf.

Въвеждане на цяло число с проверка за неправилно въвеждане

int get_integer(const char *msg) ( char answer; // ред за четене int n; // окончателно цяло число printf("%s", msg); // показване на подкана fgets(answer, sizeof(answer), stdin); // прочете реда // докато не бъде прочетено цяло число while (sscanf(answer, "%d", &n) != 1) ( printf("Неправилно въвеждане. Опитайте отново: "); // отпечатайте съобщение за грешка fgets (отговор, sizeof(отговор), stdin); // и прочете реда отново ) return n; // върне правилното цяло число)

За да прочете цяло число, алгоритъмът чете целия низ и след това се опитва да получи цяло число от него. Ако това не успее, функцията показва съобщение за грешка, което ви моли да повторите въвеждането, докато бъде въведена правилната целочислена стойност.

Въвеждане на реално число с проверка за грешно въвеждане

double get_double(const char *msg) ( char answer; // ред за четене double x; // окончателно реално число printf("%s", msg); // показване на подкана за въвеждане fgets(answer, sizeof(answer), stdin); // прочете реда // докато се прочете реално число, докато (sscanf(answer, "%lf", &x) != 1) ( printf("Неправилно въвеждане. Опитайте отново: "); // отпечатайте съобщение за грешка fgets(answer, sizeof(answer), stdin); // и прочете реда отново ) return x; // return the correct real number )

Въвеждане на точка в координатната равнина (структура с две реални полета)

// описание на структурата на данните typedef struct point_t ( double x; // x координата double y; // y координата ) point_t; point_t get_point(const char *msg) ( char answer; // ред за четене point_t point; // крайна точка printf("%s", msg); // показва подкана за въвеждане fgets(answer, sizeof(answer), stdin ); // прочете реда // докато не бъдат прочетени координатите на двете точки, докато (sscanf(answer, "(%lf,%lf)", &point.x, &point.y) != 2) ( printf("Неправилно въвеждане. Опитайте отново: "); // изведете съобщение за грешка fgets(answer, sizeof(answer), stdin); // и прочетете отново реда) точка за връщане; // върнете правилната точка)

Както може да се види от примерите, функцията на функцията sscanf, връщаща броя прочетени аргументи, ви позволява да контролирате коректността на въведените данни в посочения формат, а четенето на целия ред предпазва от факта, че знаците за интервали или прекъсвания на редове „\n“ ще остане във входния поток, което много често ви принуждава да губите Не отнема час или дори ден, за да откриете грешка.

Здравейте всички от екипа на UNITWAY PW. С тази тема бихме искали да демонстрираме липсата на нелоялна конкуренция от наша страна и липсата на черна, грозна, измамна конкуренция от проекта NewDestiny.

Ето списък с решения за атаки, които някога са били използвани от администраторите на NewDestiny loko9988, TyrikMan (вчерашната OOG атака беше от IP адреса на Йошкар Ола), Killer_Pooh (Беше записана и атака от град Волжски). Освен атаките срещу нас, получихме информация за атака срещу редица други сървъри, която беше свързана с нашето откритие. Чрез публикуването на редица поправки от тези атаки, ние демонстрираме нашата незамесеност в атаки срещу когото и да било, въпреки явно загрижената позиция на администратора на Zzebra PW (mirthost) по отношение на нашия проект. Ние не таим абсолютно никаква злоба към всеки, който се е хванал по жълтата статия за нас; всеки има своя глава на раменете си.


И това е само част от техните сметки.

Една от причините да публикуваме тази тема бяха слуховете, които достигнаха до нас. Същността на тези слухове е, че loko9988 атакува сървъри не само поради конкуренция, но и за да предложи защита на тези сървъри чрез него.

Защита срещу OOG атаки, базирани на iptables:
Първо, ние създаваме скриптови правила за защитна стена, можете да ги наричате както искате.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -j LOG --log-prefix "PW"

Кликнете, за да разширите...

С това правило записваме всички пакети за игри от порт 29000 с размери от 500 до 65535 байта.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recent --name packets --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recent --name packets --update --seconds 1 --hitcount 100 -j REJECT

Кликнете, за да разширите...

С тези правила блокираме потребител, ако сървърът получи от него повече от 100 пакета с размер 500 - 65535 байта за 1 секунда на порт 29000 (игра).

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recent --name packet1 --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recent --name packet1 --update --seconds 15 --hitcount 3 -j REJECT

Кликнете, за да разширите...

С тези правила блокираме потребители, изпратили повече от 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 recent --name brute --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NEW -m recent --name brute --update --seconds 30 --hitcount 3 -j REJECT

Кликнете, за да разширите...

С това правило блокираме IP адреса на потребителя за 30 секунди, ако той е направил повече от 3 заявки за свързване към порт 29000.
  • Направете пълно ограничение на портовете, с изключение на този за игри през iptables.
  • Свържете се със сървъра чрез ssh ключ (ключове) с кодова дума.
  • Използвайте най-новите версии mysql, apache2 и други важни пакети.
  • След зареждане чрез OOG, използвайте logrotate, в противен случай, когато архивиранелеговища RAM паметВашият сървър ще бъде напълно използван. Това може да доведе до хакване.
  • Не използвайте софтуер на трети страни на сървъра на играта.
  • Използвайте персонализиран филтър за парола на играч. Само за няколко часа имаше над 50 000 невалидни опита за авторизация при нашето влизане. 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, която ще ви позволи не само да шифровате данни, но и да проверите самоличността на други участници в мрежовата инфраструктура, като им издадете съответните сертификати.

Проверка на сигурността на сървъра

Би било добра идея независимо да проверите сигурността на сървъра с помощта на метод pentest, т.е. моделиране на атаки, за да откриете потенциални уязвимости и да ги елиминирате своевременно. Препоръчително е да включите специалисти в това информационна сигурност, но някои тестове могат да се направят независимо, като се използват програми за хакване на сървъри.

Какво друго застрашава сървърите освен хакване?

Сървърът може да се провали поради редица причини, различни от хакване. Например, това може да е инфекция със зловреден софтуер или просто физическа повреда на един от компонентите.

Следователно мерките за защита на сървъра трябва да включват:

  • Инсталиране и обновяване на програми за защита на сървъра - антивируси.
  • Редовни криптирани копия на данни поне веднъж седмично, тъй като според статистиката, твърди дисковесървърите са на първо място по честота на повреди. Уверете се архивиранесъхранявани във физически защитена среда.
  • Осигуряване на непрекъснато захранване на сървърното помещение.
  • Навременна физическа профилактика на сървъри, включително почистване от прах и смяна на термопаста.

Опитът на специалистите от Integrus ни казва това най-добра защитасрещу този тип заплахи е прилагането на най-добрите практики в областта на сървърните системи за защита.

За да гарантираме сигурността на сървърите на нашите клиенти, ние използваме комбинация от инструменти: защитни стени, антивируси, технологии за сигурност / управление на събития (SIM / SEM), технологии за откриване / защита на проникване (IDS / IPS), технологии за анализ на мрежовото поведение (NBA) , разбира се редовна превантивна поддръжка на сървъри и подреждане на защитени сървърни стаи до ключ. Това ви позволява да намалите до минимум рисковете от хакване или отказ на сървъра по други причини.

Ние сме готови да проведем одит на сигурността на сървърите на вашата компания, да се консултираме със специалисти и да извършим всички видове работа за настройка на защитата на сървърното оборудване.

Споделете