Безопасность веб-приложений (страница 3)
У Боба же время от времени сбивается ритм сердцебиения, и он никогда не знает, в какой момент наступит аритмия. Если бы в периоды нестабильной работы сердца у Боба отсутствовал доступ к кардиостимулятору, то по прошествии времени это могло бы привести к критической для его жизни ситуации. Очень важно, чтобы при возникновении чрезвычайной ситуации кардиостимулятор был доступен и реагировал в режиме реального времени (немедленно).
Уже много лет Боб работает клерком в федеральном правительстве и занимается секретными и сверхсекретными документами. Будучи счастливым дедушкой, с момента установки кардиостимулятора он старательно ведет здоровый образ жизни.
ПРИМЕЧАНИЕ. Медицинские приборы, как правило, являются системами ПО, работающими в режиме реального времени. «Режим реального времени» означает, что система должна реагировать на изменения в кратчайшие сроки, обычно исчисляющиеся в миллисекундах. Она не может работать с задержками – отклик должен быть максимально быстрым или немедленным. Когда у Боба начинается аритмия, кардиостимулятор должен сработать немедленно – задержки быть не может. В таком режиме функционируют только немногие приложения: 10-миллисекундная задержка при покупке новых кроссовок или при прогнозировании изменений дорожного трафика не приведет к действительно большой проблеме.
Рис. 1.4. Устойчивость повышает доступность
ПРИМЕЧАНИЕ. Многие пользователи переводят информацию в облако по той единственной причине, что оно чрезвычайно надежно (почти всегда доступно) по сравнению с более традиционными уровнями обслуживания во внутренних центрах обработки данных. Как показано на рис. 1.4, устойчивость повышает доступность, что делает публичное облако привлекательным вариантом с точки зрения безопасности.
Ниже перечислены подходы к обеспечению безопасности, которые хорошо известны в индустрии информационной безопасности. Важно хорошо усвоить их, чтобы понять, как к ним относятся остальные темы данной книги. Если вы уже работаете специалистом по обеспечению безопасности, возможно, вам не нужно читать эту часть.
«Предполагать взлом»
«Есть два типа компаний: те, которые взломаны, и те, которые еще не знают об этом»[2]. Это настолько известное высказывание в индустрии информационной безопасности, что мы уже не знаем, кому его приписывать. Возможно, звучит пессимистично, но те из нас, кто работает в области реагирования на инциденты, в судебно-медицинской экспертизе или в других сферах, связанных с расследованиями, знают, что оно более чем правдиво.
Принцип «предполагать взлом» означает выполнить подготовку и принять конструктивные решения, гарантирующие, что получение несанкционированного доступа к сети, приложению, данным или другим системам окажется сложным, трудоемким, дорогостоящим и рискованным делом, а обнаружить взлом и отреагировать на него можно будет быстро. Данный подход также подразумевает мониторинг и протоколирование систем: если вы не заметите взлом до того, как он произойдет, то по крайней мере сможете узнать, что случилось. Многие системы отслеживают изменения в поведении или аномалии системы для выявления потенциальных взломов. Задача данного подхода – заблаговременная подготовка к худшему, чтобы минимизировать ущерб, время обнаружения и усилия по устранению последствий взлома.
Рассмотрим два примера применения этого принципа: пример с потребителем и пример с профессионалом.
Как потребитель Алиса использует для обмена документами аккаунт в интернете. Если бы она «предполагала взлом», то не стала бы загружать в него ничего личного или ценного (например, незарегистрированную интеллектуальную собственность, фотографии личного характера, которые могут повредить профессиональной или частной жизни, коммерческие и государственные тайны и т. д.). Она также установила бы мониторинг учетной записи и разработала бы план на случай кражи, изменения, удаления, публичного распространения информации или другого несанкционированного доступа к документам. Наконец, она периодически проверяла бы весь интернет на предмет утечки данных. Все вышеперечисленные действия представляли бы собой нереальный уровень ответственности, который не ожидается от обычного потребителя. Эта книга не советует «предполагать взлом» в повседневной жизни, хотя периодически проводить поиск информации в интернете – хорошая идея, а также определенно рекомендуется не загружать в сеть конфиденциальные документы.
Как профессионал Боб работает с секретными и сверхсекретными документами. В его отделе никто никогда бы не подумал об использовании онлайнового файлообменного сервиса для обмена документами. Сотрудники контролируют каждый аспект хранения и передачи ценной информации. Когда они создавали сеть и программный комплекс, управляющие документами, они проектировали их и связанные с ними процессы, предполагая взлом. Они охотятся за угрозами в своей сети, разрабатывают ее с использованием нулевого доверия, проверяют интернет на предмет признаков утечки данных, аутентифицируют API перед подключением, проверяют данные из базы данных и из внутренних API, проводят учения «красной команды» (тестирование безопасности на производстве) и внимательно следят за своей сетью и приложениями на предмет аномалий или других признаков взлома. Сотрудники отдела написали автоматизированные ответы на распространенные модели атак, имеют процессы, разработанные и готовые к нестандартным атакам, и анализируют поведенческие модели для выявления признаков нарушения. В своих действиях они исходят из того, что хранилища данных уже взломаны или могут оказаться взломаны в любой момент.
Другим примером может быть запуск процесса реагирования на инцидент, когда серьезная ошибка раскрывается через «координированное раскрытие» или программу вознаграждения за найденные ошибки (Bug Bounty), исходя из предположения, что кто-то другой потенциально уже нашел и использовал эту ошибку в системе.
Согласно «Википедии», «координированное раскрытие» – это модель раскрытия уязвимостей, при которой уязвимость или проблема раскрывается только по истечении периода времени, позволяющего устранить либо исправить уязвимость или проблему.
Многие организации проводят программы Bug Bounty. Они выплачивают награду исследователям в области безопасности за сообщения об ошибках в системе. Особо ценятся те ошибки, которые связаны с уязвимостями.
Внутренние угрозы
Под внутренней угрозой подразумевается ситуация, когда человек, имеющий разрешение на доступ к системам, сети и данным (обычно это сотрудник или консультант компании), негативно влияет на один или несколько аспектов триады CIA. Угроза может быть умышленной (преднамеренной) или случайной.
Примеры умышленных угроз и затрагиваемых ими аспектов триады CIA
• Сотрудник загружает интеллектуальную собственность на переносной диск, покидает здание, а затем продает информацию конкурентам (конфиденциальность).
• Сотрудник удаляет базу данных и ее резервную копию в свой последний рабочий день, так как злится по поводу увольнения (доступность).
• Сотрудник встраивает бэкдор (тайный вход) в систему для последующей кражи у компании (целостность и конфиденциальность).
• Сотрудник скачивает конфиденциальные файлы с компьютера другого сотрудника и использует их для шантажа (конфиденциальность).
• Сотрудник случайно удаляет файлы, а затем меняет логи, чтобы скрыть свою ошибку (целостность и доступность).
• Сотрудник не сообщает руководству об уязвимости, чтобы избежать работы по ее устранению (потенциально все три аспекта CIA, в зависимости от типа уязвимости).
Примеры случайных угроз и затрагиваемых ими аспектов триады CIA
• Сотрудники ненадлежащим образом используют программное обеспечение, в результате чего оно переходит в неизвестное состояние (потенциально все три аспекта).
• Сотрудник случайно удаляет ценные данные, файлы или даже целые системы (доступность).
• Сотрудник случайно неправильно настраивает сеть или другое программное обеспечение, в результате чего появляются уязвимости в безопасности (возможно, все три аспекта).
• Неопытный сотрудник направляет веб-прокси или инструмент, выполняющий динамическое тестирование безопасности приложений (Dynamic Application Security Testing, DAST), на одно из ваших внутренних приложений, что приводит к сбою приложения (доступность) или «засорению» базы данных (целостность). В последующих главах мы расскажем о том, как избежать такой ситуации и обеспечить успешное проведение всех тестирований безопасности.
ВНИМАНИЕ. Обычно в профессиональных рабочих сетях веб-прокси и DAST запрещены для использования. Известные также как «сканеры веб-приложений», веб-прокси являются инструментами хакеров и могут нанести большой ущерб. Никогда не направляйте сканер веб-приложений на веб-сайт или приложение и не проводите активное сканирование или другое интерактивное тестирование без письменного разрешения от уполномоченного лица. Использование инструмента DAST для взаимодействия с сайтом в интернете (без разрешения) является уголовно наказуемым деянием во многих странах. Будьте осторожны и при наличии сомнений всегда спрашивайте перед началом каких-либо действий.
Глубокая защита
«Глубокая защита» предполагает наличие нескольких уровней безопасности на случай, если одного окажется недостаточно (рис. 1.5). Хотя данная идея может показаться очевидной при столь простом объяснении, иногда непросто определить, сколько уровней необходимо иметь и какие это должны быть уровни (особенно если выделенный на обеспечение безопасности бюджет ограничен).
«Уровнями» безопасности могут быть процессы (проверка удостоверения личности человека перед выдачей ему почты, прохождение тестирования безопасности перед релизом программного обеспечения), физические, программные или аппаратные системы (замок на двери, сетевой брандмауэр, аппаратное шифрование), встроенные варианты проектирования (написание отдельных функций для кода, выполняющего более важные задачи в приложении, обеспечение входа в здание через одну дверь) и т. д.
Рис. 1.5. Три уровня безопасности приложения; пример глубокой защиты
Примеры использования многочисленных уровней приведены ниже.
• При создании программного обеспечения: наличие требований безопасности, выполнение моделирования угроз, обеспечение использования концепций безопасного проектирования, обеспечение использования тактики безопасного кодирования, тестирование безопасности, тестирование несколькими способами посредством различных инструментов и т. д. Каждый из этих элементов представляет собой очередную форму защиты, что повышает уровень безопасности приложения.
• Сетевая безопасность: включение мониторинга, наличие системы SIEM (Security information and event management – «Управление информацией о безопасности и событиями безопасности», панель инструментов для просмотра возможных событий безопасности в режиме реального времени), наличие системы IPS/IDS (Intrusion prevention/detection system – «Система предотвращения и обнаружения вторжений», инструмент для поиска и препятствования действиям злоумышленников в сети), брандмауэры и многое другое. Каждый новый элемент усиливает защиту приложения.
• Физическая безопасность: замки, колючая проволока, заборы, ворота, видеокамеры, охранники, сторожевые собаки, датчики движения, сигнализация и т. д.
Довольно часто самое сложное при отстаивании интересов безопасности – это убедить в том, что одного уровня защиты недостаточно. В таких случаях подчеркивайте значимость того, что защищается (репутация, денежная ценность, национальная безопасность и т. д.). Хотя с экономической точки зрения не имеет смысла тратить миллион долларов на защиту чего-то стоимостью в одну тысячу долларов, в нашей отрасли очень часто наблюдаются примеры обратного.
ПРИМЕЧАНИЕ. Моделирование угроз – определение угроз, которым могут подвергаться приложения, и разработка планов по снижению их возникновения. Подробнее об этом см. в главе 3.