Бесплатно Экспресс-аудит сайта:

24.08.2022

Полное руководство по основам уязвимостей

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

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

Переполнение буфера (Buffer Overflow)

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

Эксплойт переполнения буфера

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

Типы уязвимостей переполнения буфера

Согласно OWASP (Open Web Application Security Project), существует 2 типа атак переполнения буфера:

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

Пример переполнения буфера в куче:

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

Пример переполнения буфера на основе стека:

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

Основы DoS-атак

DoS-атака (Denial of Service, отказ в обслуживании) направлена на отключение машины или сети, чтобы сделать устройство недоступным для пользователя. Злоумышленник переполняет устройство жертвы трафиком или отправляет информацию, которая вызывает сбой. Однако, DoS-атаку легко заблокировать и отследить, поскольку в атаке задействовано только одно устройство.

Типы DoS-атак

  • Переполнение буфера. Атаки переполнения буфера являются распространенным типом DoS-атак. Она основана на отправке объема трафика на сетевой ресурс, который превышает пропускную способность системы по умолчанию.
  • Пинг смерти (Ping of Death, ICMP-флуд, Smurf Attack). Хакер отправляет поддельные, увеличенные или вредоносные пакеты, которые «пингуют» каждый компьютер в целевой сети. Цель отвечает и становится наводненной ответами от вредоносного пакета.

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

  • SYN-флуд. Эта атака использует TCP-рукопожатие. В этой атаке злоумышленник отправляет SYN-сообщение. К сожалению, рукопожатие остается незавершенным либо потому, что сервер не подтвердил SYN-сообщение, либо он обратно отправил SYN/ACK-сообщение, а злоумышленник не отправил обратно ACK-сообщение. При этом подключенный хост остается в состоянии «занято» и становится недоступным для приема дальнейших запросов. Хакер будет увеличивать количество запросов, заполняя все открытые порты и не позволяя никому подключаться к сети.
  • Атака фрагментированными пакетами (Teardrop). Фрагменты пакета IP-данных отправляются в целевую сеть. Затем сеть повторно собирает фрагменты в исходный пакет. Процесс повторной сборки фрагментов истощает систему и приводит к ее сбою. В некоторых случаях хакер может даже попытаться найти уязвимость TCP/IP и продолжить атаковать. В конечном итоге сервер не может собрать эти пакеты, что приводит к перегрузке.

SQL-инъекции (SQL-injection, SQLi)

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

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

  • получить скрытые данные, в которых он может изменить SQL-запрос, чтобы вернуть дополнительные результаты и данные;
  • изменить логику приложения;
  • провести UNION-атаку, при которой можно получить данные из разных таблиц базы данных с помощью селектора UNION SQL;
  • выполнить слепую SQL-инъекцию (Blind SQL-injection), при которой злоумышленник не может напрямую достать данные из приложения, но может различить два разных состояния веб‑приложения в зависимости от условия, которое он определил в SQL-запросе. При слепой SQL-инъекции результат выполнения запроса недоступен злоумышленнику.

Межсайтовый скриптинг (Cross-Site Scripting, XSS)

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

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

Подделка межсайтовых запросов (Cross-Site Request Forgery, CSRF)

CSRF-атака обманом заставляет пользователя выполнить определенное действие, которое позволит злоумышленнику получить доступ к устройству через установленный браузер жертвы. Целями атаки являются почтовые клиенты, Facebook, Instagram (соцсети Facebook и Instagram признаны экстремистскими и запрещены в России), а также приложения для онлайн-банкинга.

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

Удаленное выполнение кода

Уязвимость удаленного выполнения кода (Remote code execution, RCE) позволяет злоумышленнику удаленно выполнить произвольный код на устройстве жертвы. RCE-уязвимость могут привести к различным атакам: от запуска вредоносного ПО до получения хакером полного контроля над скомпрометированной машиной.

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

Заключение

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

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