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