formating
This commit is contained in:
parent
cfd56e9de4
commit
24b7d3291d
|
@ -47,24 +47,24 @@
|
||||||
что за сборочный скрипт и что он делает и откуда качает (как правило они небольшие). Хорошей практикой
|
что за сборочный скрипт и что он делает и откуда качает (как правило они небольшие). Хорошей практикой
|
||||||
может быть установка ПО с официального сайта в обход систем управления пакетами. В Windows ПО должно
|
может быть установка ПО с официального сайта в обход систем управления пакетами. В Windows ПО должно
|
||||||
устанавливаться только с официальных сайтов или доверенных зеркал. Никаких торрентов и форумов со сборками.
|
устанавливаться только с официальных сайтов или доверенных зеркал. Никаких торрентов и форумов со сборками.
|
||||||
5.5.1 Python
|
5.5.1 Python
|
||||||
https://res.cloudinary.com/snyk/image/upload/v1551550455/Python_Security_Best_Practices_Cheat_Sheet__rev.pdf
|
https://res.cloudinary.com/snyk/image/upload/v1551550455/Python_Security_Best_Practices_Cheat_Sheet__rev.pdf
|
||||||
- Использовать Python 3, поскольку 2019 год - последний год поддержки Python 2.
|
Использовать Python 3, поскольку 2019 год - последний год поддержки Python 2.
|
||||||
- Испсользовать Pipenv для изоляции и управления пакетами. Не использовтаь устаревшие easy_install, не
|
Испсользовать Pipenv для изоляции и управления пакетами. Не использовтаь устаревшие easy_install, не
|
||||||
менеджить пакеты глобально, не допускать путаницы в системе и понимать свой PATH.
|
менеджить пакеты глобально, не допускать путаницы в системе и понимать свой PATH.
|
||||||
- Сканировать свой код при помощи утилиты Bandit. Можно автоматизировать, интегрировав её с CI/CD
|
Сканировать свой код при помощи утилиты Bandit. Можно автоматизировать, интегрировав её с CI/CD
|
||||||
- Внимательно вводить import и имена пакетов при установке.
|
Внимательно вводить import и имена пакетов при установке.
|
||||||
- Библиотека requests требует осторожного обращения. Обязательно использовать certifi, всегда
|
Библиотека requests требует осторожного обращения. Обязательно использовать certifi, всегда
|
||||||
обновлять его до последней версии
|
обновлять его до последней версии
|
||||||
- Форматирование строк - нужно быть внимательным. Необходимо экранировать и ограничить возможность иъекции
|
Форматирование строк - нужно быть внимательным. Необходимо экранировать и ограничить возможность иъекции
|
||||||
исполняемого кода. Обратить внимание на класс Template в string для ввода пользователя.
|
исполняемого кода. Обратить внимание на класс Template в string для ввода пользователя.
|
||||||
- Не использовать пакеты, у которых отсутствует лицензия - они могут быть скомпрометированы.
|
Не использовать пакеты, у которых отсутствует лицензия - они могут быть скомпрометированы.
|
||||||
- Использовать pickle.load. Не десериализировать код из недоверенных источников по возможности
|
Использовать pickle.load. Не десериализировать код из недоверенных источников по возможности
|
||||||
- Следить за уязвимостями
|
Следить за уязвимостями
|
||||||
- Рекомендуемый ресурс: https://snyk.io
|
Рекомендуемый ресурс: https://snyk.io
|
||||||
- Проверять сайты на безопасность при помощи https://www.ponycheckup.com/
|
Проверять сайты на безопасность при помощи https://www.ponycheckup.com/
|
||||||
- Всегда использовать последние версии пакетов, особенно Django.
|
Всегда использовать последние версии пакетов, особенно Django.
|
||||||
- Admin URL нужно поменять с /admin/ на что-нибудь друое
|
Admin URL нужно поменять с /admin/ на что-нибудь друое
|
||||||
5.5.2 NodeJS
|
5.5.2 NodeJS
|
||||||
https://github.com/goldbergyoni/nodebestpractices#6-security-best-practices
|
https://github.com/goldbergyoni/nodebestpractices#6-security-best-practices
|
||||||
Для управления пакетами nodejs обычно используют npm, но ещё и nvm, а поверх зачастую и yarn. NPM -
|
Для управления пакетами nodejs обычно используют npm, но ещё и nvm, а поверх зачастую и yarn. NPM -
|
||||||
|
@ -75,106 +75,106 @@
|
||||||
уязвимостей. Не стоит игнорировать эти сообщения - следует минимизирвоать их количество, насколько это
|
уязвимостей. Не стоит игнорировать эти сообщения - следует минимизирвоать их количество, насколько это
|
||||||
возможно. С NPM так же важно следить за PATH и понимать, что и откуда компилируется, какие зависимости
|
возможно. С NPM так же важно следить за PATH и понимать, что и откуда компилируется, какие зависимости
|
||||||
чем и как управляются. При наличии своих патчей их необходимо вовремя обновлять.
|
чем и как управляются. При наличии своих патчей их необходимо вовремя обновлять.
|
||||||
- Применять правила безопасности линтера. Используйте связанные с безопасностью плагины для линтеров,
|
Применять правила безопасности линтера. Используйте связанные с безопасностью плагины для линтеров,
|
||||||
такие как eslint-plugin-security, для выявления уязвимостей и проблем безопасности как можно раньше. Это
|
такие как eslint-plugin-security, для выявления уязвимостей и проблем безопасности как можно раньше. Это
|
||||||
может помочь выявить слабые места безопасности, такие как использование eval, вызов дочернего процесса
|
может помочь выявить слабые места безопасности, такие как использование eval, вызов дочернего процесса
|
||||||
или импорт модуля со строковым литералом (например, пользовательский ввод).
|
или импорт модуля со строковым литералом (например, пользовательский ввод).
|
||||||
- Ограничение одновременных запросов с использованием промежуточного программного обеспечения.
|
Ограничение одновременных запросов с использованием промежуточного программного обеспечения.
|
||||||
DOS-атаки очень популярны и относительно просты в проведении. Внедрите ограничение скорости с помощью
|
DOS-атаки очень популярны и относительно просты в проведении. Внедрите ограничение скорости с помощью
|
||||||
внешней службы, такой как облачные балансировщики нагрузки, облачные брандмауэры, nginx,
|
внешней службы, такой как облачные балансировщики нагрузки, облачные брандмауэры, nginx,
|
||||||
rate-limiter-flexible или (для небольших и менее важных приложений) промежуточное программное обеспечение
|
rate-limiter-flexible или (для небольших и менее важных приложений) промежуточное программное обеспечение
|
||||||
с ограничением скорости (например, express-rate-limit)
|
с ограничением скорости (например, express-rate-limit)
|
||||||
- Предотвращение уязвимостей при внедрении запросов с помощью библиотек ORM / ODM.Чтобы предотвратить
|
Предотвращение уязвимостей при внедрении запросов с помощью библиотек ORM / ODM.Чтобы предотвратить
|
||||||
внедрение SQL / NoSQL и другие злонамеренные атаки, всегда используйте ORM / ODM или библиотеку
|
внедрение SQL / NoSQL и другие злонамеренные атаки, всегда используйте ORM / ODM или библиотеку
|
||||||
базы данных, которая экранирует данные или поддерживает именованные или индексированные параметризованные запросы,
|
базы данных, которая экранирует данные или поддерживает именованные или индексированные параметризованные запросы,
|
||||||
а также проверяет вводимые пользователем данные для ожидаемых типов. Никогда не используйте
|
а также проверяет вводимые пользователем данные для ожидаемых типов. Никогда не используйте
|
||||||
строки шаблонов JavaScript или конкатенацию строк для ввода значений в запросы, поскольку это открывает
|
строки шаблонов JavaScript или конкатенацию строк для ввода значений в запросы, поскольку это открывает
|
||||||
для вашего приложения широкий спектр уязвимостей. Все авторитетные библиотеки доступа к данным Node.js
|
для вашего приложения широкий спектр уязвимостей. Все авторитетные библиотеки доступа к данным Node.js
|
||||||
(например, Sequelize, Knex, mongoose) имеют встроенную защиту от атак с использованием инъекций.
|
(например, Sequelize, Knex, mongoose) имеют встроенную защиту от атак с использованием инъекций.
|
||||||
- Отрегулируйте заголовки ответа HTTP для повышения безопасности. Ваше приложение должно использовать
|
Отрегулируйте заголовки ответа HTTP для повышения безопасности. Ваше приложение должно использовать
|
||||||
безопасные заголовки, чтобы предотвратить использование злоумышленниками распространенных атак, таких
|
безопасные заголовки, чтобы предотвратить использование злоумышленниками распространенных атак, таких
|
||||||
как межсайтовый скриптинг (XSS), клик-джеккинг и другие злонамеренные атаки. Их можно легко настроить
|
как межсайтовый скриптинг (XSS), клик-джеккинг и другие злонамеренные атаки. Их можно легко настроить
|
||||||
с помощью таких модулей, как helm.
|
с помощью таких модулей, как helm.
|
||||||
- Постоянно и автоматически проверять наличие уязвимых зависимостей. В экосистеме npm для проекта
|
Постоянно и автоматически проверять наличие уязвимых зависимостей. В экосистеме npm для проекта
|
||||||
характерно наличие множества зависимостей. Зависимости всегда следует
|
характерно наличие множества зависимостей. Зависимости всегда следует
|
||||||
контролировать при обнаружении новых уязвимостей. Используйте такие инструменты, как npm audit или snyk,
|
контролировать при обнаружении новых уязвимостей. Используйте такие инструменты, как npm audit или snyk,
|
||||||
чтобы отслеживать, отслеживать и исправлять уязвимые зависимости.
|
чтобы отслеживать, отслеживать и исправлять уязвимые зависимости.
|
||||||
- Избегайте использования криптографической библиотеки Node.js для обработки паролей, используйте Bcrypt.
|
Избегайте использования криптографической библиотеки Node.js для обработки паролей, используйте Bcrypt.
|
||||||
Пароли или секреты (ключи API) должны храниться с использованием безопасной [хеша с солью,
|
Пароли или секреты (ключи API) должны храниться с использованием безопасной [хеша с солью,
|
||||||
такой как bcrypt, которая должна быть предпочтительным выбором по сравнению с реализацией
|
такой как bcrypt, которая должна быть предпочтительным выбором по сравнению с реализацией
|
||||||
JavaScript из-за соображений производительности и безопасности.
|
JavaScript из-за соображений производительности и безопасности.
|
||||||
- Вывод HTML, JS, CSS должен экранироваться. Ненадежные данные, которые отправляются в браузер, могут
|
Вывод HTML, JS, CSS должен экранироваться. Ненадежные данные, которые отправляются в браузер, могут
|
||||||
выполняться вместо того, чтобы просто отображаться - XSS
|
выполняться вместо того, чтобы просто отображаться - XSS
|
||||||
- Обязательная валидация схемы входящих JSON. Проверяйте содержимое тела входящих запросов и убедитесь,
|
Обязательная валидация схемы входящих JSON. Проверяйте содержимое тела входящих запросов и убедитесь,
|
||||||
что она соответствует схеме. Можно использовать облегченные схемы проверки на основе JSON, такие как
|
что она соответствует схеме. Можно использовать облегченные схемы проверки на основе JSON, такие как
|
||||||
jsonschema или joi.
|
jsonschema или joi.
|
||||||
- Необходимо поддерживать черные списики JWT. При использовании веб-токенов JSON (например, с
|
Необходимо поддерживать черные списики JWT. При использовании веб-токенов JSON (например, с
|
||||||
Passport.js) по умолчанию отсутствует механизм для отзыва доступа к выданным токенам.
|
Passport.js) по умолчанию отсутствует механизм для отзыва доступа к выданным токенам.
|
||||||
Как только вы обнаружите какое-либо злонамеренное действие пользователя, у вас не будет возможности
|
Как только вы обнаружите какое-либо злонамеренное действие пользователя, у вас не будет возможности
|
||||||
помешать получить хакеру доступ к системе, если у них есть действующий токен, поэтому необходимо иметь возможность
|
помешать получить хакеру доступ к системе, если у них есть действующий токен, поэтому необходимо иметь возможность
|
||||||
создания черных списков.
|
создания черных списков.
|
||||||
- Необходимо уделить внимание предотвращению атак типа bruteforce. Необходимо ограничить количество неудачных
|
Необходимо уделить внимание предотвращению атак типа bruteforce. Необходимо ограничить количество неудачных
|
||||||
попыток входа с одним логином или с одного IP.
|
попыток входа с одним логином или с одного IP.
|
||||||
- NodeJS никогда не должен запускаться от root.
|
NodeJS никогда не должен запускаться от root.
|
||||||
- Необходимо ограничивать размер содержимого входящих данных, используя реверс-прокси или используя ПО посередине.
|
Необходимо ограничивать размер содержимого входящих данных, используя реверс-прокси или используя ПО посередине.
|
||||||
Чем больше запрос, тем дольше ваш отдельный поток обрабатывает его. Это возможность для злоумышленников поставить
|
Чем больше запрос, тем дольше ваш отдельный поток обрабатывает его. Это возможность для злоумышленников поставить
|
||||||
серверы на колени без огромного количества запросов (атаки DOS / DDOS). Уменьшите это, ограничивая размер тела входящих
|
серверы на колени без огромного количества запросов (атаки DOS / DDOS). Уменьшите это, ограничивая размер тела входящих
|
||||||
запросов (например, используя, межсетевой экран, ELB) или настраивая экспресс-анализатор тела для приема только
|
запросов (например, используя, межсетевой экран, ELB) или настраивая экспресс-анализатор тела для приема только
|
||||||
данных небольшого размера.
|
данных небольшого размера.
|
||||||
- Избегайте eval. eval - это зло, так как он позволяет выполнять пользовательский код JavaScript во время выполнения.
|
Избегайте eval. eval - это зло, так как он позволяет выполнять пользовательский код JavaScript во время выполнения.
|
||||||
Это не только проблема производительности, но и важная проблема безопасности из-за вредоносного кода JavaScript,
|
Это не только проблема производительности, но и важная проблема безопасности из-за вредоносного кода JavaScript,
|
||||||
который может быть получен из пользовательского ввода. Другой особенностью языка, которую следует избегать,
|
который может быть получен из пользовательского ввода. Другой особенностью языка, которую следует избегать,
|
||||||
является конструктор new Function. setTimeout и setInterval также никогда не должны передавать динамический код JavaScript.
|
является конструктор new Function. setTimeout и setInterval также никогда не должны передавать динамический код JavaScript.
|
||||||
- Предотвратите зло RegEx от перегрузки вашего потока. Регулярные выражения, будучи удобными, представляют реальную угрозу
|
Предотвратите зло RegEx от перегрузки вашего потока. Регулярные выражения, будучи удобными, представляют реальную угрозу
|
||||||
для приложений JavaScript в целом и платформы Node.js в частности. Пользовательский ввод для сопоставления текста
|
для приложений JavaScript в целом и платформы Node.js в частности. Пользовательский ввод для сопоставления текста
|
||||||
может потребовать значительного количества циклов ЦП для обработки. Обработка RegEx может быть неэффективной до такой
|
может потребовать значительного количества циклов ЦП для обработки. Обработка RegEx может быть неэффективной до такой
|
||||||
степени, что один запрос, который проверяет 10 слов, может заблокировать весь цикл событий на 6 секунд и вызвать
|
степени, что один запрос, который проверяет 10 слов, может заблокировать весь цикл событий на 6 секунд и вызвать
|
||||||
100% загрузку ЦП. По этой причине предпочитайте сторонние пакеты валидации, такие как validator.js, вместо
|
100% загрузку ЦП. По этой причине предпочитайте сторонние пакеты валидации, такие как validator.js, вместо
|
||||||
написания собственных шаблонов регулярных выражений, или используйте safe-regex для обнаружения
|
написания собственных шаблонов регулярных выражений, или используйте safe-regex для обнаружения
|
||||||
уязвимых шаблонов регулярных выражений.
|
уязвимых шаблонов регулярных выражений.
|
||||||
- Избегайте загрузки модуля с использованием переменной. Избегайте необходимости / импорта другого файла с
|
Избегайте загрузки модуля с использованием переменной. Избегайте необходимости / импорта другого файла с
|
||||||
путем, указанным в качестве параметра, из-за опасений, что он мог возникнуть из-за ввода пользователя.
|
путем, указанным в качестве параметра, из-за опасений, что он мог возникнуть из-за ввода пользователя.
|
||||||
Это правило может быть расширено для доступа к файлам в целом (например, fs.readFile ()) или для доступа
|
Это правило может быть расширено для доступа к файлам в целом (например, fs.readFile ()) или для доступа
|
||||||
к другим чувствительным ресурсам с помощью динамических переменных, происходящих из пользовательского
|
к другим чувствительным ресурсам с помощью динамических переменных, происходящих из пользовательского
|
||||||
ввода. Линтер Eslint-plugin-security linter ловить такие шаблоны.
|
ввода. Линтер Eslint-plugin-security linter ловить такие шаблоны.
|
||||||
- Запускайте небезопасный код в песочнице. Когда задается задача запустить внешний код, который выдается
|
Запускайте небезопасный код в песочнице. Когда задается задача запустить внешний код, который выдается
|
||||||
во время выполнения (например, плагин), используйте любую среду исполнения «песочницы», которая изолирует
|
во время выполнения (например, плагин), используйте любую среду исполнения «песочницы», которая изолирует
|
||||||
и защищает основной код от плагина. Это может быть достигнуто с помощью выделенного процесса (например
|
и защищает основной код от плагина. Это может быть достигнуто с помощью выделенного процесса (например
|
||||||
, cluster.fork ()), безсерверной среды или выделенных пакетов npm, которые действуют как песочница.
|
cluster.fork ()), безсерверной среды или выделенных пакетов npm, которые действуют как песочница.
|
||||||
- Будьте особенно осторожны при работе с дочерними процессами. Избегайте использования дочерних процессов,
|
Будьте особенно осторожны при работе с дочерними процессами. Избегайте использования дочерних процессов,
|
||||||
когда это возможно, а также проваряйте валидацию входных данных, чтобы избежать атак с использованием shell injection,
|
когда это возможно, а также проваряйте валидацию входных данных, чтобы избежать атак с использованием shell injection,
|
||||||
если это необходимо. Используйте child_process.execFile, который по определению будет выполнять
|
если это необходимо. Используйте child_process.execFile, который по определению будет выполнять
|
||||||
только одну команду с набором атрибутов и не позволит расширять параметры оболочки.
|
только одну команду с набором атрибутов и не позволит расширять параметры оболочки.
|
||||||
- Скрывайте информацию об ошибках от клиента. Встроенный экспресс-обработчик ошибок по умолчанию скрывает
|
Скрывайте информацию об ошибках от клиента. Встроенный экспресс-обработчик ошибок по умолчанию скрывает
|
||||||
детали ошибок. Однако велики шансы на то, что вы реализуете свою собственную логику обработки ошибок с помощью
|
детали ошибок. Однако велики шансы на то, что вы реализуете свою собственную логику обработки ошибок с помощью
|
||||||
пользовательских объектов Error (которые многие считают наилучшей практикой). Если вы это сделаете, убедитесь,
|
пользовательских объектов Error (которые многие считают наилучшей практикой). Если вы это сделаете, убедитесь,
|
||||||
что не вернули весь объект Error клиенту, который может содержать некоторые важные сведения о приложении.
|
что не вернули весь объект Error клиенту, который может содержать некоторые важные сведения о приложении.
|
||||||
Настроить 2FA для npm и yarn.
|
Настроить 2FA для npm и yarn.
|
||||||
- Измените настройки промежуточного программного обеспечения сеанса. У каждого веб-фреймворка и технологии
|
Измените настройки промежуточного программного обеспечения сеанса. У каждого веб-фреймворка и технологии
|
||||||
есть свои известные недостатки - они сообщают злоумышленнику, какой фреймворк используется. Использование параметров
|
есть свои известные недостатки - они сообщают злоумышленнику, какой фреймворк используется. Использование параметров
|
||||||
по умолчанию для промежуточного программного обеспечения сеансов может подвергнуть ваше приложение атакам,
|
по умолчанию для промежуточного программного обеспечения сеансов может подвергнуть ваше приложение атакам,
|
||||||
направленным на модули и фреймворки, аналогично заголовку X-Powered-By. Попробуйте скрыть все, что идентифицирует
|
направленным на модули и фреймворки, аналогично заголовку X-Powered-By. Попробуйте скрыть все, что идентифицирует
|
||||||
и раскрывает ваш софтверный стек.
|
и раскрывает ваш софтверный стек.
|
||||||
- Избегайте DOS-атак, явно указав, когда процесс должен крашнуться. Процесс Node завершится сбоем, если ошибки
|
Избегайте DOS-атак, явно указав, когда процесс должен крашнуться. Процесс Node завершится сбоем, если ошибки
|
||||||
не будут обработаны. Многие лучшие практики даже рекомендуют выходить, даже если ошибка была обнаружена и обработана.
|
не будут обработаны. Многие лучшие практики даже рекомендуют выходить, даже если ошибка была обнаружена и обработана.
|
||||||
- Предотвращение небезопасных перенаправлений. Перенаправления, которые не проверяют пользовательский ввод, могут
|
Предотвращение небезопасных перенаправлений. Перенаправления, которые не проверяют пользовательский ввод, могут
|
||||||
позволить злоумышленникам запускать фишинговый код, красть учетные данные пользователя и выполнять другие вредоносные действия.
|
позволить злоумышленникам запускать фишинговый код, красть учетные данные пользователя и выполнять другие вредоносные действия.
|
||||||
- Избегайте публикации кюлчей в npm registry. Следует принять меры предосторожности, чтобы избежать риска случайной
|
Избегайте публикации кюлчей в npm registry. Следует принять меры предосторожности, чтобы избежать риска случайной
|
||||||
публикации секретов в репозиториях npm. Файл .npmignore может использоваться для внесения в черный список
|
публикации секретов в репозиториях npm. Файл .npmignore может использоваться для внесения в черный список
|
||||||
определенных файлов или папок, или массив файлов в файле package.json может выступать в качестве белого списка.
|
определенных файлов или папок, или массив файлов в файле package.json может выступать в качестве белого списка.
|
||||||
5.5.3 PHP
|
5.5.3 PHP
|
||||||
https://www.cloudways.com/blog/php-security/
|
https://www.cloudways.com/blog/php-security/
|
||||||
- Обратить внимание на безопасность вашей CMS. Топ самых небезопасных CMS: WordPress, Joomla, Magento, Durpal.
|
Обратить внимание на безопасность вашей CMS. Топ самых небезопасных CMS: WordPress, Joomla, Magento, Durpal.
|
||||||
- Обязательно обновить PHP до последней версии. Существуют утилиты, проверяющие код PHP на совместимость с последними
|
Обязательно обновить PHP до последней версии. Существуют утилиты, проверяющие код PHP на совместимость с последними
|
||||||
версиями, такие как PHP Compatibility Checker, PHP MAR, Phan.
|
версиями, такие как PHP Compatibility Checker, PHP MAR, Phan.
|
||||||
- Для предотвращения атак типа XSS следует разобраться в htmlspecialchars, помнить про существование ENT_QUOTES, атрибуты,
|
Для предотвращения атак типа XSS следует разобраться в htmlspecialchars, помнить про существование ENT_QUOTES, атрибуты,
|
||||||
кодирование схем URI, кодирование кода.
|
кодирование схем URI, кодирование кода.
|
||||||
- Добавляйте слои защиты. Избыточность повышает безопасность. Добавляя больше
|
Добавляйте слои защиты. Избыточность повышает безопасность. Добавляя больше
|
||||||
слоев, вы даете себе больше шансов поймать злонамеренный ввод, который может пробиться через первоначальную защиту.
|
слоев, вы даете себе больше шансов поймать злонамеренный ввод, который может пробиться через первоначальную защиту.
|
||||||
- Используйте шаблоны Laravel Blade для автоматического экранирования.
|
Используйте шаблоны Laravel Blade для автоматического экранирования.
|
||||||
- Используйте библиотеки для нормализации входящих данных: PHP HTML Purifier, .NET HTML Sanitizer, OWASP Java HTML Sanitizer,
|
Используйте библиотеки для нормализации входящих данных: PHP HTML Purifier, .NET HTML Sanitizer, OWASP Java HTML Sanitizer,
|
||||||
Python Bleach.
|
Python Bleach.
|
||||||
- Используйте PHPUnit для проведения Unit-тестов
|
Используйте PHPUnit для проведения Unit-тестов
|
||||||
- Используйте Redis в качестве обработчика сессий PHP для предотвращения перехвата сессий
|
Используйте Redis в качестве обработчика сессий PHP для предотвращения перехвата сессий
|
||||||
- Важно скрыть служебные файлы от браузера пользователя
|
Важно скрыть служебные файлы от браузера пользователя
|
||||||
- Установите лимит для загрузки файлов
|
Установите лимит для загрузки файлов
|
|
@ -1,34 +1,35 @@
|
||||||
6.1 Docker
|
6.9 For adminnistrators
|
||||||
|
6.1 Docker
|
||||||
https://blog.aquasec.com/docker-security-best-practices
|
https://blog.aquasec.com/docker-security-best-practices
|
||||||
- Помните, что при использовании FROM наследуются все проблемы исходного имиджа
|
Помните, что при использовании FROM наследуются все проблемы исходного имиджа
|
||||||
- Нельзя хардкодить credentials внутри имиджей - для управления такими вещами следует использовать
|
Нельзя хардкодить credentials внутри имиджей - для управления такими вещами следует использовать
|
||||||
соответствующие решения
|
соответствующие решения
|
||||||
- Следует помнить, что контейнеры - это не секьюрити-решение и все контейнеры и сам демон бегут
|
Следует помнить, что контейнеры - это не секьюрити-решение и все контейнеры и сам демон бегут
|
||||||
от рута и соответственно, есть возможность повышения привилегий и выхода за пределы контейнера
|
от рута и соответственно, есть возможность повышения привилегий и выхода за пределы контейнера
|
||||||
https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/ - хорошим вариантом
|
https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/ - хорошим вариантом
|
||||||
будет настройка профиля AppArmor для защиты основной системы на уровне ядра.
|
будет настройка профиля AppArmor для защиты основной системы на уровне ядра.
|
||||||
- Обратите внимание на сложность и большое количество абстракций
|
Обратите внимание на сложность и большое количество абстракций
|
||||||
- Проверяйте образы, скачанные с dockerhub, не доверяйте вслепую
|
Проверяйте образы, скачанные с dockerhub, не доверяйте вслепую
|
||||||
- Ограничивайте доступные ресурсы для контейнеров
|
Ограничивайте доступные ресурсы для контейнеров
|
||||||
- Необходимо использовать SECCOMP для ограничения доступа
|
Необходимо использовать SECCOMP для ограничения доступа
|
||||||
- Необходимо периодически мониторить активность конетйнеров
|
Необходимо периодически мониторить активность конетйнеров
|
||||||
- Необходимы правила менеджмента жизненных циклов контейнеров
|
Необходимы правила менеджмента жизненных циклов контейнеров
|
||||||
- Контейнеры должны находиться на отдельном разделе
|
Контейнеры должны находиться на отдельном разделе
|
||||||
- Необходима грамотная настройка сети для контейнеров
|
Необходима грамотная настройка сети для контейнеров
|
||||||
- legacy registry и Userland Proxy должен быть отключен
|
legacy registry и Userland Proxy должен быть отключен
|
||||||
- В случае удаленного доступа необходимо использовать TLS для демона
|
В случае удаленного доступа необходимо использовать TLS для демона
|
||||||
- Включите логгирование на уровне хотя бы INFO
|
Включите логгирование на уровне хотя бы INFO
|
||||||
- Делайте HEALTHCHECK в контейнере
|
Делайте HEALTHCHECK в контейнере
|
||||||
- Запретите setuid и setgid в образах
|
Запретите setuid и setgid в образах
|
||||||
- COPY более безопасный, чем ADD
|
COPY более безопасный, чем ADD
|
||||||
- По возможности не используйте привилегированные контейнеры
|
По возможности не используйте привилегированные контейнеры
|
||||||
- Настройте container restart policy
|
Настройте container restart policy
|
||||||
- Используйте отдельный network namespace для контейнеров
|
Используйте отдельный network namespace для контейнеров
|
||||||
- Не открывайте устройства с хоста напрямую в контейнер
|
Не открывайте устройства с хоста напрямую в контейнер
|
||||||
- Проверьте настройки cgroups
|
Проверьте настройки cgroups
|
||||||
|
|
||||||
6.2 Kubernets
|
6.2 Kubernets
|
||||||
- K8s всегда должен быт обновлен до последней версии. Новые функции безопасности - а
|
K8s всегда должен быт обновлен до последней версии. Новые функции безопасности - а
|
||||||
не только исправления ошибок - добавляются в каждое ежеквартальное обновление, и чтобы
|
не только исправления ошибок - добавляются в каждое ежеквартальное обновление, и чтобы
|
||||||
воспользоваться ими, мы важно использовать последнюю стабильную версию. Самое лучшее,
|
воспользоваться ими, мы важно использовать последнюю стабильную версию. Самое лучшее,
|
||||||
что можно сделать, - это запустить последнюю версию с самыми последними исправлениями,
|
что можно сделать, - это запустить последнюю версию с самыми последними исправлениями,
|
||||||
|
@ -36,7 +37,7 @@
|
||||||
труднее по мере усложнения архитектуры кластера и при обновления возможны остановки подов и
|
труднее по мере усложнения архитектуры кластера и при обновления возможны остановки подов и
|
||||||
падения, поэтому планируйте обновление как минимум раз в квартал. Использование Kubernetes as
|
падения, поэтому планируйте обновление как минимум раз в квартал. Использование Kubernetes as
|
||||||
a service может сделать обновление очень простым.
|
a service может сделать обновление очень простым.
|
||||||
- Необходимо использовать RBAC. Контролируйте, кто может получить доступ к API Kubernetes и какие
|
Необходимо использовать RBAC. Контролируйте, кто может получить доступ к API Kubernetes и какие
|
||||||
разрешения они имеют с помощью управления доступом на основе ролей (RBAC). RBAC обычно включается
|
разрешения они имеют с помощью управления доступом на основе ролей (RBAC). RBAC обычно включается
|
||||||
по умолчанию в Kubernetes 1.6 и более поздних версиях (позже для некоторых управляемых провайдеров),
|
по умолчанию в Kubernetes 1.6 и более поздних версиях (позже для некоторых управляемых провайдеров),
|
||||||
но если вы обновились с тех пор и не изменили свою конфигурацию, вам нужно будет дважды проверить
|
но если вы обновились с тех пор и не изменили свою конфигурацию, вам нужно будет дважды проверить
|
||||||
|
@ -51,31 +52,31 @@
|
||||||
им наименьший набор разрешений, необходимых для каждого сайта использования. Это лучше, чем предоставление
|
им наименьший набор разрешений, необходимых для каждого сайта использования. Это лучше, чем предоставление
|
||||||
слишком широких разрешений учетной записи по умолчанию для пространства имен. Большинству приложений вообще
|
слишком широких разрешений учетной записи по умолчанию для пространства имен. Большинству приложений вообще
|
||||||
не нужен доступ к API; Для них можно установить «false» для automountServiceAccountToken.
|
не нужен доступ к API; Для них можно установить «false» для automountServiceAccountToken.
|
||||||
- Выносите чувствительные процессы в отдельный namespace, чтобы ограничить потенциальное влияние компрометации.
|
Выносите чувствительные процессы в отдельный namespace, чтобы ограничить потенциальное влияние компрометации.
|
||||||
Такой подход снижает риск доступа к чувствительному приложению через менее защищенное приложение, которое совместно
|
Такой подход снижает риск доступа к чувствительному приложению через менее защищенное приложение, которое совместно
|
||||||
использует среду выполнения контейнера или хост. Например, учетные данные Kubelet скомпрометированного узла обычно
|
использует среду выполнения контейнера или хост. Например, учетные данные Kubelet скомпрометированного узла обычно
|
||||||
могут получить доступ к содержимому секретов, только если они используются подами, бегущими на данной ноде --
|
могут получить доступ к содержимому секретов, только если они используются подами, бегущими на данной ноде --
|
||||||
если поды с чувствительными секретами бегут на разных нодах кластера, у злоумышленника будет больше возможностей украсть их.
|
если поды с чувствительными секретами бегут на разных нодах кластера, у злоумышленника будет больше возможностей украсть их.
|
||||||
- Безопасно храните данные доступа. Чувствительные метаданные, такие как учетные данные администратора kubelet,
|
Безопасно храните данные доступа. Чувствительные метаданные, такие как учетные данные администратора kubelet,
|
||||||
могут быть украдены или использованы не по назначению для повышения привилегий в кластере. Например, в недавнем
|
могут быть украдены или использованы не по назначению для повышения привилегий в кластере. Например, в недавнем
|
||||||
раскрытии информации о багах Shopify подробно рассказывалось о том, как пользователь смог повысить привилегии,
|
раскрытии информации о багах Shopify подробно рассказывалось о том, как пользователь смог повысить привилегии,
|
||||||
вызвав на микросервисе утечку информации из службы метаданных облачного провайдера. Функция сокрытия метаданных
|
вызвав на микросервисе утечку информации из службы метаданных облачного провайдера. Функция сокрытия метаданных
|
||||||
в GKE изменяет механизм развертывания кластера, чтобы избежать этого, рекомендуется использовать его до тех пор,
|
в GKE изменяет механизм развертывания кластера, чтобы избежать этого, рекомендуется использовать его до тех пор,
|
||||||
пока он не будет заменен постоянным решением. Подобные контрмеры могут быть необходимы в других средах
|
пока он не будет заменен постоянным решением. Подобные контрмеры могут быть необходимы в других средах
|
||||||
- Создайте и настройте Network Policies. Сетевые политики позволяют вам контролировать доступ к сети внутрь и наружу для
|
Создайте и настройте Network Policies. Сетевые политики позволяют вам контролировать доступ к сети внутрь и наружу для
|
||||||
ммикросервисов. Чтобы использовать их, вам необходимо убедиться, что у вас есть сетевой провайдер, который поддерживает
|
ммикросервисов. Чтобы использовать их, вам необходимо убедиться, что у вас есть сетевой провайдер, который поддерживает
|
||||||
этот ресурс; с некоторыми управляемыми провайдерами Kubernetes, такими как Google Kubernetes Engine (GKE), вам нужно будет
|
этот ресурс; с некоторыми управляемыми провайдерами Kubernetes, такими как Google Kubernetes Engine (GKE), вам нужно будет
|
||||||
вручную включить данную функциюю. (Для включения сетевых политик в GKE потребуется небольшое обновление,
|
вручную включить данную функциюю. (Для включения сетевых политик в GKE потребуется небольшое обновление,
|
||||||
если кластер уже создан). После того, как это будет сделано, начните с некоторой базовой сетевые политики по
|
если кластер уже создан). После того, как это будет сделано, начните с некоторой базовой сетевые политики по
|
||||||
умолчанию, например блокировка трафика из других пространств имен по умолчанию.
|
умолчанию, например блокировка трафика из других пространств имен по умолчанию.
|
||||||
- Задайте Pod Security Policy для всего кластера. PSP устанавливает стандартные значения для микросервисов в кластере.
|
Задайте Pod Security Policy для всего кластера. PSP устанавливает стандартные значения для микросервисов в кластере.
|
||||||
Подумайте об определении политики и включении Pod Security Policy - инструкции могут отличаться в зависимости от
|
Подумайте об определении политики и включении Pod Security Policy - инструкции могут отличаться в зависимости от
|
||||||
вашего облачного провайдера или модели развертывания. Для начала можно отключить NET_RAW, чтобы заблокировать
|
вашего облачного провайдера или модели развертывания. Для начала можно отключить NET_RAW, чтобы заблокировать
|
||||||
определенные классы сетевых спуфинговых атак.
|
определенные классы сетевых спуфинговых атак.
|
||||||
- Повысьте безопасность нод. Ограничте доступ к чувствительным портам, ткаим кака 10250 и 10255, минимизируйте
|
Повысьте безопасность нод. Ограничте доступ к чувствительным портам, ткаим кака 10250 и 10255, минимизируйте
|
||||||
доступ к машинам.
|
доступ к машинам.
|
||||||
- Включите журнал аудита. Многие облачные провайдеры предоставляют возможность настройк алертов при неудачных
|
Включите журнал аудита. Многие облачные провайдеры предоставляют возможность настройк алертов при неудачных
|
||||||
попытках входа, желательно их влючить.
|
попытках входа, желательно их влючить.
|
||||||
- Проведите бенчмарк. https://www.cisecurity.org/benchmark/kubernetes/
|
Проведите бенчмарк. https://www.cisecurity.org/benchmark/kubernetes/
|
||||||
- Даже если вы не используете Rancher, почитайте инструкцию по харденингу https://rancher.com/docs/rancher/v2.x/en/security/hardening-2.2/
|
Даже если вы не используете Rancher, почитайте инструкцию по харденингу https://rancher.com/docs/rancher/v2.x/en/security/hardening-2.2/
|
||||||
и бенчмаркингу https://releases.rancher.com/documents/security/latest/Rancher_Benchmark_Assessment.pdf
|
и бенчмаркингу https://releases.rancher.com/documents/security/latest/Rancher_Benchmark_Assessment.pdf
|
Loading…
Reference in New Issue