Это вольный перевод моего поста из блога моей компании — о том, как я разгребал последствия хакерской атаки на наш сервер.
Если в двух словах — мой сервер взломали. Злоумышленник получил пароль к FTP-серверу и в течении почти 10-ти часов скачивал все, до чего дотянулись ручонки. То, как, собственно, был взломан сервер — отдельная история. Вкратце — хакер отправил фальшивый саппорт-тикет моему хостеру с просьбой помочь создать FTP-юзера. И хостер, в общем-то, повелся. Мало того, что создал юзера, да еще и дал ему админские права… Переписку хакера с хостером (мне удалось завладеть копией) я — если хабровчане захотят — выложу обязательно, это отдельная веселуха. А пока просто перечислю шаги, которые я предпринял, чтобы защитить свой сервер и ликвидировать последствия:
Сразу скажу — я не админ. Я .NET-программер. Крутым тру-админам и секьюрити-спецам мои потуги наверняка покажутся детским лепетом, так что сразу прошу их не принимать все это близко к сердцу. Но, возможно, я кому-то помогу… Такому же, как и я, программисту, который просто держит свой небольшой сервер с несколькими приложениями.
Итак:
Если в двух словах — мой сервер взломали. Злоумышленник получил пароль к FTP-серверу и в течении почти 10-ти часов скачивал все, до чего дотянулись ручонки. То, как, собственно, был взломан сервер — отдельная история. Вкратце — хакер отправил фальшивый саппорт-тикет моему хостеру с просьбой помочь создать FTP-юзера. И хостер, в общем-то, повелся. Мало того, что создал юзера, да еще и дал ему админские права… Переписку хакера с хостером (мне удалось завладеть копией) я — если хабровчане захотят — выложу обязательно, это отдельная веселуха. А пока просто перечислю шаги, которые я предпринял, чтобы защитить свой сервер и ликвидировать последствия:
Сразу скажу — я не админ. Я .NET-программер. Крутым тру-админам и секьюрити-спецам мои потуги наверняка покажутся детским лепетом, так что сразу прошу их не принимать все это близко к сердцу. Но, возможно, я кому-то помогу… Такому же, как и я, программисту, который просто держит свой небольшой сервер с несколькими приложениями.
Итак:
- Настройте lockout policy. По умолчанию Windows-сервер не защищен от брут-форса — атаки через подбор пароля. Хакер может создать, например, тысячу RDP-соединений (ака «Удаленный Рабочий Стол»), пробуя разные логины/пароли. Или терзать ваш FTP-сервер бесконечными подключениями… Именно поэтому стоит настроить «lockout» — временную блокировку пользователя после нескольких неудачных попыток.
Идем в «Start — Run — secpol.msc — Security Settings — Account Policies — Account Lockout Policy». И ставим, например, «5 попыток» и «5 минут» — это заблокирует пользователя на 5 минут после 5 неудачных авторизаций.
- Заблокируйте support-пользователя Если вы арендуете сервер, наверняка в нем настроен саппорт-пользователь для вашего хостера. Что-нибудь типа «Support User» или «support_user». Заблокируйте его. Иногда опасность приходит именно от хостера. И его наивных индийских юношей, которые раздают доступы направо и налево. Именно это со мной и случилось.
- Отключите FTP, если не нужен Если вашим клиентам или приложениям не нужен постоянный FTP — вырубайте. Включайте его только когда нужно залить файлы. И разрешите доступ только со своего IP. А еще лучше — переведите сервер в режим «blind-put». Так называют сервера, которые разрешают доступ только на запись. В настройках IIS FTP-сервера поставьте галку «write» и снимите галку «read».
- Установите менеджер паролей. Куча моих знакомых (реально — куча) пользуются схемой «один сложный пароль — для всего». Даже знакомые программеры, админы, дизайнеры… Неглупые, в общем, люди. Одумайтесь. Даже для сервисных учетных записей (типа пользователи БД и тд) используйте только сложные сгенеренные пароли. И держите их в пасс-менеджере. Лично я пользую «LastPass» — он бесплатный, классный и доступен в виде экстеншена для Chrome.
- Бекап! Бекап, бекап всего, всегда и везде. Создайте ежедневные джобы на SQL-сервере, которые будут сохранять базы и локально, и куда-нибудь в онлайн. Даже в бесплатном MS SQL Server Express можно создать некое подобие джобов (через Task-Scheduler).
Лично у меня бекап работает так: два раза в день делается локальная копия всех баз. И два раза в неделю — удаленная копия. Для удаленных копий я пользуюсь Microsoft SkyDrive — это 25 гигабайт онлайн-хранилища. Бесплатно. Неплохо, да? Тулза для синхронизации папок прилагается (называется Windows Live Mesh). Если не любите MS по религиозным соображениям — пользуйтесь DropBox или чем-то еще, но ПОЛЬЗУЙТЕСЬ!
- Firewall Ну, тут все понятно. Главное правило — «запретить все». В Windows 2008 R2 встроен довольно неплохой брандмауер, можно начать с него. Оставьте открытыми порты 80 и 443 (и, возможно, 3389 для RDP) — и все.
- Не используйте стандартные порты. Если кроме веб-сервера вам все-таки нужно что-то выставить «наружу» — например, терминальный сервер (для того же 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».
- Нет папке "/admin/" и другим «стандартным» именам.
- CMS вашего сайта не должна лежать в папке «site.com/admin/».
- Учетная запись администратора не должна называться «administrator».
- Страницы логина не должны называться «login.aspx/login.php/signin.py»
- И тд. и тд. — продолжите список сами.