9 самых популярных типов инъекционных атак на веб-приложения

В первые дни Интернета одним из наиболее распространенных методов атаки был простая метод грубой силы (Brute Force). Данную атаку обычно выполняли боты. Но бывают случаи, когда люди тысяча комбинаций имен пользователей и паролей чтобы найти совпадение, для доступа к учетной записи жертвы.

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

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

Если ваш сервер стоит на Linux, вам будет интересно действительно ли Linux невосприимчив к вирусам и вредоносным программам?

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

1. Внедрение кода (Code injection)

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

Внедрение кода

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

Например, необходимо ограничить объем ожидаемых данных, проверить формат данных, прежде чем принимать их, и ограничить набор разрешенных символов.

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

2. SQL инъекции

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

SQL инъекции

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

3. Командные инъекций

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

Командные инъекций

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

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

4. XSS (межсайтовый скриптинг)

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

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

XSS (межсайтовый скриптинг)

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

5. XPath инъекций

Этот тип атаки возможен, когда веб-приложение использует информацию, предоставленную пользователем, для создания запроса XPath для данных XML. Эта атака работает аналогично SQL-инъекции : злоумышленники отправляют искаженную информацию в приложение, чтобы узнать, как структурированы данные XML, а затем снова атакуют, чтобы получить доступ к этим данным.

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

XPath инъекций

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

6. Инъекции почтовых команд

Этот метод атаки может использоваться для эксплуатации почтовых серверов и приложений, которые создают операторы IMAP или SMTP с неправильно проверенным пользовательским вводом.

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

Инъекции почтовых команд

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

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

7. CRLF инъекции

Вставка символов возврата каретки и перевода строки - комбинации, известной как CRLF, - в поля ввода веб-формы представляет собой метод атаки, называемый внедрением CRLF. Эти невидимые символы указывают на конец строки или конец команды во многих традиционных интернет-протоколах, таких как HTTP, MIME или NNTP.

CRLF инъекции

Например, вставка CRLF в HTTP-запрос с последующим определенным HTML-кодом может отправлять пользовательские веб-страницы посетителям веб-сайта.

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

8. Инъекция заголовка узла

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

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

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

9. Инъекция LDAP

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

Инъекция LDAP

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

Опять же, основной проблемой, которая допускает атаки с использованием LDAP, является неправильно проверенный пользовательский ввод. Если текст, отправляемый пользователем в приложение, используется как часть запроса LDAP без его очистки, запрос может закончиться получением списка всех пользователей и его отображением злоумышленнику, просто используя звездочку (*) справа поместите внутрь входной строки.

Предотвращение инъекционных атак

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

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

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

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