Безпека веб-додатків завжди була хворою темою. Говорять про неї багато, але загальна картина від цього практично не змінюється - хакерських атак як і раніше чимало, і часто вони вельми успішні для зловмисників і витрати для постраждалих.
З серйозною проблемою зіткнулися власники південнокорейського торгового майданчика Interpark - хакер проник в їхню базу даних, вкрав з неї інформацію про 10 млн. клієнтів і зараз вимагає викуп за її нерозголошення. Також до списку гучних інцидентів увійшов злом офіційного форуму Ubuntu за допомогою SQL-ін'єкції через добре відому вразливість в движку vBulletin. Викрадено персональні дані 2 млн. користувачів.
Все це - тільки за поточний липень. І тільки щодо великих сайтів. Складно уявити, скільки відбувається нападів на більш дрібні проекти. Втім, дослідники з Wallarm не полінувалися і порахували - за 2015 рік ними було зафіксовано 100 млн. атак на веб-ресурси своїх клієнтів.
Один з ефективних способів захисту свого сайту - проведення аудиту його безпеки. Тому давайте розглянемо, як проходить цей захід.
Тестування на проникнення
Найчастіше перевірка захищеності ресурсу проводиться за методом «чорного ящика» - фахівець з безпеки починає спроби злому своєї мети, як якщо б він був реальним зловмисником і переслідував якусь корисливу мету: хакнути конкурента, атакувати відвідувачів сайту, в таємниці від власника монетизувати сайт або просто потішити свою честолюбство.
Таким чином, тестувальник повинен вирішити хоча б одне з глобальних завдань:
- Порушити конфіденційність інформації замовника.
- Обмежити доступ до ключових даних.
- Змінити або знищити будь-які відомості без можливості їх відновлення.
Як видно з цього переліку, не можна просто так взяти і провести аудит сайту. Потрібна певна підготовка до тестування на проникнення, без якого воно або буде неефективно, або може стати справжньою хакерською атакою з сумними наслідками. Потрібно зробити хоча б наступне.
- Підписання угоди про нерозголошення. Дослідник під час своєї роботи може отримати доступ до дуже цінної конфіденційної інформації. Солідні організації, що займаються тестуванням безпеки, навряд чи будуть користуватися нею в своїх цілях, але не завжди є можливість перевірити чесність виконавця, тому договір краще укласти.
- Проведення аудиту на повній копії основного сайту. Тестувальник буде застосовувати всі методи хакерів, в тому числі і призводять до поломки веб-ресурсу або знищення даних на нім. Краще не піддавати бойову версію проекту такому стресу і обмежитися клоном.
- Приховування проведення аудиту. Чим менше людей знає про тестування - тим краще. Зловмисники рідко попереджають про свою атаку, тому якщо розповісти про захід великій кількості людей, це може спотворити результат.
Методи тестування на проникнення
Пошук за відкритими джерелами. Оскільки використовується спосіб «чорної скриньки», то тестувальник абсолютно не в курсі, як виглядає атакуваний об'єкт зсередини, інакше злом був би вкрай тривіальним завданням. Тому в хід йде попередній збір інформації.
Фахівця в першу чергу цікавить технічна сторона веб-додатку - якою мовою він написаний, яку CMS використовує і з якими розширеннями. Дізнатися все це можна навіть не вдаючись до спеціальних засобів, іноді вистачить тільки Google. Наприклад, можна знайти в LinkedIn співробітників атакуючої компанії, виділити серед них програмістів і визначити, якою мовою вони спеціалізуються.
Більш того, при бажанні можна з'ясувати, і чим конкретно вони займалися. Для цього достатньо пошукати за їхніми іменами або нікнеймами, і можна знайти у видачі багато чого цікавого. Це може бути, наприклад, обговорення від імені цього програміста будь-якого модуля для движку або замовлення з корпоративного аккаунта у фрілансера-підрядника нового плагіну з докладним ТЗ.
Визначення захисних засобів. Наявність будь-якого софту для безпеки - систем запобігання вторгненню, захисту від DDoS, міжмережевого екрану - може серйозно ускладнити завдання по злому, тому його необхідно виявити. Зазвичай для цього застосовуються спеціальні програми. Наприклад, виявити наявність фаєрфолу можна за допомогою сканера портів, а антиддос-сервіси визначаються за DNS-записами домену.
Використання стандартних вразливостей. Перш ніж починати шукати невідомі вразливості нульового дня, вивчати логіку роботи веб-додатку та його архітектуру, тестувальник перевірять стійкість сайту до звичайних методів атаки. Наприклад, це може бути використання відомого експлойту до старої версії рушія. Саме на цьому етапі і постраждали вищезгадані Interpark і форум Ubuntu.
У загальному вигляді на цьому етапі зазвичай відбувається наступне:
- Спроба вилучення коду.
- Спроба SQL-ін'єкції.
- Експлуатування XSS, RFI і LFI вразливостей.
- Пошук місць зберігання backup-ів і отримання доступу до них.
- Маніпуляції з системою авторизації: брутфорс, пошук небезпечного відновлення пароля, обхід автентифікації.
- Вивчення файлової структури сайту з метою виявлення файлів, доступ до яких обмежений тільки відсутністю явного посилання на нього.
- Перехоплення трафіку і його дослідження.
- Пошук варіантів несанкціонованого доступу до конфіденційної інформації.
Нешаблонний підхід. Коли загальновідомі методи не допомагають, тестувальник за допомогою комбінації всіх вищеописаних способів і свого розуміння систем безпеки намагається обійти існуючий захист або виявити невідому досі вразливість.
Далеко не всі аудитори проводять дану процедуру, тому що вона досить складна, вимагає дуже високої кваліфікації фахівців і коштує чимало. Як показує практика, дуже часто вразливості нульового дня виявляються сторонніми дослідниками. Однак і винагороду за їх знахідку вони отримують відповідне.
Насправді, якщо ваш сайт успішно проходить тестування на всі стандартні види загроз, то перевірку можна вважати успішною. Більш детальне і глибоке вивчення методів злому актуального тільки для дуже великих проектів, для злому яких можуть залучати дійсно висококласних хакерів, здатних виявляти нові проломи в захисті.
Завершення аудиту
Результатом будь-якого тестування на проникнення стає документ, який повинен включати в себе:
- Інформацію про методи, використані в момент проведення перевірки.
- Розробка концепції зловмисника, його потенційних цілях і мотивації.
- Опис розроблених та реалізованих тестувальниками сценаріїв атак.
- Докладний звіт про всі знайдені вразливості.
- Рекомендації щодо їх усунення.
Грамотно виконаний аудит - дуже ефективний захід пошуку слабких місць сайту і його сервера. Вкрай рідко тест проходиться повністю, зазвичай якась деталь упускається з виду розробниками. Але навіть у тому випадку, якщо веб-ресурс так і не вдалося зламати, це все одно результат - тепер його власник точно зможе спати спокійно.















