iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
影片教學

怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了系列 第 41

Day32 - 作業6 解答 - 成功安裝 ksniff 插件並且進行 pod 監聽

  • 分享至 

  • xImage
  •  

Yes

  • 作業6 : 要監聽特定 Pod 的封包時都必須在裡面安裝及執行 tcpdump 後再透過 kubectl cp 把檔案複製出來,感覺實在是很麻煩。請研究一下如何透過 ksniff 針對特定節點抓取封包,這個工具的排錯方法以及用法會在期中考的時候用到,屆時也會一併公布解答。

  • 解答 : 這題如果要用在期中考上必須要在靶機上執行,所以期中考第六題的部分就改為 arp spoofing 的部分還是透過正向的 shell 去進行呼叫,但是做完之後的封包監聽改為交由 ksniff 去完成。參考 ksniff 的 github 確認安裝方式,看起來還要先安裝krew

    # 下載 github 專案後直接解壓縮來用,然後安裝 krew
    wget https://github.com/kubernetes-sigs/krew/releases/download/v0.4.4/krew-linux_amd64.tar.gz ;
    tar xvf krew-linux_amd64.tar.gz ;
    ./krew-linux_amd64 install krew ;
    
    # 按照提示把設定加到 ~/.bashrc,' ' 符號代表不要針對 $ 做變數轉換
    echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ~/.bashrc ;
    source ~/.bashrc ;
    
    # 透過 krew 安裝 sniff 
    kubectl krew install sniff ;
    
    # 順便安裝一下 wireshark ;
    sudo apt update && sudo apt install -y wireshark ;
    
  • 接下來要測試封包監聽功能,就隨便建立一個 pod 來聽聽看吧。

    # 如果 minikube 沒啟動的話就記得先啟動一下
    minikube start ;
    
    kubectl run test-sniff --image=aeifkz/my-ubuntu:v1.0 ;
    
    # 先不設定條件進行封包監聽,然後就失敗了
    kubectl sniff test-sniff ;
    
  • 所以安裝到現在作業6 才正要開始,這個作業的設計目的主要要考驗各位的看 Log 能力以及解決問題的思路。首先出錯的第一步當然不是果斷放棄,而是先看錯誤 Log 寫甚麼。

    INFO[0000] start sniffing on remote container
    INFO[0000] executing command: '[/tmp/static-tcpdump -i any -U -w - ]' on container: 'test-sniff', pod: 'test-sniff', namespace: 'default'
    INFO[0000] command: '[/tmp/static-tcpdump -i any -U -w - ]' executing successfully exitCode: '139', stdErr :''
    ERRO[0000] failed to start remote sniffing, stopping wireshark  error="executing sniffer failed, exit code: '139'"
    INFO[0000] starting sniffer cleanup
    
  • 看起來它好像丟了一個檔案到 pod 內並且命名成 /tmp/static-tcpdump ,然後呼叫它的時候出錯了,但是這個檔案室從哪來的呢?

    INFO[0000] using tcpdump path at: '/home/aeifkz/.krew/store/sniff/v1.6.2/static-tcpdump'
    INFO[0000] no container specified, taking first container we found in pod.
    INFO[0000] selected container: 'test-sniff'
    INFO[0000] sniffing method: upload static tcpdump
    INFO[0000] sniffing on pod: 'test-sniff' [namespace: 'default', container: 'test-sniff', filter: '', interface: 'any']
    INFO[0000] uploading static tcpdump binary from: '/home/aeifkz/.krew/store/sniff/v1.6.2/static-tcpdump' to: '/tmp/static-tcpdump'
    
  • 所以看起來這個檔案的位置在 ~/.krew/store/sniff/v1.6.2/static-tcpdump,那呼叫看看這個指令是啥?

    # 出現權限不夠的錯誤訊息
    ~/.krew/store/sniff/v1.6.2/static-tcpdump ;
    
    # 出現 Segmentation fault
    sudo ~/.krew/store/sniff/v1.6.2/static-tcpdump ;
    
    # 感覺它就是個包裝過的 tcpdump
    ~/.krew/store/sniff/v1.6.2/static-tcpdump -h ;
    
  • 然後各位想到甚麼解法了嗎? 看起來它給的 tcpdump 有問題,要嘛找出問題重新編譯一個,要嘛動態偵錯找出出錯的地方。或是來點偷吃步的找個可以執行的 tcpdump 丟給它。

    # 先試試看蓋檔執行,不成功再說
    cp $(which tcpdump) /home/aeifkz/.krew/store/sniff/v1.6.2/static-tcpdump ;
    
    # 還是失敗咧
    kubectl sniff test-sniff ; 
    
  • 所以做到這邊要果斷放棄了嗎? 還記得我剛說的出錯先看錯誤 Log 再說。

    INFO[0000] executing command: '[/bin/sh -c test -f /tmp/static-tcpdump]' on container: 'test-sniff', pod: 'test-sniff', namespace: 'default'
    INFO[0000] command: '[/bin/sh -c test -f /tmp/static-tcpdump]' executing successfully exitCode: '0', stdErr :''
    INFO[0000] file found: ''
    INFO[0000] file was already found on remote pod
    INFO[0000] tcpdump uploaded successfully
    
  • 推測該不會是 pod 已經有之前上傳無法執行的檔案,導致沒辦法更新正確的檔案進去,所以執行指令刪掉後重做看看。

    kubectl exec -it test-sniff -- rm /tmp/static-tcpdump ;
    
    # 成功了,還會幫忙把 wireshrk 的 UI 導出來
    kubectl sniff test-sniff ; 
    
    # 試打一些流量測試看看
    kubectl exec test-sniff -- ping www.google.com.tw ;
    

上一篇
Day31 - K8s CTF 期中考 writeup - quiz-0 ~ quiz-3
下一篇
Day32 - K8s CTF 期中考 writeup - quiz-4、(quiz-5 出錯送分)
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言