Anti-rootkit

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 522 fois - Téléchargée 17 fois

Contenu du snippet

Slt
Donc voila un petit anti rootkit , contre les rootkit qui modifie les binaires .
Le 1 er lancement créra dossier: /usr/.SauvgardeBinaire ou serons sauvgarder les binaires , ainsi que le fichier Scanner.py , qu il suffira de lancer pour scanner .
Des idées pour améliorer?

Source / Exemple :


#!/usr/bin/python
# -*- coding: iso8859-1 -*- 

import os,md5
from string import split
from sys import exit

def Scanner():
	e = """
#!/usr/bin/python
# -*- coding: iso8859-1 -*- 

import os,md5
from string import split
from sys import exit

class Scanner:
	def __init__(self):
		self.corrupt = []
		self.lst = ["ls","ps","find","sudo","vim","gvim","ssh"]
		self.liste = os.listdir('/usr/bin')
		self.LenB = len(self.liste)
		try:self.BinaireSauv = open('/usr/.SauvgardeBinaire/MD5Sauv','r').read()
		except:print ("[!] Erreur : fichier invalid")
		self.BinaireSauv = split(self.BinaireSauv)
		self.LenBinSauv = self.BinaireSauv[(len(self.BinaireSauv)-1)]
		
	def LenBinaire(self):
		if (self.LenB == int(self.LenBinSauv)):
			self.Modif = 0
		else:
			self.Modif = 1
	
	def ScanBin(self):
		for buff in self.lst:
			MD5bin = "/usr/bin/%s"%(buff)
			MD5Bin = "%s"%(md5.new(MD5bin).hexdigest())
			i = 0
			while (i < len(self.BinaireSauv)):
				if (buff == self.BinaireSauv[i]):
					if (self.BinaireSauv[i+1] == MD5Bin):
						print ("[*] %s clean ."%(buff))
					else :
						print ("[!] %s modifier ."%(buff))
						self.corrupt.append(buff)
				i += 1

	def ResultScan(self):
		print ("Result fro the scan :")
		if (self.Modif == 1):
			print ("[!] Nombre des binaires </usr/bin> modifier")
		if (len(self.corrupt) > 0 ):
			self.corrupted = 1
			for buff in self.corrupt:
				print ("	[!] %s is corrupted"%(buff))
				
		else:
			self.corrupted = 0
			print ("[*] binaire clean .")
		print ("")

	def Desinfect(self):
		for buff in self.corrupt:
			Binn = "/usr/.SauvgardeBinaire/%s"%(buff)
			MD5bin = "/usr/bin/%s"%(buff)
			copie = open(Binn,'rb').read()
			OpenBinary = open(MD5bin,'w')
			OpenBinary.write(copie)
			OpenBinary.close()

def Root():
	uid = os.getuid()
	if (uid != 0):
		exit("[!] Erreur : Root necessaire")

def main():
	print \"\"\"

  • Anti-Rootkit Binary modifier *
  • by *
  • Marnage *
  • Scanner *
                                                                • \"\"\"
Root() print ("[-] Scan en cour ...") Scan = Scanner() Scan.LenBinaire() Scan.ScanBin() Scan.ResultScan() if (Scan.corrupted ): confirm = raw_input("Remplacer les binaires par les sauvgardes : y or n ? -> ") if (confirm == 'y'): Scan.Desinfect() if __name__ == "__main__": main()""" file = open("Scanner.py","w") file.write(e) file.close() class Sauvgarde: def __init__(self): try: print ("[*] Generation de la sauvgarde et des hashmd5 en cour ...") os.mkdir('/usr/.SauvgardeBinaire') self.lst = ["ls","ps","find","sudo","vim","gvim","ssh"] self.MD5Sauv = open('/usr/.SauvgardeBinaire/MD5Sauv','w') for buff in self.lst: MD5bin = "/usr/bin/%s"%(buff) self.MD5Bin = "%s %s\n"%(buff,md5.new(MD5bin).hexdigest()) self.MD5Sauv.write(self.MD5Bin) os.system("touch /usr/.SauvgardeBinaire/.%s"%(buff)) Ecr = "/usr/.SauvgardeBinaire/%s"%(buff) try:copie = open(MD5bin,'rb').read() except: print ("[!] Erreur :bianire introuvable .") EcrireCop = open(Ecr,'w') EcrireCop.write(copie) EcrireCop.close() self.liste = os.listdir('/usr/bin') self.LenB = len(self.liste) self.MD5Sauv.write(str(self.LenB)) self.MD5Sauv.close() print ("[*] Generation effectuer avec succe .") except : print ("[!] Erreor: Generation non resussi !") def Root(): uid = os.getuid() if (uid != 0): exit("[!] Erreur : Root necessaire") def main(): print """
  • Anti-Rootkit Binary modifier *
  • by *
  • Marnage *
  • Setup *
                                                                • \n"""
Root() Sauv = Sauvgarde() Scanner() if __name__ == "__main__": main()

Conclusion :


:)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
1
J'espere juste que tu développes mieux que tu n'écris français ;)

Sinon ton histoire avec le e= dans la fonciton Scanner... vraiment étrange, pourquoi ne pas faire 2 fichiers distinct ?

Ensuite il faudrai trouver un system plus souple pour la lsite des programmes a vérifier. Par exemple un fichier de conf ou une variable d'environnement.

Sinon je comprend pas non plus pourquoi tu fais appel à des fonctions systèmes comme par exemple :os.system("touch /usr/.SauvgardeBinaire/.%s"%(buff))

Python sait très bien le faire et de plus tu pourras gerer l'echec de la creation du répertoire.

"# file = open("Scanner.py","w")
# file.write(e)
# file.close() "
Evites d'utiliser des noms de fonction existant pour tes variables
Imagines, 20 lignes plus loin tu ouvres un fichier avec la fonction file, et la il va t'envoyer promener et tu vas te demander un moment "Mais pourquoi est-il si méchant ?"

Bon je dois filer j'ai pas le temps de regarder plus longtemps.
++
Messages postés
6
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
1 novembre 2017

Non le dossier crée aura les droit root , donc non modifiable par un "pirate", donc la somme des hash & les sauvgarde des binaires serons proteger ,tu peus maitre le scanner dans le meme dossier .Pour plus de sécuriter tu peux enlever tous les droits au dossier par les utilisateur styl : chmod oaug-rwx /usr/.SauvgardeBinaire .
Après le programme en lui meme ne fais que renvoyer le hashmd5 des binaire et les compare a se qui on etait prise l'or du setup et te prévien en cas de modification . je voi pas trop ou et le danger, mais tu peux developper les risques qu'il pourrait y avoir selon toi?
Comme dis toute critique constructive ne mène que ver l'amélioration :p
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
11
C'est pas dangereux ça ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.