Project

General

Profile

Analýza dat ve Wardenu

Kteří klienti posílají jiné než definované typy událostí v README.cesnet?

Cílem je identifikovat klienty, kteří posílají zastaralé typy událostí.

SELECT hostname, service, type, MAX(received), COUNT(*) FROM events WHERE detected > '2012-08-01' AND type NOT IN ('portscan', 'bruteforce', 'probe', 'spam', 'phishing', 'botnet_c_c', 'dos', 'malware', 'copyright', 'webattack', 'test', 'other') AND valid = 't' GROUP BY hostname, service, type;

Pozn. Pozor na pevně zadané datum v dotazu a případnou změnu množiny definovaných typů (závorka za NOT IN).

Ukázka výstupu:

mysql> SELECT hostname, service, type, MAX(received), COUNT(*) FROM events WHERE detected > '2012-08-01' AND type NOT IN ('portscan', 'bruteforce', 'probe', 'spam', 'phishing', 'botnet_c_c', 'dos', 'malware', 'copyright', 'webattack', 'test', 'other') AND valid = 't' GROUP BY hostname, service, type;
+-------------------+--------------+-----------+---------------------+----------+
| hostname          | service      | type      | MAX(received)       | COUNT(*) |
+-------------------+--------------+-----------+---------------------+----------+
| au1.cesnet.cz     | CESNET_SSERV | darkspace | 2012-08-21 16:23:26 |       63 |
| nfsen.ics.muni.cz | honeyscan    | darkspace | 2012-08-14 13:55:25 |    47718 |
+-------------------+--------------+-----------+---------------------+----------+
2 rows in set (0.00 sec)

Top 10 zdrojů událostí

Cílem je zjistit nejčastěji se objevující se zdroje událostí a jejich rozložení, tj. zda existuje jen několik málo velmi hlasitých zdrojů nebo je to jinak. Toto je velmi důležité pro určení vhodné strategie případného blokování těchto zdrojů (některé firewally/RTBH dokážou blokovat jen omezené množství IP adres) a také pro odhalení případných false positives.

SELECT source, COUNT(source) FROM events WHERE detected > '2012-08-20' AND valid = 't' GROUP BY source ORDER BY COUNT(source) DESC LIMIT 10;

Ukázka výstupu:

mysql> SELECT source, COUNT(source) FROM events WHERE detected > '2012-08-20' AND valid = 't' GROUP BY source ORDER BY COUNT(source) DESC LIMIT 10;
+-----------------+---------------+
| source          | COUNT(source) |
+-----------------+---------------+
| 147.228.241.16  |         54719 |
| 147.228.240.85  |         48854 |
| 147.228.241.97  |         36056 |
| 147.228.240.76  |         35785 |
| 147.228.241.106 |         35712 |
| 147.228.240.79  |         35690 |
| 147.228.240.115 |         35673 |
| 147.228.241.43  |         35650 |
| 173.244.202.172 |         15170 |
| 72.32.167.183   |         15000 |
+-----------------+---------------+
10 rows in set (27.68 sec)

Pozn. Pozor na pevně zadané datum v dotazu.

Klienti (stroje a služby) hlásící stejný zdroj událostí

Cílem je zjistit, zda byl daný zdroj nahlášen vícero klienty na různých strojích a v jakých typech událostí, což je důležité pro korelaci (objevuje se stále stejný typ událostí nebo ne?).

SELECT hostname, service, type, COUNT(*), detected FROM events WHERE source = '89.34.14.151' AND valid = 't' GROUP BY hostname, service, type;

Pozn. Pozor na pevně zadaný zdroj (zde IP adresu) v dotazu.

Ukázka výstupu:

mysql> SELECT hostname, service, type, COUNT(*), detected FROM events WHERE source = '89.34.14.151' AND valid = 't' GROUP BY hostname, service, type;
+-------------------+------------------+-----------+----------+---------------------+
| hostname          | service          | type      | COUNT(*) | detected            |
+-------------------+------------------+-----------+----------+---------------------+
| kryten.cesnet.cz  | DionaeaHoneypot  | malware   |     2800 | 2012-07-24 22:14:51 |
| kryten.cesnet.cz  | DionaeaHoneypot  | portscan  |     2706 | 2012-07-24 22:14:51 |
| kryten.cesnet.cz  | DionaeaHoneypot  | webattack |     1393 | 2012-07-24 23:19:32 |
| nfsen.ics.muni.cz | ScanDetector_1.0 | portscan  |        6 | 2012-07-24 23:40:00 |
+-------------------+------------------+-----------+----------+---------------------+
4 rows in set (2.08 sec)

Objevují se zdroje událostí v průběhu času v různých sítí?

Cílem je zjistit, zda má Warden smysl pro včasné upozornění/reakci: ověřit, zda platí předpoklad, že většina útočníků se nezaměřuje na konkrétní sítě/cíle, ale že útočí plošně. Pokud tento předpoklad platí, výstupu uložené procedury same by neměl být prázdný, ale měl by obsahovat seznam zdrojů a počet jejich výskytů (větších než dva) v událostech dle klientů (hostname, service).

Procedura má tři vstupní parametry: datum (detected), od kterého má proběhnout analýza, minimální počet požadovaných výskytů zdroje v čase a minimální počet požadovaných výskytů pro výpis.

Pomocná procedura detail vypíše pro daný zdroj a datum seznam výskytů v hlášení jednotlivých klientů včetně hlášených typů.

USE warden;

DROP PROCEDURE IF EXISTS same;
DELIMITER //
CREATE PROCEDURE same (date DATE, number INT, limit_out INT)
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE a VARCHAR(50);
  DECLARE i INT;
  -- select all or top 100 sources (to decrease processing time)
  -- DECLARE cur CURSOR FOR SELECT source FROM events WHERE detected > date AND valid = 't' GROUP BY source ORDER BY COUNT(source) DESC;
  DECLARE cur CURSOR FOR SELECT source FROM events WHERE detected > date AND valid = 't' GROUP BY source ORDER BY COUNT(source) DESC LIMIT 100;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  DROP TEMPORARY TABLE IF EXISTS sources;
  CREATE TEMPORARY TABLE sources (
    source VARCHAR(50),
    events INT
  );

  OPEN cur;

  -- for each source find out number of different clients and types that reported this source more than 'number' times from date 'date'
  read_loop: LOOP
    FETCH cur INTO a;
    IF done THEN
      LEAVE read_loop;    
    END IF;
    SELECT COUNT(*) FROM (SELECT hostname, service, type, COUNT(*), detected FROM events WHERE source = a AND detected > date AND valid = 't' GROUP BY hostname, service, type) AS source_event INTO i;
    IF i >= number THEN
      INSERT INTO sources(source, events) VALUES(a, i);
    END IF;
  END LOOP;

  CLOSE cur;

  -- number of sources with more than 'number' occurrences
  SELECT COUNT(*) FROM sources;
  -- select all sources and their number of occurrences greater than limit_out
  SELECT * FROM sources WHERE events >= limit_out ORDER BY events DESC;

  DROP TEMPORARY TABLE IF EXISTS sources;
END;//

DROP PROCEDURE IF EXISTS detail;
CREATE PROCEDURE detail (source VARCHAR (50), date DATE)
BEGIN
    SELECT hostname, service, type, COUNT(*), MIN(detected) FROM events WHERE source = source AND detected > date AND valid = 't' GROUP BY hostname, service, type ORDER BY MIN(detected);
END;//

DROP PROCEDURE IF EXISTS attrib_count;
CREATE PROCEDURE attrib_count (attr VARCHAR (50), date DATE)
BEGIN
    SELECT attr, COUNT(attr) FROM events WHERE received > date GROUP BY attr ORDER BY COUNT(attr) DESC;
END;//

DELIMITER ;
-- CALL same('2012-11-13', 2, 2);

Pozn. Z výkonnostních důvodu počítá procedura same výskyty zdrojů pro 100 nejvíce zastoupených zdrojů v daném časovém období. Toto omezení lze zrušit vynecháním LIMIT 100 v deklaraci SQL kurzoru. V proceduře detail se záměrně nepoužívá jako vstupní parametr ip ale source.

Ukázka výstupu:

mysql> CALL same('2012-11-13', 2, 2);
+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+
1 row in set (3 min 9.32 sec)

+-----------------+--------+
| source          | events |
+-----------------+--------+
| 58.17.52.14     |      2 |
| 203.117.70.126  |      2 |
| 198.20.69.74    |      2 |
| 198.20.69.98    |      2 |
| 200.96.206.92   |      2 |
| 195.122.213.118 |      2 |
+-----------------+--------+
6 rows in set (3 min 9.32 sec)

Query OK, 0 rows affected, 1 warning (3 min 9.32 sec)

mysql> call detail('58.17.52.14', '2012-11-13');
+---------------------+------------------+----------+----------+---------------------+
| hostname            | service          | type     | COUNT(*) | MIN(detected)       |
+---------------------+------------------+----------+----------+---------------------+
| afrodita.civ.zcu.cz | labrea           | portscan |      400 | 2012-11-13 04:37:06 |
| nfsen.ics.muni.cz   | ScanDetector_1.0 | portscan |       20 | 2012-11-13 06:40:00 |
+---------------------+------------------+----------+----------+---------------------+
2 rows in set (2.24 sec)

Query OK, 0 rows affected (2.24 sec)

Stroje a služby, které (ne)odjely na dovolenou

Cílem je zjistit datum a čas přijetí poslední události pro všechny klienty. Klienti, kteří již delší čas nereportovali, nefungují možná správně.

SELECT hostname, service, MAX(received) FROM events WHERE valid = 't' GROUP BY hostname, service ORDER BY MAX(received) ASC;

Ukázka výstupu:

mysql> SELECT hostname, service, MAX(received) FROM events WHERE valid = 't' GROUP BY hostname, service ORDER BY MAX(received) ASC;
+--------------------------+-----------------------+---------------------+
| hostname                 | service               | MAX(received)       |
+--------------------------+-----------------------+---------------------+
| collector.liberouter.org | DosDetector           | 2012-10-08 08:45:33 |
| nfsen.ics.muni.cz        | honeyscan             | 2012-10-24 12:50:27 |
| collector.liberouter.org | SynScanDetector_1.0   | 2012-10-27 16:10:48 |
| kryten.cesnet.cz         | DionaeaHoneypot       | 2012-11-11 08:55:02 |
| nfsen.ics.muni.cz        | SSHBruteForce-1_N     | 2012-11-12 13:02:48 |
| au1.cesnet.cz            | CESNET_SSERV          | 2012-11-12 20:19:01 |
| buldog.vsb.cz            | cz.vsb.buldocek.kippo | 2012-11-13 11:45:16 |
| au1.cesnet.cz            | CESNET_IDS            | 2012-11-13 12:04:03 |
| au2.cesnet.cz            | IDS.CZ                | 2012-11-13 12:15:02 |
| holly.cesnet.cz          | KippoHoneypot         | 2012-11-13 12:45:02 |
| miel.opf.slu.cz          | Kippo                 | 2012-11-13 12:45:04 |
| afrodita.civ.zcu.cz      | labrea                | 2012-11-13 12:45:05 |
| afrodita.civ.zcu.cz      | hihat                 | 2012-11-13 12:45:10 |
| nfsen.ics.muni.cz        | ScanDetector_1.0      | 2012-11-13 12:46:04 |
+--------------------------+-----------------------+---------------------+
14 rows in set (11.02 sec)

Typy událostí podle četnosti

Cílem je zjistit, který typ události je nejčastěji hlášen. Tato informace může mít zásadní vliv na vývoj klientů.

SELECT type, COUNT(type) FROM events WHERE received > '2012-09-01' AND valid = 't' GROUP BY type ORDER BY COUNT(type) DESC;

Pozn. Pozor na pevně nastavené datum v dotazu.

Ukázka výstupu:

mysql> SELECT type, COUNT(type) FROM events WHERE received > '2012-09-01' AND valid = 't' GROUP BY type ORDER BY COUNT(type) DESC;
+------------+-------------+
| type       | COUNT(type) |
+------------+-------------+
| portscan   |     1510138 |
| probe      |      315521 |
| bruteforce |       71609 |
| spam       |        8669 |
| other      |        4196 |
| dos        |         478 |
| malware    |         116 |
| webattack  |          38 |
| TEST       |           9 |
+------------+-------------+
9 rows in set (3.96 sec)

Seznam událostí, které mají zdroje ze sítí CESNET2

Cílem je zjistit výskyt událostí se zdroji v členských sítích CESNET2 a zjistit, jakou by měl Warden přidanou hodnotu pro incident handling v rámci CESNET2.

Postup, jak zjistit seznam sítí CESNET2 z whois:

$ whois -r -i origin AS2852 | grep route | awk '{ print $2 }'
146.102.0.0/16
147.228.0.0/16
147.230.0.0/15
147.251.0.0/16
147.32.0.0/15
158.194.0.0/16
158.196.0.0/16
160.216.0.0/15
193.84.160.0/20
193.84.192.0/19
193.84.32.0/20
195.113.0.0/16
195.178.64.0/19
78.128.128.0/17
2001:718::/32

SQL dotaz:

SELECT detected, hostname, service, type, source FROM events WHERE valid = 't' AND (source LIKE '146.102.%' OR source LIKE '147.230.%' OR source LIKE '147.231.%' OR source LIKE '147.251.%' OR source LIKE '147.32.%' OR source LIKE '147.33.%' OR source LIKE '158.194.%' OR source LIKE '158.196.%' OR source LIKE '160.216.%' OR source LIKE '160.217.%' OR source LIKE '193.84.16%' OR source LIKE '193.84.17%' OR source LIKE '193.84.19%' OR source LIKE '193.84.2%' OR source LIKE '193.84.3%' OR source LIKE '193.84.4%' OR source LIKE '195.113.%' OR source LIKE '195.178.%' OR source LIKE '78.128.1%' OR source LIKE '78.128.2%' OR source LIKE '2001:718:%') AND detected > '2012-10-01';

Pozn. Vzhledem k tomu, že source není typu IP, nelze se efektivně dotazovat na zjištěné sítě. Využívá se proto LIKE a prostého porovnání řetězců. Pro jednoduchost není dotaz přesně zaměřen na adresní rozsahy menších sítí (např. síť 195.178.64.0/19 se vyhledává pomocí LIKE '195.178.%) a proto se ve výsledku mohou objevit i událostí se zdroji "v okolí" zamýšleného adresního rozsahu.

Ukázka výstupu:

mysql> SELECT detected, hostname, service, type, source FROM events WHERE valid = 't' AND (source LIKE '146.102.%' OR source LIKE '147.230.%' OR source LIKE '147.231.%' OR source LIKE '147.251.%' OR source LIKE '147.32.%' OR source LIKE '147.33.%' OR source LIKE '158.194.%' OR source LIKE '158.196.%' OR source LIKE '160.216.%' OR source LIKE '160.217.%' OR source LIKE '193.84.16%' OR source LIKE '193.84.17%' OR source LIKE '193.84.19%' OR source LIKE '193.84.2%' OR source LIKE '193.84.3%' OR source LIKE '193.84.4%' OR source LIKE '195.113.%' OR source LIKE '195.178.%' OR source LIKE '78.128.1%' OR source LIKE '78.128.2%' OR source LIKE '2001:718:%') AND detected > '2012-11-13';
+---------------------+---------------+------------+----------+-----------------+
| detected            | hostname      | service    | type     | source          |
+---------------------+---------------+------------+----------+-----------------+
| 2012-11-13 07:42:39 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
| 2012-11-13 10:14:26 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
| 2012-11-13 10:14:30 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
| 2012-11-13 10:15:19 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
| 2012-11-13 10:30:51 | au1.cesnet.cz | CESNET_IDS | portscan | 158.196.49.53   |
| 2012-11-13 11:21:23 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
| 2012-11-13 11:21:36 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
| 2012-11-13 11:43:24 | au1.cesnet.cz | CESNET_IDS | portscan | 195.113.151.142 |
+---------------------+---------------+------------+----------+-----------------+
8 rows in set (0.00 sec)

Zdroje událostí podle počtu reportovaných událostí, které mají zdroj ze sítě CESNET2

Cílem je zjistit počet událostí se zdroji v členských sítích CESNET2 a zjistit, jakou by měl Warden přidanou hodnotu pro incident handling v rámci CESNET2.

SELECT COUNT(*), hostname, service, type FROM events WHERE valid = 't' AND (source LIKE '146.102.%' OR source LIKE '147.230.%' OR source LIKE '147.231.%' OR source LIKE '147.251.%' OR source LIKE '147.32.%' OR source LIKE '147.33.%' OR source LIKE '158.194.%' OR source LIKE '158.196.%' OR source LIKE '160.216.%' OR source LIKE '160.217.%' OR source LIKE '193.84.16%' OR source LIKE '193.84.17%' OR source LIKE '193.84.19%' OR source LIKE '193.84.2%' OR source LIKE '193.84.3%' OR source LIKE '193.84.4%' OR source LIKE '195.113.%' OR source LIKE '195.178.%' OR source LIKE '78.128.1%' OR source LIKE '78.128.2%' OR source LIKE '2001:718:%') GROUP BY hostname, service, type ORDER BY COUNT(*) DESC;

Pozn. Vzhledem k tomu, že source není typu IP, nelze se efektivně dotazovat na zjištěné sítě. Využívá se proto LIKE a prostého porovnání řetězců. Pro jednoduchost není dotaz přesně zaměřen na adresní rozsahy menších sítí (např. síť 195.178.64.0/19 se vyhledává pomocí LIKE '195.178.%) a proto se ve výsledku mohou objevit i událostí se zdroji "v okolí" zamýšleného adresního rozsahu.

Ukázka výstupu:

mysql> SELECT COUNT(*), hostname, service, type FROM events WHERE valid = 't' AND (source LIKE '146.102.%' OR source LIKE '147.230.%' OR source LIKE '147.231.%' OR source LIKE '147.251.%' OR source LIKE '147.32.%' OR source LIKE '147.33.%' OR source LIKE '158.194.%' OR source LIKE '158.196.%' OR source LIKE '160.216.%' OR source LIKE '160.217.%' OR source LIKE '193.84.16%' OR source LIKE '193.84.17%' OR source LIKE '193.84.19%' OR source LIKE '193.84.2%' OR source LIKE '193.84.3%' OR source LIKE '193.84.4%' OR source LIKE '195.113.%' OR source LIKE '195.178.%' OR source LIKE '78.128.1%' OR source LIKE '78.128.2%' OR source LIKE '2001:718:%') GROUP BY hostname, service, type ORDER BY COUNT(*) DESC;

+----------+--------------------------+-----------------------+------------+
| COUNT(*) | hostname                 | service               | type       |
+----------+--------------------------+-----------------------+------------+
|     4006 | afrodita.civ.zcu.cz      | hihat                 | other      |
|     2186 | au1.cesnet.cz            | CESNET_SSERV          | portscan   |
|     1016 | nfsen.ics.muni.cz        | ScanDetector_1.0      | portscan   |
|      680 | au1.cesnet.cz            | CESNET_SSERV          | darkspace  |
|      433 | collector.liberouter.org | SynScanDetector_1.0   | portscan   |
|      394 | au1.cesnet.cz            | CESNET_IDS            | portscan   |
|      103 | afrodita.civ.zcu.cz      | labrea                | portscan   |
|       61 | buldog.vsb.cz            | cz.vsb.buldocek.kippo | bruteforce |
|       47 | collector.liberouter.org | SynScanDetector_1.0   | dos        |
|       19 | afrodita.civ.zcu.cz      | labrea                | tarpit     |
|        7 | miel.opf.slu.cz          | Kippo                 | bruteforce |
|        6 | au2.cesnet.cz            | IDS.CZ                | portscan   |
|        4 | nfsen.ics.muni.cz        | honeyscan             | darkspace  |
|        3 | nfsen.ics.muni.cz        | honeyscan             | probe      |
|        1 | nfsen.ics.muni.cz        | SSHBruteForce-1_N     | bruteforce |
|        1 | au1.cesnet.cz            | CESNET_SSERV          | other      |
|        1 | au1.cesnet.cz            | CESNET_SSERV          | spam       |
+----------+--------------------------+-----------------------+------------+
17 rows in set (5.48 sec)

Co se objevuje v poli note?

Cílem je zjistit, co je vyplněno v poli note a příp. zavést pravidla pro vyplňování tohoto volitelného pole.

SELECT type, note, COUNT(*) FROM events WHERE note <> '' AND valid = 't' AND detected > '2012-11-01' GROUP BY type, note ORDER BY COUNT(*) DESC LIMIT 30;

Pozn. Pozor na pevně zadané datum v souboru a omezení výpisu na 30 řádků.

Ukázka výstupu:

mysql> SELECT type, note, COUNT(*) FROM events WHERE note <> '' AND valid = 't' AND detected > '2012-11-01' GROUP BY type, note ORDER BY COUNT(*) DESC LIMIT 30;
+------------+----------------------------------------------------------------------------------+----------+
| type       | note                                                                             | COUNT(*) |
+------------+----------------------------------------------------------------------------------+----------+
| probe      | null                                                                             |   384612 |
| darkspace  | null                                                                             |   214206 |
| spam       | spam/linkfarm post                                                               |     8895 |
| portscan   | START                                                                            |     2792 |
| portscan   | END                                                                              |     2792 |
| portscan   | downadup                                                                         |     1211 |
| darkspace  | END                                                                              |      783 |
| darkspace  | START                                                                            |      783 |
| bruteforce | u/p webform post                                                                 |      758 |
| bruteforce | attack scale = # of attacked hosts                                               |      649 |
| darkspace  | downadup                                                                         |      602 |
| dos        | SYN flood                                                                        |      456 |
| portscan   | Torpig                                                                           |      404 |
| darkspace  | dnschanger                                                                       |      126 |
| portscan   | zeus-p2p                                                                         |      119 |
| portscan   | irc                                                                              |      116 |
| portscan   | ZeuS                                                                             |       99 |
| darkspace  | irc                                                                              |       63 |
| portscan   | SYN scan (8192 addresses scanned)                                                |       44 |
| other      | blind uri hit: UkVRVUVTVF9VUkk9L2NnaS1iaW4vaW5kZXgucGhw
                         |       39 |
| portscan   | slenfbot.5050                                                                    |       38 |
| portscan   | SYN scan (16385 addresses scanned)                                               |       37 |
| other      | blind uri hit: UkVRVUVTVF9VUkk9L2FkbWluL2NhdGVnb3JpZXMucGhwL2xvZ2luLnBocA==
     |       36 |
| other      | blind uri hit: UkVRVUVTVF9VUkk9L2FkbWluL2Jhbm5lcl9tYW5hZ2VyLnBocC9sb2dpbi5waHA=
 |       35 |
| portscan   | SYN scan (32768 addresses scanned)                                               |       35 |
| other      | blind uri hit: UkVRVUVTVF9VUkk9L2FkbWluL2ZpbGVfbWFuYWdlci5waHAvbG9naW4ucGhw
     |       33 |
| portscan   | SYN scan (131072 addresses scanned)                                              |       32 |
| portscan   | SYN scan (65536 addresses scanned)                                               |       27 |
| other      | blind uri hit: UkVRVUVTVF9VUkk9L2NnaS1iaW4vbG9naW4ucGhw
                         |       24 |
| other      | blind uri hit: UkVRVUVTVF9VUkk9L3BocG15YWRtaW4vY29uZmlnL2luZGV4LnBocA==
         |       21 |
+------------+----------------------------------------------------------------------------------+----------+
30 rows in set (6.03 sec)

Pozn. Pozor na pevně vyplněné datum v dotazu a omezení počtu záznamů pomocí LIMIT.

Výpis událostí z budoucnosti

Cílem je odhalit klienty, které hlásí události s časem z budoucnosti. Čas přiřazený serverem při příchodu události (received) musí být vždy roven nebo větší času detekce (detected).

SELECT hostname, service, type, COUNT(*) FROM events WHERE detected - received > 0 AND received > '2012-10-01' GROUP BY hostname, service, type;

Ukázka výstupu:

mysql>  SELECT hostname, service, type, COUNT(*) FROM events WHERE detected - received > 0 AND received > '2012-10-01' GROUP BY hostname, service, type;
+--------------------------+---------------------+------------+----------+
| hostname                 | service             | type       | COUNT(*) |
+--------------------------+---------------------+------------+----------+
| afrodita.civ.zcu.cz      | hihat               | bruteforce |       34 |
| afrodita.civ.zcu.cz      | hihat               | other      |       20 |
| afrodita.civ.zcu.cz      | hihat               | spam       |      899 |
| afrodita.civ.zcu.cz      | labrea              | portscan   |    42214 |
| barny.ics.muni.cz        | SynScanDetector_1.0 | portscan   |        2 |
| collector.liberouter.org | DosDetector         | dos        |        1 |
| collector.liberouter.org | SynScanDetector_1.0 | dos        |      425 |
| collector.liberouter.org | SynScanDetector_1.0 | portscan   |     5598 |
| nfsen.ics.muni.cz        | honeyscan           | probe      |        4 |
| nfsen.ics.muni.cz        | ScanDetector_1.0    | portscan   |        1 |
+--------------------------+---------------------+------------+----------+
10 rows in set (3.91 sec)

Pozn. Pozor na pevně zadané datum v dotazu.

Nalezení tzv. „Marťanů”

Cílem je vypsání událostí se zdrojovou adresou, která by se neměla objevit v Internetu či která je neplatná (prázná, s některým oktetem větším než 255, apod.). Příkaz postihuje zatím zatím jen protokol IPv4, IPv6 by bylo složitější i proto, že SQL funkce INET6_ATON() existuje až u MySQL serveru v5.6, který se ve stabilních balíčcích distribucí zatím nevyskytuje.

DROP FUNCTION IF EXISTS iptest;
DELIMITER //
CREATE FUNCTION iptest(ip VARCHAR(15)) RETURNS TINYINT(1) DETERMINISTIC
BEGIN
    SET @nip = INET_ATON(ip);
    IF(
        ISNULL(@nip)                           OR
        @nip BETWEEN          0 AND   16777216 OR
        @nip BETWEEN  167772160 AND  171966464 OR
        @nip BETWEEN 2130706432 AND 2130706433 OR
        @nip BETWEEN 2851995648 AND 2851995649 OR
        @nip BETWEEN 2886729728 AND 2886729729 OR
        @nip BETWEEN 3221225472 AND 3221225473 OR
        @nip BETWEEN 3221225984 AND 3221225985 OR
        @nip BETWEEN 3227017984 AND 3227017985 OR
        @nip BETWEEN 3232235520 AND 3232235521 OR
        @nip BETWEEN 3323068416 AND 3323068417 OR
        @nip BETWEEN 3325256704 AND 3325256705 OR
        @nip BETWEEN 3405803776 AND 3405803777 OR
        @nip BETWEEN 3758096384 AND 3758096385 OR
        @nip BETWEEN 4026531840 AND 4026531841 OR
        @nip    >    4294967295) THEN
            RETURN TRUE;
        ELSE
            RETURN FALSE;
        END IF;
END;//
DELIMITER ;
SELECT hostname, service, source, count(source) AS c , min(received), max(received) FROM events WHERE valid = 't' AND source_type = 'IP' AND iptest(source) GROUP BY hostname, service, source ORDER BY c DESC;

Ukázka výstupu:

+------------------+-----------------+--------------+-----+---------------------+---------------------+
| hostname         | service         | source       | c   | min(received)       | max(received)       |
+------------------+-----------------+--------------+-----+---------------------+---------------------+
| kryten.cesnet.cz | DionaeaHoneypot | 10.0.124.239 | 435 | 2012-06-12 14:35:02 | 2012-06-22 05:20:03 |
| kryten.cesnet.cz | DionaeaHoneypot |              |  17 | 2012-06-12 01:55:02 | 2012-07-07 21:25:06 |
| kryten.cesnet.cz | DionaeaHoneypot | 10.10.11.2   |   2 | 2012-06-20 14:00:03 | 2012-06-20 17:25:03 |
+------------------+-----------------+--------------+-----+---------------------+---------------------+
3 rows in set (1 min 0.16 sec)

TODO

  • popis pomocné procedury attrib_count (Objevují se zdroje událostí v průběhu času v různých sítí?)