コード例 #1
0
ファイル: dns_spoofing.py プロジェクト: fellas/sdnhoneynet
def dns_spoofing(pkt,network,IpPuerto,identificador,lenURL,ListaDNS):
	dstip  = pkt['dstip']
	ipServidorDNS = config.get("DNS_Spoofing","ipServidorDNS")
	dns_flags=payload(pkt,90,93)
	lenPayload = len(pkt['raw'].encode("hex"))
	#Se comprueba si es una pregunta dns al comprobar el contenido de su bandera
	if (dns_flags == 0100):
		if (dstip == ipServidorDNS):
			enviar.enviar_paquete(pkt,set_network,IpPuerto[dstip])
						
		else:
			enviar.enviar_paquete(pkt,set_network,IpPuerto[dstip])
			enviar.enviar_DNS(pkt,network)
			identificador=payload(pkt,86,89)
			lenURL = len(payload(pkt,110,lenPayload-9))
	#En caso de que sea una respuesta, que ip corresponde al dominio preguntado
	elif (dns_flags == 8180):
		idRespuestas = payload(pkt,86,89)
		if (idRespuestas == identificador):
			#Lista en el que se guardaran todas las respuestas DNS
			ListaDNS.append(pkt)
			#Tiempo que esperara a que lleguen todas las respuestas DNS
			tiempo = config.get("DNS_Spoofing","tiempo")
			time.sleep(tiempo)
			num = 0
			while (num < 2):
				#A continuacion se  extrae la ip que se envia como respuesta del dns 
				ubicacion = lenURL + 142

				'''
				ipS_Respuestas = payload(pkt,ubicacion,lenPayload-1)
				cadenaRespuestas = ipS_Respuestas.split('00010001')
				fila=0
				for ip_Respuesta in cadenaRespuestas:
					ipRespuesta[num][fila]=ip_Respuesta[14:21]
					fila=fila+1
				'''	
				ip_Respuesta[num] = payload(ListaDNS[num],ubicacion,lenPayload-1)	
								
				num = num + 1
			
			if (ip_Respuesta[0] == ip_Respuesta[1]):
				enviar.enviar_paquete(pkt,network,IpPuerto[dstip])
			else:
				num = 0
				while(num < 2):
					if ListaDNS[num]['srcip'] != IPAddr('8.8.8.8'):
						enviar.enviar_paquete(ListaDNS[num],network,IpPuerto[dstip])
					num = num + 0	
		else:
			enviar.enviar_paquete(pkt,network,IpPuerto[dstip])	
コード例 #2
0
ファイル: democopy.py プロジェクト: fellas/sdnhoneynet
def ejecucion(pkt, network , puertoBloqueado, num):
            #print "se a recibido el paquete numero = " + str(num)
            try:
                switch = pkt['switch']
            	inport = pkt['inport']
            	tipoo = pkt['ethtype']
            	srcmac = pkt['srcmac']
            	dstmac = pkt['dstmac']
            	opcode = pkt['protocol']
            	dstip = pkt['dstip']
                srcip  = pkt['srcip']
            except:
                print "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"

            if  tipoo == 2054:
				print "paquete arp"
				for port in network.topology.egress_locations() - {Location(switch,inport)} - {Location(switch, puertoBloqueado)}:
					puerto = port.port_no
					print "puerto entrada = " + str(inport)
					print "puerto switch = " + str(puerto)
					enviar.enviar_paquete(pkt,network,puerto)
					print "****************************************"
				ControladorHoneynet.num=ControladorHoneynet.num+1

            elif tipoo == 2048:
				print "paquete IP "
				for port in network.topology.egress_locations() - {Location(switch,inport)} - {Location(switch, puertoBloqueado)}:
					puerto = port.port_no
					print "puerto entrada = " + str(inport)
					print "puerto switch = " + str(puerto)
					enviar.enviar_paquete(pkt,network,puerto)
					print "//////////////////////////////////////"
				ControladorHoneynet.num=ControladorHoneynet.num+1
            else:
				print "Paquetes desconocidos "
				for port in network.topology.egress_locations() - {Location(switch,inport)} - {Location(switch, puertoBloqueado)}:
					puerto = port.port_no
					print "puerto entrada = " + str(inport)
					print "puerto switch = " + str(puerto)
					enviar.enviar_paquete(pkt,network,puerto)
					print "???????????????????????????????????????????????"

				num=num+1
コード例 #3
0
ファイル: controlador.py プロジェクト: fellas/sdnhoneynet
	def paquete(self,pkt):
		print "Se ha recibido un nuevo paquete..."
		try:
			switch = pkt['switch']
			inport = pkt['inport']
			srcmac = pkt['srcmac']
			dstmac = pkt['dstmac']
			tipoo = pkt['ethtype']
			opcode = pkt['protocol']
			srcip  = pkt['srcip']
			dstip = pkt['dstip']
		except:
			print "%%%%%%%%%%%%%%%%%%%%%%%%%%"
			
		
		#Se determinara si el paquete recibido, es o no del tipo ARP"
		if  tipoo == 2054:
			print "paquete ARP "
			arp.ejecutarARP(pkt,self.network, self.IpPuerto, self.IpMac, self.paqueteARP, self.IpMacAtacante)
			
		#Se determinara si el paquete recibido, es o no del tipo IP"
		elif tipoo == 2048:
			print "paquete IP "
			try:
				#A continuacion se hace una comprobacion de la ip y el puerto de origen con los datos obtenidos al hacer el ARP
				#El siguiente lazo if comprueba si se trata de un ip spoofing" 
 
				if ((self.IpMac[srcip] == srcmac) and (self.IpPuerto[srcip]==inport)):
					print "NO se trata de un IP SPOOFING"
					if opcode == 1:
						print "Paquete ICMP"
						
						#con el comando ping y un grep vamos a obtener la direccion de broadcasr del interface de red
						ipBcast = "ifconfig eth0 | grep 'Bcast'| cut -d':' -f3 | cut -d' ' -f1"
						broadcast_IP = os.system(ipBcast)
						#Se hace una comparacion con la direccion de destino si es la de broadcast para decidir a donde enviar el paquete 
						#El siguiente lazo if comprueba si se trata de un ataque smurf
						print broadcast_IP
						if broadcast_IP == dstip:
							#Destino la honeynet
							enviar.enviar_paquete(pkt,self.network,int(self.puertoHoneynet))
							print "ATAQUE SMURF"
						else:
							#Destino la red real
							enviar.enviar_paquete(pkt,self.network,self.IpPuerto[dstip])
							print "BUENO"

					elif opcode == 6:
						print "Paquete TCP"
						syn_flood.syn_flood(pkt,self.network, self.IpPuerto, self.ListaAtacantes, self.ListaClientes, self.ListaSolicitudes)
					
					# Si corresponde a un paquete UDP
					elif opcode == 17:
						print "paquete UDP "
						#A continuacion de extrae el payload codificado (paquete original) del pkt OpenFlow
						of_payload_code = pkt['raw']
						#A continucaion se codifica en hexadecimal dicho payload
						of_payload = of_payload_code.encode("hex")
						#A continuacion se  extrae alguas bandetas de TCP, aquellas que nos indican si es syn, syn-ack y ack 
						dstport = of_payload[74:78]
						if (dstport == 0053):
							dns_spoofing.dns_spoofing(pkt, self.network, self.IpPuerto, self.identificador, self.lenURL, self.ListaDNS)
						else:		
							enviar_paquete(pkt,self.network,self.IpPuerto[dstip])
							
							
							
					else:
						print "Otro tipo de paquete IP"
						#Cualquier otro tipo de paquete que se reciba no se analiza en este proyecto por lo que se envia el paquete sin niguna restriccion.
						enviar.enviar_paquete(pkt,self.network,self.IpPuerto[dstip])
					 
				else:
					print "Se trata de un IP SPOOFING"
					enviar_paquete(pkt,self.network,int(self.puertoHoneynet))
				

			except:	
				print "Error con el paquete IP recibido...(diccionarios vacios)"
				enviar.enviar_ARP(pkt, self.network)
						
			
			
		
		#Se determinara si el paquete recibido, es o no del tipo RARP
		elif tipoo == 32821:
			print "paquete RARP "
			#Lista en el que se guardaran todas las respuestas RARP
			self.ListaRARP.append(pkt)
			#Tiempo que esperara a que lleguen todas las respuestas RARP
			tiempo = self.config.get("RARP","tiempo")
			time.sleep(tiempo)
			
			#A continuacion se comprobara si es que llega mas de una respuesta
			longLista = len(self.ListaRARP)
			if  longLista >= 2:
				num = 0
				while (num < longLista):
					#En la lista de las respuestas RARP buscamos cual es el atacante para enviarlo a la honeynet
					if self.ListaRARP[num]['srcmac'] != self.IpMac[srcip]:
						self.IpMacAtacante[srcip] = srcmac
						self.IpMac.remove(srcip)
						enviar.enviar_paquete(paqueteARP,self.network,self.IpPuerto[dstip])
					num = num + 1
			#Si solo llega una respuesta actualizamos el diccionario IpMac y enviamos el paquete original a que se realice el ARP			
			else:

				arp.ejecutarARP(paqueteARP,self.network, self.IpPuerto, self.IpMac, self.paqueteARP)
コード例 #4
0
ファイル: syn_flood.py プロジェクト: fellas/sdnhoneynet
def comprobarFlags(pkt,network,IpPuerto,flag,flagInicial,flagFinal):	
	config = ConfigParser()
	#config.read("honeynet.cfg") #Se ha creado una instancia de la clase ConfigParser que nos permite  leer un archivo de configuracion
	puertoHoneynet = config.get("PUERTOS","puertoHoneynet")
	srcip  = pkt['srcip']        
	dstip  = pkt['dstip']        
	#Se obtiene  de un archivo de configuracion la ip del servidor 
	ipServidor = config.get("SYNFLOOD","ipServidor")
	#A continuacion se verifica si se trata de una peticion (SYN)
	if flag == flagInicial:
		#A continuacion se obtiene el tamano de la lista de solicitudes para limitar el numero de solicitudes permitidas
		tamano_actual_listasolicitudes = len(ListaSolicitudes)
		#Se obtiene  de un archivo de configuracion el tamano maximo que puede tener la lista de Solicitudes de conexion TCP que ha recibido el servidor 
		tamano_max_listasolicitudes = config.get("SYNFLOOD","tamano")
		#A continuacion se verifica que el tamano de la lsiat sea menor al maximo especificado en el archivo de configuracion
		if tamano_actual_listasolicitudes < tamano_max_listasolicitudes:
			#A continuacion se verifica que la direccion IP origen del segmento TCP recibido no sea la del servidor
			if srcip == ipServidor:
				#En caso que la direccion  Ip de origen es la del servidor, el trafico se debe deja pasar sin ninguna restriccion
				enviar.enviar_paquete(pkt,network,IpPuerto[dstip])										
							
			else:
				#A continuacion se verifica que la direccion IP origen del segmento TCP recibido no se encuentre en la lista de solicitudes
				if srcip in ListaSolicitudes:
					#Si la direccion IP origen del segmento TCP recibido SI se encuentre en la lista de solicitudes, entonces se procede a borrarla de dicha lista y,
					ListaSolicitudes.remove(srcip)
					# Se la agrega a la lista de Atacantes, puesto que se presume  esta intentando hacer un segundo intento de conexion al servidor al mismo timpo..
					ListaAtacantes.append(srcip)
					#Sin embargo se deja pasar un solo paquete paga obtener estadisticas
					print "Revisar siguiente linea no se debe enviar todos los paquetes..."
					#Al tratarse de un ataque le enviamos al puerto de la honeynet
					enviar.enviar_paquete(pkt,network,int(puertoHoneynet))								
																					
				#A continuacion se verifica que la direccion IP origen del segmento TCP recibido  se encuentre en la lista de atacantes
				elif srcip in ListaAtacantes:
					#Se envia el paquete a la honeynet 
					print "Revisar  a donde se envia el paquete!!!"
					enviar.enviar_paquete(pkt,network,int(puertoHoneynet))		

				#A continuacion se verifica que la direccion IP origen del segmento TCP recibido se encuentre en la lista de Clientes lejitimos
				elif srcip in ListaClientes:
					enviar.enviar_paquete(pkt,network,IpPuerto[dstip])									

				else:	
					#Debido a que no estaba en al lista de clientes lejitimos, se procede a anadirla
					ListaSolicitudes.append(srcip)
					#Se envia a la LAN
					enviar.enviar_paquete(pkt,network,IpPuerto[dstip])						
						

		else:
			#En caso de que el tamano de la lista sea mayor al tamano maximo especificado, Se anade a la lista de atacantes la primera solicitud que se agrego a la lista de solicitudes pendientes 
			ListaAtacantes.append(ListaSolicitudes[0])
			# A continuacion se procede a borrar la solicitud que se ha enviado a la lista de atacantes  de la lista de solicitudes para liberar un espacio
			del ListaSolicitudes[0]
			# Y finalmente se agrega la nueva solicitud a la lista de solicitudes pendientes 
			ListaSolicitudes.append(srcip)
	#A continuacion se verifica si se trata de una respuesta a la peticion (ack) (tercera via de la conexion TCP)
	elif flag == flagFinal:					
		#A continuacion se verifica si la direccion ip origen es la direccion del servidor 
		if srcip == ipServidor:
			#Se envia el paquete sin ninguna restriccion 
			enviar.enviar_paquete(pkt,network,IpPuerto[dstip])
						
		else:
			#A continuacion se verifica si la direccion ip de origen se encuentra en la lista de solicitudes
			if srcip in ListaSolicitudes:
				#Se procede a enviar el paquete, ya que se concidera una conexion legitima 
				enviar.enviar_paquete(pkt,network,IpPuerto[dstip])
				#Ya que es una conexion lejitima se procede a eliminar de la lista de solicitudes y
				ListaSolicitudes.remove(srcip)
				#Se le anade a la lista de clientes legitimos
				ListaClientes.append(srcip)
				#A continuacion se verifica  si la direccion IP origen  esta en la lista de atacantes aun caundo se trata de uan conexion legitima (lenta) debido a que se revico la tercera via TCP.
			elif srcip in ListaAtacantes:
				#Se  procede a enviar el paquete 
				enviar.enviar_paquete(pkt,network,IpPuerto[dstip])
				#Se la remueve de la lista de atacantes 
				ListaAtacantes.remove(srcip)
				#Se la agrega a la lsita de clientes legitimos.
				ListaClientes.append(srcip)
			elif srcip in ListaClientes:
				#Se trata de uan conexxion legitima por lo que se envia el paquete sin ninguna restriccion.
				enviar.enviar_paquete(pkt,network,IpPuerto[dstip])					
				
	else:
		#Cualquier otra bandera que se envia no se la analiza en este proyecto por lo que se envia el paquete sin niguna restriccion.
		enviar.enviar_paquete(pkt,network,IpPuerto[dstip])
コード例 #5
0
ファイル: andresIP.py プロジェクト: fellas/sdnhoneynet
def paqueteIP(pkt, network, IpPuerto,IpMac, Listas, puertoHoneynet):
	srcip = pkt['srcip']
	srcmac = pkt['srcmac']
	switch = pkt['switch']
	inport = pkt['inport']
	dstport = pkt['dstport']

	if srcip in IpMac:
		if IpMac[srcip] == srcmac:
			syn_flood_andres.syn_flood(pkt, network, IpPuerto, IpMac, Listas)
		else:
<<<<<<< HEAD
			comando = "hping3 -1 " + dstport + "-a 192.168.0.1"  
			ping = os.system(comando)
=======
			comandoIp = "ping -c 1 " + str(srcip)
			ping_Ip = os.system(comandoIp)
>>>>>>> 94431146b7631208099f15260602a3555f5743fd
	else:
		IpMac[srcip]=srcmac
		for port in network.topology.egress_locations() - {Location(switch,inport)} - {Location(switch, puertoHoneynet)}:
			puerto = port.port_no
			enviar.enviar_paquete(pkt,network,puerto)

	
		



コード例 #6
0
ファイル: controlador.py プロジェクト: fellas/sdnhoneynet
    def paquete(self,pkt ):

        try:

            tipoPkt = pkt['ethtype']
            red = self.network
            protocolo = pkt['protocol']
            srcip = pkt['srcip']
            dstmac = pkt ['dstmac']

        except:
            print pkt

        respuesta = ""
			
        if self.proceso == 0:

			if tipoPkt == 2054:
				respuesta = arp.arp_spoofing(pkt, self.ListaARP)

			elif tipoPkt == 2048:				
				respuesta = ip.ip_spoofing(pkt,  self.IpMac, self.Paquete, self.lstSrcMac, self.lstMacAtacante, self.ipGateway)
				if respuesta == "LAN":
					if protocolo == 6:
						respuesta = tcp.tcp_syn_flood(pkt, self.ListaAtacantes, self.ListaClientes, self.ListaSolicitudes, self.IpNumSOLT, self.IpNumCLIT, self.ipServidor, self.num_max_conexiones, self.tamano_max_listasolicitudes)
						if respuesta == "LAN":							
							if true:
								respuesta = https.thc_ssl_dos(red, pkt, self.ListaAtacantesT, self.ListaClientesT, self.ListaSolicitudesT, self.IpNumC, self.IpNumS)
							else:
								respuesta = "LAN"
					elif protocolo == 17:
						respuesta = udp.dns_spoofing(pkt, red, self.ListaAtacantesDNS, self.macGateway)
						
					elif protocolo == 1:
						respuesta = icmp.smurf(pkt)				
			else:
				print "Paquete desconocido"
				respuesta = "LAN"




        elif self.proceso == 1:
            if tipoPkt == 2054:
				respuesta = arp.arp_spoofing(pkt, self.dicSolicitudesARP, self.dicRespuestasARP, self.dicMacIp, self.ListaAtacantesARP, self.num_max_solicitudes)
            else :
                respuesta = "LAN"




        elif self.proceso == 2:
			respuesta = ip.ip_spoofing(pkt,  self.IpMac, self.MacPuerto, self.lstMacAtacante, self.puertoHoneynet)




        elif self.proceso == 3:
            try:
                if tipoPkt == 2048 and protocolo == 6:
                    respuesta = tcp.tcp_syn_flood(pkt, self.lstAtacantesT, self.dicSolicitudesT, self.dicClientesT, self.ipServidor, self.num_max_conexiones)
                else:
                    if (srcip in self.lstAtacantesT):
                        respuesta  = "HONEYNET"
                    else:
                        respuesta = "LAN"
            except:
                print("ERROR TCP")


        elif self.proceso == 4:
            respuesta = udp.dns_spoofing(pkt, self.ListaAtacantesDNS, MAC(self.macGateway))





        elif self.proceso == 5:
			if tipoPkt == 2048 and protocolo == 1:
				respuesta = icmp.smurf(pkt, IP(self.ipBroadcast))
			else:
				respuesta = "LAN"



				
        if self.proceso == 6:
            try:
                if tipoPkt == 2048 and protocolo == 6:
                    respuesta = https.thc_ssl_dos(pkt, self.lstAtacantesS, self.dicSolicitudesS, self.dicClientesS, IP(self.ipServidor), self.num_max_conexiones)
                else:
                    if (srcip in self.lstAtacantesS):
                            respuesta  = "HONEYNET"
                    else:
                            respuesta = "LAN"
            except:
                print("ERROR TCP")





        if respuesta == "LAN":
            enviar.enviar_paquete(pkt, red, self.puertoHoneynet)
        elif respuesta == "HONEYNET":
            enviar.enviar_Honeynet(pkt, red, self.puertoHoneynet)
        elif respuesta == "TODO":
            enviar.enviar_todo(pkt, red)
        elif respuesta == "ATACANTE":
            enviar.enviar_Honeynet(pkt, red,self.MacPuerto[dstmac])