Как построить безопасную систему для IT-проекта: лайфхаки от белого хакера
Ищем дыры в безопасности и готовимся к потенциальным атакам.
Кадр: фильм «Властелин колец: Две крепости» / New Line Cinema
Многие IT-системы страдают от слабой защиты данных. Это выливается в постоянные утечки и недоступность сервисов из-за атак. Даже опытные специалисты ошибаются и не всегда понимают, как себя чувствует система и что ей может угрожать.
Исследователь безопасности Лев Прокопьев поделился своим опытом во время эфира для комьюнити Skillbox Code Experts. А мы собрали в этой статье его рекомендации о том, как строить проекты безопасно и с чего начать работу над защитой сервиса.
Содержание
- Составьте список ресурсов компании
- Смоделируйте угрозы
- Закройте доступы
- Используйте ресурсы OWASP
- Храните персональные данные безопасно
- Изолируйте контур
- Правильно настройте корпоративный VPN
- Меняйте процесс найма
- Что можно внедрить уже сейчас с минимальным бюджетом
Лев Прокопьев
Независимый исследователь безопасности и эксперт по тестированию на проникновение.
Работал в «Солар Секьюрити», «Лаборатории Касперского» и BI.Zone. Специализируется на анализе защищённости внешнего и внутреннего периметра, разработке наступательного ПО, эксплуатации уязвимостей, исследует безопасность беспроводных сетей и защиту от приёмов социальной инженерии. Умеет в Bash, Python, PowerShell, C/C++, JavaScript и даже Visual Basic.
Составьте список ресурсов компании
Чтобы выстроить эффективную защиту, надо хорошо понимать, что вообще требуется защищать. Поэтому первое, что надо сделать, — составить полный список ресурсов компании. В него надо включить не только то, с помощью чего вы зарабатываете деньги, а абсолютно всё: от внешних до внутренних сервисов. После этого надо решить, каким сервисам из списка нужен доступ к интернету, а какие можно без потерь изолировать внутри корпоративной сети.
Также важно выработать привычку регулярно пересматривать список, чтобы учитывать все возможные риски и заранее выявлять потенциальные уязвимости. Помните, что каждый новый сервис — это новый риск.
На этом этапе проще всего молодым компаниям. Как правило, у них всего один сайт-визитка и нет сложных процессов. Защищать такую инфраструктуру — одно удовольствие. Но когда бизнес разрастается, то появляются новые сервисы и системы. Внедрять безопасность становится сложнее.
Смоделируйте угрозы
Если список ресурсов компании готов, то можно приступать к моделированию угроз. На этом этапе важно понять, где есть слабые места и кто в теории может получить доступ к чувствительной информации.
Начните исследование с внешнего периметра. Не так важно, что у вас — офис, локальная сеть, домен Active Directory, «1С», Jira или Confluence, — для всего этого надо прописать возможные риски. Считайте, что каждый ресурс — потенциальная дыра, поэтому исследуйте его тщательно.
Лучше всего делать это вместе с командой. Безопасностью не может заниматься один человек. Однажды он выгорит, станет уделять меньше внимания своей работе, и всё рухнет. Поэтому вовлекайте разработчиков и администраторов, пусть каждый отвечает за свою часть. При разделении обязанностей работа будет продвигаться плавно.
Совет
Откажитесь от бесполезных созвонов. Иногда проще связаться с одним сотрудником, чем созваниваться со всей командой и тратить время впустую. Всю информацию фиксируйте в базе знаний.
Также учитывайте человеческий фактор и помните, что ошибка сотрудника может стать угрозой безопасности всей системы. Регулярно проводите обучение, рассказывайте про возможные атаки, кибергигиену и актуальные методы социальной инженерии.
Закройте доступы
Представим, что у вас уже есть список ресурсов компании, вы собрали себе команду и выписали возможные угрозы. Теперь приступим к делу и наведём порядок в доступах. Сперва выпишите, какие сотрудники и какими системами могут пользоваться, а после решите, нужны ли им эти системы.
Например, в компании есть несколько дизайнеров с доступом к базе данных пользователей. Вероятно, доступ им выдали автоматически и они даже не подозревают, что владеют такой ценной информацией. Доступ к важным данным для таких сотрудников можно ограничить — если кому-то нужно будет посмотреть данные из базы, их можно выгрузить или выдать временный доступ.
Даже если вы доверяете своим дизайнерам и уверены, что они не сделают ничего плохого с базой данных, то всегда есть злоумышленники. Они могут получить доступ к аккаунту одного из сотрудников и украсть информацию.
Используйте принцип нулевого доверия. Он предполагает, что никому нельзя доверять по умолчанию, даже внутри корпоративной сети. Каждый запрос на доступ должен быть проверен и авторизован.
Также проверьте, как у вас настроена безопасность в офисах, на складах и в других местах, в которых работают сотрудники компании. Убедитесь, что в процессы нельзя вмешаться со стороны и саботировать работу команды. А ещё проверьте, что сотрудники могут получить доступ только к той информации, которая нужна им для работы, — например, работники склада не должны видеть данные отдела продаж и наоборот.
Главное правило: предоставляйте сотрудникам минимальные права доступа. Никто не должен иметь больше привилегий, чем ему нужно. Регулярно проводите аудит и проверяйте, какие доступы есть у сотрудников. Например, сегодня человек работает в одном отделе, а через месяц перевёлся. В этом случае надо пересмотреть, какие системы ему всё ещё нужны.
Используйте принцип нулевого доверия. Он предполагает, что никому нельзя доверять по умолчанию, даже внутри корпоративной сети. Каждый запрос на доступ должен быть проверен и авторизован.
Используйте ресурсы OWASP
OWASP (Open Web Application Security Project) — это открытая некоммерческая организация, которая занимается улучшением безопасности веб-приложений. Она предоставляет бесплатные инструменты и ресурсы, которые помогут вам защититься от различных угроз.
В арсенале OWASP есть список самых критичных угроз безопасности, стандарт для проверки безопасности приложений и инструмент для поиска уязвимостей.
Вы работаете с RFID и беспроводными сетями? У OWASP есть гайды и по этим темам. Изучайте, впитывайте и внедряйте. Безопасность — это не выборочная защита, а защита по всем фронтам.
Храните персональные данные безопасно
Все данные, особенно чувствительные, должны храниться в зашифрованном или хешированном виде с использованием соли. Это гарантирует, что, даже если данные украдут, ничего сделать с ними не смогут.
Справка: как работает хеширование паролей
Для начала хеширования нужна соль — это последовательность данных, которую добавляют к криптоключу, чтобы пароль нельзя было вычислить методом подбора.
Например, у нас есть пароль «лолкекчебурек». Добавим к нему последовательность символов «abcdef», чтобы в итоге получилось «лолкекчебурекabcdef». Последовательность, которую мы добавили, — это и есть соль. Если злоумышленник украдёт такой пароль, то он не сможет его использовать без понимания, какие символы лишние.
После этого пароль с солью уже можно хешировать. Хеширование — это функция свёртки, которая преобразует массив входных данных произвольного размера в соответствии с определённым алгоритмом. Это однонаправленный процесс, поэтому хеш нельзя обратно преобразовать в пароль.
Представьте, что мы решили захешировать наш пароль с солью «лолкекчебурекabcdef» и получили на выходе набор символов «G5& f$7@rP». В таком случае только мы будем знать, что это и как это использовать.
При выборе алгоритма хеширования паролей отдавайте предпочтение Argon2, PBKDF2, Bcrypt и Scrypt. Эти алгоритмы обеспечивают высокий уровень безопасности за счёт сложности вычислений и возможности настройки количества раундов хеширования. Также никогда не используйте устаревшие методы, такие как MD5 или SHA-1.
Ещё можно использовать уникальную соль для каждого пароля. В таком случае если злоумышленник сможет подобрать один пароль, то он не сможет применить обнаруженный паттерн ко всему остальному. Сами соли и хеши храните в защищённом виде и никому не давайте доступ к этим данным.
Читайте также:
Изолируйте контур
В тестировании на проникновение или анализе защищённости желанная цель злоумышленника — это персональные данные клиентов. Продумайте процесс доступа к важной информации, чтобы предотвратить её кражу. Например, можно изолировать персональные данные в контуре, к которому не каждый сотрудник будет иметь доступ.
Обязательно сегментируйте сеть с помощью разделения по уровню критичности данных. Это поможет обезопасить систему от распространения угрозы между сегментами. Для этого используйте брандмауэры, списки контроля доступа (ACL) и шифруйте каждый канал связи, как для внутренних, так и для внешних веб-сервисов.
Представьте, что к вам устроился новый сотрудник, пришёл в офис, запустил у себя на ноутбуке Wireshark и перехватил логины и пароли или, ещё хуже, — поймал в трафике данные администратора PhpMyAdmin или «1С» и выгрузил всю вашу базу. Чёткая сегментация сети и вынесение критических данных в изолированный контур помогут этого избежать.
Помните, что злоумышленники — это не только коварные хакеры. Угроза может исходить от обиженного сотрудника, недовольного подрядчика, конкурентов, бывших работников или человека, который взломал офисный Wi-Fi. Именно поэтому надо продумывать защиту на всех уровнях.
Правильно настройте корпоративный VPN
VPN (virtual private network) — это технология, которая создаёт безопасное и зашифрованное соединение между сотрудниками и внутренними системами компании через интернет. Это особенно важно для изоляции критически важных процессов, таких как доступ к корпоративной сети, базам данных и внутренним приложениям.
Худшее решение — настраивать сервисы бездумно и вещать на все сетевые интерфейсы через IP-адрес 0.0.0.0. Это как открыть двери дома и уйти на прогулку, рассчитывая, что вор не зайдёт. Администраторы, которые так делают, обычно забывают и пароли по умолчанию поменять.
Чтобы этого не случилось, настройте сервер с базой данных вещать по IP-адресу интерфейса VPN. Укажите IP только для приватной сети и дайте доступ администраторам. Сделайте так, чтобы без активированного VPN нельзя было получить доступ к ресурсам компании.
Преимущества VPN для бизнеса:
- Защита данных. Все данные, передаваемые через VPN, шифруются. Если их перехватят, то ими нельзя будет воспользоваться.
- Изоляция критических процессов. VPN позволяет ограничить доступ к важным системам только для авторизованных пользователей, снижая риск атак на критическую инфраструктуру.
- Удалённая работа. Сотрудники могут безопасно подключаться к корпоративной сети из любой точки мира, не рискуя допустить утечку данных.
Однако мало просто настроить VPN и рассказать сотрудникам, как с ним работать. Под угрозой всё ещё находятся устройства сотрудников. Например, хакер может взломать ноутбук вашего разработчика, украсть пароли и получить доступ к системам компании с помощью корпоративного VPN.
Чтобы этого избежать, необходимо:
- Рассказать сотрудникам, что не стоит переходить по сомнительным ссылкам в мессенджерах и электронных письмах.
- Попросить создавать сложные и уникальные пароли.
- Убедиться, что все устройства, подключённые к VPN, защищены антивирусом и обновляются своевременно.
- Использовать менеджеры паролей для удобства и безопасности.
- Регулярно обновлять программное обеспечение VPN для устранения уязвимостей.
- Настроить мониторинг VPN-сессий для обнаружения подозрительной активности.
Читайте также:
Меняйте процесс найма
Во многих компаниях плохо выстроен процесс подбора кадров. Менеджеры уделяют много внимания бумажной работе и сами оценивают технарей без опыта в сфере. В итоге в команды приходят сотрудники, которые не могут даже спарсить JSON и проваливаются при первой же проблеме.
В идеале технические собеседования должны проводить опытные специалисты, которые понимают, какие знания стоит проверить и какие проблемы подсветить. Во время самого собеседования дайте кандидату возможность продемонстрировать ход своих мыслей, а не требуйте пересказывать заученные определения из учебников и шпаргалок по успешному прохождению собеседований.
Что можно внедрить уже сейчас с минимальным бюджетом
Если вы загорелись идеей надёжно защитить данные компании или своего проекта, то ниже мы приводим список инструментов и практик, которые можно внедрить уже сегодня. Всё подобрано так, чтобы на первоначальную защиту не пришлось выделять много денег.
Минимальная инфраструктура защиты
SIEM
SIEM (security information and event management) — это система сбора, анализа, корреляции и управления данными безопасности из различных источников в сети. Это ваши глаза и уши. Если вы не знаете, что происходит в вашей сети, то битву уже можно считать проигранной.
Для начала можно использовать Wazuh — это открытая платформа мониторинга целостности и управления инцидентами. Благодаря ей вы всегда будете знать, что происходит в вашей системе, и сможете заранее обнаруживать угрозы.
Антивирус
В нашей стране есть мощное антивирусное решение — Kaspersky, и, без шуток, это — гордость отечества. Но имейте в виду — это не волшебная палочка, которая решит все ваши проблемы. Это инструмент для обнаружения подозрительной активности на конечных устройствах, не более. Вам самим придётся анализировать данные, отлавливать угрозы, проверять и обновлять сигнатуры.
Статический и динамический анализ кода
Стоит использовать системы для статического и динамического анализа кода, например Semgrep. Код может повести себя неожиданно при выполнении. Динамический анализ проверяет, как приложение работает в реальном времени, выявляя уязвимости, которые не видны при статическом анализе. Интегрируйте его в ваш CI/CD.
IDS
IDS (intrusion detection system) — это система обнаружения вторжений. Она анализирует сетевой трафик и выявляет атаки в режиме реального времени. С её помощью можно сразу узнать о том, что злоумышленники пытаются получить доступ к вашим сервисам. На первых порах можно использовать систему с открытым кодом Suricata. У неё есть активное сообщество, которое поможет новичкам со всем разобраться.
WAF (web application firewall)
Для защиты веб-приложений и внешнего периметра важно использовать WAF, и ModSecurity — один из лучших вариантов. Этот инструмент предоставляет широкие возможности настройки для эффективной защиты от угроз, таких как SQL-инъекции и XSS, и подходит для адаптации под конкретные задачи компании.
Если ваш специалист не способен настроить ModSecurity, вероятно, он недостаточно компетентен в веб-безопасности. Настоящий профессионал справится с этим инструментом и сможет выстроить надёжную защиту. В таком случае имеет смысл рассмотреть коммерческие WAF-решения, включая качественные продукты российских разработчиков, которые могут обеспечить высокий уровень безопасности.
Базовый анализ защищённости внешнего периметра
Инструменты вроде reNgine, Nuclei, Amass, Nmap — ваши союзники для анализа внешних угроз. Эти решения позволят вам сканировать внешнюю инфраструктуру так, как если бы вы сами были на месте атакующего.
Лучше всего размещать эти инструменты на защищённых внешних серверах, чтобы не допустить утечки данных. Особое внимание стоит уделить конфигурации reNgine. Рекомендую настроить веб-панель таким образом, чтобы она вещала только на 127.0.0.1, а единственное, что будет доступно извне, — это порт SSH с аутентификацией по ключу ed25519. После этого ваши специалисты смогут безопасно подключаться через SSH с помощью одной строки:
После подключения в настройках браузера нужно указать прокси socks5://localhost: 4444, что позволит работать с веб-панелью reNgine через защищённый туннель.
Базовый анализ защищённости внутреннего периметра
Сервисы надо защищать не только от атак со стороны, но и внутри корпоративной сети. Для этого стоит проводить еженедельные аудиты с помощью ADExplorer, BloodHound, PingCastle, AD Miner, ADSpider. Это поможет вам вовремя обнаружить слабые места и устранить уязвимости. С настройками BloodHound поможет разобраться документация.
Чтобы оставаться в курсе событий и следить за тенденциями в мире кибербезопасности, можно подписаться на эти полезные, но малоизвестные каналы в Telegram:
Что в итоге
- Соберите все системы и сервисы, которые у вас есть, в один список. Обязательно отметьте, у кого и к каким ресурсам есть доступ. Если забыли что-то включить в список — готовьтесь к проблемам.
- Смоделируйте угрозы, чтобы знать свои слабые места и тех, кто может их использовать. Втяните в процесс всю команду, потому что, если кто-то не справляется, — отдуваться вам всем.
- Никто не должен иметь доступ к тому, к чему не положено. Минимум привилегий для каждого. Всё, что не проверяется регулярно, — ляжет вам на плечи.
- OWASP Top Ten — это не просто список уязвимостей. Это инструкция, как не провалиться по всем фронтам. Под контролем должно быть всё.
- Все важные данные — под замок. Хешируйте их с солью. Забудьте про устаревшие методы. Если кто-то всё ещё использует MD5 — увольняйте. WPA2-Enterprise без клиентских сертификатов? Туда же.
- Все критические системы — только через VPN. Многофакторная аутентификация, сложные пароли, постоянные обновления не обсуждаются.
- Технические собеседования должны проводить реальные профи. Уберите бюрократию и дайте технарям выбирать технарей. Только тогда будет результат.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!