Kiểm toán Linux có thể giúp đỡ. Nó ít nhất sẽ xác định vị trí người dùng và quy trình thực hiện kết nối mạng datagram. Các gói UDP là datagram.
Đầu tiên, cài đặt auditd
khung trên nền tảng của bạn và đảm bảo auditctl -l
trả về một cái gì đó, ngay cả khi nó nói rằng không có quy tắc nào được xác định.
Sau đó, thêm một quy tắc để xem cuộc gọi hệ thống socket()
và gắn thẻ để dễ dàng tìm kiếm sau ( -k
). Tôi cần phải giả định rằng bạn đang ở trên một kiến trúc 64-bit, nhưng bạn có thể thay thế b32
ở vị trí của b64
bạn thì không.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Bạn phải chọn qua các trang man và các tệp tiêu đề để xây dựng tệp này, nhưng những gì nó thu được về cơ bản là hệ thống này gọi : socket(PF_INET, SOCK_DGRAM|X, Y)
, trong đó tham số thứ ba không xác định nhưng thường là 0. PF_INET
là 2 và SOCK_DGRAM
là 2. Các kết nối TCP sẽ sử dụng SOCK_STREAM
sẽ được đặt a1=1
. ( SOCK_DGRAM
trong tham số thứ hai có thể được OR với SOCK_NONBLOCK
hoặc SOCK_CLOEXEC
, do đó &=
so sánh.) -k SOCKET
Từ khóa của chúng tôi chúng tôi muốn sử dụng khi tìm kiếm các dấu vết kiểm toán sau này. Nó có thể là bất cứ điều gì, nhưng tôi muốn giữ cho nó đơn giản.
Hãy để một vài phút trôi qua và xem xét các con đường kiểm toán. Tùy chọn, bạn có thể buộc một vài gói bằng cách đưa máy chủ ra khỏi mạng, điều này sẽ khiến việc tra cứu DNS xảy ra, sử dụng UDP, sẽ làm vấp phải cảnh báo kiểm toán của chúng tôi.
ausearch -i -ts today -k SOCKET
Và đầu ra tương tự như phần dưới đây sẽ xuất hiện. Tôi viết tắt nó để làm nổi bật những phần quan trọng
type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET
Trong đầu ra trên, chúng ta có thể thấy rằng ping
lệnh gây ra ổ cắm được mở. Sau đó tôi có thể chạy strace -p 14510
trên tiến trình, nếu nó vẫn đang chạy. Các ppid
(cha mẹ quá trình ID) cũng được liệt kê trong trường hợp nó là một kịch bản mà đẻ đứa trẻ có vấn đề rất nhiều.
Bây giờ, nếu bạn có nhiều lưu lượng UDP, điều này sẽ không đủ tốt và bạn sẽ phải dùng đến OProfile hoặc SystemTap , cả hai đều vượt quá chuyên môn của tôi.
Điều này sẽ giúp thu hẹp mọi thứ trong trường hợp chung.
Khi bạn đã hoàn tất, hãy xóa quy tắc kiểm toán bằng cách sử dụng cùng một dòng bạn đã sử dụng để tạo quy tắc đó, chỉ thay thế -a
bằng -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET