การใช้การเรียนรู้ของเครื่องสำหรับการกรอง DDoS


12

ในหลักสูตรการเรียนรู้ของ Machine Stanford Andrew Ng กล่าวถึงการใช้ ML ใน IT บางเวลาต่อมาเมื่อฉันมีขนาดปานกลาง (ประมาณบอท 20k) DDoS บนเว็บไซต์ของเราฉันตัดสินใจที่จะต่อสู้กับมันโดยใช้ตัวจําแนกเครือข่ายประสาทอย่างง่าย

ฉันได้เขียนสคริปต์ไพ ธ อนนี้ในเวลาประมาณ 30 นาที:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

มันใช้pyBrainและนำบันทึกnginx 3 อันมาเป็นข้อมูลป้อนเข้าสองไฟล์เพื่อฝึกอบรม Neural Network:

  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. การเรียนรู้ของเครื่องจักรภายใต้การดูแลนั้นเป็นสิ่งที่ผิดสำหรับประเภทของปัญหานั้นเพราะในการตรวจจับบ็อตก่อนอื่นฉันต้องตรวจจับบอทและฝึกอบรม Neural Network ด้วยข้อมูลนั้น
  2. ฉันไม่นำพฤติกรรมของลูกค้าไปสู่บัญชี ควรพิจารณากราฟของหน้าเป็นการเปลี่ยนหน้าสำหรับผู้ใช้แต่ละคน
  3. ฉันไม่ได้พิจารณาสถานที่ตั้งของลูกค้าในบัญชี หากคอมพิวเตอร์หนึ่งเครื่องในเครือข่ายติดไวรัสบางตัวมีโอกาสมากกว่าที่คอมพิวเตอร์เครื่องอื่นในเครือข่ายนั้นจะติดไวรัส
  4. ฉันไม่ได้ใช้ข้อมูลตำแหน่งทางภูมิศาสตร์ในบัญชี แน่นอนถ้าคุณใช้เว็บไซต์ในรัสเซียมีโอกาสเล็กน้อยที่ลูกค้าจากบราซิล
  5. ฉันไม่รู้ว่าเป็นวิธีที่ถูกต้องในการใช้เครือข่ายประสาทและการจำแนกประเภทเพื่อแก้ไขปัญหาดังกล่าวหรือไม่ อาจเป็นเพราะฉันดีกว่าด้วยระบบตรวจจับความผิดปกติบางอย่าง
  6. จะดีกว่าเมื่อวิธี ML คือ "ออนไลน์" (หรือที่เรียกว่า "สตรีมมิ่ง") เพื่อให้สามารถฝึกฝนได้ทันที

ดังนั้นนี่คือคำถาม:
คุณจะทำอย่างไรถ้าคุณประสบกับปัญหาเดียวกันในการป้องกันการโจมตี DDoS จากบันทึกการใช้เว็บเซิร์ฟเวอร์ปัจจุบันเท่านั้น (ซึ่งประกอบด้วยลูกค้าและบอทที่ดี) และข้อมูลประวัติ (บันทึกสำหรับวัน / สัปดาห์ / เดือนก่อนหน้า กับลูกค้าที่ดีส่วนใหญ่)?
คุณต้องการเลือกวิธีการเรียนรู้ของเครื่องใด
คุณใช้อัลกอริทึมแบบใด

คำตอบ:


11

อัลกอริทึมการตรวจจับความผิดปกติเป็นอย่างไร? ในขณะที่คุณพูดถึงคลาสของ Andrew Ng คุณอาจเห็นหัวข้อ "XV. ANOMALY DETECTION" ในml-class.orgแต่อย่างไรก็ตาม

การตรวจจับความผิดปกติจะดีกว่าการจำแนกประเภทภายใต้การดูแลในสถานการณ์ที่คล้ายกับของคุณเพราะ:

  • โดยปกติคุณจะมีความผิดปกติน้อยมาก (ตัวอย่างเช่น "บวก" น้อยเกินไป)
  • โดยปกติคุณจะมีความผิดปกติหลายประเภท
  • ความผิดปกติในอนาคตอาจไม่เหมือนกับสิ่งที่คุณเคยทำ

จุดสำคัญในการตรวจจับความผิดปกติคือคุณสมบัติที่จะเลือก คำแนะนำทั่วไปสองประการที่นี่คือการเลือกคุณสมบัติด้วย

  • การแจกแจงแบบเกาส์ (หรือบิดเบือนพวกมันให้เป็นอย่างนั้น)

  • ความน่าจะเป็นp (ความผิดปกติ)เทียบได้กับp (ปกติ) - บอกว่าค่าผิดปกติมีขนาดใหญ่มากในขณะที่ค่าปกติมีขนาดเล็กมาก (หรือในทางกลับกัน)

ฉันไม่แน่ใจว่าตำแหน่งทางภูมิศาสตร์จะช่วยคุณได้หรือไม่ แต่พฤติกรรมของลูกค้าจะมีความสำคัญ - แม้ว่ามันอาจจะแตกต่างจากแอปพลิเคชันไปจนถึงแอปพลิเคชัน คุณอาจพบว่าอัตราส่วนของ GETs / POST สำคัญ หรืออัตราส่วนของขนาดการตอบสนองต่อคำขอนับ หรือจำนวนการเข้าชมหน้าเดียว หากคุณมีข้อมูลดังกล่าวในบันทึก - แน่นอนคุณสามารถใช้ข้อมูลสำหรับการวิเคราะห์ย้อนหลังตามด้วยการขึ้นบัญชีดำ IP :)


+1 สำหรับการตรวจจับสิ่งผิดปกติ ฉันจะเพิ่ม "จำนวนครั้งที่พยายามเข้าสู่ระบบในช่วง 5 นาทีที่ผ่านมา" และ "จำนวนครั้งในการพยายามเข้าสู่ระบบจาก ip X ในช่วง 5 นาทีที่ผ่านมา"
เซลล์ประสาท

ปัญหาหลักของการตรวจจับความผิดปกติ (ตามที่ได้รับใน ML-Class) คือคุณไม่สามารถใช้งานได้กับคุณสมบัติจำนวนมากที่มีความสัมพันธ์ที่ซับซ้อนระหว่างพวกเขา - มันแพงเกินไปที่จะคำนวณ ในตัวอย่างของฉันฉันมี 23 คุณสมบัติจาก 2 (!!) แบบสอบถามแม้ว่าจะไม่มีกราฟการโทรตำแหน่งทางภูมิศาสตร์และnginxตัวแปรเพิ่มเติมในบันทึก และฉันไม่สามารถใช้ PCA ได้เนื่องจากผู้โจมตีสามารถเปลี่ยนพฤติกรรมของบอทได้
SaveTheRbtz

@SaveTheRbtz อีกครั้ง "ราคาแพงสำหรับคำนวณ" - IIRC การตรวจจับความผิดปกติที่นำเสนอในคลาส ML เป็นการประมาณความหนาแน่นดังนั้นคุณแค่คูณความน่าจะเป็นของฟีเจอร์ของคุณเหมือนกับในp (x1) * .. * p (xN)ซึ่งฉัน เชื่อว่า, O (n) คุณกำลังมองหา O (logn) หรืออะไร? แต่อย่างไรก็ตามมันเป็นคำถามที่ยุติธรรมและทำให้ฉันคิดถึงการเลือกคุณสมบัติอัตโนมัติ - ดังนั้นจึงถามคำถามที่machinelearning.stackexchange.com/questions/184
and ลงทะเบียน

เพื่อให้แม่นยำยิ่งขึ้น - ฉันกำลังพูดถึงคุณสมบัติสูงสุด 100,000 รายการต่อไฟล์บันทึก 1Mb PS เป็นคำถามที่ดี!
SaveTheRbtz

1

นี่เป็นปัญหาที่ยากลำบากนี่คือข้อสังเกตบางประการ:

  • บทความนี้อาจช่วยคุณได้บ้าง - ขึ้นอยู่กับเทคนิคการเรียนรู้แบบมีผู้สอน (ในบริบทของการจำแนกประเภทหลายชั้น) เพื่อตรวจจับโฆษณาที่เป็นปฏิปักษ์ เนื่องจากกลยุทธ์ของฝ่ายตรงข้ามมีวิวัฒนาการผู้เขียนจึงต้องพึ่งพาผู้เชี่ยวชาญของมนุษย์ที่ใส่คำอธิบาย "ความผิดปกติ" ที่หายาก พวกเขาใช้เทคนิคการจัดอันดับตาม SVM และอื่น ๆ
  • ดังที่คนอื่น ๆ สังเกตไว้คุณสามารถลองการตรวจจับความผิดปกติ / การเรียนรู้นอกห้องเรียนที่ไม่ได้อยู่ภายใต้การดูแล แต่ต้องมีการปรับแต่งมากมายเพื่อให้เกิดความสมดุลของผลบวกปลอมและเท็จเชิงลบ
  • การมีคุณสมบัติที่ดีเป็นสิ่งสำคัญ - การเลือกวิธีการเป็นเรื่องรอง (เช่นเทคนิคง่าย ๆ เช่น Naive Bayes หรือการถดถอยแบบโลจิสติกส์มักเพียงพอที่จะได้รับชุดคุณลักษณะที่ดี)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.