Мониторинг ASP.NET и SQL Server для обеспечения безопасности

#asp.net #sql-server #security #iis #monitoring

#asp.net #sql-сервер #Безопасность #iis #мониторинг

Вопрос:

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

Мы собираемся запустить ASP.NET 4 веб-приложения с данными, хранящимися на SQL Server. Веб-сервер работает в IIS на экземпляре Windows Server 2008, а сервер базы данных работает на SQL Server 2008 на отдельном экземпляре Win 2008.

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

Итак, мы «чувствуем» себя уверенно, но пока не имеем реального представления о безопасности нашей системы. Как мы можем сразу узнать, проник ли кто-то? Как мы можем узнать, был ли какой-либо пакет размещен на одном из наших серверов? Как мы можем узнать, происходит ли утечка данных?

Каковы некоторые концепции, инструменты, лучшие практики и т.д.?

Заранее спасибо, Брайан

Дополнительные соображения 22.04.11

Крис, спасибо за очень полезные личные наблюдения и советы, приведенные ниже.

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

Как нам эффективно приблизиться к этому? Не было бы хорошим решением включить мониторинг логинов, активности базы данных, ASP.NET активность и т.д. в дополнение к пакетам на проводе? Приведите несколько примеров того, как обеспечить надежную защиту?

Брайан

Ответ №1:

Термин, который вы ищете, — это система обнаружения вторжений (IDS). Существует связанный термин, называемый системой предотвращения вторжений (IPS).

IDS отслеживают трафик, поступающий на ваши серверы на уровне IP, и будут отправлять оповещения на основе сложного анализа трафика.

IP-адреса — это идентификаторы следующего поколения, которые фактически пытаются заблокировать определенные действия.

Доступно множество коммерческих систем с открытым исходным кодом, включая Snort, SourceFire, Endace и другие.

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


Я хотел добавить здесь немного больше информации, поскольку область комментариев немного мала.

Главное, что вам нужно понять, — это типы атак, которые вы увидите. Они будут варьироваться от относительно простых автоматизированных сценариев до очень сложных целевых атак. Они также будут проверять все, что смогут увидеть, начиная с самого веб-сайта и заканчивая IIS, .Net, почтовым сервером, SQL (если доступно), вплоть до вашего брандмауэра и других открытых компьютеров / служб. Комплексный подход — это единственный способ реально отслеживать происходящее.

Вообще говоря, автоматизированные сценарии будут запущены на новом сайте / компании в течение нескольких минут (я бы сказал, максимум 30) после запуска. Это причина номер один, по которой при новых установках MS Windows сеть сильно блокируется во время установки. Черт возьми, я видел, как компьютеры зависали в течение 30 секунд после первого включения.

Подход, используемый хакерами / червями, заключается в постоянном сканировании широкого диапазона IP-адресов, за этим следует машинная дактилоскопия для тех, кто отвечает. На основе профиля они будут отправлять определенные типы атак в вашем направлении. В некоторых случаях этап профилирования пропускается, и они атакуют определенные порты независимо от ответа. Порт 1443 (SQL) является общим.

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

При атаках по сценарию убедитесь, что вы не предоставляете доступ к обычно установленным пакетам, таким как phpMyAdmin, средствам веб-администрирования IIS или даже удаленному рабочему столу за пределами вашего брандмауэра. Кроме того, избавьтесь от любых учетных записей с именами «admin», «администратор», «гость», «sa», «dbo» и т.д. Наконец, убедитесь, что вашим паролям НЕ разрешено указывать чье-либо имя и они определенно НЕ используются по умолчанию в комплекте с продуктом.

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

Как только все это будет сделано должным образом и защищено, единственными доступными сервисами должны быть веб-сервисы (порт 80/443). Элементы, которые все еще могут быть использованы, — это ошибки в IIS, .Net или вашем веб-приложении.

Для IIS и .net вы ДОЛЖНЫ установить обновления Windows от MS практически сразу после их выпуска. MS была чрезвычайно хороша в продвижении качественных обновлений для Windows, IIS и .Net. Кроме того, значительное большинство обновлений предназначено для уязвимостей, которые уже используются в дикой природе. Наши серверы настроены на автоматическую установку обновлений, как только они становятся доступными, и мы никогда не сталкивались с этим (возвращаясь, по крайней мере, к моменту выпуска server 2003).

Также вам необходимо быть в курсе обновлений вашего брандмауэра. Не так давно в одном из брандмауэров Cisco была ошибка, из-за которой он мог быть перегружен. К сожалению, это позволило пропустить весь трафик, когда это произошло. Хотя исправление было произведено довольно быстро, люди все еще подвергались нападкам более года спустя, потому что администраторы не поспевали за обновлениями IOS. Та же проблема с обновлениями Windows. Множество людей были взломаны просто потому, что им не удалось применить обновления, которые предотвратили бы это.

С более целенаправленными атаками справиться немного сложнее. Значительное количество хакеров охотятся за пользовательскими веб-приложениями. Такие вещи, как публикация в формах «Связаться с нами» и «Войти в систему». Сообщения могут содержать JavaScript, просмотр которого администратором может привести к передаче учетных данных или к установке регистраторов ключей или троянских программ на компьютеры получателей.

Проблема здесь в том, что вы можете быть скомпрометированы, даже не подозревая об этом. Средства защиты включают в себя проверку того, что HTML и JavaScript не могут быть отправлены через ваш сайт; наличие надежных (и постоянно обновляемых) проверок на спам и вирусы на почтовом сервере и т.д. В принципе, вам нужно рассмотреть все возможные способы, которыми внешний объект мог бы что-то отправить вам, и что-то с этим сделать. Многие компании из списка Fortune 500 продолжают сталкиваться с подобными вещами… Включая Google.

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

Комментарии:

1. Спасибо, Крис, это полезно. Знаете ли вы о каких-либо решениях, которые более непосредственно интегрированы с ASP.NET а SQL Server?

2. @BrianFinkel: Откровенно говоря, вы не хотите ничего «напрямую интегрированного». IDS / IPS работает лучше, если это отдельный продукт, который отслеживает сеть в целом. По нашему опыту, на сайте будет происходить новая попытка взлома по крайней мере каждые 3 секунды. Эти попытки могут быть любыми: от проверки веб-сайтов на наличие уязвимостей, попыток получить доступ к различным портам, отправки пакетов в попытке «пройти» через брандмауэр, отправки слепых пакетов в надежде, что база данных, почтовый или другой сервер находится в конфигурации по умолчанию и отвечает.

3. @BrianFinkel: Суть в том, что если вы смотрите ТОЛЬКО на эти две части, то вы упускаете действительно очень общую картину. Я видел, как люди попадают в удаленную сеть просто потому, что им удалось взломать веб-сервер, встроенный в ПРИНТЕР, который случайно оказался незащищенным. Как это относится к изобретательности?

4. Крис, это чрезвычайно полезно и действительно устраняет мои опасения. Спасибо за все изложение. Я собираюсь добавить некоторую дополнительную информацию к своему вопросу…

5. Как вы контролируете свои системы?

Ответ №2:

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

Как мы можем сразу узнать, проник ли кто-то?

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

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

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

способ отслеживать ASP.NET приложение

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

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

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

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

 <configuration>
    <system.web>
      <authorization>
        <deny users="*" />
      </authorization>
    </system.web>
</configuration>
  

Комментарии:

1. Вот пара вещей: 1. Страницы-ловушки могут быть доступны только в том случае, если они являются общедоступными или доступны с помощью поиска в Google. Гораздо лучше просто не разрешать вашим страницам администратора быть доступными для поиска. 2. Мониторинг на предмет отсутствия текста не является хорошим способом определить, изменилась ли страница. Чаще всего добавляется новый текст, а не кто-то удаляет старые материалы. 3. В современном мире нет причин вообще создавать каталог для загрузки. Сохраните его в базе данных, где у вас есть упрощенные резервные копии.

2. @Chris Спасибо за замечания, да, вы правы в этом. Я просто привожу здесь несколько идей, которые подходят для некоторых случаев, не для всех случаев, возможно, не самых лучших, я хотел бы узнать больше из других ответов.

Ответ №3:

Я еще не пробовал это, но Ленни Зельцер направил меня к OSSEC, которая представляет собой систему обнаружения вторжений на базе хоста, которая непрерывно отслеживает весь сервер для обнаружения любой подозрительной активности. Похоже, это именно то, что я хочу!

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

OSSEC можно найти по адресу http://www.ossec.net