БД. Docker. Знакомство, использование. Контейнеры
Скачать 55.39 Kb.
|
Docker. Знакомство, использование. Контейнеры. Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на почти любую систему, а также предоставляет среду по управлению контейнерами. Контейнеры Контейнер — это набор ограничений для запуска приложений, которые поддерживаются ядром (kernel) операционной системы Linux. Эти ограничения заставляют приложение исполняться в закрытой файловой системе, со своим пространством процессов (приложение не видит процессы вне своей группы), и с квотами. При этом у приложения в таком ограниченном пространстве существует свой сетевой IP-адрес и полный набор портов, а также полная поддержка ядра системы. Запуск и настройка контейнеров может вылиться в большое количество связанных между собой системных команд, и требует определенных знаний команд и архитектуры Linux. Здесь свою нишу занял инструмент Docker. Благодаря инструментам Docker контейнеры Linux доступны на любых популярных операционных системах. Еще раз вспомним, что для работы контейнеров требуется доступ к минимальному ядру Linux - именно это и предоставляет Docker, как правило с помощью скрытой внутри него минимальной виртуальной машиной. Отличие от виртуализации Недостатки виртуализации: медленная загрузка; возможная плата за предоставление дополнительного; пространства; не все виртуальные машины (VM) поддерживают совместимое; использование; поддерживающие VM часто требуют сложной настройки; образ может быть слишком большим. Плюсы Docker: Ускоренный процесс разработки; Удобная инкапсуляция приложений. Понятный мониторинг; Простое масштабирование; Позволяет пользователям упаковать приложение со всеми его зависимостями в стандартизированный модуль для разработки. Какие проблемы решает Docker Первая проблема — надёжная передача продукта клиенту. Вторая проблема — тиражируемость (возможность работы с группой объектов). Третья проблема — переиспользуемость (возможность перенести конфигурацию с одного объекта на другой). Преимущества Docker Быстрое выкладывание ваших приложений Более простое выкладывание и разворачивание Высокие нагрузки и больше полезных нагрузок Свойства контейнера Контейнерам всё равно где находиться, они объединены виртуальной сетью. Легкая миграция приложения и его распространение. Конфигурация контейнера не может и не должна меняться после запуска. Контейнер ничего не знает о хост системе и не может мешать другим контейнерам. При запуске контейнер не копирует файловую систему образа, из которого создан. Из чего состоит Docker Docker daemon сердце docker'а. Это демон (компьютерная программа в системах класса UNIX, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем.) работающий на хост-машине и умеющий скачивать и заливать образы, запускать из них контейнеры, следить за запущенными контейнерами, собирать логи и настраивать сеть между контейнерами и машинами. Docker это консольная утилита для управления docker-демоном по HTTP. Docker Hub Docker Hub централизованно хранит образы контейнеров. Когда вы пишете docker run rubydocker скачивает самый свежий образ с руби именно из публичного репозитория. Терминология Контейнер – это исполняемый экземпляр, который инкапсулирует требуемое программное обеспечение. Он состоит из образов. Его можно легко удалить и снова создать за короткий промежуток времени. Образ – базовый элемент каждого контейнера. В зависимости от образа, может потребоваться некоторое время для его создания. Порт – это порт TCP/UDP в своем первоначальном значении. Чтобы все было просто, предположим, что порты могут быть открыты во внешнем мире или подключены к контейнерам (доступны только из этих контейнеров и невидимы для внешнего мира). Том – описывается как общая папка. Тома инициализируются при создании контейнера и предназначены для сохранения данных, независимо от жизненного цикла контейнера. Реестр – это сервер, на котором хранятся образы. Пример docker run ubuntu /bin/echo 'Hello world‘ docker run – это команда запуска контейнера. ubuntu – образ, который вы запускаете (например, образ операционной системы Ubuntu). Когда вы его указываете, Докер сначала анализирует элемент в разрезе хоста. /bin/echo ‘Hello world’ – команда, которая будет запускаться внутри нового контейнера. Данный контейнер просто выводит «Hello world» и останавливает выполнение. docker container ls —all - Вывод списка всех контейнеров. docker ps –a - Все контейнеры. docker ps - Запущенные контейнеры. Dockerfile Все свойства контейнера хранятся в декларативном виде. Dockerfile содержит набор инструкций с аргументами. Каждая инструкция пишется заглавными буквами (например FROM). Инструкции обрабатываются сверху вниз. Инструкция Docker-файла — слово в верхнем регистре, которое стоит перед аргументом какой-либо команды: FROM – задаёт родительский (главный) образ; RUN – запускает команды, создаёт слой образа. Используется для установки пакетов и библиотек внутри контейнера; ENV – задать переменную среды; WORKDIR – устанавливает рабочую директорию для инструкции CMD и ENTRYPOINT; VOLUME – создать точку монтирования для тома для добавления и хранения постоянных данных; CMD – указывает команду и аргументы для выполнения внутри контейнера. Параметры могут быть переопределены. Использоваться может только одна инструкция CMD; COPY — копирует файлы и директории в контейнер; ADD — делает всё то же, что и инструкция COPY. Но ещё может распаковывать локальные .tar файлы; ARG — определяет переменную для передачи Docker’у во время сборки; ENTRYPOINT — предоставляет команды и аргументы для выполняющегося контейнера. Суть его несколько отличается от CMD, о чём мы поговорим ниже; EXPOSE — открывает порт; Слои Образ Docker —образ, состоящий из нескольких образов файловых систем, на основе которых формируется контейнер. Контейнер состоит из ряда слоёв. Все слои доступны только для чтения, кроме последнего. Каждый слой — это просто файл с изменением предыдущего слоя. docker-compose Пакетный менеджер (по аналогии с composer и npm, только у docker — контейнеры), позволяющий описывать необходимую структуру в одном файле (конфиге) Kali Linux. NMAP. Nemesida Scanner. Некоторые уязвимости и инъекции. Kali Linux Дистрибутив создан для тестировщиков информационной безопасности. Содержит более 600 программ для тестирования. BackTrack (предшественник Kali) включал в себя режим, известный как «криминалистический режим», который был перенесен на Kali через LiveBoot. При загрузке в «криминалистическом режиме» система не касается внутреннего жѐсткого диска или места подкачки, и автоматическая установка отключена. Nmap Nmap (Network Mapper) — это бесплатная утилита с открытым исходным кодом. Предназначена для сканирования сетей с любым количеством объектов, определения состояния объектов сканируемой сети, а также портов и соответствующих им служб. В то время, как Nmap обычно используется для проверки безопасности, многие системные администраторы находят ее полезной для обычных задач, таких как контролирование структуры сети, управление расписаниями запуска служб и учет времени работы хоста или службы. Выходные данные Nmap это список просканированных целей с дополнительной информацией по каждой из них в зависимости от заданных опций. Ключевой информацией является «таблица важных портов». Эта таблица содержит номер порта, протокол, имя службы и состояние. Nemesida Scanner Nemesida Scanner предназначен для выявления различных веб-уязвимостей, таких как: •SQL-инъекции, XSS, LFI/RFI, XXE, Оpen-redirect; •выявлять компоненты с известными уязвимостями; •обнаруживать критичные данные (файлов, каталоги, поддомены) в открытом доступе; •определять версии и типы установленных CMS, а также их плагины; •выявлять недостатки конфигурации веб-приложения; •подбирать пароли; •сканировать порты и определять сервисы. Sqlmap Инструмент для тестирования на проникновение, который автоматизирует процесс выявления и эксплуатации уязвимостей типа SQL-инъекция, также эксплуатировать SQL-инъекцию и выполнять захват серверов баз данных. Есть пять основных классов SQL-инъекций, и все их поддерживает sqlmap: •UNION query SQL injection. Классический вариант внедрения SQL-кода, когда в уязвимый параметр передается выражение, начинающееся с "UNION ALL SELECT". Эта техника работает, когда веб-приложения напрямую возвращают результат вывода команды SELECT на страницу. •Error-based SQL injection. В случае этой атаки сканер заменяет или добавляет в уязвимый параметр синтаксически неправильное выражение, после чего парсит HTTP-ответ (заголовки и тело) в поиске ошибок DBMS. Эта техника работает только тогда, когда веб-приложение по каким-то причинам (чаще всего в целях отладки) раскрывает ошибки DBMS. Stacked queries SQL injection. Сканер проверяет, поддерживает ли веб-приложение последовательные запросы, и, если они выполняются, добавляет в уязвимый параметр HTTP-запроса точку с запятой (;) и следом внедряемый SQL-запрос. Этот прием в основном используется для внедрения SQL-команд, отличных от SELECT. Boolean-based blind SQL injection. Реализация так называемой слепой инъекции: данные из БД в "чистом" виде уязвимым веб-приложением нигде не возвращаются. Прием также называется дедуктивным. Sqlmap добавляет в уязвимый параметр HTTP-запроса синтаксически правильно составленное выражение, содержащее подзапрос SELECT. Time-based blind SQL injection. Полностью слепая инъекция. Точно так же как и в предыдущем случае, сканер "играет" с уязвимым параметром. Но в этом случае добавляет подзапрос, который приводит к паузе работы DBMS на определенное количество секунд (например, с помощью команд SLEEP() или BENCHMARK()). Используя эту особенность, сканер может посимвольно извлечь данные из БД, сравнивая время ответа на оригинальный запрос и на запрос с внедренным кодом. В sqlmap реализовано: •Извлечение имен пользователей, хешей их паролей, а также привилегий и полей. •Автоматическое распознавание типа используемого хеша и возможность взлома его с помощью брутфорса по словарю. •Получение списка баз данных, таблиц и столбцов. •Возможность сделать полный или частичный дамп базы данных. •Продвинутый механизм поиска баз, таблиц или даже столбцов. •Загрузка или, наоборот, закачка произвольных файлов на сервер, если уязвимое вебприложение использует MySQL, MySQL, PostreSQL или Microsoft SQL Server. •Выполнение произвольных команд и получение шелла, если на хосте используется одна из СУБД, перечисленных в предыдущем пункте. •Поддержка прямого подключения к базе с использованием полученных в ходе атаки имени и пароля пользователя для доступа к DMBS, а также IP-адреса, порта и имени базы данных. •Установка надежного TCP-соединения (так называемого out-ofband) между машиной пентестера и хостом, на котором запущен сервер баз данных. •Повышение привилегий для процесса базы данных через команду getsystem Metasploit’а, которая, помимо прочих, реализует известную технику kitrap0d (MS10-015). Виды уязвимостей Инъекции; Ошибки, обход аутентификации XSS (Межсайтовый скриптинг) Незащищенные ресурсы и объекты Небезопасная конфигурация окружения Незащищенность критичных данных Отсутствие функций контроля доступа CSRF (Межсайтовая подделка запроса) Использование компонентов с известными уязвимостями Непроверенные переадресации и пересылки Инъекции RCE - Remote code execution. Удаленное выполнение кода на сервере. PHP - инъекции. Выполнение произвольного PHP кода. SQL - инъекции. Внедрение произвольного кода в SQL запрос. XPath - инъекции. Внедрение произвольного кода в XPath запрос. SQL Инъекция SQL-инъекция — это атака, направленная на веб-приложение, в ходе которой конструируется SQL-выражение из пользовательского ввода путем простой конкантенации. RCE RCE - является одной из самых опасных уязвимостей. Возможность удаленного внедрения кода в серверный скрипт в 100% случаев приводит к взлому ресурса. С помощью RCE злоумышленник сразу получает доступ к серверу атакуемого сайта, размещая на нем любой вредоносный код. PHP – инъекции PHP-инъекция (англ. PHP injection) — один из способов взлома вебсайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне. Потенциально опасными функциями являются: eval(), preg_replace() (с модификатором «e»), require_once(), include_once(), include(), require(), create_function(). PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки. Php-injection — это форма атаки на сайт, когда атакующий внедряет свой php-код в атакуемое php-приложение. При успешной инъекции атакующий может выполнить произвольный (потенциально опасный) пхп-код на целевом сервере. XPath – инъекции Данные могут храниться в XML файлах вместо баз данных. Для "общения" с XML документами был разработан язык XPath. XPath - язык запросов для XML документов. XPath оперирует нодами в XML дереве. Но подобно SQL, XPath может быть уязвим для инъекции. RFI - Remote file include RFI - позволяет злоумышленнику выполнить удаленный файл, через скрипт, выполняемый на сервере. RFI возникает, когда входящие данные в коде сайта не проходят должную проверку. LFI - Local file include LFI - это возможность использования локальных системных файлов сервера. Уязвимость позволяет удаленному пользователю получить доступ с помощью специально сформированного запроса к произвольным файлам на сервере, в том числе содержащую конфиденциальную информацию. XSS (Сross Site Sсriрting — «межсайтовый скриптинг») Хищение аутентификационных данных администраторов сайта для доступа в административный раздел, иных пользователей имеющих личные кабинеты, или персональные доступы к закрытым разделам сайта. CSRF (Сross Site Request Forgery). Вынуждение выполнения каких-либо действий на уязвимом сайте от лица администратора или авторизированного пользователя. Надежность хранения баз данных Общие принципы восстановления ●результаты зафиксированных транзакций должны быть сохранены в восстановленном состоянии базы данных; ●результаты незафиксированных транзакций должны отсутствовать в восстановленном состоянии базы данных. Индивидуальный откат транзакции Тривиальной ситуацией отката транзакции является ее явное завершение оператором ROLLBACK. Возможны также ситуации, когда откат транзакции инициируется системой. Мягкий сбой Восстановление после внезапной потери содержимого оперативной памяти (мягкий сбой). Ситуация характеризуется потерей той части базы данных, которая к моменту сбоя содержалась в буферах оперативной памяти. Жёсткий сбой Восстановление после поломки внешнего носителя базы данных основного (жесткий сбой). Основой восстановления является архивная копия и журнал изменений базы данных. Ведение журнальной информации Возможны два основных варианта ведения журнальной информации: ●Для каждой транзакции поддерживается отдельный локальный журнал изменений базы данных этой транзакцией. Данный подход позволяет быстро выполнять индивидуальные откаты транзакций, но приводит к дублированию информации в локальных и общем журналах. ●Поддержка только общего журнала изменений базы данных, который используется и при выполнении индивидуальных откатов (приоритетный). Журнал транзакций Журнализация изменений тесно связана не только с управлением транзакциями, но и с буферизацией страниц базы данных в оперативной памяти. Записи в журнале тоже буферизуются. Традиционная обработка журналов Записи журнала копируются в буфер в памяти до тех пор, пока не будет заполнен буфер или не будет найдена запись фиксации. При обнаружении записи фиксации буфер должен быть немедленно записан на диск в файле журнала транзакций, чтобы завершить операцию фиксации. Буферизация Записи журнала становятся полностью сохраненными, как только они копируются в буфер журнала. Буфер журнала записывается в журнал транзакций, когда он заполняется, так же, как если бы не было никаких записей фиксации в потоке до заполнения буфера. |