[Mac_prises] Compter les macs dans les chambres n'est pas du tout utile, finalement, par ailleurs, les configurations pour les macs étaient moisies, on vire les repérages "très suspects", et on laisse le calcul via une "heuristique". Ça simplifiera les mails, sans perdre en pertinence.
This commit is contained in:
parent
2824bb851b
commit
eaff6de6ad
2 changed files with 12 additions and 74 deletions
|
@ -356,21 +356,21 @@ class mac_prise:
|
|||
# Contient trois dictionnaire. Le paramètre mac signifie "combien de chambres doivent voir la même mac pour que ça soit suspect"
|
||||
# Le paramètre chambre signifie "combien de macs doivent traverser une même chambre pour que ça soit suspect"
|
||||
suspect = { 'instant':{'mac': 2, 'chambre': 2},
|
||||
'heuristique':{'mac': 3, 'chambre': 2},
|
||||
'journalier':{'mac': 3, 'chambre': 2},
|
||||
'heuristique':{'mac': 2, 'chambre': 2},
|
||||
'journalier':{'mac': 2, 'chambre': 2},
|
||||
}
|
||||
|
||||
# Contient trois dictionnaire. Le paramètre mac signifie "combien de chambres doivent voir la même mac pour que ça soit suspect"
|
||||
# Le paramètre chambre signifie "combien de macs doivent traverser une même chambre pour que ça soit suspect"
|
||||
tres_suspect = { 'instant':{'mac': 3, 'chambre': 3},
|
||||
'heuristique':{'mac': 4, 'chambre': 3},
|
||||
'journalier':{'mac': 4, 'chambre': 3},
|
||||
'heuristique':{'mac': 3, 'chambre': 3},
|
||||
'journalier':{'mac': 3, 'chambre': 3},
|
||||
}
|
||||
|
||||
# Le point central des analyses.
|
||||
rapport_suspect = { 'instant':{'mac': 0.51, 'chambre': 0.51},
|
||||
'heuristique':{'mac': 0.57, 'chambre': 0.55},
|
||||
'journalier':{'mac': 0.61, 'chambre': 0.58},
|
||||
'heuristique':{'mac': 0.4, 'chambre': 0.55},
|
||||
'journalier':{'mac': 0.2, 'chambre': 0.58},
|
||||
}
|
||||
|
||||
titre_suspect = { 'instant':{'mac': u"Macs se baladant un peu trop entre les chambres (instantanné)", 'chambre': u"Chambres avec un peu trop de macs (instantanné)"},
|
||||
|
|
|
@ -63,66 +63,24 @@ def genere_comptage(duree, groupe, associes):
|
|||
* associes, qui contient l'autre champ
|
||||
"""
|
||||
pb_comptage_suspect = {}
|
||||
pb_comptage_tres_suspect = {}
|
||||
output = ""
|
||||
requete = "SELECT array_to_string(array_agg(DISTINCT date), ', ') AS dates , %(groupe)s, array_to_string(array_agg(DISTINCT %(associes)s), ', ') AS %(associes)ss, COUNT(DISTINCT %(associes)s) AS nb_%(associes)ss_distinctes, COUNT(%(associes)s) AS nb_%(associes)ss, COUNT(DISTINCT date) as nb_dates_distinctes, COUNT(DISTINCT %(groupe)s) as nb_%(groupe)ss_distinctes FROM correspondance WHERE date >= timestamp 'now' - interval '%(delay)s' GROUP BY %(groupe)s;" % { 'groupe': groupe, 'associes': associes, 'delay': mac_prise.delay[duree] }
|
||||
cur.execute(requete)
|
||||
fetched = cur.fetchall()
|
||||
|
||||
for entry in fetched:
|
||||
# Si c'est la chambre d'un membre actif ou d'un club, on droppe.
|
||||
if groupe == 'chambre':
|
||||
if entry[groupe] in chambres_ma:
|
||||
Logs.append(u"Chambre dropée, car appartenant à un membre actif : %s\n\n" % entry[groupe])
|
||||
continue
|
||||
elif entry[groupe] in chambres_clubs:
|
||||
Logs.append(u"Chambre dropée, car appartenant à un club : %s\n\n" % entry[groupe])
|
||||
continue
|
||||
|
||||
# Sinon, on vérifie si le local est bien rempli.
|
||||
if entry['nb_'+associes+'s_distinctes'] >= mac_prise.tres_suspect[duree][groupe]:
|
||||
Logs.append(u"Recherche par %s, entrée très suspecte : %s -> %s \n" % (groupe, entry[groupe], entry[associes+'s']))
|
||||
liste_associes = entry[associes+'s'].split(', ')
|
||||
|
||||
# On retire les machines associées à l'adhérent possédant la chambre
|
||||
if groupe == 'chambre':
|
||||
liste_temp = [] + liste_associes
|
||||
for i in liste_temp:
|
||||
try:
|
||||
proprio_associe = ldap.search('macAddress=%s' % i)[0].proprio()
|
||||
if str(proprio_associe['chbre'][0]).lower() == entry[groupe]:
|
||||
liste_associes.remove(i)
|
||||
Logs.append(u"La mac %s est associée à la chambre %s, la chambre consultée est %s." % (i, proprio_associe['chbre'][0], entry[groupe]))
|
||||
except:
|
||||
Logs.append(u"Exception pour %s, et %s" % (i, entry[groupe]))
|
||||
if len(liste_associes) < mac_prise.tres_suspect[duree][groupe]-1:
|
||||
Logs.append(u"Entrée rejetée : la plupart des %s appartiennent au propriétaire de la %s\n\n" % (associes, groupe))
|
||||
continue
|
||||
|
||||
# Toujours un problème ? On ajoute au dico
|
||||
Logs.append(u"Entrée ajoutée au tableau %s pour la recherche par %s.\n\n" % (duree, groupe))
|
||||
pb_comptage_tres_suspect[entry[groupe]] = liste_associes
|
||||
if groupe == "mac":
|
||||
machines = ldap.search('(macAddress=%s)' % entry[groupe])
|
||||
if len(machines) > 0:
|
||||
if isinstance(machines[0], lc_ldap.machineWifi):
|
||||
pass
|
||||
|
||||
# Même chose avec un seuil plus faible
|
||||
elif entry['nb_'+associes+'s_distinctes'] >= mac_prise.suspect[duree][groupe]:
|
||||
if entry['nb_'+associes+'s_distinctes'] >= mac_prise.suspect[duree][groupe]:
|
||||
Logs.append(u"Recherche par %s, entrée suspecte : %s -> %s \n" % (groupe, entry[groupe], entry[associes+'s']))
|
||||
liste_associes = entry[associes+'s'].split(', ')
|
||||
|
||||
if groupe == 'chambre':
|
||||
liste_temp = [] + liste_associes
|
||||
for i in liste_temp:
|
||||
Logs.append(u'%s'%(i))
|
||||
try:
|
||||
proprio_associe = ldap.search('macAddress=%s' % i)[0].proprio()
|
||||
if str(proprio_associe['chbre'][0]).lower() == entry[groupe]:
|
||||
liste_associes.remove(i)
|
||||
Logs.append(u"La mac %s est associée à la chambre %s, la chambre consultée est %s." % (i, proprio_associe['chbre'][0], entry[groupe]))
|
||||
except:
|
||||
Logs.append(u"Exception pour %s, et %s" % (i, entry[groupe]))
|
||||
if len(liste_associes) < mac_prise.suspect[duree][groupe]-1:
|
||||
Logs.append(u"Entrée rejetée : la plupart des %s appartiennent au propriétaire de la %s\n\n" % (associes, groupe))
|
||||
continue
|
||||
|
||||
# On calcule la "probabilité" qu'un truc ne soit pas clair concernant la chambre/mac
|
||||
rapport = lin(entry['nb_'+associes+'s'], entry['nb_dates_distinctes'], float(entry['nb_'+associes+'s_distinctes']))
|
||||
if rapport >= mac_prise.rapport_suspect[duree][groupe]:
|
||||
|
@ -151,25 +109,8 @@ def genere_comptage(duree, groupe, associes):
|
|||
output += tableau(data, titre, largeurs, alignement)
|
||||
output += u"\n\n\n"
|
||||
|
||||
if len(pb_comptage_tres_suspect) > 0:
|
||||
output += mac_prise.titre_tres_suspect[duree][groupe]+"\n"
|
||||
|
||||
longueur_max = max([len(", ".join(a)) for a in pb_comptage_tres_suspect.values()] + [longueur[associes][1]]) + 4
|
||||
largeurs = (longueur[groupe][0], longueur_max)
|
||||
|
||||
data = []
|
||||
clefs = pb_comptage_tres_suspect.keys()
|
||||
clefs.sort()
|
||||
for clef in clefs:
|
||||
data.append([clef, ", ".join(pb_comptage_tres_suspect[clef])])
|
||||
|
||||
output += tableau(data, titres[groupe], largeurs, alignements)
|
||||
output += u"\n\n\n"
|
||||
|
||||
return output
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
output = u"Détection de spoof potentiel\n\n\n"
|
||||
coupure = len(output)
|
||||
|
@ -179,9 +120,6 @@ if __name__ == '__main__':
|
|||
output += genere_comptage('instant', 'mac', 'chambre')
|
||||
output += genere_comptage('heuristique', 'mac', 'chambre')
|
||||
output += genere_comptage('journalier', 'mac', 'chambre')
|
||||
output += genere_comptage('instant', 'chambre', 'mac')
|
||||
output += genere_comptage('heuristique', 'chambre', 'mac')
|
||||
output += genere_comptage('journalier', 'chambre', 'mac')
|
||||
|
||||
if time.localtime().tm_min % 30 == 0 and mac_prise.hargneux:
|
||||
hargneux = True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue