Веб-сайт — это большая, сложно устроенная структура, состоящая из нескольких программных слоев и множества элементов. Чем больше в системе составляющих, тем больше потенциальная поверхность атаки. Иногда даже опытный сисадмин может не заметить уязвимость, а вот хакеры со своими средствами автоматического перебора не упустят удобного случая, чтобы начать атаку.
Последствия взломов сайта через уязвимости зависят от целей атакующего и результатов, которых он добился. Успешный взлом может привести к временной потере контроля над веб-ресурсом и компрометации данных.
Сегодня рассмотрим семь наиболее часто встречающихся веб-уязвимостей и способы борьбы с ними. Также расскажем о связи с DDoS-атаками и почему приобретение профессиональной защиты от DDoS — первый важный шаг к безопасности сайта.
1. Атака через устаревшие или пиратские плагины
Перед тем, как обратиться к более редким уязвимостям, напомним о главном.
Наиболее часто от кибератак страдают сайты на готовых конструкторах вроде WordPress — по данным на 2021 год, каждую секунду на сайты этого типа происходило порядка 3000 автоматических атак.
Абсолютное большинство атак на сайты, созданные в конструкторе, если отбросить брутфорс простых паролей, происходит на плагины. На сайтах типа WordPress может быть просто невероятное количество плагинов, и владельцы ресурсов порой вообще их не обновляют, делают это выборочно или редко.
Использование устаревшей версии самого движка, плагинов или тем ставит сайт под вероятный удар «автоботов». Злоумышленники используют метод автоматического перебора уязвимостей по спискам, которые находятся в открытом доступе.
Последствия
Вы можете потерять контроль над сайтом, либо его сделают переносчиком малвари: например, каждый раз, когда посетители будут заходить на ваш сайт, будет начинаться автоматическая загрузка вирусного ПО.
Как избежать
Поскольку ручное обновление каждого плагина и темы может быть весьма трудозатратным, лучше настроить регулярное автоматическое обновление всех элементов.
2. Захват аккаунта (Account Takeover)
Аутентификация по SMS весьма популярна на сайтах, так как это удобный для пользователя способ войти в личный кабинет без необходимости запоминать и вводить пароль.
Вместе с тем, при некорректной реализации этого функционала, появляется опасность захвата аккаунта. Если злоумышленник знает номер телефона жертвы, он сможет проанализировать ответ сервера, вычислить подходящий код с помощью автоматизированного перебора и войти в аккаунт.
Последствия
Хакеры могут захватить пользовательские аккаунты и распоряжаться ими по своему усмотрению, в зависимости от доступного функционала: вывести деньги с баланса жертвы, изменить персональные данные, либо вообще удалить аккаунт.
Как избежать
Используйте параметр rate limit для ограничения трафика на основе частоты запросов, поступающих из определенного источника. При превышении допустимых значений весь трафик из этой точки блокируется на определенный период времени.
3. Небезопасные прямые ссылки на объекты (IDOR)
Уязвимость IDOR (Insecure Direct Object Reference) позволяет злоумышленнику получить несанкционированный доступ к веб-страницам или файлам по прямой ссылке. Такая ситуация может возникнуть, если сайт выдает предсказуемый идентификатор: подставив нужное его значение, можно завладеть чужим профилем. Например, вы видите в адресной строке интернет-магазина определенный id, соответствующий вашему профилю. Если вы прямо в строке его меняете, то вдруг оказываетесь на чужой странице, на которой можете просматривать и редактировать контактные данные.
https://example.com/user/id=000001 — пример идентификатора профиля.
https://example.com/about_company/documents/filename — пример идентификатора с именем файла. Зная его заранее, злоумышленник может подменить файл и отправить ссылку ничего не подозревающей жертве.
Последствия
Воспользовавшись уязвимостью IDOR, мошенники могут массово похищать конфиденциальные данные. В случае с интернет-магазинами могут возникнуть и финансовые последствия (например, поменяв контактные данные, злоумышленник может похитить заказанные товары или даже вывести средства с баланса).
Как избежать
В идеале такая ситуация должна быть недопустима на сайте, имеющем дело с персональными данными пользователей. При каждом запросе к сайту нужно валидировать принадлежность данных конкретному пользователю, совершающему запрос, и уровень его прав. Также желательно избавиться от очевидных идентификаторов в открытом доступе.
4. XSS-уязвимости
Здесь имеются в виду те уязвимости на сайте, которые позволяют провести атаку типа Cross Site Scripting (межсайтовое выполнение сценариев). В процессе такой атаки в веб-страницу встраивается вредоносный код, либо ссылка на него, который начинает выполняться сразу после того, как пользователь откроет страницу.
Последствия
В результате действия внедренного JS-кода, злоумышленник может заполучить авторизационные данные пользователя и войти в его аккаунт. Другой вариант: жертву, незаметно для нее, перенаправляют на фишинговую страницу-клон, после чего, например, в случае фальшивых интернет-магазинов, похищается персональная и платежная информация.
Как избежать
Данные, которые вводит пользователь, при отображении на странице должны кодироваться, либо защищаться дополнительной валидацией. Обработка данных должна быть безопасной на стороне как сервера, так и клиента. В случае сайтов-конструкторов, как уже упоминалось выше, необходимо регулярное обновление инструментов и плагинов.
5. SQL-инъекции
С помощью атаки этого типа злоумышленник может получить информацию из базы данных в обход прямого доступа. В случае успеха данные пользователей интерпретируются как часть SQL-запроса, и его логика изменяется в угоду злоумышленнику, получающему чужие данные. Такая ситуация может произойти, если в коде сайта отсутствует фильтрация входящих параметров.
Последствия
Итогом SQL-атаки может стать массовая утечка конфиденциальных данных, потеря контроля над операциями администрирования и внедрение вредоносного контента в уязвимые места. Ущерб от эксплуатирования этой уязвимости может стать критическим для владельца сайта или онлайн-бизнеса.
Как избежать
SQL-инъекции, наравне с описанными выше XSS-атаками, по-прежнему в топе самых популярных уязвимостей, однако далеко не все знают, как от них защититься.
При составлении запросов необходимо использовать плейсхолдеры, позаботиться об отделении базы данных от логики веб-приложения и экранировать внешние запросы.
6. Отсутствие ограничений на длину пароля
Эта достаточно экзотическая атака работает только в том случае, если на сайте нет верхнего ограничения по количеству символов в пользовательском пароле. Если злоумышленник использует сгенерированный автоматически пароль длиной, например, в миллион символов, такой запрос (особенно если их несколько) может вывести сервер из строя. Здесь в группе риска, прежде всего, сайты на необновленных движках Django, Drupal и WordPress.
Последствия
Успешная атака через сверхдлинный пароль по последствиям эквивалентна DDoS. То есть у сайта сначала упадет производительность, а затем он полностью перестанет отвечать на запросы.
Как избежать
Установите верхний лимит на длину пароля при регистрации аккаунта (например, до 128 символов), на изменение пароля через личный кабинет и сброс пароля. Используйте актуальные алгоритмы хэширования с солью — специальным модификатором, который усложняет процесс перебора хэша. На Хабре есть небольшая заметка с техническими подробностями данного решения.
Примечание: в заметке фигурирует устаревший алгоритм md5. Мы рекомендуем вместо него использовать bcrypt.
7. External service interaction
Возможность заставить приложение взаимодействовать с внешней службой, такой как веб-сервер или почтовый сервер, сама по себе не является уязвимостью. Это может даже быть предполагаемым поведением приложения. Однако теоретически злоумышленник может таким образом узнать реальный IP-адрес сервера в обход межсетевого экрана и защиты от DDoS и произвести успешную атаку типа отказ в обслуживании.
Отправляя подходящие полезные нагрузки, злоумышленник может заставить сервер приложений атаковать другие системы, с которыми он может взаимодействовать. В том числе атака может затронуть общедоступные сторонние системы, внутренние системы внутри одной организации или службы.
Последствия
В результате такой DDoS-атаки сайт или определенные сервисы и услуги на нем могут стать временно недоступны для пользователей.
Как избежать
Проверьте, является ли возможность запуска произвольных взаимодействий с внешними службами предполагаемым поведением. При необходимости, заблокируйте сетевой доступ с сервера приложений к другим внутренним системам и усильте защиту самого сервера приложений для удаления любых служб, доступных на локальном адаптере обратной связи.
Другой возможный вариант — создать белый список разрешенных служб и хостов и заблокировать любые взаимодействия, которые не отображаются в этом белом списке.
Как защититься от веб-уязвимостей
Для того, чтобы максимально обезопасить свой сайт от кибератак, в том числе некоторых разновидностей DDoS, нужно сделать следующее:
- следить за обновлением всех компонентов сайта;
- установить максимальную длину пароля;
- настроить ограничитель rate limit;
- защитить идентификаторы пользователей;
- провести ревизию на предмет XSS-уязвимостей;
- обезопасить SQL-базы данных;
- задать правила взаимодействия сервера с внешними источниками.
Все эти меры хороши, когда уже есть подключенная защита от DDoS в целом, так как организация такой атаки для злоумышленников проще всего и практически не зависит от наличия уязвимостей на сайте. Без такой защиты, соответственно, удваивается риск потери данных и выхода сайта из строя. Позаботьтесь об устранении уязвимостей сегодня — это лучше, чем пытаться устранить их уже в процессе нападения хакеров.