<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mi Brain-Training Personal</title>
	<atom:link href="http://www.saghul.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saghul.net/blog</link>
	<description>Para que no se me olviden las cosas...</description>
	<lastBuildDate>Thu, 19 Aug 2010 07:15:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Blink Qt beta para Windows disponible!</title>
		<link>http://www.saghul.net/blog/2010/08/19/blink-qt-beta-para-windows-disponible/</link>
		<comments>http://www.saghul.net/blog/2010/08/19/blink-qt-beta-para-windows-disponible/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 07:15:43 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Blink]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1195</guid>
		<description><![CDATA[Hace unos días ya comentaba que se había liberado la primera beta de Blink Qt para GNU/Linux, pues hoy ya tenemos disponible la versión para Windows.
Las versiones de Windows y GNU/Linux utilizan la misma base de código para el GUI, por lo que implementan las mismas características. No obstante, y dado que en esta beta [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días ya comentaba que se había liberado la primera beta de <a class="vt-p" href="http://www.saghul.net/blog/2010/08/13/blink-qt-beta-para-gnulinux-disponible/" target="_blank">Blink Qt para GNU/Linux</a>, pues hoy ya tenemos disponible la versión para Windows.</p>
<p>Las versiones de Windows y GNU/Linux utilizan la misma base de código para el GUI, por lo que implementan las mismas características. No obstante, y dado que en esta beta no es posible editar preferencias de una cuenta de usuario, es necesario utilizar una cuenta creada en <a class="vt-p" href="http://sip2sip.info" target="_blank">http://sip2sip.info</a></p>
<p>Una vez creada la cuenta podéis acceder a la web de configuración en <a class="vt-p" href="http://x.sip2sip.info" target="_blank">http://x.sip2sip.info</a> y hacer click en la pestaña llamada &#8220;Blink&#8221;. Una aplicación Java solicitará vuestro permiso, y tras descargar e instalar Blink haced click en &#8220;Configure Blink with this account&#8221; y al reiniciar Blink vuestra cuenta ya estará configurada. ¿Fácil, no?</p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows4.png"><img class="size-medium wp-image-1196 aligncenter" title="blink-windows4" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows4-300x196.png" alt="blink-windows4" width="300" height="196" /></a></p>
<p>La única diferencia entre las versiones de Windows y GNU/Linux es que la versión de Windows tiene capacidad de autoactualización, así que a medida que vayamos lanzando nuevas versiones una ventana os informará de ello y podréis actualizar Blink cómodamente.</p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows2.png"><img class="size-medium wp-image-1197 aligncenter" title="blink-windows2" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows2-300x100.png" alt="blink-windows2" width="300" height="100" /></a></p>
<p>Como siembre, todo feedback es bienvenido, podéis reportar bugs, etc. en la lista de correo de Blink: <a class="vt-p" style="color: #132e5b;" href="http://lists.ag-projects.com/mailman/listinfo/blink">http://lists.ag-projects.com/mailman/listinfo/blink</a></p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows1.png"><img class="size-medium wp-image-1198 aligncenter" title="blink-windows1" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows1-151x300.png" alt="blink-windows1" width="151" height="300" /></a></p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows3.png"><img class="size-medium wp-image-1199 aligncenter" title="blink-windows3" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-windows3-300x235.png" alt="blink-windows3" width="300" height="235" /></a></p>
<p>Tenéis más información aquí: <a class="vt-p" href="http://icanblink.com/blink-qt-windows-beta.phtml">http://icanblink.com/blink-qt-windows-beta.phtml</a></p>
<p>Now you can Blink on Windows <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/08/19/blink-qt-beta-para-windows-disponible/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Blink Qt beta para GNU/Linux disponible!</title>
		<link>http://www.saghul.net/blog/2010/08/13/blink-qt-beta-para-gnulinux-disponible/</link>
		<comments>http://www.saghul.net/blog/2010/08/13/blink-qt-beta-para-gnulinux-disponible/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 11:52:17 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Blink]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[SIPSIMPLE]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1191</guid>
		<description><![CDATA[Tras muchos meses de trabajo por fin tenemos Blink Qt (beta) para GNU/Linux disponible para su descarga.
Tanto la versión de Mac, Blink-Cocoa como la versión para GNU/Linux (y próximamente Windows), Blink-Qt comparten el mismo core: SIPSIMPLE SDK. De momento todas las funcionalidades no se encuentran implementadas (beta), pero vamos paso a paso, intentando construir el [...]]]></description>
			<content:encoded><![CDATA[<p>Tras muchos meses de trabajo por fin tenemos <strong>Blink Qt (beta) para GNU/Linux disponible para su descarga.</strong></p>
<p>Tanto la versión de Mac, Blink-Cocoa como la versión para GNU/Linux (y próximamente Windows), Blink-Qt comparten el mismo core: <a class="vt-p" href="http://sipsimpleclient.com/" target="_blank">SIPSIMPLE SDK</a>. De momento todas las funcionalidades no se encuentran implementadas (beta), pero vamos paso a paso, intentando construir el mejor cliente SIP para todas las plataformas.</p>
<p>Ésta es la lista de features de la versión beta de Blink-Qt: <a class="vt-p" href="http://icanblink.com/features.phtml">http://icanblink.com/features.phtml</a></p>
<p>Hay paquetes Debian disponibles para Debian testing y unstable y Ubuntu Lucid (10.04) y Karmic (9.10), tenéis todas las instrucciones de instalación así como una breve guía de uso aquí: <a class="vt-p" href="http://icanblink.com/blink-qt-beta.phtml">http://icanblink.com/blink-qt-beta.phtml</a></p>
<p>Hemos puesto mucho esfuerzo en ésta versión, pero como humanos que somos puede haber fallos, todo feedback es bienvenido. <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  La lista de correo de Blink donde reportar errores, sugerencias, etc. está aquí: <a class="vt-p" href="http://lists.ag-projects.com/mailman/listinfo/blink" target="_blank">http://lists.ag-projects.com/mailman/listinfo/blink</a></p>
<p style="text-align: center; "><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-qt.png"><img class="size-full wp-image-1192 aligncenter" title="blink-qt" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/blink-qt.png" alt="blink-qt" width="289" height="568" /></a></p>
<p>Happy Blinking! <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/08/13/blink-qt-beta-para-gnulinux-disponible/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Probando el soporte IPv6 de Asterisk 1.8</title>
		<link>http://www.saghul.net/blog/2010/08/05/probando-el-soporte-ipv6-de-asterisk-1-8/</link>
		<comments>http://www.saghul.net/blog/2010/08/05/probando-el-soporte-ipv6-de-asterisk-1-8/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 22:47:20 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1171</guid>
		<description><![CDATA[Como ya habréis leído por ahí la próxima versión de Asterisk, la 1.8, traerá soporte para IPv6. Gracias a mi buen amigo Mikel &#8220;packet tracer&#8221; Jimenez dispongo de plena conectividad IPv6 en mi casa, así que hacer una llamada SIP por IPv6 era la siguiente prueba tras ping6.  
No quería ensuciar mucho el servidor [...]]]></description>
			<content:encoded><![CDATA[<p>Como ya habréis leído por ahí la próxima versión de Asterisk, la 1.8, traerá soporte para IPv6. Gracias a mi buen amigo <a class="vt-p" href="http://mikeljimenez.net" target="_blank">Mikel &#8220;packet tracer&#8221; Jimenez</a> dispongo de plena conectividad IPv6 en mi casa, así que hacer una llamada SIP por IPv6 era la siguiente prueba tras ping6. <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>No quería ensuciar mucho el servidor de <a class="vt-p" href="http://sipdoc.net" target="_blank">SIPdoc</a> (donde realicé las pruebas) así que opté por <em>instalar</em> Asterisk 1.8 con el script <em>live_ast</em> que ya comenté en su día. Resumiendo:</p>
<pre>svn co http://svn.asterisk.org/svn/asterisk/branches/1.8 asterisk18
cd asterisk18
cp contrib/scripts/live_ast .
./live_ast configure
./live_ast install
./live_ast samples
./live_ast run -vvvvvvvvvvvvvvc
</pre>
<p>Tras instalar asterisk modificamos el fichero sip.conf e indicamos que Asterisk escuche en IPv6:</p>
<pre>udpbindaddr=::
</pre>
<p>Si tenemos una IP concreta a la que queremos bindear haríamos lo siguiente:</p>
<pre>udpbindaddr=[2001:470:1f12:X:X::1]:5060
</pre>
<p>¡Ya tenemos el servidor configurado! Para hacer nuestra primera llamada SIP con IPv6 utilizaremos la herramienta <strong>pjsua</strong> del proyecto PJSIP.</p>
<p>Por defecto PJSIP no se compila con soporte IPv6, así que haremos lo siguiente para descargar y compilar PJSIP:</p>
<pre>svn co http://svn.pjsip.org/repos/pjproject/trunk pjsip
cd pjsip
echo "#define PJ_HAS_IPV6 1" &gt; pjlib/include/pj/config_site.h
./configure &amp;&amp; make dep &amp;&amp; make
</pre>
<p>La herramienta pjsua se habrá compilado en el directorio pjsip-apps/bin. Nos cambiamos a ese directorio y ya podemos arrancarla:</p>
<pre>./pjsua-x86_64-unknown-linux-gnu --ipv6 --no-tcp
</pre>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/pjsua-ipv6.png"><img class="size-full wp-image-1172 aligncenter" title="pjsua-ipv6" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/pjsua-ipv6.png" alt="pjsua-ipv6" width="428" height="361" /></a></p>
<p>Probemos ha hacer una llamada: pulsamos &#8216;m&#8217; e introducimos la URI SIP a la que queremos llamar: &#8217;sip:1000@[2001:470:1f12:286::2]&#8216;.</p>
<p>Si hemos dejado el dialplan por defecto deberíamos estar escuchando a Allison Smith y su demo-congrats. ¡A través de IPv6!</p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/08/asterisk-ipv6.png"><img class="size-full wp-image-1173 aligncenter" title="asterisk-ipv6" src="http://www.saghul.net/blog/wp-content/uploads/2010/08/asterisk-ipv6.png" alt="asterisk-ipv6" width="672" height="122" /></a></p>
<p>¡Parece que funciona!</p>
<pre>INVITE sip:1000@[2001:470:1f12:286::2]:5060 SIP/2.0
Via: SIP/2.0/UDP [2001:470:c846:1:225:ff:feac:6aca]:5060;rport;branch=z9hG4bKPjBcy323TSZVZa86u8GMIV01Zv8wNs1DAE
Max-Forwards: 70
From: <sip:[2001:470:c846:1:225:ff:feac:6aca]>;tag=-3p-SYm.MD6bVaH-8WHegCIArkOYu.9R
To: sip:1000@[2001:470:1f12:286::2];tag=as349aa7db
Contact: <sip:[2001:470:c846:1:225:ff:feac:6aca]:5060>
Call-ID: cWEqE795OfqpixU.l1IavBkTPpgVmX3F
CSeq: 21549 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE, NOTIFY,
REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800;refresher=uas
Min-SE: 90
Content-Type: application/sdp
Content-Length:   310

v=0
o=- 3490026667 3490026668 IN IP6 2001:470:c846:1:225:ff:feac:6aca
s=pjmedia
c=IN IP6 2001:470:c846:1:225:ff:feac:6aca
t=0 0
a=X-nat:0
m=audio 4030 RTP/AVP 3 101
a=rtcp:4031 IN IP6 2001:470:c846:1:225:ff:feac:6aca
a=rtpmap:3 GSM/8000
a=sendrecv
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15

--end msg--
 21:51:09.178   pjsua_core.c  RX 659 bytes Response msg
100/INVITE/cseq=21549 (rdata0x1f61238) from UDP
2001:470:1f12:286::2:5060:
SIP/2.0 100 Trying
Via: SIP/2.0/UDP [2001:470:c846:1:225:ff:feac:6aca]:5060;branch=z9hG4bKPjBcy323TSZVZa86u8GMIV01Zv8wNs1DAE;received=2001:470:c846:1:225:ff:feac:6aca;rport=5060
From: <sip:[2001:470:c846:1:225:ff:feac:6aca]>;tag=-3p-SYm.MD6bVaH-8WHegCIArkOYu.9R
To: sip:1000@[2001:470:1f12:286::2];tag=as349aa7db
Call-ID: cWEqE795OfqpixU.l1IavBkTPpgVmX3F
CSeq: 21549 INVITE
Server: Asterisk PBX SVN-branch-1.8-r281052
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY,
INFO, PUBLISH
Supported: replaces, timer
Require: timer
Session-Expires: 1800;refresher=uas
Contact: <sip:1000@[2001:470:1f12:286::2]:5060>
Content-Length: 0

--end msg--
 21:51:09.180   pjsua_core.c  RX 981 bytes Response msg
200/INVITE/cseq=21549 (rdata0x1f61238) from UDP
2001:470:1f12:286::2:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP [2001:470:c846:1:225:ff:feac:6aca]:5060;branch=z9hG4bKPjBcy323TSZVZa86u8GMIV01Zv8wNs1DAE;received=2001:470:c846:1:225:ff:feac:6aca;rport=5060
From: <sip:[2001:470:c846:1:225:ff:feac:6aca]>;tag=-3p-SYm.MD6bVaH-8WHegCIArkOYu.9R
To: sip:1000@[2001:470:1f12:286::2];tag=as349aa7db
Call-ID: cWEqE795OfqpixU.l1IavBkTPpgVmX3F
CSeq: 21549 INVITE
Server: Asterisk PBX SVN-branch-1.8-r281052
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY,
INFO, PUBLISH
Supported: replaces, timer
Require: timer
Session-Expires: 1800;refresher=uas
Contact: <sip:1000@[2001:470:1f12:286::2]:5060>
Content-Type: application/sdp
Content-Length: 293

v=0
o=root 1289948586 1289948587 IN IP6 2001:470:1f12:286::2
s=Asterisk PBX SVN-branch-1.8-r281052
c=IN IP6 2001:470:1f12:286::2
t=0 0
m=audio 11994 RTP/AVP 3 101
a=rtpmap:3 GSM/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
</pre>
<p>Dejo pendiente para otro día el montaje de IPv6 que realicé con Mikel en el servidor de SIPdoc y mi casa.</p>
<p>Happy IPv6 calling!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/08/05/probando-el-soporte-ipv6-de-asterisk-1-8/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>svcrash: ¿el comienzo del anti-hacking en SIP?</title>
		<link>http://www.saghul.net/blog/2010/07/11/svcrash-%c2%bfel-comienzo-del-anti-hacking-en-sip/</link>
		<comments>http://www.saghul.net/blog/2010/07/11/svcrash-%c2%bfel-comienzo-del-anti-hacking-en-sip/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 09:19:01 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Anti-Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1169</guid>
		<description><![CDATA[Hace unas semanas fue presentada (el autor también fue invitado al VUC) la utilidad svrash.py, de la suite de seguridad SIPVicious. Con esta utilidad es posible hacer que las utilidades svwar.py y svcrack.py se dentengan, ya que les provoca una excepción. ¿WTF?
Así es, svcrash es capaz de detener los ataques causados desde SIPVicious. Su autor [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unas semanas fue presentada (el autor también fue invitado al <a class="vt-p" href="http://vuc.me" target="_blank">VUC</a>) la utilidad <strong>svrash.py</strong>, de la suite de seguridad <a class="vt-p" href="http://blog.sipvicious.org/" target="_blank">SIPVicious</a>. Con esta utilidad es posible hacer que las utilidades svwar.py y svcrack.py se dentengan, ya que les provoca una excepción. ¿WTF?</p>
<p>Así es, <strong>svcrash es capaz de detener los ataques causados desde SIPVicious</strong>. Su autor no programó las utilidades para que la gente lanzara ataques contra otros, sino para que cualquiera pudiera comprobar el nivel de seguridad de sus propios sistemas, pero como hay malos sueltos por ahí que utilizan las herramientas de un modo bastante dudoso, programó svcrack.</p>
<p>Svcrash aprovecha un bug (tal vez dejado intencionadamente) para convertirlo en una feature: todas las versiones de SIPVicious tienen un bug que provoca la parada del programa debido a una excepción no controlada si se le envía un To tag con determinada forma. El funcionamiento de svcrash es sencillo: responde a los requests enviados por svcrack o svwar con un 200 OK con el To tag adecuado para provocar una excepción. El autor incluso ha añadido un modo automático, en el cual svcrash funciona en modo demonio leyendo los logs de Asterisk, y responde con éstos 200 OK (con el To tag adecuado) en caso de que Asterisk indique un fallo de autenticación en los logs.</p>
<p>Podéis ver un vídeo de su funcionamiento <a class="vt-p" href="http://vimeo.com/12744376" target="_blank">aquí</a>.</p>
<p>Además de ser una manera elegante de terminar un ataque, el concepto de svcrash me hizo pensar un rato&#8230; ¿y si en lugar de <a class="vt-p" href="http://www.saghul.net/blog/2010/06/17/deteniendo-un-sip-flood-con-opensips-y-el-modulo-pike/" target="_blank">bloquear o evitar un ataque</a> simplemente contraatacamos, llegado el momento?</p>
<p>Supongamos el siguiente escenario: estamos sufriendo un ataque con el objetivo de adivinar el password de alguno de nuestros usuarios SIP. Lo habitual al detectar el tráfico generado por éste tipo de ataques suele ser bloquear el acceso de la IP en cuestión. Pero eso no quiere decir que el atacante haya dejado de enviar paquetes. El atacante podría enviarnos tráfico desde distintas IPs de manera dinámica, lo que haría más complicado bloquearlo, aunque tampoco imposible.</p>
<p>Si &#8220;la mejor defensa es un buen ataque&#8221; aquí va una idea: <strong>extender el concepto de svcrash y crear una suite de anti-hacking para SIP</strong>. Las herramientas de ataque para SIP no suelen implementar un completo cliente SIP, básicamente se quieren enviar paquetes SIP por un socket rápido o con ciertas credenciales. Por lo tanto, podríamos suponer que la herramienta que nos ataque haya dejado algún caso sin contemplar en su parser y podríamos provocar una excepción en la aplicación con una respuesta especialmente preparada (tal y como hace svcrash). Aquí van unas cuantas ideas que se me ocurren a botepronto:</p>
<ul>
<li>Que la respuesta empiece con &#8220;SIP/1.0 200 OK&#8221;.</li>
<li>Utilizar unicode en las cabeceras From y To. (el soporte unicode es algo en lo que casi nunca se piensa desde el principio&#8230;)</li>
<li>Eliminar cabeceras de manera arbitraria: responder sin Contact, sin From ni To, &#8230;</li>
<li>&#8230;</li>
</ul>
<p>Es solo una idea, pero sería interesante ver alguna herramienta que empiece a responder con alguna de las respuestas malvadas cuando detecte X intentos de autenticación fallidos, ¿no creéis?</p>
<p>Happy anti-hacking! <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/07/11/svcrash-%c2%bfel-comienzo-del-anti-hacking-en-sip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Desvelado el secreto de Skype?</title>
		<link>http://www.saghul.net/blog/2010/07/09/%c2%bfdesvelado-el-secreto-de-skype/</link>
		<comments>http://www.saghul.net/blog/2010/07/09/%c2%bfdesvelado-el-secreto-de-skype/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 07:28:00 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[Skype]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1166</guid>
		<description><![CDATA[Ayer por la noche la noticia recorría Internet como la pólvora: Skype puede haber sido hackeado haciendo ingeniería inversa su protocolo.
Skype lleva muchos años en el mercado y se conocen muchos detalles sobre su infraestructura: sigue un modelo P2P (al igual que el sistema de almacenamiento de Google o la tecnología Dynamo de Amazon). Los nodos [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer por la noche <a class="vt-p" href="http://blog.tmcnet.com/blog/tom-keating/skype/skype-reverse-engineered.asp?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+voipgadgets+(VoIP+%26+Gadgets+Blog)" target="_blank">la noticia</a> recorría Internet como la pólvora: Skype puede haber sido hackeado haciendo ingeniería inversa su protocolo.</p>
<p>Skype lleva muchos años en el mercado y se conocen muchos detalles sobre su infraestructura: sigue un modelo P2P (al igual que el sistema de almacenamiento de <a class="vt-p" href="http://labs.google.com/papers/bigtable-osdi06.pdf" target="_blank">Google</a> o la tecnología <a class="vt-p" href="https://docs.google.com/viewer?url=http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf" target="_blank">Dynamo</a> de Amazon). Los nodos de esta red P2P tienen distintos niveles, de manera que los más propensos a reenviar tráfico de otros usuarios (como universidades, donde abundan las IPs públicas) son promocionados a &#8217;supernodos&#8217;. Las versiones móviles de Skype, por el contrario, nunca podrán llegar a ser ssupernodos.</p>
<p>Aunque se utilice la tecnología P2P, Skype también tiene servidores: algo tendrá que haber para SkypeOut, y una especie de B2BUA para distribuir los mensajes entre las múltiples instancias de Skype abiertas para un mismo usuario.</p>
<p>El problema de todo esto es mantener la confianza: poner perros y alambradas para que nadie que no sea Skype entre en la red P2P, ya sea para bien o para mal. Tal vez para que la gente deje de intentarlo, Skyoe lanzó <a class="vt-p" href="http://blog.tmcnet.com/blog/tom-keating/skype/skypekit-sdk-adds-skype-to-just-about-anything.asp" target="_blank">SkypeKit SDK</a>, pero parece que no es suficiente para todos. <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Según <a class="vt-p" href="http://webcache.googleusercontent.com/search?q=cache:http://www.enrupt.com/index.php/2010/07/07/skype-biggest-secret-revealed" target="_blank">éste post</a> el algoritmo de expansión de keys <a class="vt-p" href="http://cryptolib.com/ciphers/skype" target="_blank">Skype RC4</a> ha sido obtenido gracias a la ingeniería inversa. Todos los detalles serán publicados en el 27C3 en Berlin en diciembre.</p>
<p>¿Veremos un cliente de <em>Eskhipe</em>? ¿Será un hoax? No lo parece&#8230;</p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2007/05/skype_logo.png"><img class="size-full wp-image-208 aligncenter" title="skype_logo.png" src="http://www.saghul.net/blog/wp-content/uploads/2007/05/skype_logo.png" alt="skype_logo.png" width="105" height="47" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/07/09/%c2%bfdesvelado-el-secreto-de-skype/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Soporte de IPv6 en Asterisk</title>
		<link>http://www.saghul.net/blog/2010/06/25/soporte-de-ipv6-en-asterisk/</link>
		<comments>http://www.saghul.net/blog/2010/06/25/soporte-de-ipv6-en-asterisk/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 06:41:18 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1162</guid>
		<description><![CDATA[Ya lo había comentado Kevin P. Fleming varios meses atrás y hoy me he desayunado con la noticia. Russell Bryant acaba de postear el soporte de IPv6 para Asterisk en reviewboard.
No es que todo el mundo el vaya a utilizar (aún falta para eso&#8230;) pero es algo que hay que soportar a día de hoy [...]]]></description>
			<content:encoded><![CDATA[<p>Ya lo había comentado <a class="vt-p" href="http://twitter.com/kpfleming_twit" target="_blank">Kevin P. Fleming</a> varios meses atrás y hoy me he desayunado con la noticia. <a class="vt-p" href="http://twitter.com/russellbryant" target="_blank">Russell Bryant</a> acaba de postear el <strong>soporte de IPv6 para Asterisk</strong> en <a class="vt-p" href="https://reviewboard.asterisk.org/r/743/" target="_blank">reviewboard.</a></p>
<p>No es que todo el mundo el vaya a utilizar (aún falta para eso&#8230;) pero es algo que hay que soportar a día de hoy y que convertirá Asterisk en un buena herramienta para probar IPv6 en otras aplicaciones como clientes SIP.</p>
<p>Añadir soporte para IPv6 en una aplicación del tamaño de Asterisk no ha tenido que ser fácil, así que mi enhorabuena al equipo de Asterisk por haberlo conseguido. <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/06/ipv6.png"><img class="size-full wp-image-1163 aligncenter" title="ipv6" src="http://www.saghul.net/blog/wp-content/uploads/2010/06/ipv6.png" alt="ipv6" width="257" height="307" /></a></p>
<p>Happy IPV6ing!</p>
<p>PD: La imágen la he tomado prestada de <a class="vt-p" href="http://proyectofedora.org/colombia/?p=848" target="_blank">aquí.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/06/25/soporte-de-ipv6-en-asterisk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deteniendo un SIP flood con OpenSIPS y el módulo pike</title>
		<link>http://www.saghul.net/blog/2010/06/17/deteniendo-un-sip-flood-con-opensips-y-el-modulo-pike/</link>
		<comments>http://www.saghul.net/blog/2010/06/17/deteniendo-un-sip-flood-con-opensips-y-el-modulo-pike/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 16:23:44 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Flooding]]></category>
		<category><![CDATA[OpenSIPS]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1155</guid>
		<description><![CDATA[Esta semana mientras miraba algo en uno de nuestros servidores me di cuenta de que estábamos siendo &#8220;atacados&#8221; mediante SIP flooding. Lo pongo entre comillas porque no era un ataque suficientemente significativo como para que el servicio se viera afectado, así que decidí aprovechar la ocasión para experimentar un poco y encontrar la manera de [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana mientras miraba algo en uno de nuestros servidores me di cuenta de que estábamos siendo &#8220;atacados&#8221; mediante <em>SIP flooding</em>. Lo pongo entre comillas porque no era un ataque suficientemente significativo como para que el servicio se viera afectado, así que decidí aprovechar la ocasión para experimentar un poco y encontrar la manera de evitar éste tipo de ataques.</p>
<p>Como he dicho el ataque no era gran cosa: un montón de REGISTER que ni siquiera intentaban averiguar passwords. El problema de éste tipo de ataques es que pueden dejar nuestro sistema fuera de combate si los recursos no se liberan demasiado rápido. Los descriptores de fichero asignados a un proceso no son ilimitados (aunque ulimit -n diga lo contrario) y si se acaban no podremos hacer casi nada. Por otro lado, si la aplicación que está sufriendo el ataque consume el 100% de la CPU también estaremos afectando a otros procesos del sistema.</p>
<p>En estos casos un <a class="vt-p" href="http://es.wikipedia.org/wiki/Sistema_de_detecci%C3%B3n_de_intrusos" target="_blank">IDS</a> como <a class="vt-p" href="http://www.snort.org/" target="_blank">Snort</a> puede ayudarnos, pero ya que se trata de <a class="vt-p" href="http://opensips.org" target="_blank">OpenSIPS</a> vamos a utilizar el módulo <strong>pike</strong> ya que viene incluido y así no necesitamos añadir un elemento más a nuestra infraestructura.</p>
<p>El módulo pike no bloquea el ataque de por si. Es capaz de detectarlo y de darnos las herramientas necesarias para actuar ente un ataque. Podéis ver toda la <a class="vt-p" href="http://www.opensips.org/html/docs/modules/1.6.x/pike.html" target="_blank">documentación del módulo</a>, yo aquí comentaré los parámetros más relevantes:</p>
<ul>
<li>sampling_time_unit: Indica el número de segundos que componen una muestra. A priori puede parecer algo abstracto, cobra sentido en combinación con el siguiente parámetro.</li>
<li>reqs_density_per_unit: Indica el número de mensajes permitidos en un <em>sampling_time_unit, </em>de manera que al sobrepasar éste número se &#8216;bloqueará&#8217; la IP que esté originando el tráfico.</li>
<li>remove_latency: Indica el tiempo que tendremos una IP marcada como &#8216;bloqueada&#8217;.</li>
</ul>
<p>Todas las unidades de tiempo se indican en segundos.</p>
<p>Una vez tenemos el módulo configurado vamos a utilizar la función <em>pike_check_req()</em> para detectar el flooding y actuar en consecuencia. Un ejemplo con un poco de pseudocódigo:</p>
<p><code>modparam("pike", "sampling_time_unit", 2)<br />
modparam("pike", "reqs_density_per_unit", 30)<br />
modparam("pike", "remove_latency", 120)<br />
...<br />
...<br />
if (!(FROM_SELF || FROM_TRUSTED)) {<br />
if (!pike_check_req()) {<br />
exit;<br />
}<br />
}<br />
...<br />
...</code></p>
<p>Como se puede ver lo que haremos al detectar el flood es llamar a la función <em>exit</em>, para dejar de procesar los requests y liberar los recursos lo antes posible.</p>
<p>Alguno ya se habrá dado cuenta de que en realidad no estamos deteniendo el ataque&#8230; veamos como se podría hacer <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>El módulo pike nos generará unas bonitas entradas en syslog:</p>
<p><code>Jun 14 11:32:39 node03 /usr/sbin/opensips[12654]: PIKE - BLOCKing ip 1.2.3.4, node=0xaf793a68<br />
Jun 14 14:15:43 node03 /usr/sbin/opensips[12659]: PIKE - UNBLOCKing node 0xaf793a68<br />
Jun 14 14:15:45 node03 /usr/sbin/opensips[12623]: PIKE - BLOCKing ip 1.2.3.4, node=0xaf793axx<br />
Jun 14 14:34:25 node03 /usr/sbin/opensips[12659]: PIKE - UNBLOCKing node 0xaf793axx<br />
Jun 14 14:34:27 node03 /usr/sbin/opensips[12646]: PIKE - BLOCKing ip 1.2.3.4, node=0xaf793axx<br />
Jun 14 15:35:39 node03 /usr/sbin/opensips[12659]: PIKE - UNBLOCKing node 0xaf793axx</code></p>
<p>Todo lo que tendremos que hacer es detectar estos mensajes con <a class="vt-p" href="http://www.rsyslog.com/" target="_blank">Rsyslog</a> (por ejemplo) y añadir temporalmente una regla de iptables para bloquear el tráfico.</p>
<p>Ala, ya tenéis deberes <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a class="vt-p" href="http://www.saghul.net/blog/wp-content/uploads/2010/06/4005407576_a1e671452d_m.jpg"><img class="size-full wp-image-1158 aligncenter" title="4005407576_a1e671452d_m" src="http://www.saghul.net/blog/wp-content/uploads/2010/06/4005407576_a1e671452d_m.jpg" alt="4005407576_a1e671452d_m" width="196" height="240" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/06/17/deteniendo-un-sip-flood-con-opensips-y-el-modulo-pike/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ICE: The ultimate way of beating NAT in SIP</title>
		<link>http://www.saghul.net/blog/2010/06/04/ice-the-ultimate-way-of-beating-nat-in-sip/</link>
		<comments>http://www.saghul.net/blog/2010/06/04/ice-the-ultimate-way-of-beating-nat-in-sip/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 20:48:55 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ICE]]></category>
		<category><![CDATA[MediaProxy]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[OpenSIPS]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1149</guid>
		<description><![CDATA[Hoy ha sido el día. A las 15:00 he tenido la oportunidad de dar una charla en el Amoocon 2010. La charla trataba sobre cómo &#8216;atravesar&#8217; el NAT utilizando ICE, algo de lo que ya hablamos hace algunos posts.
A continuación os dejo las transparencias, que espero sirvan a alguien para aclarar el concepto de ICE [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy ha sido el día. A las 15:00 he tenido la oportunidad de dar una charla en el <a href="http://amoocon.de" target="_blank">Amoocon</a> 2010. La charla trataba sobre cómo &#8216;atravesar&#8217; el NAT utilizando <a href="http://tools.ietf.org/html/rfc5245" target="_blank">ICE</a>, algo de lo que <a href="http://www.saghul.net/blog/2010/02/28/ice-¿la-solucion-definitiva-al-nat-en-sip/" target="_blank">ya hablamos</a> hace algunos posts.</p>
<p>A continuación os dejo las transparencias, que espero sirvan a alguien para aclarar el concepto de ICE en si, y cómo lo hicimos funcionar correctamente con <a href="http://opensips.org" target="_blank">OpenSIPS</a> y <a href="http://mediaproxy.ag-projects.com" target="_blank">MediaProxy</a>.</p>
<p style="text-align: center;"><object width="500" height="410"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=ice-100604153615-phpapp02"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=ice-100604153615-phpapp02"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="410"></embed></object><!-- ysttest:Array
(
    [id] => 4414037&amp;doc=ice-100604153615-phpapp02
)
--></p>
<p>Njoy! <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/06/04/ice-the-ultimate-way-of-beating-nat-in-sip/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Probando el soporte SRTP de Asterisk</title>
		<link>http://www.saghul.net/blog/2010/05/11/probando-el-soporte-srtp-de-asterisk/</link>
		<comments>http://www.saghul.net/blog/2010/05/11/probando-el-soporte-srtp-de-asterisk/#comments</comments>
		<pubDate>Tue, 11 May 2010 20:46:03 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[RTP]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[SRTP]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[ZRTP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1142</guid>
		<description><![CDATA[Si ayer comentaba un poco el jaleo del SRTP opcional, hoy vamos a probar soporte SRTP de Asterisk.
Que no se asuste nadie, Asterisk todavía no soporta SRTP, ni siquiera en trunk, así que vamos a probar un branch en el que se está desarrollando el soporte de SRTP. Cabe destacar que nos encontramos ante la [...]]]></description>
			<content:encoded><![CDATA[<p>Si <a href="http://www.saghul.net/blog/2010/05/10/sobre-el-srtp-opcional/" target="_blank">ayer comentaba</a> un poco el jaleo del <a href="http://en.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol" target="_blank">SRTP</a> opcional, hoy vamos a probar soporte SRTP de Asterisk.</p>
<p>Que no se asuste nadie, <strong>Asterisk todavía no soporta SRTP</strong>, ni siquiera en trunk, así que <strong>vamos a probar un branch en el que se está desarrollando el soporte de SRTP</strong>. Cabe destacar que nos encontramos ante la que tal vez sea <a href="https://issues.asterisk.org/view.php?id=5413" target="_blank">la incidencia no resulta más antigua</a> del bugtracker de Digium ¡va para 5 años! Como os podréis imaginar la incidencia está llena de notas que ya no sirven y añaden confusión al asunto&#8230; por eso escribo esto. <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Parece que por fin se lo han tomado en serio en Digium y <strong>Terry Willson</strong> está siendo el encargado de añadir esta funcionalidad que <strong>formará parte de Asterisk 1.8</strong>.</p>
<p><strong>IMPORTANTE</strong>: Aunque utilicemos SIP sobre TLS para señalización y SRTP para media NO tenemos garantizada la encriptación de la señalización de extremo a extremo, por lo que la única manera de tener el RTP seguro es utilizar <a href="http://es.wikipedia.org/wiki/ZRTP" target="_blank">ZRTP</a>.</p>
<p>Y sin más preámbulos, nos remangamos y ¡a compilar!</p>
<p><strong>1. Instalar libSRTP</strong></p>
<p>Es necesario compilar esta librería de una forma específica, ya que es necesario indicar unos flags para que Asterisk pueda enlazarla correctamente (-fPIC), así que tenemos que compilarla a mano:</p>
<p><code>wget http://srtp.sourceforge.net/srtp-1.4.2.tgz<br />
tar zxvf srtp-1.4.2.tgz<br />
cd srtp<br />
autoconf<br />
CFLAGS="-Wall -O4 -fexpensive-optimizations -funroll-loops -fPIC" ./configure<br />
make<br />
make install</code></p>
<p><strong>2. Instalar Asterisk con soporte para SRTP</strong></p>
<p>Tenemos que instalar el branch que se indica en la incidencia del bugtracker de Digium:</p>
<p><code>svn co http://svn.asterisk.org/svn/asterisk/team/group/srtp_reboot asterisk-srtp<br />
cd asterisk-srtp<br />
./configure<br />
make menuselect<br />
(comprobamos que res_srtp se encuentra habilitado)<br />
make &amp;&amp; make install<br />
make samples</code></p>
<p><strong>3. Configuración</strong></p>
<p>Una vez tenemos Asterisk con soporte para SRTP instalado podemos empezar ha hacer pruebas. Para ello utilizaremos la siguiente configuración:</p>
<p>sip.conf<br />
<code>[saghul]<br />
type=friend<br />
secret=1234<br />
context=test-srtp<br />
host=dynamic<br />
disallow=all<br />
allow=alaw<br />
encryption=yes</code></p>
<p>extensions.conf<br />
<code>[test-srtp]<br />
exten =&gt; 1234,1,NoOp<br />
exten =&gt; 1234,n,Answer<br />
exten =&gt; 1234,n,Playback(demo-congrats)<br />
exten =&gt; 1234,n,Hangup</code></p>
<p>Llamamos al 1234 y obtendremos este maravilloso SDP como respuesta:<br />
<code>SIP/2.0 200 OK<br />
Via: SIP/2.0/UDP ...<br />
From: "saghul" ;tag=jziCJERZJx5yWuqJ6be.Nsovxw6C-95.<br />
To: ;tag=as5c0e6e41<br />
Call-ID: U.kCq9Jk-6Zfg2kBg1qCb5wYI09voGj-<br />
CSeq: 28567 INVITE<br />
Server: Asterisk PBX SVN-group-srtp_reboot-r262249-/trunk<br />
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH<br />
Supported: replaces, timer<br />
Contact:<br />
Content-Type: application/sdp<br />
Content-Length: 379</p>
<p>v=0<br />
o=root 1054633509 1054633509 IN IP4 192.168.99.53<br />
s=Asterisk PBX SVN-group-srtp_reboot-r262249-/trunk<br />
c=IN IP4 192.168.99.53<br />
t=0 0<br />
m=audio 17064 RTP/SAVP 8 101<br />
a=rtpmap:8 PCMA/8000<br />
a=rtpmap:101 telephone-event/8000<br />
a=fmtp:101 0-16<br />
a=silenceSupp:off - - - -<br />
a=ptime:20<br />
a=sendrecv<br />
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:5jjBwNWl/zUCvBBJGqLLABLAc2/83XQW0WkDzdUx<br />
</code></p>
<p>¡Funciona! Actualmente solo está soportado el modo <strong>mandatory</strong> de SRTP, así que el modo <em>opcional</em> en que indicamos RTP/AVP en la <em>línea m</em> y las claves en los atributos <em>crypto</em> no funcionará. Veremos si lo soportan o no.</p>
<p>Además del parámetro <em>encryption=yes</em> en el sip.conf, podemos indicar si queremos encriptación a nivel de señalización o de media con la función CHANNEL:</p>
<p><code>Set(CHANNEL(secure_bridge_signaling)=yes)<br />
Set(CHANNEL(secure_bridge_media)=yes)</code></p>
<p>Os animo a los que tengáis terminales con soporte SRTP a probar el branch, happy encrypting!</p>
<p style="text-align: center; "><a href="http://www.saghul.net/blog/wp-content/uploads/2010/05/phone_srtp.jpg"><img class="size-full wp-image-1144 aligncenter" title="phone_srtp" src="http://www.saghul.net/blog/wp-content/uploads/2010/05/phone_srtp.jpg" alt="phone_srtp" width="160" height="304" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/05/11/probando-el-soporte-srtp-de-asterisk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sobre el SRTP opcional</title>
		<link>http://www.saghul.net/blog/2010/05/10/sobre-el-srtp-opcional/</link>
		<comments>http://www.saghul.net/blog/2010/05/10/sobre-el-srtp-opcional/#comments</comments>
		<pubDate>Mon, 10 May 2010 19:33:05 +0000</pubDate>
		<dc:creator>saghul</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[RTP]]></category>
		<category><![CDATA[SDP]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[SRTP]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.saghul.net/blog/?p=1137</guid>
		<description><![CDATA[Buenas, amigos del SIP y derivados. Hoy os voy a contar una pequeña batalla que he tenido con el soporte de SRTP en su forma opcional.
Primero unos breves antecedentes, para entrar en materia:
¿Qué es SRTP?
SRTP (RFC 3711) define un perfil de RTP mediante el cual dota de encriptación a este protocolo. Como sabéis, se suele [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas, amigos del <a href="http://es.wikipedia.org/wiki/Session_Initiation_Protocol" target="_blank">SIP</a> y derivados. Hoy os voy a contar una pequeña batalla que he tenido con el soporte de SRTP en su forma opcional.</p>
<p>Primero unos breves antecedentes, para entrar en materia:</p>
<p><strong>¿Qué es SRTP?</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol" target="_blank">SRTP</a> (<a href="http://tools.ietf.org/html/rfc3711" target="_blank">RFC 3711</a>) define un perfil de RTP mediante el cual dota de encriptación a este protocolo. Como sabéis, se suele utilizar RTCP junto al RTP, por lo que también existe SRTCP, que se encarga de cifrar el tráfico RTCP. Básicamente lo que haremos será cifrar el audio utilizando <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard" target="_blank">AES</a>, de manera que aunque alguien pudiera capturar nuestros paquetes no podrá escuchar nuestra conversación.</p>
<p>Lo más habitual es utilizar SIP sobre UDP, así que la señalización irá sin encriptar, por lo que es posible que las claves de cifrado que se usarán para cifrar el audio sean capturadas y por lo tanto el cifrado pueda romperse. Para solucionar esto podemos cifrar también la señalización, utilizando TLS, o podemos utilizar <a href="http://en.wikipedia.org/wiki/ZRTP" target="_blank">ZRTP</a>, que permite el intercambio de claves a nivel de RTP, a través de un medio no fiable (Internet es muy hostil). ZRTP utiliza el mecanismo <a href="http://es.wikipedia.org/wiki/Diffie-Hellman" target="_blank">Diffie-Hellman</a> para intercambiar las claves a través de RTP y poder empezar a utilizar así SRTP.</p>
<p><strong>¿Cómo se usa?</strong></p>
<p>Este post no pretende dar una explicación detallada sobre SRTP, básicamente nos bastará con saber que con SRTP ciframos el audio y al menos se lo ponemos más difícil a los malos <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Cuando utilizamos SRTP lo podemos hacer de 3 maneras:</p>
<ul>
<li>Deshabilitado: no utilizaremos SRTP.</li>
<li>Opcional: se ofrecerá soporte de SRTP en el SDP, y el terminal remoto elegirá si desea utilizarlo o no.</li>
<li>Obligatorio: únicamente se aceptarán <em>streams</em> que indiquen que SRTP está siendo utilizado.</li>
</ul>
<p>Veamos como luce el SDP en los distintos casos:</p>
<p>SRTP desactivado:<br />
<code>v=0<br />
o=- 3482506669 3482506669 IN IP4 192.168.99.53<br />
s=sipsimple 0.14.2<br />
c=IN IP4 192.168.99.53<br />
t=0 0<br />
m=audio 63697 RTP/AVP 103 102 9 0 8 101<br />
a=rtcp:63698 IN IP4 62.131.6.55<br />
a=rtpmap:103 speex/16000<br />
a=rtpmap:102 speex/8000<br />
a=rtpmap:9 G722/8000<br />
a=rtpmap:0 PCMU/8000<br />
a=rtpmap:8 PCMA/8000<br />
a=rtpmap:101 telephone-event/8000<br />
a=fmtp:101 0-15<br />
a=sendrecv</code></p>
<p>Como se puede ver en la <strong>línea m del SDP</strong>, el perfil de RTP que estamos utilizando no es cifrado, ya que es RTP/AVP. (en caso de ser cifrado sería RTP/SAVP)</p>
<p>SRTP obligatorio:<br />
<code>v=0<br />
o=- 3482507190 3482507190 IN IP4 192.168.99.53<br />
s=sipsimple 0.14.2<br />
c=IN IP4 192.168.99.53<br />
t=0 0<br />
m=audio 51474 RTP/SAVP 103 102 9 0 8 101<br />
a=rtcp:51475 IN IP4 62.131.6.55<br />
a=rtpmap:103 speex/16000<br />
a=rtpmap:102 speex/8000<br />
a=rtpmap:9 G722/8000<br />
a=rtpmap:0 PCMU/8000<br />
a=rtpmap:8 PCMA/8000<br />
a=rtpmap:101 telephone-event/8000<br />
a=fmtp:101 0-15<br />
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:rbU4YeWyt+bRJPY2FZjIDfkPt659Az0lG05yVdQ9<br />
a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:/ebgRzBfmUVuD2aaqeZmVfFahAX3hakyi+k8oMn2<br />
a=sendrecv</code></p>
<p>En este caso se trata de un SDP con SRTP habilitado, ya que <strong>el perfil es seguro (RTP/SAVP) </strong>y se indican las claves a utilizar mediante los <strong>atributos a=crypto</strong>.</p>
<p>SRTP opcional:<br />
<code>v=0<br />
o=- 3482507190 3482507190 IN IP4 192.168.99.53<br />
s=sipsimple 0.14.2<br />
c=IN IP4 192.168.99.53<br />
t=0 0<br />
m=audio 51474 RTP/AVP 103 102 9 0 8 101<br />
a=rtcp:51475 IN IP4 62.131.6.55<br />
a=rtpmap:103 speex/16000<br />
a=rtpmap:102 speex/8000<br />
a=rtpmap:9 G722/8000<br />
a=rtpmap:0 PCMU/8000<br />
a=rtpmap:8 PCMA/8000<br />
a=rtpmap:101 telephone-event/8000<br />
a=fmtp:101 0-15<br />
a=sendrecv<br />
m=audio 51474 RTP/SAVP 103 102 9 0 8 101<br />
a=rtcp:51475 IN IP4 62.131.6.55<br />
a=rtpmap:103 speex/16000<br />
a=rtpmap:102 speex/8000<br />
a=rtpmap:9 G722/8000<br />
a=rtpmap:0 PCMU/8000<br />
a=rtpmap:8 PCMA/8000<br />
a=rtpmap:101 telephone-event/8000<br />
a=fmtp:101 0-15<br />
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:rbU4YeWyt+bRJPY2FZjIDfkPt659Az0lG05yVdQ9<br />
a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:/ebgRzBfmUVuD2aaqeZmVfFahAX3hakyi+k8oMn2<br />
a=sendrecv</code></p>
<p>Aquí vienen los problemas. Lo que se puede ver arriba es un SDP <strong>correcto</strong> indicar el soporte opcional de SRTP, pero ahora nos surgen problemas:</p>
<p>Tenemos 2 streams de audio: uno con SRTP y otro sin SRTP, pero no existe relación aparente. ¿Cómo se supone que ha de actuar una aplicación al recibir esto? Podríamos asumir que solo se permite un único stream de audio, ¡pero eso sería limitar las capacidades de SIP y SDP! ¡¿Qué hacemos?!</p>
<p>La solución más ampliamente utilizada (aunque incorrecta) es la siguiente:</p>
<p><code>v=0<br />
o=- 3482507626 3482507626 IN IP4 192.168.99.53<br />
s=sipsimple 0.14.2<br />
c=IN IP4 192.168.99.53<br />
t=0 0<br />
m=audio 53519 RTP/AVP 103 102 9 0 8 101<br />
a=rtcp:53520 IN IP4 62.131.6.55<br />
a=rtpmap:103 speex/16000<br />
a=rtpmap:102 speex/8000<br />
a=rtpmap:9 G722/8000<br />
a=rtpmap:0 PCMU/8000<br />
a=rtpmap:8 PCMA/8000<br />
a=rtpmap:101 telephone-event/8000<br />
a=fmtp:101 0-15<br />
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:Fx7O4v/cWkY0cdwn/X3G/RE5ei2hXWt9l4zuoDwo<br />
a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:2rhPrkeZ++0i0aSkrGuPP2c1DM/kq/RUKQsR9BH2<br />
a=sendrecv</code></p>
<p>Como se puede ver estamos indicando un perfil de transporte inseguro (RTP/AVP) pero indicando las claves SRTP (atributos a=crypto).</p>
<p><strong>La solución estándar</strong></p>
<p>Como he comentado, la forma correcta de expresar el soporte opcional de SRTP es incluyendo 2 streams distintos de audio, pero no hay forma de correlacionarlos.  Imaginemos el siguiente caso: estamos viendo una peli por SIP. El vídeo nos viene en un stream (m=video) y el audio en otro (m=audio). Además, tenemos un segundo stream de audio con los comentarios del director. Por tanto tendremos 1 stream de vídeo y 2 de audio, pero no hay relación entre ellos, así que ¿cómo sabemos si en realidad no hay comentarios del director o si se trata de soporte opcional de SRTP? ¿y si aceptamos los 2 streams que hacemos? Un jaleo.</p>
<p>Para solucionar esto tenemos el <em>draft</em> <strong>SDP Capability Negotiation</strong> (<a href="http://tools.ietf.org/html/draft-ietf-mmusic-sdp-capability-negotiation-13">http://tools.ietf.org/html/draft-ietf-mmusic-sdp-capability-negotiation-13</a>) gracias al cual sí que existe una relación entre los streams de audio y el soporte opcional de SRTP tiene sentido:</p>
<p><code>v=0<br />
o=- 25678 753849 IN IP4 192.0.2.1<br />
s=<br />
c=IN IP4 192.0.2.1<br />
t=0 0<br />
m=audio 53456 RTP/AVP 0 18<br />
a=tcap:1 RTP/SAVP<br />
a=acap:1 crypto:1 AES_CM_128_HMAC_SHA1_80 inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:4<br />
a=pcfg:1 t=1 a=1</code></p>
<p>Y ahora a esperar a que los fabricantes lo implementen. <img src='http://www.saghul.net/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saghul.net/blog/2010/05/10/sobre-el-srtp-opcional/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
