diff --git a/gestion/config.py b/gestion/config.py index 119313c7..8249b17e 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -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é)"}, diff --git a/surveillance/mac_prises/mac_prise_analyzer.py b/surveillance/mac_prises/mac_prise_analyzer.py index cd3a10ae..0092b461 100755 --- a/surveillance/mac_prises/mac_prise_analyzer.py +++ b/surveillance/mac_prises/mac_prise_analyzer.py @@ -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