<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          eCapture用戶態(tài)數(shù)據(jù)捕獲工具

          聯(lián)合創(chuàng)作 · 2023-09-29 06:52

          eCapture 是一款基于 eBPF 技術(shù)實現(xiàn)的用戶態(tài)數(shù)據(jù)捕獲工具。不需要 CA 證書,即可捕獲 https/tls 的通訊明文。

          項目在2022年3月中旬創(chuàng)建,一經(jīng)發(fā)布,廣受大家喜愛,至今不到兩周已經(jīng)1200多個Star。

          作用

          1. 不需要CA證書,即可捕獲HTTPS/TLS通信數(shù)據(jù)的明文。
          2. 在bash審計場景,可以捕獲bash命令。
          3. 數(shù)據(jù)庫審計場景,可以捕獲mysqld/mariadDB的SQL查詢。

          官網(wǎng)

          代碼倉庫見:https://github.com/ehids/ecapture 。

          產(chǎn)品架構(gòu)

          eCapture系統(tǒng)用戶態(tài)程序使用Golang語言開發(fā),具有良好的系統(tǒng)兼容性,無依賴快速部署,更適合云原生場景。 內(nèi)核態(tài)代碼使用C編寫,使用clang/llvm編譯,生產(chǎn)bpf字節(jié)碼后,采用go-bindata轉(zhuǎn)化為golang語法文件,之后采用ehids/ebpfmanager類庫,調(diào)用bpf syscall進行加載、HOOK、map讀取。 golang編譯后,無其他任何依賴即可運行,兼容linux kernel 4.18以上所有版本。

          eBPF加載機制

          關(guān)于eBPF詳細加載機制,可到https://ebpf.io/ 查閱相關(guān)原理。

          實現(xiàn)原理

          如工作原理的圖所示,在用戶態(tài)的加密解密函數(shù)中下鉤子。 tcpdump(libpcap)是在數(shù)據(jù)包接收到,XDP處理后,進行clone packet,進行包的復制,發(fā)送給用戶態(tài)進程。二者工作的所在層不一樣。

          功能介紹

          eCapture有三個模塊

          1. tls/ssl明文數(shù)據(jù)捕獲
          2. bash命令審計
          3. mysqld數(shù)據(jù)庫審計

          第一個功能適用于基于tls/ssl解密需求的運維監(jiān)控、故障排查、抽樣分析場景。

          第二個功能適用于安全領(lǐng)域的bash入侵發(fā)現(xiàn)場景,這里只是簡單的功能,可以在此基礎(chǔ)上增加其他功能。

          第三個功能適用于數(shù)據(jù)庫審計場景,尤其是做數(shù)據(jù)安全、數(shù)據(jù)防泄漏,甚至入侵檢測等。同樣,可以在此基礎(chǔ)上擴充其他功能。

          查看其使用說明,如下

          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是一款無需安裝CA證書,即可抓去HTTPS、TLS等明文數(shù)據(jù)包的工具。
           也可以捕獲bash的命令,適用于安全審計場景。包括mysqld的數(shù)據(jù)庫審計等。
           倉庫地址: 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
          

          其中,有四個全局參數(shù),分別是

          • --debug , 用于啟動調(diào)試日志
          • --help , 查看幫助
          • --hex ,按照hex模式打印字符,用與查看不可見字符
          • --pid ,用于針對特定進程進行數(shù)據(jù)捕獲

          HOOK機制

          eCapture采用eBPF uprobe相關(guān)函數(shù)進行HOOK,故需要目標用戶態(tài)函數(shù)信息,包含函數(shù)符號表(symbol table),函數(shù)偏移地址(offset)。 在大部分linux發(fā)行版中,使用的二進制可執(zhí)行文件(ELF)都是包含符號表的;少部分發(fā)行版,會去掉ELF中的符號表。那么針對這種場景,就需要用戶自行定位目標函數(shù)所在ELF/SO中的偏移地址,通過工具的參數(shù)來指定。

          對于ELF文件,可以將目標類庫靜態(tài)編譯到自身,也可以通過動態(tài)鏈接庫的方式引用。那么對于這兩種形式,eCapture根據(jù)不同場景進行自動查找。若查找不到,用戶可以通過命令行參數(shù)指定。

          故eCapture支持HOOK ELF,以及HOOK SO兩種模式。會自動分析ELF文件,讀取.dynamic.dynsym等段信息,查找相關(guān)鏈接庫名以及函數(shù)名、偏移地址。

          查找原理如下圖:

          tls/ssl

          ecapture tls命令用于啟動tls/ssl模塊,支持了三類tls/ssl加密類庫,分別是

          • openssl ,動態(tài)鏈接庫名字為libssl.so
          • gnutls ,動態(tài)鏈接庫名字為libgnutls.so
          • nss/nspr ,動態(tài)鏈接庫名字為libnspr4.so

          在不同的linux發(fā)行版中,因為各種原因,會選擇不同的類庫。比如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
          

          eCapture的tls模塊命令行參數(shù)如下,用戶可以使用默認配置外,也可以根據(jù)自己環(huán)境自行指定。

          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,但實際上業(yè)務(wù)請求是可以通過Socket Thread進程來發(fā)送的。可以通過這個特點來過濾,對于chrome程序,相信細心的你,也能搞定。

          bash

          筆者在安全部門工作,接到過bash審計需求,其實現(xiàn)方法無非是修改系統(tǒng)類庫、使用內(nèi)核模塊等技術(shù)實現(xiàn),對系統(tǒng)穩(wěn)定性有一定風險?;趀BPF技術(shù)實現(xiàn),可以避開這些問題。這里的bash命令的監(jiān)控,是作為eBPF技術(shù)在安全審計場景中的一個探索。

          eCapture在實現(xiàn)時首先查找ENV的$SHELL值,作為bash的二進制文件路徑進行HOOK。對于bash加載了libreadline.so的場景,也會自動分析,進行符號表查找、offset定位,再進行HOOK。

          bash模塊的參數(shù)有三個,用戶可以自定義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.
          

          mysql/mariadb

          與bash模塊一樣,也是作為數(shù)據(jù)庫審計的一個探索。筆者環(huán)境為ubuntu 12.04,mysqld也因為協(xié)議關(guān)系,使用了衍生的MariadDB,用戶也可以根據(jù)自己實際場景,使用命令行參數(shù)進行指定。

          mysqld模塊,核心原理是HOOK了dispatch_command函數(shù),

          • 第一個參數(shù)為CMD類型,值為COM_QUERY時,為查詢場景,即審計需求的查詢類型。
          • 第二個參數(shù)是THD的結(jié)構(gòu)體,在這里我們用不到。
          • 第三個是查詢的SQL語句
          • 第四個參數(shù)是SQL語句的長度,
          // 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審計模塊參數(shù)如下:

          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這個函數(shù)名每次編譯都是變化的,故不能寫死。

          eCapture的查找方式是讀取mysqld二進制的.dynamic段信息,正則語法\\w+dispatch_command\\w+去匹配所有符號信息,找到其函數(shù)名、偏移地址,再使用。

          你也可以通過objdump命令來查找,再通過命令行參數(shù)自行指定funcname。

          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

          即offset為0x710410,函數(shù)名為_Z16dispatch_command19enum_server_commandP3THDPcjbb

          使用

          下載二進制包

          eCapture發(fā)布在https://github.com/ehids/ecapture/releases ,目前最新版為eCapture v0.1.5。

          可在linux kernel 4.18以上版本運行。

          二進制包地址:

          https://github.com/ehids/ecapture/releases/download/v0.1.5/ecapture_v0.1.5.zip

          國內(nèi)加速地址: https://github.do/https://github.com/ehids/ecapture/releases/download/v0.1.5/ecapture_v0.1.5.zip

          自行編譯

          代碼倉庫在https://github.com/ehids/ecapture ,可以自行修改源碼編譯。

          演示視頻:

          https://v.qq.com/txp/iframe/player.html?vid=d3329w21qe6

          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大鸡吧操久久伊人 | 亚洲无码我不卡 | 国产粗又大插美女视频 | 操逼热在线观看 | 国产探花系列ThePorn |