Project

General

Profile

Actions

Task #960

closed

Feature #283: Webové uživatelské rozhraní

Overview stránka

Added by Pavel Kácha over 11 years ago. Updated over 11 years ago.

Status:
Closed
Priority:
Normal
Category:
Development - GUI
Target version:
Start date:
03/22/2013
Due date:
% Done:

100%

Estimated time:
To be discussed:

Description

Tj. variace na simple query, použitelná jako první náhled na ip adresy/dns jména, sítě, či celou síť CESNETu.

Na stránce by mělo být:
  • pole pro zadání IP adresy nebo sítě nebo doménového jména
    • možná i jejich seznamu. To koresponduje s tím, že doménové jméno může mít víc A záznamů
    • možná i s možností čísel portů (k zamyšlení)
    • možná i s možností AS? To by se líbilo síťařům, znamenalo by to ale enrichment dat událostí (k zamyšlení)
    • defaultně (prázdné pole) se bere automaticky vše z rozsahů CESNETu
  • pole (klikadlo, whatever) pro zadání časového rozmezí (jQuery UI?)
    • default něco rozumného pro incident handling - např. měsíc zpátky, uvidíme co je reálné z rychlosti dotazů
Dotaz zobrazí např. statistiku:
  • typů incidentů
  • detektorů
  • útočníků
  • cílů

Statistikou se rozumí cokoliv, co dává smysl a je užitečné, tj. koláčový graf, skládaný graf na časové ose (v absolutních nebo procentuálních jednotkách), toplist, etc. Např. pro statistiku typů může mít význam tabule absolutních čísel, skládaný graf, koláč.

Inspirace: CESNET-CERTS, bodíkův wardenweb, jiné dešbórdy.

Zajímavý způsob vizualizace jsou také sparklines, mohly by se hodit pro některá porovnávání časových řad.

Navíc by mohl někde nahoře vypadnout odkaz do Alerts na konkrétní vyhledávání infa o zadané ip/síti/hostname v zadaném časovém rozmezí.

V Perlu je zajímavý GD::Graph, možná jsou i jiné varianty, neradi bychom se ale odkazovali na externí api (Google Chart), ani příliš záviseli na JS.


Files

ukol.pdf (56.4 KB) ukol.pdf Radomír Orkáč, 05/01/2013 06:52 PM
1_time.png (3.89 KB) 1_time.png Radomír Orkáč, 06/05/2013 01:19 PM
2_time.png (6.32 KB) 2_time.png Radomír Orkáč, 06/05/2013 01:19 PM
Actions #1

Updated by Pavel Kácha over 11 years ago

V budoucnu bude potřeba caflík Resolve, protože hledání resolvnutých ip je něco jiného než hledání v polích, která obsahují hostname. Pravděpodobně bude potřeba i hostname indexy pro hledání v URL.

Nejprve začneme základním overview na jednu IP adresu.

klasifikace - tabule, koláč, procentuální stack s rozumnou granularitou
detektory ve dvou variantách, podle analyzerid a podle name - tabule, koláč, absolutní stack
toplist útočníků - tabule, koláč z tabule + "zbytek"
toplist cílů - tabule, koláč z tabule + "zbytek"

Actions #2

Updated by Pavel Kácha over 11 years ago

Řadím podle potenciálu potřeby diskuse (příští středu kolem semináře CESNET CSIRT). Poznámky:
  • u grafu podle cílů hledáme adresu ve zdroji a naopak
  • obrázky zatím pojmenované hash(dotaz, počáteční čas, koncový čas), až zavedeme uživatele, možná přidáme userid nebo sessionid
  • rozumné obalující funkce na generování jednotlivých typů grafů - code reuse, možnost výměny knihovny
Actions #3

Updated by Pavel Kácha over 11 years ago

Zkusil jsem si jen tak cvičně udělat jednoduchý toplist zdrojů vůči jedné IP adrese pomocí agg frameworku, vypadá to zhruba následovně:

db.alerts.aggregate([
{ 
        $match: {
                "Alert.Target.Node.Address.ipv4.ip":BinData(0,"MTEwMDAwMTEwMTExMDAwMTExMTExMDExMTEwMTExMTA=")
        }
},
{ 
        $project: {
                source: "$Alert.Source.Node.Address.ipv4.ip" 
        }
},
{ 
        $group: {
                _id: "$source",
                sum: {$sum: 1} 
        }
},
{ 
        $sort: {
                sum: -1
        }
},
{ 
        $limit: 10
}
])

Limit je tam jen aby se na to mohl podívat člověk, project není nezbytně
nutný, ale když si člověk z dokumentů vyřízne jen to, s čím potřebuje
pracovat, vejde se mu toho do limitů agg frameworku výrazně víc.
Pravděpodobně by stálo za to udělat i unwind na zdroj, aby se vyřešily
případy, kdy je v jedné zprávě víc zdrojů, a nejspíš by bylo rozumné
započítat i count (ale s tím bych počkal na Ideu, teď je to v IDMEFu
reprezentované strašně).

Actions #4

Updated by Radomír Orkáč over 11 years ago

Abych mohl pouzivat agregacni framework v perlu, bylo potreba udelat nize uvedene.

1. Nase verze monga mela problem s BinData..

        $match: {
                "Alert.Target.Node.Address.ipv4.ip":BinData(0,"MTEwMDAwMTEwMTExMDAwMTExMTExMDExMTEwMTExMTA=")
        }

      $VAR1 = 'exception: can\'t create Value of BSON type BinaryData';

Reseni:

Chyba resena zde:
https://jira.mongodb.org/browse/SERVER-4608

Instalace nejnovejsiho monga 2.4.2
http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.2.tgz

2. Neslo volat v perlu agregacni funkci $COLLECTION->aggregate

      Neproslo: $COLLECTION->aggregate( $pipeline );
      Proslo: $db->run_command( { aggregate => "alerts", pipeline => $pipeline } );

Reseni:

Installation of MongoDB libraries:
# apt-get install libmodule-install-perl make build-essential# apt-get install libtest-exception-perl libany-moose-perl libclass-method-modifiers-perl libboolean-perl libdigest-md5-file-perl libdatetime-perl libdata-types-perl libtie-ixhash-perl libtry-tiny-perl libfile-slurp-perl libtest-warn-perl

# cpan DateTime::Tiny
# ExtUtils::MakeMaker

# apt-get install unzip
# cd /usr/local/src
# wget --no-check-certificate https://github.com/mongodb/mongo-perl-driver/zipball/master -O mongo-perl-driver.zip
# unzip mongo-perl-driver.zip
# cd mongodb-mongo-perl-driver-*
# perl Makefile.PL
# make
# make test
# make install

Actions #5

Updated by Radomír Orkáč over 11 years ago

Řadím podle potenciálu potřeby diskuse (příští středu kolem semináře CESNET CSIRT). Poznámky:
  • u grafu podle cílů hledáme adresu ve zdroji a naopak
  • obrázky zatím pojmenované hash(dotaz, počáteční čas, koncový čas), až zavedeme uživatele, možná přidáme userid nebo sessionid
  • rozumné obalující funkce na generování jednotlivých typů grafů - code reuse, možnost výměny knihovny
Actions #6

Updated by Radomír Orkáč over 11 years ago

  • Status changed from New to In Progress
Actions #7

Updated by Pavel Kácha over 11 years ago

Grafy:
  • bug s neexistencí grafů/tabulek - 217.168.175.180, 2013-04-23 00:00:00, Tue Apr 23 08:42:27 2013
  • ad vzhled - nejprve zkusit GD::Graph s:
  • barvy
    • lib/color/Pallette.pm - random_unique_color
    • odpovídající barevný čtverec na začátku řádku v tabuli
Poznámky:
Actions #8

Updated by Radomír Orkáč over 11 years ago

Grafy:
  • bug s neexistencí grafů/tabulek - 217.168.175.180, 2013-04-23 00:00:00, Tue Apr 23 08:42:27 2013
    NEPROJEVILO SE ZNOVU, ZKOUSENO 3x.
* ad vzhled - nejprve zkusit GD::Graph s:
  • barvy
    • lib/color/Pallette.pm - random_unique_color
    • odpovídající barevný čtverec na začátku řádku v tabuli
Actions #9

Updated by Pavel Kácha over 11 years ago

Zhruba v pořadí priority:
  • dělící čáry bílé, zkusit širší (konstanty v kódu)
  • bug s neexistencí grafů/tabulek - 217.168.175.180, 2013-04-23 00:00:00, Tue Apr 23 08:42:27 2013 (https://mentat.vsb.cz/dashboard?query=217.168.175.180&from=2013-04-23+00%3A00%3A00&to=2013-05-02T08%3A12%3A59Z)
  • bug
    Caught exception in Hawat::Controller::Dashboard->index "can't get db response, not connected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 251."
    viz Jabber, stával se mi po odeslání prázdného dashboardu poté, co jsme si s ním chvíli hráli, pokud Ti nepůjde zreplikovat, dej vědět, srazíme se a pokusím se zreplikovat od sebe
  • unwind
  • tabule - count do sloupce
  • tabule - nadpisy
  • nejen IP adresa, ale i rozsah a CIDR, Mek připraví Radkovi parsovací objekt
  • ipadresy v tabuli jako odkaz do nového okna s /alerts s předpřipraveným dotazem s ip a stejným časovým obdobím
  • jednotný formát času "2013-04-23 00:00:00", ať se neobjevují variace "Tue Apr 23 08:42:27 2013"
Actions #10

Updated by Pavel Kácha over 11 years ago

  • bug [...] viz Jabber, stával se mi po odeslání prázdného dashboardu poté, co jsme si s ním chvíli hráli, pokud Ti nepůjde zreplikovat, dej vědět, srazíme se a pokusím se zreplikovat od sebe

Bodík: totok se mi stava kdyz tu databazi pretezuju ...

Actions #11

Updated by Jan Mach over 11 years ago

Dodělal jsem konverze pro CIDR subnety a pro IP range pro IPv6 adresy (zatím). Funguje to takto:

use Value::Convertor;

# Metody instance
my $c = Value::Convertor->new();

my ($result, $min, $max);
$result = $c->ipv4_to_int('195.113.144.194');                  # $result = 3278999746;
$result = $c->ipv4_to_int('11000011011100011001000011000010'); # $result = 3278999746;
$result = $c->ipv4_to_int('C37190C2');                         # $result = 3278999746;
$result = $c->ipv4_to_int(3278999746);                         # $result = 3278999746;

$result = $c->ipv4_to_bin('195.113.144.194');                  # $result = [nejakej binar];
$result = $c->ipv4_to_bin('11000011011100011001000011000010'); # $result = [nejakej binar];
$result = $c->ipv4_to_bin('C37190C2');                         # $result = [nejakej binar];
$result = $c->ipv4_to_bin(3278999746);                         # $result = [nejakej binar];

$result = $c->ipv4_to_binstr('195.113.144.194');                  # $result = '11000011011100011001000011000010';
$result = $c->ipv4_to_binstr('11000011011100011001000011000010'); # $result = '11000011011100011001000011000010';
$result = $c->ipv4_to_binstr('C37190C2');                         # $result = '11000011011100011001000011000010';
$result = $c->ipv4_to_binstr(3278999746);                         # $result = '11000011011100011001000011000010';

($min, $max) = $c->ipv4_to_int('192.168.0.0/24');            # $min = 3232235520, $max = 3232235775;
($min, $max) = $c->ipv4_to_int('192.168.0.0-192.168.0.255'); # $min = 3232235520, $max = 3232235775;

($min, $max) = $c->ipv4_to_bin('192.168.0.0/24');            # $min = [binar], $max = [binar];
($min, $max) = $c->ipv4_to_bin('192.168.0.0-192.168.0.255'); # $min = [binar], $max = [binar];

($min, $max) = $c->ipv4_to_binstr('192.168.0.0/24');            # $min = '11000000101010000000000000000000', $max = '11000000101010000000000011111111';
($min, $max) = $c->ipv4_to_binstr('192.168.0.0-192.168.0.255'); # $min = '11000000101010000000000000000000', $max = '11000000101010000000000011111111';

# Staticke metody tridy

my ($result, $min, $max);
$result = Value::Convertor->ipv4_to_int('195.113.144.194');                  # $result = 3278999746;
$result = Value::Convertor->ipv4_to_int('11000011011100011001000011000010'); # $result = 3278999746;
$result = Value::Convertor->ipv4_to_int('C37190C2');                         # $result = 3278999746;
$result = Value::Convertor->ipv4_to_int(3278999746);                         # $result = 3278999746;

$result = Value::Convertor->ipv4_to_bin('195.113.144.194');                  # $result = [nejakej binar];
$result = Value::Convertor->ipv4_to_bin('11000011011100011001000011000010'); # $result = [nejakej binar];
$result = Value::Convertor->ipv4_to_bin('C37190C2');                         # $result = [nejakej binar];
$result = Value::Convertor->ipv4_to_bin(3278999746);                         # $result = [nejakej binar];

$result = Value::Convertor->ipv4_to_binstr('195.113.144.194');                  # $result = '11000011011100011001000011000010';
$result = Value::Convertor->ipv4_to_binstr('11000011011100011001000011000010'); # $result = '11000011011100011001000011000010';
$result = Value::Convertor->ipv4_to_binstr('C37190C2');                         # $result = '11000011011100011001000011000010';
$result = Value::Convertor->ipv4_to_binstr(3278999746);                         # $result = '11000011011100011001000011000010';

($min, $max) = Value::Convertor->ipv4_to_int('192.168.0.0/24');            # $min = 3232235520, $max = 3232235775;
($min, $max) = Value::Convertor->ipv4_to_int('192.168.0.0-192.168.0.255'); # $min = 3232235520, $max = 3232235775;

($min, $max) = Value::Convertor->ipv4_to_bin('192.168.0.0/24');            # $min = [binar], $max = [binar];
($min, $max) = Value::Convertor->ipv4_to_bin('192.168.0.0-192.168.0.255'); # $min = [binar], $max = [binar];

($min, $max) = Value::Convertor->ipv4_to_binstr('192.168.0.0/24');            # $min = '11000000101010000000000000000000', $max = '11000000101010000000000011111111';
($min, $max) = Value::Convertor->ipv4_to_binstr('192.168.0.0-192.168.0.255'); # $min = '11000000101010000000000000000000', $max = '11000000101010000000000011111111';

Metodě tedy stačí předhodit cokoliv a ona už sama pozná, jestli se jedná o jednu IP adresu, nebo o subnet/rozsah. Sice vrací v jednom případě skalár a ve druhém pole, ale dá se to velice jednoduše používat konzistentně způsobem

my ($min, $max) = $c->ipv4_to_binstr(...);
my ($min, $max) = Value::Convertor->ipv4_to_binstr(...);

a jednoduchým testem na defined($max) se dá v programu poznat, o co se jedná a podle toho se zařídit dále.

Radku, můžeš to tedy použít, pro IPv4 adresy to můžeš rovnou cpát do konstruktoru MongoDB::BSON::Binary:

my $binstr = $c->ipv4_to_binstr(...);
my $bin = MongoDB::BSON::Binary->new(data => $binstr, subtype => SUBTYPE_BINARY()),

a pak rvát do dotazu do databáze.

Zároveň s tím jsem v Mentat::Message::Convertor::Mongo upravil metody ipv4*_to%_hob tak, aby používali *_to_binstr, po refaktoringu tak zůstalo staré *to_bin, což bylo špatně.

Mělo by to všechno šlapat, testoval jsem to dostatečně, kdyžtak další inspirace na používaní je klasicky v test souboru tests/unit/t/Value.Convertor.t.

Actions #12

Updated by Jan Mach over 11 years ago

BUG REPORT: Našel jsem chybu ve tvých konverzních funkcích. Je to mrcha úskočná a nenápadná. V metodě _ipv4net_to_hob($) si počítáš síťovou masku a z toho pak z IP adresy počítáš minimální a maximální IP. Tvůj algoritmus je elegantní a za normálních okolností perfektní:

my $netmask_int = (~0 << (32 - $length));
my $min = ($ipv4int & $netmask_int);
my $max = ($ipv4int & $netmask_int) + ( ~ $netmask_int ));

Bohužel to nefunguje na 64bit strojích, tedy minimálně ne na mé pracovní stanici. Ta zjevně používá 64bit INT a výraz ~0 je pak blbě. Už ti to nestihnu teď opravit, ale i pro svoje potřeby jsem napsal metodu Value::Convertor->ipv4cidr_to_ints(), respektive pro tebe ještě lepší ipv4cidr_to_binstrs(), kterou ti doporučuji použít. Ten algoritmus, který jsem nakonec použil určitě není optimální, ale nic lepšího mě rychle nenapadlo a nechtěl jsem s tím ztrácet víc času (benchmarking a optimalizace konverzních funkcí bude na řadě až jindy, že Pavle?). Každopádně má ale smysl, aby ten algoritmus byl jen na jednom místě. Kdyžtak třeba namátkou koukni do toho konvertoru, abys věděl, co tam je všechno za konverze k dispozici, která je inverzní ke které (hlavně u časů) a případně to můžeš i pozměnit, když tě tam něco praští do očí.

Actions #13

Updated by Pavel Kácha over 11 years ago

Možná by stačilo něco ve stylu:

my $netmask_int = (~0 << (32 - $length)) & 0xFFFFFFFF;
my $min = ($ipv4int & $netmask_int);
my $max = $min + ((~ $netmask_int) & 0xFFFFFFFF));

Actions #14

Updated by Radomír Orkáč over 11 years ago

Zhruba v pořadí priority:
  • dělící čáry bílé, zkusit širší (konstanty v kódu)
    http://www.ibm.com/developerworks/opensource/library/os-perlgdchart/?ca=dgr-lnxw02aPerl-GD-Charts
    # vim /usr/share/perl5/GD/Graph/pie.pm +270 
    $self->{graph}->setThickness(5);
    
  • bug s neexistencí grafů/tabulek - 217.168.175.180, 2013-04-23 00:00:00, Tue Apr 23 08:42:27 2013 (https://mentat.vsb.cz/dashboard?query=217.168.175.180&from=2013-04-23+00%3A00%3A00&to=2013-05-02T08%3A12%3A59Z)
    Zatim jsem na to neprisel, stejna chyba nastava i v pripade jine IP adresy se stejnym subnetem.
  • bug [...] viz Jabber, stával se mi po odeslání prázdného dashboardu poté, co jsme si s ním chvíli hráli, pokud Ti nepůjde zreplikovat, dej vědět, srazíme se a pokusím se zreplikovat od sebe
    Zatim nereseno, ale na bug jsem narazil i ja.
  • unwind
  • tabule - count do sloupce
  • tabule - nadpisy
  • nejen IP adresa, ale i rozsah a CIDR, Mek připraví Radkovi parsovací objekt
  • ipadresy v tabuli jako odkaz do nového okna s /alerts s předpřipraveným dotazem s ip a stejným časovým obdobím
  • jednotný formát času "2013-04-23 00:00:00", ať se neobjevují variace "Tue Apr 23 08:42:27 2013"
    Tohle jsem sice neresil, protoze jsem nenasel misto, kde by to bylo spatne:(
Actions #15

Updated by Pavel Kácha over 11 years ago

  • dělící čáry bílé, zkusit širší (konstanty v kódu)

Ok, myslím, že patch do GD::Graph je overkill, nechme to zatím tak.

RO: Zatim jsem na to neprisel, stejna chyba nastava i v pripade jine IP adresy se stejnym subnetem.

  • bug "Can't get db response" viz Jabber, stával se mi po odeslání prázdného dashboardu poté, co jsme si s ním chvíli hráli, pokud Ti nepůjde zreplikovat, dej vědět, srazíme se a pokusím se zreplikovat od sebe

RO: Zatim nereseno, ale na bug jsem narazil i ja.

  • unwind
  • nejen IP adresa, ale i rozsah a CIDR, Mek připraví Radkovi parsovací objekt

217.168.175.0/24 funguje
217.168.175.0 - 217.168.175.255 mi nic nevrátí

  • ipadresy v tabuli jako odkaz do nového okna s /alerts s předpřipraveným dotazem s ip a stejným časovým obdobím

Tady ještě chybí čas. Je potřeba, aby Mek dohladil práci s časy, nebo to půjde jednoduše teď?

  • jednotný formát času "2013-04-23 00:00:00", ať se neobjevují variace "Tue Apr 23 08:42:27 2013"
    Tohle jsem sice neresil, protoze jsem nenasel misto, kde by to bylo spatne:(

Objevovalo se to hned po natažení stránky, teď je tam variace ISO8601 s téčkovým oddělovačem místo mezery, to je víceméně v poho. Vyřadil bych ale (při prvním zobrazení stránky, tj. v předpřipraveném čase) časovou zónu (Z), to by se uživatel mohl docela divit, pokud neví přesně co dělá - tzn. hodit tam lokální čas, ne UTC. Ale mám pocit, že v tom ještě máme trochu zmatek, takže bych zase ještě počkal na Meka, až doladí práci s časy.

  • Myslím, že je na čase zkusit i časové grafy.
Actions #16

Updated by Radomír Orkáč over 11 years ago

U sebe zruseno. Na ostrem jsem to nenasazoval.

  • dělící čáry bílé, zkusit širší (konstanty v kódu)
    Ok, myslím, že patch do GD::Graph je overkill, nechme to zatím tak.

S novymi daty (ze by to vyresila konverze ts v databazi) jsem na to nenarazil. Cili sice jsem to nevyresil, ale nemohu najit podobny dotaz, kde by to delalo. Jak jsem ale zminoval na IT13, jednotlive dotazy jsem si rucne spoustel a skutecne mi to vratilo data, ktera se zobrazila v Dashboard.

Nejde mi to zreplikovat. Nyni jsem na to jiz nenarazil. Mam ale v mongu jen 100000 cerstvych dat. Nacital refreshoval jsem Dashboard v 5ti ruznych panelech prohlizece a chyba se nezobrazila (snazil jsem se mongo vytizit). ALE zase jsem narazil na jinou chybu. Prohlizec stale data nacital a nemohl nic nacist. Po restartu apache vse zase slapalo jak ma. V mongodb logu jsem agregacni dotaz videl, takze catalyst o data databazi pozadal a data zpet dostal. Jeste se ve chvilich volna na to budu divat.

  • bug "Can't get db response" viz Jabber, stával se mi po odeslání prázdného dashboardu poté, co jsme si s ním chvíli hráli, pokud Ti nepůjde zreplikovat, dej vědět, srazíme se a pokusím se zreplikovat od sebe
    RO: Zatim nereseno, ale na bug jsem narazil i ja.

Nooo, zde se bojim, ze mame problem. Aby unwind vytvoril dokument z daneho pole, museli bychom adresy v poli mit. My je ale v poli nemame.. . Nebo Vas neco napada?

                "Target" : {  
                        "User" : {
                                "@category" : "os-device",  
                                "UserId" : {  
                                        "name" : "postgres",
                                        "@type" : "target-user"  
                                }  
                        },
                        "Node" : {  
                                "Address" : {  
                                        "@category" : "ipv4-addr",
                                        "ipv4" : {  
                                                "min" : BinData(0,"w3G78w=="),  
                                                "ip" : BinData(0,"w3G78w=="),
                                                "max" : BinData(0,"w3G78w==")  
                                        }  
                                }
                        },  
                        "Service" : {  
                                "name" : "ssh",
                                "port" : 22,  
                                "@iana_protocol_name" : "tcp",  
                                "@iana_protocol_number" : "6" 
                        }  
                },

  • unwind

Opraveno:

$query =~ s/ //g;
my ($type, $min, $max) = Value::Convertor->ipv4_to_bin($query);
...
if ($type eq "IPV4CIDR_STRING" || $type eq "IPV4RNG_STRING") {

  • nejen IP adresa, ale i rozsah a CIDR, Mek připraví Radkovi parsovací objekt
    217.168.175.0/24 funguje
    217.168.175.0 - 217.168.175.255 mi nic nevrátí

Pridano:

# ("Alert/Source/Node/Address/ip" eq "192.151.151.74") and ("ts" < "1369405625")  and ("ts" > "1369405620")
$filter = '("'.$aggr->{filter}.'" eq "'.$value.'") and ("ts" < "'.$aggr->{epoch_to}.'")  and ("ts" > "'.$aggr->{epoch_from}.'")';

  • ipadresy v tabuli jako odkaz do nového okna s /alerts s předpřipraveným dotazem s ip a stejným časovým obdobím
    Tady ještě chybí čas. Je potřeba, aby Mek dohladil práci s časy, nebo to půjde jednoduše teď?

Docasny workaround:

$from =~ s/Z$//g;  
$from =~ s/T/ /g;
$to =~ s/Z$//g;
$to =~ s/T/ /g;

  • jednotný formát času "2013-04-23 00:00:00", ať se neobjevují variace "Tue Apr 23 08:42:27 2013"
    Tohle jsem sice neresil, protoze jsem nenasel misto, kde by to bylo spatne:(
    Objevovalo se to hned po natažení stránky, teď je tam variace ISO8601 s téčkovým oddělovačem místo mezery, to je víceméně v poho. Vyřadil bych ale (při prvním zobrazení stránky, tj. v předpřipraveném čase) časovou zónu (Z), to by se uživatel mohl docela divit, pokud neví přesně co dělá - tzn. hodit tam lokální čas, ne UTC. Ale mám pocit, že v tom ještě máme trochu zmatek, takže bych zase ještě počkal na Meka, až doladí práci s časy.

Pobavme se, prosim v pondeli..

  • Myslím, že je na čase zkusit i časové grafy.
Actions #17

Updated by Radomír Orkáč over 11 years ago

Porada 27.5.

Grafy
  • koláče: 10 hodnot, přidat 11. rest (nebo longtail)
  • textový nadpis nad každou skupinou grafů (související koláč a časová řada
    je jedna skupina)
Časové grafy:
  • pro Classification a Analyzer
  • zase 10 hodnot, 11. zbytek
  • zkusil bych skládaný graf na absolutní čísla (pozor, stat CESNET-CERTS
    jsou procentuální)
  • je třeba podle rozsahu zvolit granularitu, např.: 3 měsíce: týden, 6: 2
    týdny, 12: měsíc, 24: kvartál, >: rok. Bude potřeba odhadnout, nastřelit,
    a pak s tím zahýbat, aby to mělo rozumnou vypovídající hodnotu
  • paleta odpovídající souvisejícímu koláči
Actions #18

Updated by Radomír Orkáč over 11 years ago

Prvni nastrel, ale je to zatim bokem ve skriptu:

my $group = {
    group => {
        ns => 'alerts',
        #cond => {'$and' => [{'ts_u' => {'$gt' => 1369318035}}, {'Alert.Classification.@text' => 'URL attack attempt'}]},
        '$keyf' => '
            function(doc) {
                var date = new Date(doc.ts_u*1000);
                var month = date.getMonth()+1;
                if (month < 10) {
                    month = "0"+month;
                }
                var day = date.getDate();
                if (day < 10) {
                    day = "0"+day;
                }
                var dateKey = date.getFullYear() + "-" + month + "-" + day;
                //var dateKey = day;
                return {
                    "day": dateKey,
                    "class": doc.Alert.Classification["@text"],
                };
           } 
        ',
        initial => {'value' => 0},
        '$reduce' => '
            function(curr, result) { 
                result.value += 1; 
            }
        ',
    }
};

Obrazek 1 je neprehledny, protoze Connection attemps celou statistiku zneprehledni. Obrazek 2 je pro prehlednost smysleny:

$count = 100 if ($count > 1000);

Jestli je dany mongo dotaz krok spravnym smerem se pobavime na dnesni porade. Je mozne, ze algoritmus/dotaz uplne zavrhnete.. .

Actions #19

Updated by Radomír Orkáč over 11 years ago

Jeste doplnim, ze vyse vyse prilozene obrazky jsou generovany na datech na mentat.vsb.cz, kde jsou jen 3 dny. Group dotaz umi v podstate vyplivnout i celkove pocty do tabulky:

URL attack attempt => 45
SQL query attempt => 21
Remote Login => 641
EPMAPPER exploitation attempt => 2
Portscan => 201
Connection attempt => 182918
SMB exploitation attempt => 469

Skript prototypes/mongodb_image.pl jsem pushnul..

Actions #20

Updated by Pavel Kácha over 11 years ago

V tomto úkolu už neřešíme, vytváříme podúkoly.

Actions #21

Updated by Jan Mach over 11 years ago

  • Status changed from In Progress to Resolved
  • % Done changed from 0 to 100

Úkol bych uzavřel - základní nástřel byl proveden a je funkční, detaily a další dolaďovací práce bych pro přehlednost řešil v samostatných úkolech.

Actions #22

Updated by Pavel Kácha over 11 years ago

  • Status changed from Resolved to Closed
Actions

Also available in: Atom PDF