begin process at 2010 07 29 15:57:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & cryptage

 > ANTI-ROOTKIT

ANTI-ROOTKIT


 Information sur la source

Note :
Aucune note
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 :2 391

Auteur : Marnage

Ecrire un message privé
Site perso
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

:)


 Historique

01 octobre 2007 23:58:49 :
!

 Sources du même auteur

STEGANOGRAPHIE
INCRÉMENTE IP
REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER
MODULE DE CRYPTOGRAPHIE

 Sources de la même categorie

Source avec Zip CRYPTEUR CARRE DE POLYBE par Dipx
Source avec une capture HORAIRESRESTREINTS par lonewolfs
Source avec Zip HIDS EN PYTHON par KimbleMandel
CRYPTEUR EN PYTHON par tallgenius
STEGANOGRAPHIE par Marnage

 Sources en rapport avec celle ci

Source avec une capture HORAIRESRESTREINTS par lonewolfs
Source avec Zip HIDS EN PYTHON par KimbleMandel
STEGANOGRAPHIE par Marnage
INCRÉMENTE IP par Marnage
REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER par Marnage

Commentaires et avis

Commentaire de aera group le 03/10/2007 14:05:03

C'est pas dangereux ça ?

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

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




Nos sponsors


Sondage...

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales