에서 스탠포드의 기계 학습 코스 앤드류 응은 IT에 ML을 적용 언급했다. 얼마 후 우리 사이트에서 적당한 크기 (약 20k 봇)의 DDoS를 얻었을 때 나는 간단한 신경망 분류기를 사용하여 그것에 맞서 싸우기로 결정했습니다.
나는이 파이썬 스크립트를 약 30 분 안에 작성했습니다 :
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos
그것은 pyBrain을 사용 하고 3 개의 nginx 로그를 입력으로 취하고 그중 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]
이 모든 후에 데이터 세트를 훈련 및 테스트 세트로 나누고 신경망을 훈련시키고 최상의 것을 선택하는 표준 경로가 있습니다. 이 프로세스 (데이터 집합 크기에 따라 시간이 오래 걸릴 수 있음)가 끝나면 훈련 된 네트워크를 사용하여 로그를 분류 할 수 있습니다.
그러나 그 접근 방식과 관련된 많은 문제가 있습니다.
- 봇 을 감지 하려면 먼저 봇 을 감지 하고 해당 데이터로 신경망을 훈련 시켜야하기 때문에 감독 된 머신 러닝은 이러한 유형의 문제에있어 다소 잘못된 것입니다 .
- 고객의 행동을 계정에 포함시키지 않습니다. 각 사용자에 대한 페이지 간 전환 그래프를 고려하는 것이 좋습니다.
- 고객의 지역 정보를 계정에 포함시키지 않습니다. 네트워크의 한 컴퓨터가 일부 바이러스에 감염된 경우 해당 네트워크의 다른 컴퓨터가 감염 될 가능성이 높습니다.
- 지리적 위치 데이터를 계정에 넣지 않습니다. 물론 러시아에서 사이트를 운영하는 경우 브라질 고객이 거의 없을 것입니다.
- 그러한 문제를 해결하기 위해 신경망과 분류를 사용하는 것이 올바른 방법인지는 모르겠습니다. 이상 감지 시스템을 사용하는 것이 더 좋았을 수도 있습니다.
- ML 방법이 "온라인"(또는 "스트리밍") 일 때 더 좋으므로 즉시 교육을받을 수 있습니다.
따라서 다음과 같은 질문이 있습니다.
현재 웹 서버 로그 (좋은 클라이언트와 봇으로 구성됨)와 기록 데이터 (전날 / 주 / 월의 로그 만)에서 DDoS 공격에 대해 동일한 방어 문제에 직면 한 경우 어떻게 하시겠습니까? 주로 좋은 고객과 함께)?
어떤 머신 러닝 방식을 선택 하시겠습니까?
어떤 알고리즘을 사용 하시겠습니까?