DDoS फ़िल्टरिंग के लिए मशीन लर्निंग लागू करना


12

में स्टैनफोर्ड मशीन लर्निंग पाठ्यक्रम एंड्रयू एनजी आईटी में एमएल लागू करने का उल्लेख किया। कुछ समय बाद जब मुझे हमारी साइट पर मध्यम आकार (लगभग 20k बॉट) DDoS मिला, तो मैंने सरल न्यूरल नेटवर्क क्लासिफायर का उपयोग करके इसके खिलाफ लड़ने का फैसला किया।

मैंने लगभग 30 मिनट में इस अजगर की पटकथा लिखी है:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

यह pyBrain का उपयोग करता है और इनपुट के रूप में 3 nginx लॉग लेता है , उनमें से दो तंत्रिका नेटवर्क को प्रशिक्षित करते हैं:

  1. अच्छे प्रश्नों के साथ
  2. बुरे लोगों के साथ

और वर्गीकरण के लिए एक लॉग

बुरे प्रश्नों से ।।

0.0.0.0 - - [20/Dec/2011:20:00:08 +0400] "POST /forum/index.php HTTP/1.1" 503 107 "http://www.mozilla-europe.org/" "-"

...और अच्छा...

0.0.0.0 - - [20/Dec/2011:15:00:03 +0400] "GET /forum/rss.php?topic=347425 HTTP/1.0" 200 1685 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0"

... यह एक शब्दकोश का निर्माण करता है:

['__UA___OS_U', '__UA_EMPTY', '__REQ___METHOD_POST', '__REQ___HTTP_VER_HTTP/1.0', 
'__REQ___URL___NETLOC_', '__REQ___URL___PATH_/forum/rss.php', '__REQ___URL___PATH_/forum/index.php',
'__REQ___URL___SCHEME_', '__REQ___HTTP_VER_HTTP/1.1', '__UA___VER_Firefox/3.0',
'__REFER___NETLOC_www.mozilla-europe.org', '__UA___OS_Windows', '__UA___BASE_Mozilla/5.0',
'__CODE_503', '__UA___OS_pl', '__REFER___PATH_/', '__REFER___SCHEME_http', '__NO_REFER__',
'__REQ___METHOD_GET', '__UA___OS_Windows NT 5.1', '__UA___OS_rv:1.9',
'__REQ___URL___QS_topic', '__UA___VER_Gecko/2008052906']

प्रत्येक प्रविष्टि जिसे हम अपने नेटवर्क को / प्रविष्टि के साथ प्रशिक्षित करते हैं जिसे हमें वर्गीकृत करने की आवश्यकता है ...

0.0.0.0 - - [20/Dec/2011:20:00:01 +0400] "GET /forum/viewtopic.php?t=425550 HTTP/1.1" 502 107 "-" "BTWebClient/3000(25824)"

... सुविधा-वेक्टर में परिवर्तित हो जाता है:

[False, False, False, False, True, False, False, True, True, False, False, False, False, False, False, False, False, True, True, False, False, False, False]

इस सब के बाद, डेटासेट को प्रशिक्षण और परीक्षण सेटों में विभाजित करने, तंत्रिका नेटवर्क को प्रशिक्षित करने और सर्वश्रेष्ठ का चयन करने का मानक मार्ग है। इस प्रक्रिया के बाद (जो कि डेटासेट आकार के आधार पर बहुत लंबा समय ले सकता है) हम अंततः प्रशिक्षित नेटवर्क का उपयोग करके लॉग को वर्गीकृत कर सकते हैं।

लेकिन यहाँ उस दृष्टिकोण के साथ कई समस्याएं हैं:

  1. पर्यवेक्षित मशीन लर्निंग उस प्रकार की समस्या के लिए थोड़े गलत है, क्योंकि बॉट का पता लगाने के लिए मुझे पहले बॉट का पता लगाने और उस डेटा के साथ न्यूरल नेटवर्क को प्रशिक्षित करने की आवश्यकता है ।
  2. मैं ग्राहक के व्यवहार को एक खाते में नहीं लेता हूं। प्रत्येक उपयोगकर्ता के लिए पृष्ठ के पेज परिवर्तन पर विचार करना बेहतर है।
  3. मैं ग्राहकों को एक खाते में नहीं लेता। यदि नेटवर्क में एक कंप्यूटर कुछ वायरस से संक्रमित है, तो इस बात की अधिक संभावना है कि उस नेटवर्क के अन्य कंप्यूटर संक्रमित हैं।
  4. मैं एक खाते में जियोलोकेशन डेटा नहीं लेता। बेशक अगर आप रूस में साइट चला रहे हैं तो ब्राजील के ग्राहकों की संभावना कम है।
  5. मुझे नहीं पता कि क्या इस तरह की समस्या को हल करने के लिए तंत्रिका नेटवर्क और वर्गीकरण का उपयोग करना सही था। हो सकता है कि मैं कुछ विसंगतियों का पता लगाने की प्रणाली से बेहतर था।
  6. यह बेहतर है जब एमएल विधि "ऑनलाइन" (या तथाकथित "स्ट्रीमिंग") है, इसलिए इसे मक्खी पर प्रशिक्षित किया जा सकता है।

तो यहाँ प्रश्न हैं:
यदि आप केवल DDoS हमले के खिलाफ वर्तमान वेबसर्वर लॉग (जिसमें अच्छे ग्राहक और बॉट होते हैं) और ऐतिहासिक डेटा (पिछले दिन / सप्ताह / महीने के लिए लॉग) दिए गए एक ही समस्या से सामना करने पर आप क्या करेंगे? ज्यादातर अच्छे ग्राहकों के साथ)?
आप कौन सी मशीन लर्निंग अप्रोच चुनेंगे।
आप किस एल्गोरिदम का उपयोग करेंगे?

जवाबों:


11

विसंगति का पता लगाने वाले एल्गोरिदम के बारे में कैसे? जैसा कि आप एंड्रयू एनजी की कक्षा का उल्लेख करते हैं, आपने शायद ml-class.org पर "XV। ANOMALY DETECTION" अनुभाग देखा होगा , लेकिन फिर भी।

विसंगति का पता लगाना आपके जैसे परिदृश्य में एक पर्यवेक्षित वर्गीकरण से बेहतर होगा क्योंकि:

  • आम तौर पर आपके पास बहुत कम विसंगतियाँ हैं (यानी, बहुत कम "सकारात्मक" उदाहरण)
  • आम तौर पर आपके पास बहुत अलग प्रकार की विसंगतियाँ हैं
  • भविष्य की विसंगतियाँ आपके द्वारा अब तक की गई चीज़ों की तरह कुछ भी नहीं दिख सकती हैं

विसंगति का पता लगाने में महत्वपूर्ण बिंदु है, जो सुविधाओं को चुनना है। यहां दो सामान्य सलाह के साथ सुविधाओं का चयन करना है

  • गाऊसी वितरण (या उन्हें इस तरह होने के लिए विकृत करें)

  • संभाव्यता p (विसंगति) p (सामान्य) के लिए अतुलनीय है - कहते हैं, विषम मान बहुत बड़े होते हैं जबकि सामान्य बहुत छोटे (या इसके विपरीत) होते हैं।

मुझे यकीन नहीं है कि यदि जियोलोकेशन आपके परिदृश्य के लिए मदद करेगा, लेकिन ग्राहक व्यवहार निश्चित रूप से मायने रखेगा - हालांकि यह संभवतः आवेदन से आवेदन तक भिन्न होगा। आपको लग सकता है कि GET / POST का अनुपात मायने रखता है। या गिनती का अनुरोध करने के लिए प्रतिक्रिया आकार का अनुपात। या सिंगल पेज हिट्स की संख्या। यदि आपके पास लॉग में ऐसी जानकारी है - निश्चित रूप से आप पूर्वव्यापी विश्लेषण के लिए डेटा का उपयोग कर सकते हैं, इसके बाद आईपी ब्लैकलिस्टिंग :)


विसंगति का पता लगाने के लिए +1। मैं "अंतिम 5 मिनटों में" लॉग किए गए लॉगिनों की संख्या "और" आईपी एक्स पिछले 5 मिनटों से लॉग किए गए लॉगिनों की संख्या "भी जोड़ूंगा।
न्यूरॉन

विसंगति का पता लगाने (जैसा कि यह एमएल-क्लास में दिया गया था) के साथ मुख्य समस्या यह है कि आप इसे उन दोनों के बीच जटिल संबंधों के साथ बड़ी मात्रा में सुविधाओं के लिए उपयोग नहीं कर सकते हैं - यह बहुत ही महंगा है। मेरे उदाहरण में मुझे कॉल-ग्राफ़, जियोलोकेशन और अतिरिक्त nginxचर में लॉग के बिना 2 (!!) प्रश्नों में से 23 सुविधाएँ मिली हैं । और मैं पीसीए का उपयोग नहीं कर सकता क्योंकि हमलावर बॉट व्यवहार को बदल सकते हैं।
SaveTheRbtz

@SaveTheRbtz re "कम्प्यूटेशनल रूप से महंगा" - IIRC, विसंगति का पता लगाने के रूप में एमएल-क्लास में प्रस्तुत किया गया था सिर्फ घनत्व का अनुमान था इसलिए आप अपनी विशेषताओं की संभावनाओं को पी (एक्स 1) * .. * * पी (एक्सएन) के रूप में गुणा करेंगे जो, I विश्वास करो, O (n) है तो क्या आप O (logn) या कुछ और देख रहे हैं? लेकिन वैसे भी, यह एक उचित सवाल है और यह मेरे स्वचालित सुविधा चयन के बारे में सोचना बनाया - तो एक प्रश्न पूछा machinelearning.stackexchange.com/questions/184
andreister

बस अधिक सटीक होने के लिए - मैं लॉग फ़ाइल के 1 एमबी प्रति 100,000 सुविधाओं तक की बात कर रहा हूं। पुनश्च। अच्छा प्रश्न!
SaveTheRbtz

1

यह एक कठिन समस्या है, यहाँ कुछ अवलोकन दिए गए हैं:

  • यह पेपर आपकी कुछ मदद कर सकता है - यह प्रतिकूल विज्ञापनों का पता लगाने के लिए पर्यवेक्षित शिक्षण तकनीकों (बहु-श्रेणी वर्गीकरण के संदर्भ में) पर निर्भर करता है। चूंकि प्रतिकूल रणनीति विकसित होती है, इसलिए लेखकों को उन मानव विशेषज्ञों पर निर्भर रहना पड़ता है जो दुर्लभ "विसंगतियों" की व्याख्या करते हैं। वे दूसरों के बीच एसवीएम-आधारित रैंकिंग तकनीकों का उपयोग करते हैं।
  • जैसा कि दूसरों ने नोट किया है, आप गैर-पर्यवेक्षित-शिक्षण-आधारित विसंगति / बाहरी खोज का प्रयास कर सकते हैं, लेकिन इसके लिए झूठी सकारात्मकता और गलत-नकारात्मक के संतुलन को सही पाने के लिए बहुत अधिक ट्यूनिंग की आवश्यकता होगी।
  • सुविधाओं का एक अच्छा सेट होना बहुत महत्वपूर्ण है - कार्यप्रणाली का चुनाव द्वितीयक है (जैसे कि एक सरल तकनीक जैसे नाइव बेयस या लॉजिस्टिक रिग्रेशन अक्सर पर्याप्त है जिसे एक अच्छा फीचर सेट दिया गया है)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.