Tìm quá trình chủ sở hữu kết nối TCP tồn tại trong thời gian ngắn


15

Chạy tcpdumptrên các kết nối cục bộ đến máy chủ apache, tôi thấy các kết nối TCP được thiết lập và đóng ngay lập tức cứ sau 2 giây. Làm thế nào để tôi tìm thấy quá trình chịu trách nhiệm cho những điều này? netstat -ctpkhông giúp được gì, các kết nối quá nhanh và định danh quy trình không được hiển thị cho TIME_WAIT.

Chúng hóa ra là các đầu dò haproxy, mà tôi có thể xác minh strace, nhưng tôi vẫn không biết cách nào để xác định haproxy ở nơi đầu tiên.

Câu trả lời:


20

Bạn có thể sử dụng khung Audd cho những thứ này. Chúng không "thân thiện với người dùng" hay trực quan, do đó đòi hỏi một chút đào sâu về phía bạn.

Trước tiên hãy chắc chắn rằng bạn đã cài đặt audd, chạy và kernel của bạn hỗ trợ nó.
Đối với Ubuntu, bạn có thể cài đặt nó với apt-get install auditdví dụ.

Sau đó, bạn thêm một chính sách kiểm toán để giám sát tất cả các connecttòa nhà như thế này:

auditctl -a exit,always -F arch=b64 -S connect -k MYCONNECT

Nếu bạn đang sử dụng bản cài đặt Linux 32 bit, bạn phải đổi b64 thành b32.

Lệnh này sẽ chèn một chính sách vào khung kiểm toán và mọi tòa nhà kết nối () bây giờ sẽ được ghi vào logfiles kiểm toán (thường /var/log/audit/audit.log) để bạn xem xét.

Ví dụ: kết nối với netcat đến news.ycombinator.com cổng 80 sẽ dẫn đến kết quả như sau:

type=SYSCALL msg=audit(1326872512.453:12752): arch=c000003e syscall=42 success=no exit=-115 a0=3 a1=24e8fa0 a2=10 a3=7fff07a44cd0 items=0 ppid=5675 pid=7270 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts4 ses=4294967295 comm="nc" exe="/bin/nc.openbsd" key="MYCONNECT"
type=SOCKADDR msg=audit(1326872512.453:12752): saddr=02000050AE84E16A0000000000000000

Ở đây bạn có thể thấy rằng ứng dụng /bin/nc.openbsd đã khởi tạo một cuộc gọi kết nối (), nếu bạn nhận được nhiều cuộc gọi kết nối và chỉ muốn grep ra một ip hoặc cổng nhất định, bạn phải thực hiện một số chuyển đổi. Dòng SOCKADDR chứa một đối số saddr, nó bắt đầu bằng 0200 theo sau là số cổng theo hệ thập lục phân (0050) có nghĩa là 80, và sau đó là IP ở dạng hex (AE84E16A) là IP của news.ycombinator.com là 174.132.225.106.

Khung kiểm toán có thể tạo ra rất nhiều nhật ký, vì vậy hãy nhớ tắt nó khi bạn hoàn thành nhiệm vụ. Để vô hiệu hóa chính sách trên, chỉ cần thay thế -a bằng -d như sau:

auditctl -d exit,always -F arch=b64 -S connect -k MYCONNECT

Tài liệu tốt về khung kiểm toán:
http://doc.opensuse.org/products/draft/SLES/SLES-security_sd_draft/part.audit.html

Chuyển đổi địa chỉ IP thành / từ hex, dec, binary, v.v tại:
http://www.kloth.net/service/iplocate.php

Bộ chuyển đổi hex / dec chung:
http://www.statman.info/conversions/hexadecimal.html

Giới thiệu tóm tắt về audd, từ Sàn giao dịch bảo mật CNTT. http://security.blogoverflow.com/2013/01/a-brief-int sinhtion-to-auditd /

Chỉnh sửa 1 :
Một cách nhanh chóng khác (Thụy Điển: Fulhack) để làm điều đó là tạo một vòng lặp nhanh kết xuất dữ liệu kết nối với bạn, như thế này:

while true;do
  ss -ntap -o state established '( dport = :80 )'
  sleep 1
done

Lệnh này sử dụng sslệnh (thống kê ổ cắm) để kết nối các kết nối được thiết lập hiện tại vào cổng 80 bao gồm cả quá trình khởi tạo nó. Nếu nhiều dữ liệu bạn có thể thêm | tee /tmp/outputsau khi thực hiện để cả hai hiển thị đầu ra trên màn hình cũng như ghi nó vào / tmp / đầu ra để xử lý / đào sau này. Nếu nó không bắt được kết nối haproxy nhanh chóng, vui lòng thử gỡ bỏ sleep 1nhưng hãy thận trọng khi đăng nhập rộng rãi nếu đó là một máy được sử dụng nhiều. Sửa đổi khi cần thiết!


Cảm ơn bạn đã phản hồi chi tiết. Tôi sẽ lấy lời của bạn cho giải pháp audd vì hạt nhân máy chủ không hỗ trợ nó và bây giờ tôi không có thời gian để tìm một giải pháp phù hợp để thử nghiệm, nhưng tôi sẽ ghi nhớ điều đó. Đối với giải pháp bỏ phiếu, tôi bắt đầu làm một cái gì đó tương tự với lsof nhưng dừng lại khá nhanh vì nó không ... thỏa mãn.
pmezard

2
Bạn cũng có thể sử dụng ausearch -iđể các saddrchuỗi hex đó được giải mã tự động cho.
sch

ss thỏa mãn hơn lsof vì nó nhanh hơn và nó có các quy tắc lọc tốt - không cần grep. Tôi có thể đánh giá cao các vấn đề với sự hỗ trợ: Systemtap là một công cụ tuyệt vời khác nhưng việc chạy nó trên một máy chủ sản xuất có thể ... không thỏa mãn.
Tối đa Murphy

1

Bạn cũng có thể grep các nhật ký khổng lồ bạn nhận được từ "ausearch -i" để chỉ xem các ổ cắm được kết nối thành công với một máy chủ khác trên internet. Tôi đã viết một kịch bản đơn giản để nhận từng quy trình và lệnh tạo ra một ổ cắm để kết nối với một máy chủ trên internet cùng với địa chỉ kết nối của máy chủ đích đó và thời điểm hiện tại mà ổ cắm được "tạo". Đây là:

#!/bin/bash

if [[ $EUID -ne 0 ]]; then

    echo "You must run this script as root boy!"
    exit 1  

fi

> proccessConnections.dat

connections=`ausearch -i | grep host: | awk -F "msg=audit" '{print $2}' | awk -F ": saddr" '{print $1}'`

connectionsNumber=`echo "$connections" | wc -l`

echo "Number of connections: $connectionsNumber"

echo "$connections" > conTemp.dat

let counter=1
while read connectInfo; do

    success=`ausearch -i | grep "$connectInfo" | grep "type=SYSCALL" | grep success=yes`    
    addressInfo=`ausearch -i | grep "$connectInfo" | grep type=SOCKADDR | awk -F ': ' '{print $2}'`
    processInfo=`ausearch -i | grep "$connectInfo" | grep "type=SYSCALL" | awk -F 'comm=' '{print $2}' | awk -F 'key' '{print $1}'` 

    if [[ $success != "" ]]
    then    
        echo "[$counter - $connectionsNumber] (success)     comm=$processInfo - $addressInfo - $connectInfo"
        echo "[$counter - $connectionsNumber] (success)     comm=$processInfo - $addressInfo - $connectInfo" >> proccessConnections.dat
    else
        echo "[$counter - $connectionsNumber] (no success)  comm=$processInfo - $addressInfo - $connectInfo"
        echo "[$counter - $connectionsNumber] (no success)  comm=$processInfo - $addressInfo - $connectInfo" >> proccessConnections.dat
    fi

    let counter++


done < conTemp.dat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.