Більшість програм повинні взаємодіяти з користувачем за допомогою введення певних даних, будь то ПІБ, зростання, вага для внесення до бази даних або геометричні розміри якогось об'єкта, для якого потрібно щось розрахувати. Всі ці дані вводить користувач - людина, а значить у відповідь може прийти що завгодно. Що видасть програма, якщо замість необхідного віку користувач напише його словом? Швидше за все, програма аварійно завершиться або зависне, але тільки не в тому випадку, якщо в ній передбачено "захист від дурня".
Чому програма може завершитися чи зависнути? Програма спробує перевести набір символів до числа, що зробити не вдасться, а отже подальша роботапрограми не визначено. Тому дуже важливо організовувати структуру програми так, щоб під час введення несподіванихдля програми даних (некоректних з погляду необхідного формату: потрібно число, а вводиться слово), додаток не "падало", а повідомляло користувача про те, що сталася помилка і пропонував повторити введення. Це і є "захист від дурня".
Реалізація захисту від дурня мовою 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); помилка fgets(answer, sizeof(answer), stdin); // і знову зчитуємо рядок ) return n; // повертаємо коректне ціле число )Щоб рахувати ціле число, алгоритм зчитує весь рядок і потім намагається отримати з нього ціле число. У тому випадку, якщо це не вдалося, функція виводимо повідомлення про помилку з пропозицією повторити введення, доки не буде введено коректне значення цілого числа.
Введення речового числа з перевіркою на некоректне введення
double get_double(const char *msg) ( char answer; // рядок для читання double x; // підсумкове речове число printf("%s", msg); // виводимо запрошення до введення fgets(answer, sizeof(answer), stdin); помилці fgets(answer, sizeof(answer), stdin); // і наново зчитуємо рядок ) return x; // повертаємо коректне речове число )Введення точки на координатній площині (структура з двома речовими полями)
// опис структури даних 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 );// зчитуємо рядок // поки не будуть раховані обидві координати точки while (sscanf(answer, "(%lf,%lf)", &point.x, &point.y) != 2) (printf("Incorrect input). Try again: "); // виводимо повідомлення про помилку fgets(answer, sizeof(answer), stdin); // і знову зчитуємо рядок ) return point; // повертаємо коректну точку )Як видно з прикладів, особливість повернення функцією sscanf числа лічених аргументів дозволяє контролювати коректність введених даних у зазначеному форматі, а зчитування всього рядка захищає від того, що в потоці введення залишаться символи пропуску або перенесення рядка "\n", які дуже часто змушують витратити на пошук помилки жодну годину або навіть день.
Неможливо захистити сервер від зовнішнього доступу раз і назавжди, адже щодня виявляються нові вразливості та з'являються нові способи злому сервера. Про захист серверів від несанкціонованого доступу ми розповімо в цій статті.
Сервера будь-якої компанії рано чи пізно можуть стати мішенню для злому чи вірусної атаки. Зазвичай результатом такої атаки стає втрата даних, репутаційні або фінансові збитки, тому питанням безпеки серверів варто приділити увагу в першу чергу.
Слід розуміти, що захист від злому серверів – це комплекс заходів, у тому числі який передбачає постійний моніторинг роботи сервера і роботу з удосконалення захисту. Неможливо захистити сервер від зовнішнього доступу раз і назавжди, адже щодня виявляються нові вразливості та з'являються нові способи злому сервера.
Про захист серверів від несанкціонованого доступу ми розповімо в цій статті.
Способи та методи захисту серверів від несанкціонованого доступу
Фізичний захист сервера
Фізичний захист. Бажано, щоб сервер знаходився в захищеному ЦОДі, закритому та охоронюваному приміщенні, сторонні не повинні мати доступу до сервера.
Встановіть аутентифікацію SSH
При налаштуванні доступу до сервера використовуйте автентифікацію за ключами SSH замість пароля, оскільки такі ключі набагато складніші, а іноді й просто неможливо зламати за допомогою перебору варіантів.
Якщо ж вважаєте, що вам таки потрібен пароль, обов'язково обмежте кількість спроб його введення.
Зверніть увагу, якщо при вході ви бачите таке повідомлення:
Last failed login: Tue Sep 28 12:42:35 MSK 2017 від 52.15.194.10 on ssh:notty
Там були 8243 згодні повідомлення про те, що останні successful login.
Це може свідчити, що ваш сервер намагалися зламати. У такому випадку для налаштування безпеки сервера змініть порт SSH, обмежте список IP, з яких можливий доступ до сервера або встановіть програмне забезпечення, яке автоматично блокує надмірно часту та підозрілу активність.
Регулярно встановлюйте останні оновлення
Для забезпечення захисту сервера вчасно встановлюйте останні патчі та оновлення серверного програмного забезпечення, яке використовуєте. операційної системи, гіпервізора, сервер баз даних.
Бажано перевіряти наявність нових патчів, оновлень та повідомлення про виявлені помилки/вразливості щодня, щоб запобігти атакам, що використовують уразливості нульового дня. Для цього підпишіться на новини від компанії-розробника, слідкуйте за її сторінками в соцмережах.
Захищайте паролі
До цих пір одним з найпоширеніших способів отримати доступ до сервера є зламування пароля сервера. Тому дотримуйтесь загальновідомих, але актуальних рекомендацій, щоб не залишити сервер без захисту:
- не використовуйте паролі, які легко підібрати, такі як назва компанії;
- якщо ви досі використовуєте дефолтний пароль для консолі адміністратора, негайно змініть його;
- паролі на різні послуги повинні бути різними;
- якщо вам необхідно передати пароль будь-кому, ніколи не надсилайте IP-адресу, логін і пароль в тому самому листі або повідомленні в месенджері;
- для входу в обліковий запис адміністратора можна встановити двоетапну аутентифікацію.
Файрвол
- Переконайтеся, що на сервері є , він настроєний і працює весь час.
- Захищайте і вихідний, і вихідний трафік.
- Слідкуйте за тим, які порти відкриті і для яких цілей, не відкривайте нічого зайвого, щоб знизити кількість ймовірних вразливих місць для злому сервера.
Зокрема, файрвол дуже допомагає у захисті сервера від ddos атак, т.к. можна швидко створювати забороняючі правила файрвола і вносити в них IP-адреси, з яких йде атака, або блокувати доступ до певних програм за певними протоколами.
Моніторинг та виявлення вторгнень
- Обмежте програмне забезпечення та служби, що працюють у вас на сервері. Періодично перевіряйте все, що у вас запущено, і якщо виявляться якісь вам незнайомі процеси, видаляйте їх негайно і починайте перевірку на віруси.
- Періодично перевіряйте наявність слідів злому. Про злом можуть свідчити нові облікові записикористувачів, які ви не створювали, переміщення або видалення файлу /etc/syslog.conf, видалені файли/etc/shadowі /etc/passwrd.
- Моніторьте роботу вашого сервера, стежте за його звичайною швидкістю та пропускною здатністюТак ви зможете помітити відхилення, наприклад, коли навантаження на сервер стало значно більше звичайного.
Використання VPN та шифрування SSL/TLS
Якщо необхідний віддалений доступдо сервера, він повинен бути дозволений тільки з певних IP-адрес і відбуватися за VPN.
Наступним етапом забезпечення безпеки може бути налаштування SSL, яке дозволить не лише шифрувати дані, а й перевіряти ідентичність інших учасників мережної інфраструктури, надаючи їм відповідні сертифікати.
Перевірка безпеки сервера
Хорошою ідеєю буде самостійна перевірка безпеки сервера шляхом пентесту, тобто. моделювання атаки, щоб знайти потенційні вразливості та вчасно їх ліквідувати. Бажано залучити до цього фахівців з інформаційної безпекиОднак деякі тести можна зробити і самостійно, використовуючи програми для злому серверів.
Що ще загрожує серверам, крім злому
Сервер може вийти з ладу з інших причин, крім злому. Наприклад, це може бути зараження шкідливим програмним забезпеченням або просто фізична поломка будь-якого з компонентів.
Тому заходи захисту сервера повинні включати:
- Встановлення та оновлення програм для захисту сервера – антивірусів.
- Регулярні зашифровані копії даних щонайменше раз на тиждень, оскільки, згідно зі статистикою, жорсткі диски сервера на першому місці за частотою поломок. Впевніться, що резервна копіязберігається у фізично безпечному середовищі.
- Забезпечення безперебійного електроживлення серверним.
- Своєчасна фізична профілактика серверів, що включає їх чищення від пилу та заміну термопасти.
Досвід фахівців "Інтегруса" говорить нам, що найкращий захиствід такого роду загроз – це застосування кращих практику сфері систем захисту серверів.
Для забезпечення безпеки серверів наших замовників ми застосовуємо поєднання інструментів: брандмауери, антивіруси, технології безпеки/керування подіями (SIM/SEM), технології виявлення вторгнень/захисту (IDS/IPS), технології мережевого поведінкового аналізу (NBA), звичайно ж регулярне профілактичне обслуговування серверів та облаштування захищених серверних під ключ. Це дозволяє звести ризики злому або відмови сервера з інших причин до мінімуму.
Готові провести аудит безпеки серверів вашої компанії, провести консультування фахівців, виконати всі види робіт з налаштування захисту серверного обладнання.