Task #960
closedFeature #283: Webové uživatelské rozhraní
Overview stránka
Added by Pavel Kácha over 11 years ago. Updated over 11 years ago.
100%
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ů
- 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 |
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"
Updated by Pavel Kácha over 11 years ago
- grafy
- inspirace u FTASu
- mluvil jsi o tom, že se ti grafy příliš nelíbí:
- http://stackoverflow.com/questions/9982791/smooth-choppy-imageline-for-php-gd-graphs
- http://plutor.org/blog/2004/10/12/111415/
- nebo můžeš zvážit modernější knihovnu: http://gphat.github.io/chart-clicker/, má-li lepší api/výstupy
- práce s daty - dvě pole místo jednoho (od, do)
- po prvním příchodu přednastavený rozumný default (např. od: -měsíc, do: aktuální čas)
- lidsky čitelný/psatelný formát času, UTC? Na ten už máme konvertory. Nevymýšlet kolo.
- možnost JS kalendáře z JQuery
- naimportovat na vývojový stroj alespoň tříměsíční data, ať jsou včas vidět výkonové problémy
- agregace pomocí Monga, ne Perlu
- 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
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ě).
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
Updated by Radomír Orkáč over 11 years ago
- grafy
- inspirace u FTASu
- mluvil jsi o tom, že se ti grafy příliš nelíbí:
- http://stackoverflow.com/questions/9982791/smooth-choppy-imageline-for-php-gd-graphs
http://plutor.org/blog/2004/10/12/111415/nebo můžeš zvážit modernější knihovnu: http://gphat.github.io/chart-clicker/, má-li lepší api/výstupy
práce s daty - dvě pole místo jednoho (od, do)po prvním příchodu přednastavený rozumný default (např. od: -měsíc, do: aktuální čas)lidsky čitelný/psatelný formát času, UTC? Na ten už máme konvertory. Nevymýšlet kolo.možnost JS kalendáře z JQuery
naimportovat na vývojový stroj alespoň tříměsíční data, ať jsou včas vidět výkonové problémyagregace pomocí Monga, ne Perlu
u grafu podle cílů hledáme adresu ve zdroji a naopakobrá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
Updated by Radomír Orkáč over 11 years ago
- Status changed from New to In Progress
Updated by Pavel Kácha over 11 years ago
- 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:
- bílými čarami
- 2D
- větší text nebo lépe bez textu (kvůli downscalingu)
- generovat větší bitmapu a downscalovat/resamplovat - viz copyResampled (http://plutor.org/blog/2004/10/12/111415/)
- barvy
- lib/color/Pallette.pm - random_unique_color
- odpovídající barevný čtverec na začátku řádku v tabuli
- rozumné obalující funkce na generování jednotlivých typů grafů - code reuse, možnost výměny knihovny
- ad unwind: http://docs.mongodb.org/manual/reference/aggregation/unwind/
Updated by Radomír Orkáč over 11 years ago
- 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.
bílými čarami2Dvětší text nebo lépe bez textu (kvůli downscalingu)generovat větší bitmapu a downscalovat/resamplovat - viz copyResampled (http://plutor.org/blog/2004/10/12/111415/)
barvylib/color/Pallette.pm - random_unique_colorodpovídající barevný čtverec na začátku řádku v tabuli
Updated by Pavel Kácha over 11 years ago
- 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"
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 ...
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.
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čí.
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));
Updated by Radomír Orkáč over 11 years ago
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 sloupcetabule - 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:(
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.
- 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)
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.
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.
- 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)
RO: Zatim jsem na to neprisel, stejna chyba nastava i v pripade jine IP adresy se stejnym subnetem.
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.
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)
- 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
Updated by Radomír Orkáč over 11 years ago
- File 1_time.png 1_time.png added
- File 2_time.png 2_time.png added
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.. .
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..
Updated by Pavel Kácha over 11 years ago
V tomto úkolu už neřešíme, vytváříme podúkoly.
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.
Updated by Pavel Kácha over 11 years ago
- Status changed from Resolved to Closed