eCapture — это инструмент сбора данных в пользовательском режиме, основанный на технологии eBPF. Для захвата открытого текста сообщений https/tls сертификат CA не требуется.
Проект был создан в середине марта 2022 года. После выхода он всем очень понравился. Менее чем за две недели он набрал более 1200 звезд.
До встречи в репозитории кода:https://github.com/ehids/ecapture
Пользовательский режим системы eCapture программаиспользовать Разработка языка Golang,Имеет хорошую системную совместимость,Быстрое развертывание без зависимостей,Больше подходит для облачных сценариев. Код состояния ядра написан на C.,использоватьclang/llvmкомпилировать,После создания байт-кода bpf,использоватьgo-bindata
преобразован вgolangфайл грамматики,之后использоватьehids/ebpfmanager
Библиотека классов,вызовbpf syscall выполняет загрузку, HOOK и чтение карты. После компиляции golang он может работать без каких-либо других зависимостей и совместим с Linux. kernel Все версии выше 4.18.
Подробный механизм загрузки eBPF можно найти в соответствующих принципах по адресу https://ebpf.io/.
Как показано на схеме принципа работы,Подключитесь к шифрованию и дешифрованию пользовательского режима. tcpdump(libpcap) — это момент получения пакета данных.,После обработки XDP,руководитьclone packet
,Осуществить пакет копировать,Отправлено в процесс пользовательского режима. Эти двое работают на разных уровнях.
eCapture имеет три модуля
Первая функция подходит для мониторинга эксплуатации и технического обслуживания, устранения неполадок и сценариев выборочного анализа на основе требований к расшифровке TLS/SSL.
Вторая функция подходит для сценариев обнаружения вторжений bash в области безопасности. Это всего лишь простая функция, и на ее основе можно добавить другие функции.
Третья функция подходит для сценариев аудита базы данных, особенно для обеспечения безопасности данных, предотвращения утечки данных и даже обнаружения вторжений. Аналогично на этой основе могут быть расширены и другие функции.
Ознакомьтесь с описанием его использования ниже:
cfc4n@vm-desktop:~/ehids/ecapture$ ./bin/ecapture
NAME:
ecapture - capture text SSL content without CA cert by ebpf hook.
USAGE:
ecapture [flags]
VERSION:
0.1.5-20220325-47edbed
COMMANDS:
bash capture bash command
help Help about any command
mysqld56 capture sql queries from mysqld >5.6 .
tls alias name:openssl , use to capture tls/ssl text content without CA cert.
DESCRIPTION:
ecapture — это инструмент, который может перехватывать пакеты данных в виде открытого текста, такие как HTTPS и TLS, без установки сертификата CA.
Также можно записывать команды Bash, что подходит для сценариев аудита безопасности. Включая аудит базы данных mysqld и т. д.
Адрес склада: https://github.com/ehids/ecapture
OPTIONS:
--debug[=false] enable debug logging
-h, --help[=false] help for ecapture
--hex[=false] print byte strings as hex encoded strings
-p, --pid=0 if target_pid is 0 then we target all pids
Среди них есть четыре глобальных параметра, а именно:
eCapture использует eBPF Функции, связанные с Uprobe, выполняют HOOK, поэтому требуется информация о функциях целевого пользовательского режима, включая таблицу функциональных символов (символ table),Адрес смещения функции (смещение). В большинстве дистрибутивов Linux,Все двойные исполняемые файлы (ELF) содержат небольшое количество таблиц символов;,Таблица символов в ELF будет удалена. Итак, для этого сценария,Для этого пользователю необходимо найти адрес смещения в ELF/SO, где находится целевая функция.,Задается через параметры инструмента.
Для файлов ELF целевая библиотека классов может быть статически скомпилирована сама по себе или на нее можно ссылаться через динамическую библиотеку. Таким образом, для этих двух форм eCapture автоматически выполняет поиск по разным сценариям. Если его невозможно найти, пользователь может указать его через параметры командной строки.
ПоэтомуeCaptureподдерживатьHOOK ELF
,а такжеHOOK SO
Два режима。Автоматически проанализируетELFдокумент,читать.dynamic
и.dynsym
Информация об ожидающем сегменте,Найдите соответствующее имя библиотеки ссылок, имя функции и адрес смещения.
Принцип поиска следующий:
ecapture tls
команда для запускаtls/sslмодуль,Поддерживает три типа библиотек шифрования tls/ssl.,Они есть
libssl.so
libgnutls.so
libnspr4.so
в разных дистрибутивах Linux,по разным причинам,会选择不同из Библиотека классов。напримерwget
программа,существоватьubuntuиcentosУдастсяиспользовать不同из Библиотека классов。Некоторые из нихopenssl
,Некоторые из нихgnutls
,Даже обе библиотеки представлены.
конкретная ситуация,ты можешьиспользоватьldd $ELF_PATH | grep -E "tls|ssl|nspr|nss"
Приходите и проверьте одинELFдокументиспользовать Библиотека классов情况。
cfc4n@vm-desktop:~$ ldd `which wget` |grep -E "tls|ssl|nspr|nss"
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f50699f6000)
Для таких процессов, как Firefox и Chrome,Вам нужно запустить программу, чтобы увидеть зависимости библиотеки tls.,Так,ты можешьиспользоватьsudo pldd $PID | grep -E "tls|ssl|nspr|nss"
Приходите проверить это.
cfc4n@vm-desktop:~$ ps -ef|grep firefox
cfc4n 6846 1432 45 17:50 ? 00:00:04 /usr/lib/firefox/firefox -new-window
cfc4n@vm-desktop:~$ sudo pldd 6846 |grep -E "tls|ssl|nspr|nss"
/usr/lib/firefox/libnspr4.so
/usr/lib/firefox/libnssutil3.so
/usr/lib/firefox/libnss3.so
/usr/lib/firefox/libssl3.so
/lib/x86_64-linux-gnu/libnss_files.so.2
/lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2
/lib/x86_64-linux-gnu/libnss_dns.so.2
/usr/lib/firefox/libnssckbi.so
Параметры командной строки модуля tls eCapture следующие:,Пользователи могут использовать настройки, отличные от настроек по умолчанию.,Вы также можете указать его в соответствии с вашей собственной средой.
OPTIONS:
--curl="" curl or wget file path, use to dectet openssl.so path, default:/usr/bin/curl
--firefox="" firefox file path, default: /usr/lib/firefox/firefox.
--gnutls="" libgnutls.so file path, will automatically find it from curl default.
-h, --help[=false] help for tls
--libssl="" libssl.so file path, will automatically find it from curl default.
--nspr="" libnspr44.so file path, will automatically find it from curl default.
--wget="" wget file path, default: /usr/bin/wget.
в то же время,Метод также относительно прост,./ecapture tls --hex
Просто закажи。
в Linux,firefoxпрограмма,Есть много коммуникацийиспользовать Понятно/usr/lib/firefox/libnspr4.so
,Но на самом деле бизнес-запросы можно передаватьSocket Thread
Отправлено процессом。Вы можете фильтровать по этой функции,Для программы Chrome,Я верю, что ты осторожен,Это тоже можно сделать.
Автор работает в отделе безопасности,Получены требования к аудиту bash,Метод его реализации — это не что иное, как модификация библиотеки системных классов, использование и другие технические реализации.,Существует определенный риск для стабильности системы. Реализовано на основе технологии eBPF.,Этих проблем можно избежать. Мониторинг команд bash здесь,Это исследование технологии eBPF в сценариях аудита безопасности.
При реализации eCapture сначала ищется значение $SHELL ENV.,какbashиздвоичныйдокумент路径руководитьHOOK。дляbash加载Понятноlibreadline.so
из场景,Он также будет автоматически проанализирован,Выполнение поиска по таблице символов и позиционирование смещения.,Выполните КРЮК еще раз.
Для модуля bash есть три параметра.,Пользователи могут настроитьbash
、readlineso
из路径。
OPTIONS:
--bash="" $SHELL file path, eg: /bin/bash , will automatically find it from $ENV default.
-h, --help[=false] help for bash
--readlineso="" readline.so file path, will automatically find it from $BASH_PATH default.
Как и модуль bash, он также посвящен аудиту базы данных. Среда автора — ubuntu 12.04,mysqld также из-за соглашения,использовать Понятно衍生изMariadDB
,Пользователи также могут выбирать на основе своих реальных сценариев.,используйте параметры командной строки для указания.
модуль mysqld,Основной принцип заключается вHOOKПонятноdispatch_command
функция:
// https://github.com/MariaDB/server/blob/b5852ffbeebc3000982988383daeefb0549e058a/sql/sql_parse.h#L112
dispatch_command_return dispatch_command(enum enum_server_command command, THD *thd,
char* packet, uint packet_length, bool blocking = true);
Параметры модуля аудита mysqld следующие:
OPTIONS:
-f, --funcname="" function name to hook
-h, --help[=false] help for mysqld56
-m, --mysqld="/usr/sbin/mariadbd" mysqld binary file path, use to hook
--offset=0 0x710410
в,--mysqld
используется для указанияmysqldиз路径。mysqldдвоичныйпрограмма Хотя в таблице символов естьdispatch_command
информация,ноdispatch_command
этотфункция名每次компилировать都是变化из,Поэтому его нельзя записать в смерть.
eCaptureиз查找方式是читатьmysqldдвоичныйиз.dynamic
段информация,Регулярная грамматика\w+dispatch_command\w+
去匹配所有符号информация,Найдите имя его функции и адрес смещения.,Сноваиспользовать。
Вы также можете выполнить поиск с помощью команды objdump, а затем самостоятельно указать имя функции через параметры командной строки.
mariadbd version : 10.5.13-MariaDB-0ubuntu0.21.04.1 objdump -T /usr/sbin/mariadbd |grep dispatch_command 0000000000710410 g DF .text 0000000000002f35 Base _Z16dispatch_command19enum_server_commandP3THDPcjbb
То есть смещение 0x710410.,функцияназванный_Z16dispatch_command19enum_server_commandP3THDPcjbb
。
eCapture доступен по адресу https://github.com/ehids/ecapture/releases. ,Последняя версия на данный моментeCapture v0.1.5
。
Может работать на ядре Linux 4.18 или выше.
Адрес двоичного пакета:
https://github.com/ehids/ecapture/releases/download/v0.1.5/ecapture_v0.1.5.zip
Адрес ускорения внутри страны:https://github.do/https://github.com/ehids/ecapture/releases/download/v0.1.5/ecapture_v0.1.5.zip
Репозиторий кода находится по адресу https://github.com/ehids/ecapture. Вы можете изменить исходный код и скомпилировать его самостоятельно.