begin process at 2008 08 28 21:06:51
1 233 373 membres
465 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ANTI-ROOTKIT


Information sur la source

Catégorie :Sécurité & cryptage Classé sous : antivirus, virus, rootkit, sécurité, marnage Niveau : Débutant Date de création : 01/10/2007 Date de mise à jour : 01/10/2007 23:58:49 Vu : 1 561

Note :
Aucune note

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

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

  • #!/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()
#!/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

:)
01 octobre 2007 23:58:49 :
!
  • signaler à un administrateur
    Commentaire de aera group le 03/10/2007 14:05:03

    C'est pas dangereux ça ?

  • signaler à un administrateur
    Commentaire de Marnage le 03/10/2007 15:50:37

    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

  • signaler à un administrateur
    Commentaire de taz_iup le 12/10/2007 13:07:47

    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.
    ++

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS