Извлекать данные Netflow из MySQL и обнаруживать аномалии

Я пытаюсь создать программу обнаружения DoS, используя данные netflow в базе данных SQL. Пока у меня есть общее представление о том, как этого добиться, но мне нужно какое-то направление.

Поток программы до сих пор:

<?php
$run = 'true';
$servername = "10.1.80.50";
$username = "netflow";
$password = "********";
$dbname = "netflow";
$flowQuery = 'SELECT distinct TIMESTAMP, SRCADDR, DSTADDR, SRCPORT, DSTPORT, PROT FROM netflow.flows ORDER BY DSTADDR ASC';

// Query flows for unique timed flows

$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$flows = mysqli_query($conn, $flowQuery);

// Begin creating baseline data

while ($run == 'true') {
while($row = $flows->fetch_assoc()) {
$baselineQuery = 'SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(TIMESTAMP) div (5*60))*(5*60)+(5*60)) as timeIntervals,
ROUND(SUM(DPKTS),0) as PACKETDATA,
MIN(DPKTS) AS MINPACKETS,
MAX(DPKTS) AS MAXPACKETS,
ROUND(SUM(DOCTETS),0) as OCTETDATA,
MIN(DOCTETS) AS MINOCTETS,
MAX(DOCTETS) AS MAXOCTETS
FROM (
SELECT FLOW_ID,TIMESTAMP,EXADDR,SRCADDR,DSTADDR,SRCPORT,DSTPORT,DPKTS,DOCTETS
FROM netflow.flows WHERE SRCADDR = "'.$row["SRCADDR"].'" AND DSTADDR = "'.$row["DSTADDR"].'" AND DSTPORT = "'.$row["DSTPORT"].'" AND SRCPORT = "'.$row["SRCPORT"].'" AND PROT = "'.$row["PROT"].'"ORDER BY FLOW_ID DESC LIMIT 500
) AS custom
GROUP BY 1 ORDER BY timeIntervals DESC
LIMIT 240';
$baselines = mysqli_query($conn, $baselineQuery);
}
usleep(60000000);
}

print_r($baselines);

?>

Моя логика заключается в следующем:

  1. Найти все уникальные потоки за последние 8 часов.
  2. Используя эти данные, найдите все данные о потоках для каждого из этих уникальных потоков.
  3. Разделите созданный массив на подмассивы или отдельные массивы для каждого потока.
  4. Как только каждый поток имеет свой собственный массив, усредните пакеты и данные, чтобы получить псевдо-базовый уровень.
  5. сравните последнюю запись потока с этими средними значениями и решите, есть ли аномалия (более 200% увеличение / уменьшение потока данных в одном направлении).
  6. Если обнаружена аномалия, снимите электронное письмо с предупреждением о событии.
  7. Подождите 60 секунд и возобновите цикл.

Я знаю, что код далеко не закончен и, вероятно, очень небрежный, но любая помощь очень ценится!

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]