저의 목표는 침입 탐지 목적으로 클러스터링 / 변칙 탐지를 사용하여 네트워크 로그 (예 : Apache, syslog, Active Directory 보안 감사 등)를 분석하는 것입니다.
로그에는 IP 주소, 사용자 이름, 호스트 이름, 대상 포트, 소스 포트 등과 같은 많은 텍스트 필드가 있습니다 (총 15-20 필드). 로그에 몇 가지 공격이 있는지 알지 못하고 가장 의심스러운 이벤트 (이상치)를 강조하고 싶습니다.
일반적으로 이상 감지는 확률 / 빈도가 낮은 포인트를 이상으로 표시합니다. 그러나 로그 레코드의 절반에는 고유 한 필드 조합이 포함됩니다. 따라서 데이터 세트의 레코드 중 절반이 가장 낮은 빈도를 갖습니다.
클러스터링을 기반으로 이상 감지를 사용하는 경우 (예 : 클러스터를 찾은 다음 모든 클러스터 중심에서 멀리 떨어진 점을 선택) 서로 다른 점 사이의 거리를 찾아야합니다. 필자는 15-20 개의 필드를 가지고 있기 때문에 차원이 사용자 이름, 포트, IP 주소 등인 다차원 공간이됩니다. 그러나 Mahalanobis 거리는 정규 분포 피쳐에만 적용 할 수 있습니다. 이것은 데이터 포인트 사이의 거리를 찾고 클러스터를 구성 할 방법이 없다는 것을 의미합니다 ...
예를 들어 20 개의 레코드 데이터 세트에 사용자 Alice, Bob, Carol, Dave, Eve 및 Frank가 있다고 가정 해 봅시다. 데이터베이스에서 2,5,2,5,1,5가 발생할 수 있습니다. 단순히 사용자 이름을 숫자로 매핑하면
Alice --> 1
Bob --> 2
Carol --> 3
Dave --> 4
Eve --> 5
Frank --> 6
그런 다음 사용자 이름에 대한 확률 분포는 다음과 같습니다.
p (1) = 0.1, p (2) = 0.25, p (3) = 0.1, p (4) = 0.25, p (5) = 0.05, p (6) = 0.25
물론 이것은 일반적인 배포가 아니며, 다른 방법으로 사용자 이름을 매핑 할 수 있기 때문에 의미가 없습니다 ...
따라서 사용자 이름, 작업, 포트 번호, IP 주소 등과 같은 필드를 숫자로 간단히 매핑해도 아무런 효과가 없습니다.
따라서 감독되지 않은 이상 / 이탈 감지가 가능하도록 일반적으로 텍스트 필드를 처리 / 기능을 구성하는 방법을 묻고 싶습니다.
편집 : 데이터 구조.
데이터베이스 테이블에 약 100 개의 열이 있으며 Active Directory Events의 정보가 들어 있습니다. 이 100 개의 열에서 가장 중요한 항목을 선택합니다 : SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, Computer, DestinationIPaddress, DestinationHostName, DestinationPort, Action, Status, FilePath, EventID, WeekDay, DayTime.
이벤트는 Active Directory 이벤트이며, 여기서 EventID는 기록 된 내용 (예 : Kerberos 티켓 생성, 사용자 로그온, 사용자 로그 오프 등)을 정의합니다.
데이터 샘플은 다음과 같습니다.
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | 컴퓨터 | DestinationIPaddress | DestinationHostName | DestinationPort | Action | 상태 | FilePath | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 171390673 |? |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / 인증 / 확인 | / 성공 |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 173348232 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / 인증 / 확인 | / 성공 |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 180176916 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / 인증 / 확인 | / 성공 |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / 인증 / 확인 | / 성공 |? | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+
모두 함께 약 1 억 5 천만 개의 이벤트가 있습니다. 각기 다른 이벤트에는 다른 필드가 채워져 있으며 모든 이벤트가 사용자 로그온 / 로그 오프와 관련된 것은 아닙니다.