Защищаем VPS-сервер на базе Windows 2008 R2

DarkMod

Пользователь
#1
Это вольный перевод моего поста из блога моей компании — о том, как я разгребал последствия хакерской атаки на наш сервер.

Если в двух словах — мой сервер взломали. Злоумышленник получил пароль к FTP-серверу и в течении почти 10-ти часов скачивал все, до чего дотянулись ручонки. То, как, собственно, был взломан сервер — отдельная история. Вкратце — хакер отправил фальшивый саппорт-тикет моему хостеру с просьбой помочь создать FTP-юзера. И хостер, в общем-то, повелся. Мало того, что создал юзера, да еще и дал ему админские права… Переписку хакера с хостером (мне удалось завладеть копией) я — если хабровчане захотят — выложу обязательно, это отдельная веселуха. А пока просто перечислю шаги, которые я предпринял, чтобы защитить свой сервер и ликвидировать последствия:

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

Итак:

  1. Настройте lockout policy. По умолчанию Windows-сервер не защищен от брут-форса — атаки через подбор пароля. Хакер может создать, например, тысячу RDP-соединений (ака «Удаленный Рабочий Стол»), пробуя разные логины/пароли. Или терзать ваш FTP-сервер бесконечными подключениями… Именно поэтому стоит настроить «lockout» — временную блокировку пользователя после нескольких неудачных попыток.

    Идем в «Start — Run — secpol.msc — Security Settings — Account Policies — Account Lockout Policy». И ставим, например, «5 попыток» и «5 минут» — это заблокирует пользователя на 5 минут после 5 неудачных авторизаций.
  2. Заблокируйте support-пользователя Если вы арендуете сервер, наверняка в нем настроен саппорт-пользователь для вашего хостера. Что-нибудь типа «Support User» или «support_user». Заблокируйте его. Иногда опасность приходит именно от хостера. И его наивных индийских юношей, которые раздают доступы направо и налево. Именно это со мной и случилось.
  3. Отключите FTP, если не нужен Если вашим клиентам или приложениям не нужен постоянный FTP — вырубайте. Включайте его только когда нужно залить файлы. И разрешите доступ только со своего IP. А еще лучше — переведите сервер в режим «blind-put». Так называют сервера, которые разрешают доступ только на запись. В настройках IIS FTP-сервера поставьте галку «write» и снимите галку «read».
  4. Установите менеджер паролей. Куча моих знакомых (реально — куча) пользуются схемой «один сложный пароль — для всего». Даже знакомые программеры, админы, дизайнеры… Неглупые, в общем, люди. Одумайтесь. Даже для сервисных учетных записей (типа пользователи БД и тд) используйте только сложные сгенеренные пароли. И держите их в пасс-менеджере. Лично я пользую «LastPass» — он бесплатный, классный и доступен в виде экстеншена для Chrome.
  5. Бекап! Бекап, бекап всего, всегда и везде. Создайте ежедневные джобы на SQL-сервере, которые будут сохранять базы и локально, и куда-нибудь в онлайн. Даже в бесплатном MS SQL Server Express можно создать некое подобие джобов (через Task-Scheduler).

    Лично у меня бекап работает так: два раза в день делается локальная копия всех баз. И два раза в неделю — удаленная копия. Для удаленных копий я пользуюсь Microsoft SkyDrive — это 25 гигабайт онлайн-хранилища. Бесплатно. Неплохо, да? Тулза для синхронизации папок прилагается (называется Windows Live Mesh). Если не любите MS по религиозным соображениям — пользуйтесь DropBox или чем-то еще, но ПОЛЬЗУЙТЕСЬ!
  6. Firewall Ну, тут все понятно. Главное правило — «запретить все». В Windows 2008 R2 встроен довольно неплохой брандмауер, можно начать с него. Оставьте открытыми порты 80 и 443 (и, возможно, 3389 для RDP) — и все.
  7. Не используйте стандартные порты. Если кроме веб-сервера вам все-таки нужно что-то выставить «наружу» — например, терминальный сервер (для того же RDP) или SQL-сервер — используйте нестандартные порты. Какие-нибудь идиотские значения, вроде 15089.

    Порт терминального сервиса (тот самый «Удаленный рабочий стол») меняется в реестре вот тут: «HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber» (не забудьте открыть этот порт на файрволле и перезапустить RDP-сервис).

    Порты SQL Server'а меняются в утилите «SQL Server Configuration Manager» — «Network Configuraion» — «Protocols for [имя сервера]» — «TCP-IP» — right-click — «Properties».
  8. Нет папке "/admin/" и другим «стандартным» именам.
    • CMS вашего сайта не должна лежать в папке «site.com/admin/».
    • Учетная запись администратора не должна называться «administrator».
    • Страницы логина не должны называться «login.aspx/login.php/signin.py»
    • И тд. и тд. — продолжите список сами.

Please Login or Register to view hidden text.

 
K

kenny

Гость
#6
хм прочитал прослезился, кто ж это мастдай как вебсервер юзает? Винда изначально была для малых сетей :) можно сказать для частных. читал и плакал :)супарта " Я смотрю Вы все здесь МОЛОДЦЫ..." :D
Совет чтобы так не попадать НЕ ИСПОЛЬЗОВАТЬ ВИНДУ!!!
 

diden05

Пользователь
#7
Ну например microsoft.com, думаю достаточно нагруженный проект чтоб огульно заявлять винда для мелких сеток ;)
Все дело в радиусе кривизны рук юзающего, и тут уж ничего не поделать, хотя сам винды и не люблю.
 

Lange

Пользователь
#8
Ну например microsoft.com, думаю достаточно нагруженный проект чтоб огульно заявлять винда для мелких сеток ;)
Все дело в радиусе кривизны рук юзающего, и тут уж ничего не поделать, хотя сам винды и не люблю.
Может тупо у них всё на лине вертится :D
 
K

kenny

Гость
#9
как раз в этом :) почтовик точно на лине))) да и иса кривая до жути)))) разве не так :) я оплевался в итоге убюил ее так как не держала нагрузку, а руки у меня лично не кривые :) могу сертификаты предоставить :D
 

diden05

Пользователь
#10
Сертификаты, посмешил :D У самого их кипа, только толку от них мало :)
Держит она нагрузку и не плохую, просто линь рассово верней ;)