Книга: Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков
Назад: Аутентификация (AuthN)
Дальше: Мониторинг

Обработка, регистрация и мониторинг ошибок

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



РЕЗЕРВНЫЕ КОПИИ И ОТКАТЫ

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



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

Под «переходом в неизвестное состояние» имеется в виду ситуация, когда исключение (ошибка программы) не отловлено и программе некуда двигаться дальше или она не знает, какие действия предпринять. Когда появляется ошибка, мы «ловим» ее в блоке try/catch, затем «обрабатываем».

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

Каждое приложение должно располагать всеобщим или глобальным обработчиком ошибок, который будет отлавливать все, что не было обработано (отловлено) другим способом.

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

Правила работы с ошибками

Ниже приведен список правил обработки ошибок. Следование этим правилам поможет избежать перехода приложения в неизвестное состояние.

• Все ошибки приложения должны быть отловлены и обработаны. Их никогда нельзя игнорировать.

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

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

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

• Нельзя раскрывать, является ли имя пользователя или пароль неправильным, если произошла ошибка входа, так как это позволяет перебирать имена пользователя.

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

• Система должна предупреждать об ошибках, связанных с безопасностью (ошибках входа в систему, ошибках управления доступом, ошибках проверки ввода на стороне сервера). Идеально, когда файлы регистрации поступают в систему предотвращения или обнаружения вторжений либо в SIEM-приложение. Эту функцию можно проверить, запустив сканер уязвимостей в приложении: будут вызваны события, которые должны быть записаны в журнал.

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

– кодирования содержимого из внешнего источника;

– удаления всех непечатаемых знаков (CR, LF, TAB и т. д.);

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

СОВЕТ. Да, именно так! Злоумышленники будут атаковать даже журналы. Для них нет ничего святого. Подобная форма атаки обычно называется инъекцией журнала или подделкой журнала.

Регистрация

Регистрация – это запись вашим приложением подробной информации о происходящих в нем событиях в очень, очень длинный документ (известный как лог-файл или файл регистрации). Почти все содержимое в нем будет очень скучным, и именно поэтому большинство людей не сидят и не читают эти файлы напрямую. «Зарегистрирована запись в базе данных в такое-то время для такого-то пользователя» и «Такой-то пользователь успешно вошел в систему в такое-то время» – не самые интересные истории. Размеры файлов регистрации обычно исчисляются гигабайтами и терабайтами, так что человек физически не может просмотреть их полностью. Именно поэтому были изобретены инструменты для чтения журналов: SIEM и regex.

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

Система управления информацией и событиями безопасности (англ. Security information and event management, SIEM) – это программное обеспечение, которое «проглатывает» все журналы, а потом старается представить их в понятной для человека форме и предупредить инженеров по безопасности из операционного центра безопасности (англ. Security Operations Center, SOC) обо всем, что, по его мнению, требует их внимания. Такая система используется в большинстве крупных компаний. Для работы программы необходимо, чтобы все файлы регистрации имели формат, доступный для чтения SIEM.

Назад: Аутентификация (AuthN)
Дальше: Мониторинг