2010-02-08 10 views
8

Tôi thấy mình cần xử lý lưu lượng truy cập mạng được ghi lại với tcpdump. Đọc lưu lượng truy cập không phải là khó, nhưng những gì được một chút khôn lanh là đốm nơi có "gai" trong giao thông. Tôi chủ yếu quan tâm đến các gói TCP SYN và những gì tôi muốn làm là tìm những ngày có sự gia tăng đột ngột về lưu lượng truy cập cho một cổng đích nhất định. Có khá nhiều dữ liệu để xử lý (khoảng một năm).Thuật toán để phát hiện dị thường ("gai") trong dữ liệu giao thông

Những gì tôi đã thử cho đến nay là sử dụng trung bình di động theo cấp số nhân, điều này đủ tốt để tôi có được một số biện pháp thú vị, nhưng so sánh những gì tôi thấy với các nguồn dữ liệu bên ngoài có vẻ hơi hung hăng trong việc gắn cờ mọi thứ bất thường.

Tôi đã xem xét sử dụng kết hợp trung bình di chuyển theo cấp số nhân cộng với dữ liệu lịch sử (có thể từ 7 ngày trước, nghĩ rằng phải có chu kỳ hàng tuần cho những gì tôi thấy), đọc dường như đã quản lý để mô hình sử dụng tài nguyên theo cách đó với thành công tốt.

Vì vậy, không ai biết về một phương pháp hay hay nơi nào đó để đọc và đọc về loại điều này.

Các đường trung bình động Tôi đã sử dụng vẻ bề ngoài gần như thế:

avg = avg+0.96*(new-avg) 

Với avg là EMA và new là biện pháp mới. Tôi đã thử nghiệm ngưỡng nào để sử dụng, nhưng thấy rằng sự kết hợp "phải là một yếu tố nhất định cao hơn mức trung bình trước khi cân giá trị mới trong" và "phải cao hơn ít nhất 3" để cho kết quả kém nhất.

Trả lời

5

Điều này được nghiên cứu rộng rãi trong tài liệu phát hiện xâm nhập. Đây là một bài báo chủ đề về vấn đề này, trong số những thứ khác, làm thế nào để phân tích dữ liệu tcpdump để có được những hiểu biết có liên quan.

Đây là giấy: http://www.usenix.org/publications/library/proceedings/sec98/full_papers/full_papers/lee/lee_html/lee.html đây họ sử dụng hệ thống quy tắc cảm ứng Ripper, tôi đoán bạn có thể thay thế mà cái cũ cho một cái gì đó mới hơn như http://www.newty.de/pnc2/ hoặc http://www.data-miner.com/rik.html

+0

Đọc thú vị, chắc chắn. Hiện tại, việc phát hiện mức lưu lượng truy cập tăng là đủ cho những gì tôi cần, nhưng đó chắc chắn là điều cần cân nhắc cho tương lai. – Vatine

4

Tôi sẽ áp dụng hai bộ lọc low-pass cho dữ liệu, một bộ lọc có hằng số thời gian dài, T1 và một với hằng số thời gian ngắn, T2. Sau đó, bạn sẽ xem xét sự khác biệt về độ lớn trong đầu ra của hai bộ lọc này và khi nó vượt quá một ngưỡng nhất định, K, thì đó sẽ là một sự tăng đột biến. Phần khó nhất là điều chỉnh T1, T2 và K để bạn không nhận được quá nhiều xác thực sai và bạn không bỏ lỡ bất kỳ đột biến nhỏ nào.

Sau đây là một đơn cực IIR bộ lọc thông thấp:

new = k * old + (1 - k) * new 

Giá trị của k xác định thời gian liên tục và thường gần 1,0 (nhưng < 1.0 tất nhiên).

Tôi đề nghị bạn áp dụng hai bộ lọc như vậy song song, với các hằng số thời gian khác nhau, ví dụ: bắt đầu với nói k = 0,9 cho một (hằng số thời gian ngắn) và k = 0,99 cho hằng số khác (hằng số thời gian dài) và sau đó xem xét sự chênh lệch độ lớn trong kết quả đầu ra của chúng. Sự chênh lệch độ lớn sẽ là nhỏ nhất trong thời gian, nhưng sẽ trở nên lớn khi có sự tăng đột biến.

+1

Thú vị. Vì tôi đang xử lý ngoại tuyến, nên việc này cũng khá đơn giản. Bạn có nghĩ rằng nó có giá trị thử nghiệm với kích thước chunk là tốt (Tôi đã cố gắng hàng giờ và hàng ngày trong quá khứ)? – Vatine

+0

Tùy thuộc vào việc dữ liệu của bạn có được lấy mẫu thường xuyên hay không. Nếu không thì bạn có thể muốn thu thập dữ liệu vào các thùng hoặc các khoảng thời gian bằng nhau hoặc bất cứ điều gì bạn muốn gọi chúng để cho hiệu ứng tương đương của một khoảng thời gian lấy mẫu cố định. –

+1

Dữ liệu tcpdump có dấu thời gian có thể được giả định là chính xác ở độ phân giải ít nhất "phụ", nhưng khoảng thời gian cho dữ liệu đến là tốt, không thực sự là lưu lượng mạng và tất cả, vì vậy tôi đoán/chunking nó đến khoảng thời gian cố định có ý nghĩa. – Vatine