tag:blogger.com,1999:blog-957225078859947292024-02-20T11:21:37.207-08:00HTTP Error 418: I'm a TeapotCosas sobre Seguridad de la InformaciónEnrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.comBlogger106125tag:blogger.com,1999:blog-95722507885994729.post-6191374751975956182019-02-27T05:49:00.000-08:002019-02-27T05:49:24.717-08:00Video sobre metadatos en el "Especial Seguridad" de la revista EnRed@2.0<div>
Hola.</div>
<div>
<br /></div>
<div>
Últimamente estoy colaborando en EnRed@2.0, una revista digital que ha creado el Instituto Andaluz de Administración Pública dentro de su programa de Gestión del Conocimiento.</div>
<div>
<br /></div>
<div>
Pues bien, acaba de publicarse su número 3, un "Especial Seguridad" en el que se aborda este tema desde diversos puntos de vista: consumo, riesgos laborales, deporte,... y, por supuesto, seguridad TIC.</div>
<div>
<br /></div>
<div>
De hecho, como las cabras tiran para el monte, de Seguridad TIC y cosas relacionadas hay tres artículos. Uno sobre cómo se organiza la Seguridad TIC en la Junta de Andalucía, otro sobre qué es la política de mesas limpias y, finalmente, un vídeo que he hecho sobre metadatos.</div>
<div>
<br /></div>
<div>
En realidad el video es una adaptación de una de las demos que hice en una presentación en la conferencia Sedian Day de finales de 2018. Si estuviste allí, quizá quieras recordar el momento. Y, si no, puede que quieras ver qué te perdiste.</div>
<div>
<br /></div>
<div>
En todo caso, por si quieres echar un vistazo, ahí dejo los enlaces:</div>
<div>
<br /></div>
<div>
<a href="https://ws168.juntadeandalucia.es/iaap/revista/2019/02/13/organizacion-de-la-seguridad-tic-en-la-junta-de-andalucia/" target="_blank">Organización de la Seguridad TIC en la Junta de Andalucía</a></div>
<div>
<br /></div>
<div>
<a href="https://ws168.juntadeandalucia.es/iaap/revista/2019/02/13/la-politica-de-mesas-limpias-esa-gran-olvidada-de-la-seguridad/" target="_blank">La política de mesas limpias, esa gran olvidada de la Seguridad</a></div>
<div>
<br /></div>
<div>
<a href="https://ws168.juntadeandalucia.es/iaap/revista/2019/02/13/que-publicas-cuando-publicas-un-documento/" target="_blank">Hacking básico: ¿Qué publicas cuando publicas un documento?</a> (este es el mío :-) )</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Y, si te quedas con ganas de más, la portada de la revista está en:</div>
<div>
<br /></div>
<div>
<a href="https://ws168.juntadeandalucia.es/iaap/revista/">https://ws168.juntadeandalucia.es/iaap/revista/</a></div>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-49132629388221899072018-10-06T04:44:00.003-07:002018-10-06T04:44:41.715-07:00Buenas ideasEl mensaje entusiasta que acompaña a la fotografía casi me convence.<br />
<br />
Y pensándolo bien: ¿Qué hay de malo hacer un molde en barro de la llave de tu casa, o de tu piso de vacaciones, y escribir en él la dirección?<br />
<br />
Incluso podrías compartirlo en tu muro de Facebook para que la gente vea qué ideas más chulas tienes.<br />
<br />
¿Qué puede salir mal?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnLgL6ntx-8yXp17kSitW9cY9NEbIhI-7kd-5nbXq2Azwm3PviMlOq3lgJBB8x8g9qPyb55tTAt2IVj2Rds82Iewd49cetMJ4lFckpG-HlzFlAf0xcCoE-ONTh2emKadM4xTcgvYnbD7d0/s1600/llaves.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="595" data-original-width="630" height="603" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnLgL6ntx-8yXp17kSitW9cY9NEbIhI-7kd-5nbXq2Azwm3PviMlOq3lgJBB8x8g9qPyb55tTAt2IVj2Rds82Iewd49cetMJ4lFckpG-HlzFlAf0xcCoE-ONTh2emKadM4xTcgvYnbD7d0/s640/llaves.png" width="640" /></a></div>
<br />
Además, por lo que se ve, es vegetariano. Sano y saludable.<br />
<br />
En definitiva: cosas que es mejor no tener y, de verte obligado a hacerte con una, deberías guardar en una caja fuerte y bien opaca, Al menos hasta que vendas la casa.<br />
<br />
Pero, claro, entonces no tendrías de qué presumir.Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-86869542496197892152018-08-27T12:31:00.000-07:002018-08-27T12:31:19.604-07:00Gato por liebre (o I por l)Es sabido que los phishers utilizan dominios falsos en sus campañas de correos fraudulentos y, en ocasiones, tratan de confundir al personal usando nombres de dominio "con trampa".<div>
<br /></div>
<div>
A veces el truco es medianamente avanzado, como cuando usan caracteres Unicode internacionales que se parecen a los latinos. Buscan, por ejemplo, un carácter cirílico que se parezca a la letra "a" y registran dominios que, cuando los ves escritos, parecen "amazon,com". Sin usar la letra "a", claro.</div>
<div>
<br /></div>
<div>
Otras no se complican tanto y usan la letra "I" (i mayúscula) en lugar de una "l" (ele) o cosas por el estilo.</div>
<div>
<br /></div>
<div>
Sobre el tema escribí no hace mucho en el libro sobre "Hacking Web Technologies: Client Side Attacks". Sobre eso y sobre cómo los navegadores tratan de protegernos contra estos ataques mostrando los caracteres Unicode que puedan causar equívocos mediante una codificación de caracteres ordinarios llamada Punicode. Y utilizando en la barra de direcciones un tipo de letra que deje claro, sin lugar a confusiones, qué tenemos escrito.</div>
<div>
<br /></div>
<div>
Pero... usar navegadores es de viejunos como yo. Y las nuevas aplicaciones no tienen el mismo camino recorrido que nuestros queridos browsers. Revisando hoy mi Whataspp encontré un mensaje curioso:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTTNb-gXSn1ByiY9flu3uD02jkR_5hrlKMi0wXtHQshbgZiNcR_thSRCs8xj7UI64_I7LL0is8vuGvVzTBT4qXOHZ58Z4jJsL1CvFlbajtT94zQ0bZKvjM6tSp5lGK75Ea1Kc0Pjgv3MJ4/s1600/whatsapp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="328" data-original-width="480" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTTNb-gXSn1ByiY9flu3uD02jkR_5hrlKMi0wXtHQshbgZiNcR_thSRCs8xj7UI64_I7LL0is8vuGvVzTBT4qXOHZ58Z4jJsL1CvFlbajtT94zQ0bZKvjM6tSp5lGK75Ea1Kc0Pjgv3MJ4/s400/whatsapp.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
A que sé que estáis pensando...</div>
<div>
<br /></div>
<div>
Pues sí, la "ele" de "hotels" no es una "ele", sino una "i mayúscula".</div>
<div>
<br /></div>
<div>
Mi consejo es que no visites la dirección del enlace. Pero si alguien lo hace, su navegador le llevará, previa redirección, a un dominio raruno con uno de esos nuevos TLD:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBQkR5b9C-EgBwj_GjTS0agNQeRfVV89FoyX2iVMG82OUJPNp3Lq3IHlHf6aKlwtbSvz8WaK7vRFleR7sqFBbF7Kx8dQhWiN8zOMaGp7bVBVwjTG5J2WHq5y6AsIeL9mSSELFn1wwaisG/s1600/redirige_a.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="723" data-original-width="705" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBQkR5b9C-EgBwj_GjTS0agNQeRfVV89FoyX2iVMG82OUJPNp3Lq3IHlHf6aKlwtbSvz8WaK7vRFleR7sqFBbF7Kx8dQhWiN8zOMaGp7bVBVwjTG5J2WHq5y6AsIeL9mSSELFn1wwaisG/s400/redirige_a.jpg" width="390" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Un dominio registrado el 24-8-2018. Tres días antes del momento en que escribo esto.</div>
<div>
<br /></div>
<div>
Resumiendo: Cuidadín con los enlaces de Whatsapp.</div>
<div>
<br /></div>
<div>
Nos vemos por estos lares (espero que pronto).</div>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-26383519758324597862017-06-27T16:12:00.001-07:002017-06-27T16:12:38.883-07:00Era previsible. Y aquí lo tenemosEn las últimas horas, algunos habremos dicho unos cuantos de cientos de veces eso de "ya te lo dije".<br />
<br />
Sí. Era de esperar. Era cuestión de tiempo que volviera a pasar algo parecido a lo del WannaCry. Quizá menos espectacular. Quizá más efectivo. Quizá...<br />
<br />
Hoy vuelve a aparecer la palabra "ransomware" en los medios de comunicación. Un ataque masivo, dicen, que ha afectado a un buen número de organizaciones, sobre todo en Europa y, de forma especial, en Ucrania. Que yo haya visto por ahí, hasta ahora han tenido problemas empresas como la publicitaria británica WPP, las transportistas TNT-Express y Maersk, la farmaceútica norteamericana Merk, la aeronaútica Antonov, los bancos Oschadbank y Privatbank de Ucrania y la red eléctrica de este país, el metro de Kiev, la petrolera Rosneft o el sistema de detección de radiaciones de lo que queda de la central nuclear de Chernobyl. Y una empresa de hospitales norteamericana, Heritage Valley Health System, y el grupo español Mondelez (propietario de Toblerone, Milka, Tang y Oreo)<br />
<br />
La cobertura de la noticia es de lo más variado:<br />
<a href="https://www.thestreet.com/story/14199347/1/victims-of-the-latest-cyberattack.html?puc=CNNMONEY&cm_ven=CNNMONEY">https://www.thestreet.com/story/14199347/1/victims-of-the-latest-cyberattack.html?puc=CNNMONEY&cm_ven=CNNMONEY</a><br />
<a href="http://money.cnn.com/2017/06/27/technology/hacking-petya-europe-ukraine-wpp-rosneft/index.html">http://money.cnn.com/2017/06/27/technology/hacking-petya-europe-ukraine-wpp-rosneft/index.html</a><br />
<a href="http://www.bbc.com/news/technology-40416611">http://www.bbc.com/news/technology-40416611</a><br />
<a href="http://internacional.elpais.com/internacional/2017/06/27/actualidad/1498568187_011218.html">http://internacional.elpais.com/internacional/2017/06/27/actualidad/1498568187_011218.html</a><br />
<a href="http://www.elmundo.es/tecnologia/2017/06/27/595269e0ca4741fb3f8b4668.html">http://www.elmundo.es/tecnologia/2017/06/27/595269e0ca4741fb3f8b4668.html</a><br />
<br />
<br />
Y por poner algo más técnico, los de Kaspersky van actualizando la información que van obteniendo en:<br />
<a href="https://blog.kaspersky.es/new-ransomware-epidemics/13581/">https://blog.kaspersky.es/new-ransomware-epidemics/13581/</a><br />
<a href="https://blog.kaspersky.com/new-ransomware-epidemics/17314/">https://blog.kaspersky.com/new-ransomware-epidemics/17314/</a><br />
<br />
Todavía se sabe poco sobre este nuevo malware. En realidad, ni siquiera se sabe cuán nuevo es. Se discute si es una variante de Petya. De hecho, Kaspersky le ha llamado "NotPetya". <br />
<br />
Y, por supuesto, no se pierde la ocasión de compararlo con WannaCry. Se ha dicho que llega a través de mensajes de correo que llevan un enlace a un fichero malicioso y que también utiliza una variante de EternalBlue para propagarse por las redes locales. Aunque también he leído, entre otros, a <a href="https://twitter.com/GossiTheDog/status/879761465061904394" target="_blank">Kevin Beaumont </a>que puede estar empleando psexec o WMI (Windows management instrumentation).<br />
<br />
En la <a href="https://twitter.com/hackingdave?lang=es" target="_blank">cuenta de twitter de Dave Kennedy </a>puede encontrarse la información que éste va recopilando. De ahí he sacado unas cuantas ideas: <br />
<ul>
<li>Que el malware busca contraseñas en el equipo y trata de utilizarlas para infectar a otros sistemas. Se ha hablado de diversas técnicas para extraer estas credenciales, incluyendo el uso de mimikatz. Y es que eso sólo hay una cosa peor que que todas las cuentas locales de administración de los distintos equipos tengan una misma contraseña: que la compartan también con la del administrador del dominio.</li>
<li>Que si se bloquea el uso del fichero C:\Windows\perfc.dat para escritura y ejecución, el malware no puede ejecutarse.</li>
</ul>
<br />
Otra forma de propagación de la que se ha hablado es la infección de un servidor de actualizaciones de software. En particular, se ha mencionado a la empresa MeDoc, titular de un programa que promete automatizar los procesos de flujo de trabajo y los informes dentro de un mismo producto. La propia empresa <a href="http://www.microsofttranslator.com/bv.aspx?from=&to=es&a=http%3A%2F%2Fwww.me-doc.com.ua%2Fvnimaniyu-polzovateley" target="_blank">reconoció inicialmente haber sufrido un ataque</a> para después aclarar en su cuenta de Facebook que, a pesar de ello, <a href="https://www.facebook.com/medoc.ua/posts/1904044929883085" target="_blank">sus actualizaciones de software no están infectadas</a> (como algunos traductores suelen tener problemas con las páginas servidas sobre HTTPS, mejor que copies el contenido y lo pegues tú en el traductor).<br />
<br />
Por cierto que uso el traductor de Bing y no el de Google en el primero de estos dos enlaces. Y la razón es que la traducción que éste último hacía me pareció, a riesgo de equivocarme, que no era muy correcta:<br />
<span id="goog_1019972841"></span><span id="goog_1019972842"></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXNHwCuWADupz-F-KAxArUxBZf-pylKBF4hYqEHqidLhwJtYxGWWW_hlNNAuw61mI7Xv73f987L0s6u4-tHV7ZBBsZR8NQWv2z4fSknlFLB_1KY32itz1jDSwEU7hThHdNCxB2gyTmg5-8/s1600/Captura.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="536" data-original-width="876" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXNHwCuWADupz-F-KAxArUxBZf-pylKBF4hYqEHqidLhwJtYxGWWW_hlNNAuw61mI7Xv73f987L0s6u4-tHV7ZBBsZR8NQWv2z4fSknlFLB_1KY32itz1jDSwEU7hThHdNCxB2gyTmg5-8/s640/Captura.PNG" width="640" /></a></div>
<div style="text-align: center;">
Imagen 1. Cuando no puedas echarle la culpa al mayordomo, para eso está el camarero</div>
<br />
También me llamó la atención una fotografía que está acompañando a algunos artículos en los que se cubre esta noticia. En ella aparecen los típicos mensajes que muestra CHKDSK a medida que analiza un volumen de disco. La imagen aparece en uno de los mensajes que publica en su <a href="https://twitter.com/rozenkopavlo?lang=en" target="_blank">cuenta de Twitter el Vice-Primer Ministro ucraniano, Rozenko Pavlo</a>, acompañando al texto "Та-дам! Секретаріат КМУ по ходу теж "обвалили". Мережа лежить." algo que no he sido capaz de traducir pero que <a href="http://www.ladbible.com/news/news-systems-at-chernobyl-nuclear-plant-among-those-hit-by-new-cyber-attack-20170627" target="_blank">en una página</a> he encontrado en versión inglesa como ""Yes, ladies! The Cabinet of Ministers Secretariat also 'collapsed' along the way. The network lies." (a riesgo de equivocarme, sería"¡Sí, señoras! El Secretariado del Gabinete de Ministros también está colapsado sobre la marcha. La red miente").<br />
<br />
Confieso que lo primero que se me vino a la cabeza es "éste ha confundido, le ha saltado en CHKDSK y no ha entendido lo que le salía". Pero resulta que este nuevo malware reinicia el equipo. Quizá de ese modo evite que se puedan extraer de memoria las claves privadas utilizadas para cifrar los ficheros. <br />
<br />
Creo que es conveniente repetir aquí algo que leí en la cuenta de Twitter de Dave Kennedy. Quizá salve la información de alguien: Si sale el CHKDSK, apaga el equipo. Si el malware no ha cifrado aún tus ficheros, cosa que sería probable, podrías usar un Live CD para rescatarlos antes de que la cosa vaya a peor. Incluso aplicaría este consejo a quienes vean como su equipo se reinicia sin causa aparente: no lo dejes reiniciar, apágalo y haz una copia de tus datos con el Live CD.<br />
<br />
En fin. Que ya veremos como acaba esto. Que, por no saber, no sabemos aún ni cómo empezó (aunque en Ucrania miran de reojo a Rusia).<br />
<br />
Y que, inevitablemente, pronto estaremos hablando de otro ataque global de malware.Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-56782749728440422882017-05-22T01:26:00.001-07:002017-05-22T05:34:49.950-07:00WCrypt WTFHola.<br />
Acabo de mirar en el móvil la dirección <a href="https://intel.malwaretech.com/botnet/wcrypt">https://intel.malwaretech.com/botnet/wcrypt</a>, esa del mapa con el estado actual de WCrypt.<br />
<br />
Y no me creo lo que veo:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglHNl8OtfijytESrjsXObZmKwT9-lPob6ye0s5-U33G8WCj9Eur9kqZ6fVjxONcKdKIgEnC9ClzL2AW7xtbxPxNl_3CpznAIxAJ16SSTEMxP67lT95d6bTKCeT2nWaHffTGyIPmmHftIme/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglHNl8OtfijytESrjsXObZmKwT9-lPob6ye0s5-U33G8WCj9Eur9kqZ6fVjxONcKdKIgEnC9ClzL2AW7xtbxPxNl_3CpznAIxAJ16SSTEMxP67lT95d6bTKCeT2nWaHffTGyIPmmHftIme/s400/1.png" width="328" /></a></div>
<br />
Demasiado bueno para ser verdad... Sobre todo porque lo de "0 online" aparece para todas las botnets que esta web monitoriza.<br />
<br />
Aparte que hace cosa de 8 horas que en <a href="https://twitter.com/MalwareTechBlog" target="_blank">@MalwareTechBlog</a> se reportaba que a estas alturas seguían siendo detectadas unas 100.000 direcciones IP únicas diarias.<br />
<br />
Quizá tenga que ver con los ataques de DDoS que MalwareTech ha venido recibiendo de vez en cuando desde que adquirió la notoriedad de que hoy disfruta. De hecho, en Twitter aparece alguna referencia reciente a estos ataques. Como en https://twitter.com/MalwareTechBlog/status/866444112479887362<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiJ-wI1iTHykV5MpcZgly8G8UNt9nCSV8CxDx662PKsy149GOPNlCCzpzQQCeVzQQjaTA6UtOS7_uwxMwSafhLXEUNfTn7jFdI49o-myntn0NX4nd42EGvZlaLzVVizzyS7XdRIdZ7QVMj/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiJ-wI1iTHykV5MpcZgly8G8UNt9nCSV8CxDx662PKsy149GOPNlCCzpzQQCeVzQQjaTA6UtOS7_uwxMwSafhLXEUNfTn7jFdI49o-myntn0NX4nd42EGvZlaLzVVizzyS7XdRIdZ7QVMj/s400/1.png" width="290" /></a></div>
<br />
Es lo que tiene estar en el centro de atención...Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-36846285938798537422017-05-18T11:52:00.001-07:002017-05-18T11:52:47.855-07:00Cifrado de contraseñas en refbase<br />
La última vez, para comprobar la <a href="http://418iamateapot.blogspot.com/2017/05/sql-injection-y-alguna-cosa-mas-si-en.html" target="_blank">vulnerabilidad de SQL Injection de refbase</a>, obtuvimos unos cuantos hashes de contraseñas. Hoy he añadido algunas cuentas de acceso a la aplicación con objeto de seguir jugando. Volviendo a relizar la misma inyección de SQL he obtenido los siguientes pares de correos electrónicos y hashes (como es costumbre, van separados por el carácter ":"):<br />
<blockquote class="tr_bq">
user@refbase.net:usLtr5Vq964qs<br />
bb@cc.com:bbTdyOM4g6r9Q<br />
a@b.c:a@MwrmlI6E95E<br />
a!dsf@t.com:a!72jMCWwO03E </blockquote>
¡Uy, qué cortitos son estos hashes! Sólo 13 caracteres. Esto tiene mala pinta.<br />
<br />
Veamos los scripts de la aplicación que gestionan las constraseñas. El primero de ellos, en el que se calcula el hash y se almacena en la base de datos es "user_validation.php", dentro del cual podemos encontrar el siguiente fragmento de código:<br />
<blockquote class="tr_bq">
$salt = substr($formVars["email"], 0, 2);<br />
<br />
// Create the encrypted password<br />
$stored_password = crypt($formVars["loginPassword"], $salt);<br />
<br />
// Update the user's password within the auth table<br />
$query = "UPDATE $tableAuth SET "<br />
. "password = " . quote_smart($stored_password)<br />
. " WHERE user_id = " . quote_smart($userID);</blockquote>
Y la comprobación realizada en los intentos de inicio de sesión puede encontrarse en "user_login.php":<br />
<blockquote class="tr_bq">
$salt = substr($loginEmail, 0, 2); </blockquote>
<blockquote class="tr_bq">
// Encrypt the loginPassword collected from the challenge (so that we can compare it to</blockquote>
<br />
<blockquote class="tr_bq">
// the encrypted passwords that are stored in the 'auth' table)<br />
$crypted_password = crypt($loginPassword, $salt);</blockquote>
¡Sí que tiene mala pinta! Se emplea la función "crypt" con una "sal" de sólo dos caracteres. Veamos lo que dice el <a href="http://php.net/manual/es/function.crypt.php" target="_blank">manual de PHP </a>sobre ella. Pongo puntos suspensivos para omitir parte del texto y no hacerlo demasiado largo:<br />
<blockquote class="tr_bq">
<span class="function"><b>crypt()</b></span> devolverá el hash de un string utilizando el
algoritmo estándar basado en <abbr class="abbrev">DES</abbr> de Unix o
algoritmos alternativos que puedan estar disponibles en el sistema.
</blockquote>
<blockquote class="tr_bq">
Algunos sistemas operativos soportan más de un tipo de hash. De
hecho, a veces el algoritmo estándar basado en DES es sustituído por un
algoritmo basado en MD5. El tipo de hash se dispara mediante el argumento salt. ... Si no se proporciona una sal, PHP
autogenerará o una sal estándar de dos caracteres (DES), o una de doce
caracteres (MD5), dependiendo de la disponibilidad de la función crypt() de MD5.</blockquote>
<blockquote class="tr_bq">
...</blockquote>
<blockquote class="tr_bq">
<div class="simpara">
En sistemas donde la función crypt() soporta múltiples
tipos de hash, las siguientes contantes se establecen en 0 o 1,
dependiendo de que si el tipo dado está disponible:
</div>
<ul class="itemizedlist">
<li class="listitem">
<span class="simpara">
<b><code>CRYPT_STD_DES</code></b>... salt de dos caracteres
del alfabeto "./0-9A-Za-z".</span>
</li>
<li class="listitem">
<span class="simpara">
<b><code>CRYPT_EXT_DES</code></b>...el "salt" es un
string de 9 caracteres que consiste en un guión bajo seguido de 4 bytes del conteo de iteraciones
y 4 bytes del salt. </span>
</li>
<li class="listitem">
<span class="simpara">
<b><code>CRYPT_MD5</code></b>... salt de doce caracteres comenzando con
$1$
</span>
</li>
<li class="listitem">
<span class="simpara">
<b><code>CRYPT_BLOWFISH</code></b>... salt como
sigue: "$2a$", "$2x$" o "$2y$", un parámetro de coste de dos dígitos, "$", y
22 caracteres del alfabeto "./0-9A-Za-z". </span>
</li>
<li class="listitem">
<span class="simpara">
<b><code>CRYPT_SHA256</code></b><code></code><code>...</code> salt de dieciséis caracteres
prefijado con $5$. </span>
</li>
<li class="listitem">
<span class="simpara">
<b><code>CRYPT_SHA512</code></b>... salt de dieciséis caracteres
prefijado con $6$</span>
</li>
</ul>
</blockquote>
O sea: que al usar dos caracteres para la "sal" se obliga a "crypt" a usar DES estándar que, como se vio anteriormente, genera hashes de 13 caracteres de los que los 2 primeros corresponden a la salt. Por decirlo de forma suave, para esto de las contraseñas se queda bien cortito.<br />
<br />
Además, los dos caracteres deben pertenecer al alfabeto <span class="simpara"> "./0-9A-Za-z". Dos signos de puntuación, diez dígitos, veintiséis </span>letras mayúsculas y otras veintiséis minúsculas. En total, un alfabeto de 64 caracteres. Y, en definitiva, sólo 64x64 = 4096 combinaciones posibles que, con el estado actual de la tecnología, resultan insuficientes para hacer inviables los ataques con Rainbow Tables.<br />
<br />
Pero volvamos a observar los hashes obtenidos mediante SQL Injection. Los dos últimos contienen caracteres incorrectos para una "sal" de las que acabamos de describir: <br />
<blockquote class="tr_bq">
a@b.c:a@MwrmlI6E95E<br />
a!dsf@t.com:a!72jMCWwO03E </blockquote>
La "sal" del primero de los hashes es "a@". Y la del segundo, "a!". Ni "@" ni "!" son caracteres incluídos en el alfabeto <span class="simpara">"./0-9A-Za-z". Entonces... ¿qué hace PHP con ellos? </span><br />
<br />
<span class="simpara">Aunque el manual indique la función fallará si encuentra este tipo de caracteres, la verdad es que no lo hace. Y la prueba es que ahí están esos hashes. En PHP 7 hace que se muestre un warning, pero poco más. Las distintas implementaciones de DES estándar responden cada una a su manera a estas situaciones pero lo habitual (y lo que PHP hace) es sustituir cada uno de estos caracteres incorrectos por otro que sí sea válido. La forma en que se realiza este "mapeo" puede variar dependiendo de cada software, de modo que realicé un script PHP que se encargara del trabajo sucio.</span><br />
<span class="simpara"><br /></span>
<span class="simpara">Este script, cuyo listado aparece al final del post, determina mediante pruebas exhaustivas el mapeo de caracteres incorrectos a caracteres correctos y, si es necesario, corrige la parte de la "sal" del hash para que no quede en él nada raro. El resultado que obtuve fue</span><br />
<blockquote class="tr_bq">
user@refbase.net:usLtr5Vq964qs<br />
bb@cc.com:bbTdyOM4g6r9Q<br />
a@b.c:aGMwrmlI6E95E<br />
a!dsf@t.com:an72jMCWwO03E </blockquote>
Y hay otro problema. Este mecanismo de creación de hashes trunca la contraseña en el octavo carácter. O sea, que de nada sirve poner contraseñas de 9 o más caracteres si uno quiere mejorar su calidad. Para comprobarlo, tomemos el siguiente script PHP de usar y tirar, que obtiene un hash para tres cadenas que comienzan con los mismos caracteres: una de longitud 7, otra de longitud 8 y una última de longitud 12:<br />
<blockquote class="tr_bq">
<?php<br />
function imprime_fila($texto, $salt, $valor) {<br />
$dato = $valor ? $valor : crypt($texto, $salt);<br />
print "<br />
<tr><br />
<td>$texto</td><br />
<td>$salt</td><br />
<td>$dato</td><br />
</tr><br />
";<br />
}<br />
<br />
print "<table border=1>";<br />
imprime_fila("TEXTO", "SALT", "HASH");<br />
$base = "1234567";<br />
foreach (["", "8", "80abc"] as $texto) {<br />
imprime_fila($base . $texto, "ab");<br />
}<br />
print "</table>";<br />
?></blockquote>
En la salida producida puede observarse que el hash para "12345678" es el mismo que para "1234567890abc". O sea: que el propio sistema se encarga de deteriorar las contraseñas que recibe si estas son demasiado buenas.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZysHL3BlpltrDkGd6MnJFnnFXOy-oFV_v2xnXDrxauGfnhmvoKdWsO6AGqB4c_i1nWk9XIUJ1FSnY_P-CKdG_hyOhdLOTtJj1BqW673xe54lhpWErLFAdkRdykbCSjRdC93r-rH6eOV0G/s1600/01.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZysHL3BlpltrDkGd6MnJFnnFXOy-oFV_v2xnXDrxauGfnhmvoKdWsO6AGqB4c_i1nWk9XIUJ1FSnY_P-CKdG_hyOhdLOTtJj1BqW673xe54lhpWErLFAdkRdykbCSjRdC93r-rH6eOV0G/s400/01.PNG" width="400" /></a></div>
<br />
<br />
¿Que si todo esto es tan importante? Para comprobarlo, guardemos estos datos en un fichero llamado "refbase.txt" y pasémoslo por<a href="http://www.openwall.com/john/" target="_blank"> John The Ripper</a>. Vaya por delante que no voy a utilizar un equipo demasiado potente ni me he molestado en optimizar el uso de este crackeador de hashes.<br />
<br />
En primer lugar, realicé sólo un ataque de diccionario mediante lista de palabras para coger pronto las "frutas que están al alcance de la mano":<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8uL5-2Q7sS05EFHRRhf7ZWbTvxxZgGLtWSuH-Pf8zSWb9TCsp14GKvpPcrQhhP9FcTdV9ZM5w-CAm5ulzvqvhrEH2KneRalFIXL3dolSbNpB7ZRKkeqlvcj_kCF-_oPMAe2bmQz86emdi/s1600/02.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="121" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8uL5-2Q7sS05EFHRRhf7ZWbTvxxZgGLtWSuH-Pf8zSWb9TCsp14GKvpPcrQhhP9FcTdV9ZM5w-CAm5ulzvqvhrEH2KneRalFIXL3dolSbNpB7ZRKkeqlvcj_kCF-_oPMAe2bmQz86emdi/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ataque de lista de palabras a hashes DES estándar</td></tr>
</tbody></table>
En menos de un segundo, ya tengo las primeras tres contraseñas. Para ver si obtengo la cuarta, toca probar a dejar a John The Ripper usar sus propias reglas de "mejora" del diccionario:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZGTEhftIhttF_0bwHvPCeXcB5SqLrpDiwx8ZG1hvgwKEVQd0FoKVjw1LDftza2xZ_Cu4FCAN9eJTf8BtCdK7Hq0HRPctTknbRUUYznGvwKau49QlaQJQQHCpofZPSBKF62szPAixcmMoE/s1600/02.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZGTEhftIhttF_0bwHvPCeXcB5SqLrpDiwx8ZG1hvgwKEVQd0FoKVjw1LDftza2xZ_Cu4FCAN9eJTf8BtCdK7Hq0HRPctTknbRUUYznGvwKau49QlaQJQQHCpofZPSBKF62szPAixcmMoE/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Cuarenta y un segundos</td></tr>
</tbody></table>
<br />
<br />
Sólo ha hecho falta poco más de cuarenta segundos para lograrlo. Bueno, la verdad es que las contraseñas no eran demasiado buenas y no ha sido necesario utilizar la artillería pesada, pero ya tenemos una primera medida.<br />
<br />
Desde luego, mejor habrían hecho en buscar un algoritmo apropiado para el cómputo del hash. Esto se lo comenté en su día, hace más de un año, con los desarrolladores de refbase y me respondieron que eran conscientes del problema y que estaban estudiando dejar de usar la función "crypt" y sustituirla por "password_hash".<br />
<br />
Deben ser muy estudiosos, porque aún parecen seguir estudiándolo. En todo caso, que estuvieran al tanto de la solución me reafirma en mi creencia de que no es que esto de la seguridad no les preocupe, sino que no tienen el tiempo ni los recursos necesarios para mantener un software tan complejo como refbase.<br />
<br />
Sobre "password_hash" se habla en la propia página de "crypt" del manual de PHP :<br />
<blockquote class="tr_bq">
password_hash() utiliza un hash fuerte, genera una sal fuerte, y aplica los redondeos necesarios automáticamente. password_hash() es una envoltura simple de crypt() compatible con los hash de contraseñas existentes. Se aconseja el uso de password_hash(). </blockquote>
Y, <a href="http://php.net/manual/en/function.password-hash.php" target="_blank">si nos vamos a su propia documentación</a>, podemos leer:<br />
<blockquote class="tr_bq">
<div class="simpara">
Actualmente se admiten los siguientes algoritmos:
</div>
<ul class="itemizedlist">
<li class="listitem">
<span class="simpara">
<b><code>PASSWORD_DEFAULT</code></b> - Usar el algoritmo bcrypt (predeterminado a partir de PHP 5.5.0).
Observe que esta constante está diseñada para cambiar siempre que se añada un algoritmo nuevo y más fuerte
a PHP. Por esta razón, la longitud del resultado de usar este identificador puede cambiar con el tiempo.
Por lo tanto, se recomienda almacenar el resultado en una columna de una base de datos que pueda
apliarse a más de 60 caracteres (255 caracteres sería una buena elección).
</span>
</li>
<li class="listitem">
<span class="simpara">
<b><code>PASSWORD_BCRYPT</code></b> - Usar el algoritmo <b><code>CRYPT_BLOWFISH</code></b> para
crear el hash. Producirá un hash estándar compatible con <span class="function"><a class="function" href="http://php.net/manual/es/function.crypt.php">crypt()</a></span> utilizando
el identificador "$2y$". El resultado siempre será un string de 60 caracteres, o <b><code>FALSE</code></b> en caso de error.
</span></li>
</ul>
</blockquote>
Bueno, BCRYPT es, desde luego, mucha mejor opción que DES estándar. No es perfecta, y trunca las contraseñas a 72 caracteres:<br />
<blockquote class="tr_bq">
<div class="caution">
<b class="caution">Precaución</b>
<br />
<div class="para">
El uso de <b><code>PASSWORD_BCRYPT</code></b> como el
algoritmo resultará
en el truncamiento del parámetro <code class="parameter">password</code> a
un máximo de 72 caracteres de longitud.
</div>
</div>
</blockquote>
Y alguien apunta en los comentarios que también trunca la contraseña en el primer carácter nulo que encuentre:<br />
<blockquote class="tr_bq">
<code><span class="html">
Please note that password_hash will ***truncate*** the password at the first NULL-byte.</span></code> </blockquote>
<blockquote class="tr_bq">
</blockquote>
Pero creo que se ven claramente las ventajas frente a DES estándar. Además, para verificar posteriormente las contraseñas contra los hashes calculados con "password_hash", existe otra función, "<a href="http://php.net/manual/en/function.password-verify.php" target="_blank">password_verify</a>" que, como se indica en su <a href="http://php.net/manual/en/function.password-verify.php" target="_blank">documentación en inglés</a>, tiene mecanismos de protección frente a <a href="https://codahale.com/a-lesson-in-timing-attacks/" target="_blank">ataques de medida de tiempo</a>. Ya sabe: esos que tratan de determinar cuántos caracteres del inicio, ya sea de la contraseña o del hash, has acertado midiendo el tiempo que el programa tarda en comparar las cadenas:<br />
<blockquote class="tr_bq">
<div class="para">
This function is safe against timing attacks.
</div>
</blockquote>
Preparé, pues, un script "rápido y sucio" que calcula los hashes usando "password_hash". Mejor no ponerle ninguna "sal" y dejar que se genere una al azar:<br />
<blockquote class="tr_bq">
<?php<br />
print"user@refbase.net:". password_hash("start", PASSWORD_DEFAULT) . "<br>";<br />
print"bb@cc.com:". password_hash("test", PASSWORD_DEFAULT) . "<br>";<br />
print"a@b.c:". password_hash("a", PASSWORD_DEFAULT) . "<br>";<br />
print"a!dsf@t.com:". password_hash("p1968", PASSWORD_DEFAULT) . "<br>";<br />
?></blockquote>
Y el resultado obtenido esta vez fue (si tú lo pruebas, te saldrán hashes distintos por lo de la "sal" aleatoria):<br />
<br />
<blockquote class="tr_bq">
user@refbase.net:$2y$10$g1vrkHhlkuFy.c4njRQVFuHvL9cB8wc8GTmyykRYNTwUDTFSAIyFm<br />
bb@cc.com:$2y$10$Zi1mUOzPS7VolHJc7vLpReJQdbR7eoErCHQhqiizEDKerPMaJCMmi<br />
a@b.c:$2y$10$/0GiqTFxtA2NJXtRc4pvV.niY940ClYAnxelPsnVtuW1chBFgLnHm<br />
a!dsf@t.com:$2y$10$mmJeQXlay3dv1wysiFPvBeCL0j1U81SLrs/TiFV0tfOy/97DKSNgO</blockquote>
De modo que... a guardarlo en "refbase2.txt" y someterlo a un ataque de diccionario por lista de palabras: <br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6EVY-CYgC7lChFOsGLdhl-29xIzWKFEpcpNGkgKOmvVAfuzxg-pkpxSvpN1mT8nGpUz6X77eRZ6sdgLHljKl3CibQMR8Ys7S4yui7LdJw0mGFEobObqbKkxIBiRb-L5sFFYvBM0UZjlHF/s1600/02.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6EVY-CYgC7lChFOsGLdhl-29xIzWKFEpcpNGkgKOmvVAfuzxg-pkpxSvpN1mT8nGpUz6X77eRZ6sdgLHljKl3CibQMR8Ys7S4yui7LdJw0mGFEobObqbKkxIBiRb-L5sFFYvBM0UZjlHF/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Esto tarda bastante más</td></tr>
</tbody></table>
<br />
Lo que antes llevó menos de un segundo ahora lleva casi cuatro minutos. Y quedan aún las contraseñas más difíciles. Si observamos los indicadores que da John de Ripper vemos que, por tomar uno cualquiera de ellos, el número de contraseñas probadas por segundo se ve reducido en una proporción aproximada de 1 a 7600. Creo que poco más habría que añadir.<br />
<br />
Y la pena es que no haría falta que modificaran demasiado el código fuente de refbase para arreglar todo esto. <br />
<br />
Bueno, aquí lo dejo por hoy. Nos vemos por aquí pronto, espero.<br />
<br />
PD.: Ahí dejo el script que corrige las "sales" para los hashes DES estándar:<br />
<blockquote class="tr_bq">
<?php<br />
<br />
<br />
$password="user@refbase.net:usLtr5Vq964qs<br />
bb@cc.com:bbTdyOM4g6r9Q<br />
a@b.c:a@MwrmlI6E95E<br />
a!dsf@t.com:a!72jMCWwO03E";<br />
<br />
<br />
function crea_conversor() {<br />
$cadena = "adsfadf !!! adfadsf!!!";<br />
$validos = [".", "/"];<br />
for ($i=48;$i<=57;$i++) {<br />
$validos[] = chr($i);<br />
}<br />
<br />
for ($i=65;$i<=90;$i++) {<br />
$validos[] = chr($i);<br />
}<br />
<br />
for ($i=97;$i<=122;$i++) {<br />
$validos[] = chr($i);<br />
}<br />
<br />
$res = [];<br />
for ($i=0; $i<255; $i++) {<br />
$c = chr($i);<br />
<br />
$cod = substr(crypt($cadena, "a$c"), 2);<br />
foreach ($validos as $v) {<br />
$cod2 = substr(crypt($cadena, "a$v"), 2);<br />
if ($cod == $cod2) {<br />
$res[$c] = $v;<br />
}<br />
}<br />
}<br />
<br />
return $res;<br />
}<br />
<br />
function procesa_hash($h, $conv) {<br />
<br />
return <br />
$conv[substr($h,0,1)] .<br />
$conv[substr($h,1,1)] .<br />
substr($h,2);<br />
}<br />
<br />
<br />
$conv = crea_conversor();<br />
$lineas = preg_split("/[\r\n]+/", $password);<br />
foreach ($lineas as $l) {<br />
$partes = explode(":", $l);<br />
print htmlspecialchars($partes[0] . ":" . procesa_hash($partes[1], $conv)). "<br>";<br />
}</blockquote>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-67665566148921242192017-05-16T16:12:00.002-07:002017-05-16T16:12:40.964-07:00SQL Injection y alguna cosa más. Sí, en refbaseVolvamos a la aplicación refbase. Esta que, por ahora, tiene vulnerabilidades de <a href="http://418iamateapot.blogspot.com/2017/04/by-design-5.html" target="_blank">subida de archivos de cualquier extensión</a>, <a href="http://418iamateapot.blogspot.com/2017/05/vulnerabilidades-en-el-instalador-de.html" target="_blank">ejecución de comandos de sistema operativo y de ficheros de código SQL</a>, <a href="http://418iamateapot.blogspot.com/2017/05/refbase-ejecucion-de-codigo-php.html" target="_blank">ejecución de código PHP arbitrartio</a>, aparte de <a href="http://418iamateapot.blogspot.com/2017/05/vulnerabilidad-de-insufficient.html" target="_blank">una gestión de las versiones que, creo, supone un serio riesgo para quienes la instalan en sus sistemas</a>. Aquí la tenemos<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguiRNGwJwspHnyNvQoIVxjU8I0gA_gN9n1l54mokp7LbEF0ckphesVMiDGq88WgIQMyaagFfwCklIHgCmrY0izi2FQjeAkbnGN6G_mc0TxxuJI_FAldkkO4Z_VDsj34zg0q48AVQVzz-VL/s1600/01.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguiRNGwJwspHnyNvQoIVxjU8I0gA_gN9n1l54mokp7LbEF0ckphesVMiDGq88WgIQMyaagFfwCklIHgCmrY0izi2FQjeAkbnGN6G_mc0TxxuJI_FAldkkO4Z_VDsj34zg0q48AVQVzz-VL/s400/01.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">La página de inicio</td></tr>
</tbody></table>
En la página de inicio aparecen las últimas publicaciones introducidas en la base de datos. Junto a cada una de ellas hay dos botones: uno con forma de flecha, que lleva al sitio donde puede consultarse el documento, y otra, con forma de lupa, que permite acceder a la correspondiente ficha. Tomemos una publicación, hagamos clic en su "lupa"...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG0vREa3JrlYYZ3mBFReFaxHTmXqMjEwTxEFd7pzsilx1nuLm4v1t91pVcMC36SU4sNF21cHaypGoCnMmhRVmwDW8szzn1XPKQ1OZccByQpxlVbKG2GNk_nzV2sdSBlG0SlabgS4g2dSWL/s1600/02.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG0vREa3JrlYYZ3mBFReFaxHTmXqMjEwTxEFd7pzsilx1nuLm4v1t91pVcMC36SU4sNF21cHaypGoCnMmhRVmwDW8szzn1XPKQ1OZccByQpxlVbKG2GNk_nzV2sdSBlG0SlabgS4g2dSWL/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Atención a la URL</td></tr>
</tbody></table>
<br />
... y observemos la URL. Como no sale completa en la imagen, os la copio aquí:<br />
<blockquote class="tr_bq">
http://localhost/refbase-code-1418-trunk/search.php?sqlQuery=SELECT%20author%2C%20title%2C%20type%2C%20year%2C%20publication%2C%20abbrev_journal%2C%20volume%2C%20issue%2C%20pages%2C%20keywords%2C%20abstract%2C%20address%2C%20corporate_author%2C%20thesis%2C%20publisher%2C%20place%2C%20editor%2C%20language%2C%20summary_language%2C%20orig_title%2C%20series_editor%2C%20series_title%2C%20abbrev_series_title%2C%20series_volume%2C%20series_issue%2C%20edition%2C%20issn%2C%20isbn%2C%20medium%2C%20area%2C%20expedition%2C%20conference%2C%20notes%2C%20approved%2C%20call_number%2C%20serial%20FROM%20refs%20WHERE%20serial%20%3D%207%20ORDER%20BY%20author%2C%20year%20DESC%2C%20publication&client=&formType=sqlSearch&submit=Display&viewType=&showQuery=0&showLinks=1&showRows=10&rowOffset=&wrapResults=1&citeOrder=&citeStyle=APA&exportFormat=RIS&exportType=html&exportStylesheet=&citeType=html&headerMsg=</blockquote>
<br />
O, decodificando los parámetros GET para que todo se vea más claro:<br />
<blockquote class="tr_bq">
http://localhost/refbase-code-1418-trunk/search.php?sqlQuery=<b>SELECT author, title, type, year, publication, abbrev_journal, volume, issue, pages, keywords, abstract, address, corporate_author, thesis, publisher, place, editor, language, summary_language, orig_title, series_editor, series_title, abbrev_series_title, series_volume, series_issue, edition, issn, isbn, medium, area, expedition, conference, notes, approved, call_number, serial FROM refs WHERE serial = 7 ORDER BY author, year DESC</b>, publication&client=&formType=sqlSearch&submit=Display&viewType=&showQuery=0&showLinks=1&showRows=10&rowOffset=&wrapResults=1&citeOrder=&citeStyle=APA&exportFormat=RIS&exportType=html&exportStylesheet=&citeType=html&headerMsg=</blockquote>
<br />
Algo que quizá alguien recuerde de "<a href="http://418iamateapot.blogspot.com/2014/11/normal-0-21-false-false-false-es-x-none.html" target="_blank">El parque del oso</a>": ¡Toda una sentencia SQL pasada como parámetro GET!<br />
<br />
En su día contaba yo a los desarrolladores de refbase que esto era peligroso y que quizá debían plantearse un enfoque alternativo. No sólo por seguridad sino también porque la solución que habían elegido les complicaría en el futuro la migración de refbase a otros gestores de bases de datos distintos de MySQL. La respuesta fue que, por desgracia, no era realista plantear un cambio de ese calado, dados los recursos de que disponían para el desarrollo.<br />
<br />
No digo más. Y con eso creo que tendrás suficiente para entenderme.<br />
<br />
En todo caso, refbase no ejecuta el código introducido sin más. Las consultas proporcionadas a través del parámetro GET sqlQuery son alteradas de varias formas para garantizar el correcto funcionamiento del programa. Cosas como:<br />
<ul>
<li>El usuario puede solicitar sólo aquellas columnas que le interesan y refbase se adapta a su petición, mostrando únicamente los datos requeridos. Si es necesario, refbase añade a la consulta las columnas que precise para sus operaciones internas, pero no las muestra. </li>
<li>Se garantiza la existencia de la claúsula ORDER BY</li>
</ul>
Y se incluyen algunos mecanismos de seguridad. Así en la versión obtenida del repositorio SVN se rechaza la consulta y, en lugar de responderle, se redirige al usuario a la página inicial cuando:<br />
<ul>
<li>La consulta contiene etiquetas HTML (para evitar XSS)</li>
<li>El usuario no es administrador y la consulta no comienza con "SELECT". A esta comprobación le añaden también que no contengan "DROP DATABASE" o "DROP TABLE".</li>
<li>Al SELECT inicial le sigue cualquier cosa que no sea una lista de columnas antes de llegar al FROM. Las columnas que pueden incluirse en esta lista están indicadas expresamente en la variable "$all_fields". Una lista blanca: eso apunta buenas maneras. La expresión regular elegida para hacer esta comprobación viene dada por: </li>
</ul>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
"/^SELECT ((" . $all_fields . "),* *)+ FROM/i" </blockquote>
</blockquote>
<ul>
<li>Si alguien intenta colar una segunda consulta. Para ello, se trata de detectar la presencia de una segunda claúsula FROM</li>
</ul>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
"/FROM .*(" . join("|", $tablesArray) . ").+ FROM /i"</blockquote>
</blockquote>
<ul>
<li> Si la consulta contiene alguna operación no permitida. Las operaciones permitidas vienen dadas mediante una expresión regular</li>
</ul>
<br />
<blockquote class="tr_bq">
<blockquote class="tr_bq">
"/FROM $tableRefs( LEFT JOIN $tableUserData ON serial ?= ?record_id AND user_id ?= ?\d*)?(?= WHERE| ORDER BY| LIMIT| GROUP BY| HAVING| PROCEDURE| FOR UPDATE| LOCK IN|$)/i"</blockquote>
</blockquote>
<br />
Todo lo cual, dadas las circunstancias, estaría bien (o, al menos, regular)... si las expresiones regulares fueran correctas.<br />
<br />
Sin entrar en muchos detalles, hay un fallo grande. Muy grande. En todas las expresiones regulares anteriores se considera que las claúsulas SQL van separadas... por espacios. Pero SQL en general, y el dialecto de MySQL en particular, acepta un montón de caracteres y expresiones como separadores. Por ejemplo, un comentario "/**/". O un tabulador. O...<br />
<br />
Así, que se puede hacer una petición como<br />
<blockquote class="tr_bq">
http://localhost/refbase-code-1418-trunk/search.php?sqlQuery=<b>SELECT publication, serial FROM refs WHERE serial = -1/**/union/**/select email,password,3,4,5,6,7,8,9,10/**/from/**/auth ORDER BY 1 DESC</b>&client=&formType=sqlSearch&submit=Display&viewType=&showQuery=0&showLinks=1&showRows=10&rowOffset=&wrapResults=1&citeOrder=&citeStyle=APA&exportFormat=RIS&exportType=html&exportStylesheet=&citeType=html&headerMsg=</blockquote>
... y obtener los identificadores de usuario (sus cuentas de correo) y los hashes de sus contraseñas:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlQl1RFWqNCHmmmR9BL0uhtQaSJSLxMN7Ng80f8F_Ttmi_BOLSyfqcCshLqCxeHq4xpDqmJ8y9mfvNWqiP0A1MbYJ_jrDCvizZuMLpyr_GQVox3Eg2AJITSjQUuEipuD9jLKH1ErSglVbA/s1600/03.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlQl1RFWqNCHmmmR9BL0uhtQaSJSLxMN7Ng80f8F_Ttmi_BOLSyfqcCshLqCxeHq4xpDqmJ8y9mfvNWqiP0A1MbYJ_jrDCvizZuMLpyr_GQVox3Eg2AJITSjQUuEipuD9jLKH1ErSglVbA/s400/03.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">SQL Injection accomplished!</td></tr>
</tbody></table>
Por cierto, que el comportamiento de la aplicación ante la ejecución de consultas SQL incorrectas ayuda bastante a elaborar estos ataques. Muestra tanto la consulta que se intentó realizar como la respuesta del gestor de bases de datos:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKAjEVfLoNSF-6HrgIQUhYiBSbnzaJVol1AZiUA1jN1BU5k2dhF2lI6aiUi8l76R4VhR7zgBSD1kcAx2u4mmFyuJMOFJmQU-UbPcPTnemOlPox2LLbVUDeyhkmZdE_bUTxDJaGSDRAJOGL/s1600/04.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKAjEVfLoNSF-6HrgIQUhYiBSbnzaJVol1AZiUA1jN1BU5k2dhF2lI6aiUi8l76R4VhR7zgBSD1kcAx2u4mmFyuJMOFJmQU-UbPcPTnemOlPox2LLbVUDeyhkmZdE_bUTxDJaGSDRAJOGL/s400/04.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Buena ayuda para un atacante</td></tr>
</tbody></table>
<br />
<br />
En lugar de comentarios podrían haberse usado otros separadores. Por ejemplo, tabuladores horizontales (codificados en la URL como %09), tabulación vertical (%0B), salto de página (%0C) o retorno de carro (%0D):<br />
<blockquote class="tr_bq">
http://localhost/refbase-code-1418-trunk/search.php?formType=sqlSearch&submit=Display&headerMsg=&sqlQuery=SELECT publication, serial FROM refs WHERE serial = -1<b>%09</b>union<b>%0B</b>select email,password,3,4,5,6,7,8,9,10<b>%0C</b>from<b>%0D</b>auth ORDER BY 1 DESC, publication&showQuery=0&showLinks=1&showRows=10&rowOffset=0&marked[]=&citeStyle=APA&citeOrder=&orderBy=author, year DESC, publication </blockquote>
<br />
Una nota al margen para ir acabando. Los usuarios normales no pueden hacer otra cosa que SELECT. Los administradores sí podrían lanzar otras instrucciones.<br />
<br />
En lo que a los DROP respecta, el usuario que crea el instalador de la aplicación para conectar a la base de datos carece de los permisos necesarios, por lo que no tendrían impacto alguno. Salvo que, quizá por los fallos que tiene el instalador, alguien se huviera visto obligado a crear la cuenta a mano y se hubiera pasado con los permisos, claro.<br />
<br />
En todo caso, los INSERT, UPDATE y DELETE sí que están permitidos a la cuenta de administración de refbase. De hecho ésta disponde de un formulario, "sql_search.php", que le permite ejecutar (o tratar de hacerlo) cualquier sentencia SQL. Este formulario termina llamando a "search.php" indicando el parámetro GET "formType=sqlSearch".<br />
<br />
¿Y por qué es esto importante?<br />
<br />
Porque "search.php", como tantas otras partes de la aplicación, no está debidamente protegido contra Cross Site Request Forgery. Ni, dicho sea de paso, contra ClickJacking. De modo que un atacante podría usar cualquier servidor web que tuviera bajo su control y alojar en él una página maliciosa con el siguiente código:<br />
<blockquote class="tr_bq">
Hola<br /><iframe src="http://localhost/refbase-code-1418-trunk/search.php?formType=sqlSearch&submit=&citeStyle=&citeOrder=&sqlQuery=<b>Delete+from+refs</b>&showLinks=1&showRows=10&viewType=Web"<br /> style="display:none"><br /></iframe></blockquote>
Si alguien que ha iniciado sesión con la cuenta de administración de refbase visita esta página... Adios al trabajo de recopilación de referencias documentales.<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB7Xwx3vHDbZg9DX7DpCA-uG5fFtul0_Kgy8EO5SWBHam5AIgg1Uk1a21E_e4dBl_gK3E-_Nw0yNDSt6a1vR_94dX3i_iSUHmyNo7XfROcQDSaOgCCP0hPcm4LTW_nKnqeiwRcYIPpETg4/s1600/05.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB7Xwx3vHDbZg9DX7DpCA-uG5fFtul0_Kgy8EO5SWBHam5AIgg1Uk1a21E_e4dBl_gK3E-_Nw0yNDSt6a1vR_94dX3i_iSUHmyNo7XfROcQDSaOgCCP0hPcm4LTW_nKnqeiwRcYIPpETg4/s400/05.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Nada por aquí, nada por allá</td></tr>
</tbody></table>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-19467111826427943172017-05-12T12:48:00.002-07:002017-05-12T14:38:05.006-07:00WannaCry WCry WCryptDe que hoy anda suelto un ransomware que está haciendo de las suyas, no creo que haga falta hablar.<br />
<br />
Sólo unos cuantos enlaces:<br />
<br />
<a href="https://intel.malwaretech.com/botnet/wcrypt" target="_blank">Un mapa (malwareTech) en el que puedes ver cómo está la cosa y como ha venido estando</a>. Es el que sale en todas las noticias. Pero aquí lo tienes en tiempo real.<br />
<br />
<a href="https://twitter.com/malwrhunterteam?lang=es" target="_blank">Una cuenta de Twitter (MalwareHunterTeam) con información</a>.<br />
<br />
<a href="https://twitter.com/hashtag/WCry" target="_blank">Una hashtag de las que tratan sobre este tema, #WCry</a><br />
<br />
<a href="https://gist.github.com/rain-1/989428fa5504f378b993ee6efbc0b168" target="_blank">Un repositorio en GitHub con muuuucha información</a>.<br />
<br />
<br />
Y tu periódico preferido que te contará las cosas de las que se vayan enterando. Espero que de forma correcta <br />
<br />Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-68071832910302124722017-05-12T11:58:00.000-07:002017-05-12T11:58:01.239-07:00Refbase: Ejecución de código PHP arbitrario<h2>
</h2>
Ésta de la que hablo hoy es una de las vulnerabilidades que menos tiempo me llevó encontrar. Exceptuando aquellas que son obvias, claro está.<br />
<br />
Y tan fácil como fue, supongo que no habré sido el primero, ni seré el último en dar con ella. <br />
<br />
Ahí va la historia. Voy a tardar más en contarla de lo que me llevó hacerlo:<br />
<br />
<h2>
Preparativos</h2>
Uno de los indicios del grado en que se ha tenido en cuenta la seguridad a la hora de diseñar y programar una aplicación es, en mi opinión, el número de veces que en ella se usa la compilación o interpretación de código generado en tiempo de ejecución.<br />
<br />
Para decirlo en pocas palabras, si hablamos de PHP o de JavaScript, cuántas veces se usa "eval".<br />
<br />
Y lo bueno es que es algo fácil de determinar. Si, como a mí, te gusta la línea de comandos de Linux, puedes usar una combinación de "find", "grep" y "wc". Pero por ahora utilizaremos un editor de textos potente, como <a href="https://notepad-plus-plus.org/" target="_blank">Notepad++</a> o <a href="https://kate-editor.org/" target="_blank">Kate</a>, que ofrezca la capacidad de buscar en todos los ficheros de un directorio y sus subdirectorios.<br />
<br />
El que tengo instalado en mi equipo actual es el primero de ellos así que... ahí va lo que hice.<br />
<br />
Abrí la ventana de "Buscar" y activé la pestaña de "Buscar en archivos". Allí marqué la opción de buscar como "Expresión regular" y dije que quería buscar dentro de la carpeta de refbase la cadena "eval" seguida de cualquier número de espacios (o quizá ninguno) y, finalmente, un paréntesis:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PaArZD1qrP9DLzRp1JAb8bgN7nmVBupFJy6Pmwim4h_kyk9mMCaQlbpxZuVfcDTqp1BHe74f9wyrWmjfKTghZMkOWjAixDFs-SWJU6n3itjcYCRY6XZCd65LOLirdfKuDT-pQ5fAJ2T4/s1600/01.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PaArZD1qrP9DLzRp1JAb8bgN7nmVBupFJy6Pmwim4h_kyk9mMCaQlbpxZuVfcDTqp1BHe74f9wyrWmjfKTghZMkOWjAixDFs-SWJU6n3itjcYCRY6XZCd65LOLirdfKuDT-pQ5fAJ2T4/s400/01.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 1 - Busca</td></tr>
</tbody></table>
De los resultados obtenidos, la mayor parte eran del lado del cliente (JavaScript). Pero el último prometía:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje71L_a4KKE9hvYtEyGkV5tTbLYOmzcQRKl4KKFIBYMXh16Ld0fO2e-W_nmhXmmQYjj-SCm4ReADZO_RoJmnD6tR2Ih0bev7E_fvElmcO2S3S_kOsmnaFEkvxx5K3p36R5NtYEsmHtzSTH/s1600/02.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje71L_a4KKE9hvYtEyGkV5tTbLYOmzcQRKl4KKFIBYMXh16Ld0fO2e-W_nmhXmmQYjj-SCm4ReADZO_RoJmnD6tR2Ih0bev7E_fvElmcO2S3S_kOsmnaFEkvxx5K3p36R5NtYEsmHtzSTH/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 2 - Encuentra</td></tr>
</tbody></table>
<br />
Haciendo doble clic sobre el resultado se me abrió en la parte superior el fichero con el cursor colocado en la correspondiente línea<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRUMQWzIWatGL44R2QVeSM97ClRavXz6CzKjoXypFP3eh4jgoLETufHjdnq-3tVj-lZz4GBHCNJQkYiGDEJdE0vOPMGJHgLoot7OXvYR9XmRVtvo-Ttpc_TBrdqkU1SGTMcVhnkocxf6Qq/s1600/03.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRUMQWzIWatGL44R2QVeSM97ClRavXz6CzKjoXypFP3eh4jgoLETufHjdnq-3tVj-lZz4GBHCNJQkYiGDEJdE0vOPMGJHgLoot7OXvYR9XmRVtvo-Ttpc_TBrdqkU1SGTMcVhnkocxf6Qq/s400/03.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 3 - El punto en que todo se convierte en problemas</td></tr>
</tbody></table>
<br />
O sea: desactivando la salida de las instrucciones (con "ob_start" y "ob_end_clean"), se lee un fichero cuyo nombre viene dado por $f, se coloca el resultado dentro de una cadena de texto... y se hace un eval de ésta. Un poco antes aparece cómo se determina la ruta del fichero a abrir. Se trata del fichero de adaptación de idioma:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEpZiObTzHYmOWgypKD7_TzsJ3o3UW7aGY_3hkcSFwDiy42piVISfT8n8Z0AX9Kyq8OxcAt5luJUUZfhC1LiHguaXQTymfHjm66wJl1WAN8HR3mOFq1FTVVnvIGdJexLkuL4AGZ39F2pAy/s1600/04.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEpZiObTzHYmOWgypKD7_TzsJ3o3UW7aGY_3hkcSFwDiy42piVISfT8n8Z0AX9Kyq8OxcAt5luJUUZfhC1LiHguaXQTymfHjm66wJl1WAN8HR3mOFq1FTVVnvIGdJexLkuL4AGZ39F2pAy/s400/04.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 4 - El punto del que proceden los problemas</td></tr>
</tbody></table>
Estaba claro por el contexto, y por un listado de la carpeta "locales" que "$locale" contendría el nombre abreviado del idioma usado por el usuario actual:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvy-UOOW6usAZoTFVHexVzA_KG0qeyhC_No1Q5WxUEtArNddv0LLTFM6wQmkYLAvHNwGcc7B4RXi9G74dLsjjxbEzuhlwUcB37yDBh52Kq8__4VwICSl0WBigtml_E4g-lzu8uAsO8RdsX/s1600/06.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvy-UOOW6usAZoTFVHexVzA_KG0qeyhC_No1Q5WxUEtArNddv0LLTFM6wQmkYLAvHNwGcc7B4RXi9G74dLsjjxbEzuhlwUcB37yDBh52Kq8__4VwICSl0WBigtml_E4g-lzu8uAsO8RdsX/s400/06.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 5 - Los "locales"</td></tr>
</tbody></table>
Necesitaba encontrar dónde se le asignaba valor a $locale, de modo que usé Notepad++ para buscar en todos los archivos de la carpeta la expresión regular<br />
<blockquote class="tr_bq">
<div style="text-align: left;">
\$locale\s*= </div>
</blockquote>
<br />
Y me encontró la siguiente línea en el fichero "includes/locales.inc.php":<br />
<blockquote class="tr_bq">
<div style="text-align: left;">
$locale = getUserLanguage(); // function 'getUserLanguage()' is defined in 'include.inc.php'</div>
</blockquote>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Miré, pues, la definición de "getUserLanguage()" en "includes/include.inc.php". La línea en la que se obtenían los valores hacía referencia a otra función:</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
$userLanguagesArray = getLanguages($loginUserID);</div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Para encontrar la definición de getLanguages usé la expresión regular</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
function\s+getLanguages</div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
... Y la encontré en el mismo fichero. El dato lo tomaba de una consulta SQL:</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
$query = "SELECT language AS language_name FROM $tableUsers WHERE user_id = " . quote_smart($userID);</div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Pero ¿cómo se metían los datos ahí? Para averiguarlo, localicé los sitios en los que se actualiza la tabla buscando:</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
update\s\$tableUsers</div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Y, entre los resultados, encontré varios del fichero "user_options_modify.php", cuyo nombre suena a modificaciones de las opciones de usuario. Tuve suerte con el primero de ellos:</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
$queryArray[] = "UPDATE $tableUsers SET " </div>
<div style="text-align: left;">
. "language = " . quote_smart($formVars["languageName"]) . " "</div>
<div style="text-align: left;">
. "WHERE user_id = " . <b>quote_smart</b>($userID); </div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
La variable $formVars se rellenaba con los parámetros POST recibidos por el script, sin más comprobaciones:</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
foreach($_POST as $varname => $value)<br /> $formVars[$varname] = $value; </div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
La cosa tenía mala pinta. Mala para la seguridad, quiero decir. Busqué la función "quote_smart" (sí: con la expresión regular "function\s+quote_smart") y su código, contenido en el fichero "includes/include.inc.php", parecía prestar atención sólo a temas relacionados con SQL injection y de formato:</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
function quote_smart($value)<br /> {<br /> // Remove slashes from value if 'magic_quotes_gpc = On':<br /> $value = stripSlashesIfMagicQuotes($value);<br /><br /> // Remove any leading or trailing whitespace:<br /> $value = trim($value);<br /><br /> // Quote & escape special chars if not a number or a numeric string:<br /> if (!is_numeric($value))<br /> {<br /> $value = "\"" . escapeSQL($value) . "\"";<br /> }<br /> // Quote numbers with leading zeros (which would otherwise get stripped):<br /> elseif (preg_match("/^0+\d+$/", $value))<br /> {<br /> $value = "\"" . $value . "\"";<br /> }<br /><br /> return $value;<br /> }</div>
</blockquote>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
De modo que la ruta de fichero no es objeto de más comprobaciones de seguridad que las que tratan de evitar la inyección de SQL. Las puertas están abiertas a un Local File Include gracias a la llamada a la función eval.</div>
<br />
<h2>
Ataque</h2>
Impaciente como soy, no pude esperar más. Entré en refbase como administrador (recuerda que las credenciales por defecto son "user@refbase.net" / "start") ...<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdSlYa8ZZUN9uKkD48JShHkbiPqo6maxc-gORsair31sjeQK9cCojPwmSTmRBVmvYAGY6qDj4ZUuGRHZE6dJW7tHvJLQ7uUUo60WJ1fp1XFh73rHF5gltVWTqdNw7GoirsQOvbYLnABYk4/s1600/07.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdSlYa8ZZUN9uKkD48JShHkbiPqo6maxc-gORsair31sjeQK9cCojPwmSTmRBVmvYAGY6qDj4ZUuGRHZE6dJW7tHvJLQ7uUUo60WJ1fp1XFh73rHF5gltVWTqdNw7GoirsQOvbYLnABYk4/s400/07.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 6 - Nótense las opciones para gestionar cuentas de usuario</td></tr>
</tbody></table>
<br />
... y creé una cuenta. Inmediatamente, cerré la sesión y me pregunté ¿qué podría hacer este nuevo usuario de tener malas intenciones?<br />
<br />
Imaginemos que puede subir ficheros a un directorio, cosa que de hecho refbase permite. Pero que el programa rechaza aquellos que tienen extensión PHP. Y supongamos que no está en condiciones de explotar la vulnerabilidad de refbase de la que hablamos en "<a href="http://418iamateapot.blogspot.com/2017/04/by-design-5.html" target="_blank">Sube que te sube</a>".<br />
<br />
Sea, pues, "c:\xampp\htdocs\otro" una carpeta en la que este atacante puede subir sus ficheros. Y sigamos.<br />
<br />
Tras iniciar sesión con esta nueva identidad...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9MKxq2MirLLwtIWAhDPS0-E4mJUz9u2KFwEWauj7LEnfR5VVm-kP1Yn28ORKNIREgnJMWANgdrAHSZNgrali_-9HuS8PepE6p7CuQum9FpLTXHKvfwHWg40vLO2YXMZ4PEDl6f9LTHkq0/s1600/08.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9MKxq2MirLLwtIWAhDPS0-E4mJUz9u2KFwEWauj7LEnfR5VVm-kP1Yn28ORKNIREgnJMWANgdrAHSZNgrali_-9HuS8PepE6p7CuQum9FpLTXHKvfwHWg40vLO2YXMZ4PEDl6f9LTHkq0/s400/08.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 7 - Sin opciones de gestión de usuarios</td></tr>
</tbody></table>
... ya no tenía las opciones propias de un adminitrador. Era sólo un simple usuario. Por ahora.<br />
<br />
Ya como usuario de a pie, hice clic en el enlace "Options" de la parte superior de la página para configurar mis preferencias.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAehxdCfzdE3vzQ_GvCbBBgJDFYrJjmmYL57vnpz2BDiDnzPkjwecQVfYZuv-sTcpplUpEbONRGik2P2pFCHET3_YJzINTRn6ej7wKtHTsDWRdRscfI6w3mKfgYnPlMUadptaqtYjpDfG4/s1600/09.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAehxdCfzdE3vzQ_GvCbBBgJDFYrJjmmYL57vnpz2BDiDnzPkjwecQVfYZuv-sTcpplUpEbONRGik2P2pFCHET3_YJzINTRn6ej7wKtHTsDWRdRscfI6w3mKfgYnPlMUadptaqtYjpDfG4/s400/09.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 8 - Mis opciones</td></tr>
</tbody></table>
<br />
Hice clic en el botón a la derecha de "Display Options" para modificar los ajustes.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMTFL7WJpBNBtxhk-J8f98pqVPbZRfHfLViLyXnNIExQyCLwSYZ20PWAotR0lK5u_FafYwfj6XKrdT9TcE0ztX2alo2cXpVgmdCTB7rqlsPAXM1up5g1XxHIwKJO7ud0mjQ5y-hxkcTobA/s1600/10.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMTFL7WJpBNBtxhk-J8f98pqVPbZRfHfLViLyXnNIExQyCLwSYZ20PWAotR0lK5u_FafYwfj6XKrdT9TcE0ztX2alo2cXpVgmdCTB7rqlsPAXM1up5g1XxHIwKJO7ud0mjQ5y-hxkcTobA/s400/10.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 9 - Cambiando opciones</td></tr>
</tbody></table>
Usando las herramientas para desarrolladores (las de F12), seleccióné el desplegable donde se elige el idioma y, con la tecla F2, procedí a modificar su contenido, dejándolo con una única opción: <br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFb-uQJCfZVFyJc5QCWr-hNsQZxxFKfA0fg_LtL_2-0jYpEjOAlkSFitM_AVOiavOucm9c4VeUvru65q32XdZmaBuwqCMiOYvPyDDNt2Q5bV2JnK-y5j3OgLWr1HFcaTLcWOLmZlhJRrJH/s1600/11.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFb-uQJCfZVFyJc5QCWr-hNsQZxxFKfA0fg_LtL_2-0jYpEjOAlkSFitM_AVOiavOucm9c4VeUvru65q32XdZmaBuwqCMiOYvPyDDNt2Q5bV2JnK-y5j3OgLWr1HFcaTLcWOLmZlhJRrJH/s400/11.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 10 - Extraño idioma</td></tr>
</tbody></table>
En cuanto hube terminado con el cambio, hice clic en otra etiqueta del código y vi el efecto causado<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2HNyT6V3yHpLpeJi7VHNCND13OMsJPHaXG9o0KKktZBcD9tuQ5-sIN-14CAQZyvZiG5vMvDTZEQmndczehY8tRV9LQbwspNDpIETTesV-h2OxnfgjRVwcVPiotJmYKScjW3g6ci67y8TL/s1600/11.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2HNyT6V3yHpLpeJi7VHNCND13OMsJPHaXG9o0KKktZBcD9tuQ5-sIN-14CAQZyvZiG5vMvDTZEQmndczehY8tRV9LQbwspNDpIETTesV-h2OxnfgjRVwcVPiotJmYKScjW3g6ci67y8TL/s400/11.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 11 - Cambio realizado</td></tr>
</tbody></table>
<br />
<br />
Sólo quedaba enviar el formulario con el botón "Submit" de su parte inferior. Con esta extraña lengua se consigue que la aplicación tome el fichero de idiomas, que recordemos que contiene código PHP, de un directorio seleccionado por el atacante. Dentro de él la aplicación buscará, dependiendo de si se usa codificación UTF8 o no, un fichero llamado "common_utf8.inc" o "common.inc" (ver Imagen 4).<br />
<br />
Recordemos por otro lado, que el código a evaluar se generaba mediante una instrucción del tipo<br />
<blockquote class="tr_bq">
$s = "\$loc=array(".ob_get_contents().");";</blockquote>
Y también que este código es ejecutado entre una instruccion "ob_start()" y una "ob_end_clean()" que impiden que se muestre cualquier salida producida mediante instrucciones "print" y similares.<br />
<br />
De modo que podríamos pensar en crear un fichero "common.inc" (o "common_utf8.inc") con el mismo contenido del que trae refbase para el idioma inglés y añadirle al final unas cuantas líneas:<br />
un contenido como el siguiente<br />
<blockquote class="tr_bq">
);<br /><br />ob_end_clean();<br />print "La cuenta de admin es: " . <br /> $adminLoginEmail . "<br>";<br /><br />$_SESSION["loginEmail"] = $adminLoginEmail;<br /><br />$___dbconfig = file_get_contents("initialize/db.inc.php");<br /><br />preg_match_all(<br /> '/(hostName|databaseName|username|password)\s*=.*;/',<br /> $___dbconfig,<br /> $___match<br />);<br /><br />print "<br>Datos de conexi&oacute;n:<br>";<br />foreach ($___match[0] as $___dato) {<br /> print "&nbsp;&nbsp;" . <br /> $___dato . "<br>";<br />}<br />print "<hr>";<br /><br />ob_start(</blockquote>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9YMRtsdcDG-pzhHkf2HrqkFktwhXZrGnFQRysw3n0Ytd_dBF7cd3_ed-I3YNffQDVgo2QpF36apWRqc40nN_VQtpSF9-75n1EDe_vYMwgZ5PXdnhnNE1S2W0gJTMKwUINa4kR54FFCuQ2/s1600/13.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9YMRtsdcDG-pzhHkf2HrqkFktwhXZrGnFQRysw3n0Ytd_dBF7cd3_ed-I3YNffQDVgo2QpF36apWRqc40nN_VQtpSF9-75n1EDe_vYMwgZ5PXdnhnNE1S2W0gJTMKwUINa4kR54FFCuQ2/s400/13.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 12 - Líneas añadidas</td></tr>
</tbody></table>
A poco que se lea, se ve lo que hace: muestra el identificador de la cuenta de administración de refbase, modifica la cuenta del usuario actual almacenada en las variables de sesión y muestra los datos de conexión a la base de datos. Para verlo en acción, basta con cargar una página de la aplicación:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBPDnhrz0Gxza86yqtqJTscy8imPj-KK57py66ob9RQHSaOGbPQy7FJirdAMcxbC2eTWnRZXuMqw6zlsZ8cwT7ejHJBkpx45__eWrIkijjbblt8bHi3-zNWXOFAq6ydX9NhdNQqFBaN-pp/s1600/14.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBPDnhrz0Gxza86yqtqJTscy8imPj-KK57py66ob9RQHSaOGbPQy7FJirdAMcxbC2eTWnRZXuMqw6zlsZ8cwT7ejHJBkpx45__eWrIkijjbblt8bHi3-zNWXOFAq6ydX9NhdNQqFBaN-pp/s400/14.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 13 - Primera ronda</td></tr>
</tbody></table>
<br />
Los datos de cuenta de administración y conexión a la base de datos aparecen en la nueva cabecera que hemos añadido. Pero parece que no han cambiado las acciones que puede realizar el usuario. No hay problema: damos a volver a cargar la página y...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgclrFi8coQhkSfPR1OOK6KA6qir8FIJUZIqvBtAMvNvHZC3qiylSuUXJuhuiTSjtuYHR02sgT8bZBzb9zTPCcK9lS9KFSVljHVo2Uq3mb3-lJMkqGEeWat9Hjsf_1V66snz_KBF3zcI-3Z/s1600/15.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgclrFi8coQhkSfPR1OOK6KA6qir8FIJUZIqvBtAMvNvHZC3qiylSuUXJuhuiTSjtuYHR02sgT8bZBzb9zTPCcK9lS9KFSVljHVo2Uq3mb3-lJMkqGEeWat9Hjsf_1V66snz_KBF3zcI-3Z/s400/15.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 14 - Segunda ronda</td></tr>
</tbody></table>
<br />
<br />
De todos modos, esto de obtener permisos de administración de refbase es, a estas alturas, poco relevante. Teniendo los datos de conexión a la base de datos, es posible... conectarse a ella. Y después, claro, consultar, modificar o borrar cualquier dato.<br />
<br />
Pero yo soy de los buenos, de modo que aquí paro.<br />
<br />
<h2>
Conclusiones </h2>
Creo que hablar a estas alturas de que hay que validar las entradas del usuario en los formularios y aceptar sólo aquellos valores que son razonables... es repetir demasiado las cosas. Pero, sin embargo, siempre hay quien no lo hace.<br />
<br />
Por lo demás, hay otra moraleja: "Un fichero de configuración ejecutable es más peligroso que un sable".<br />
<br />
Que una definición de idioma, una plantilla o cualquier otra cosa que sólo debería afectar a la apariencia contenga código PHP es cosa para aficionados al riesgo: "¿Que no tienes la versión en español de refbase? Pues de aquí te puedes descargar los ficheros de idioma. Y van con un regalito".<br />
<br />
Pronto, espero, más.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-74520086595395000042017-05-11T06:31:00.001-07:002017-05-11T06:31:14.190-07:00Vulnerabilidades en el instalador de refbase... cuando funciona<h2>
Arreglando el instalador de refbase</h2>
Entre los últimos cambios introducidos en refbase se cuenta la compatibilidad con PHP 7. Ciertamente, es bueno saber que los desarrolladores de un producto se preocupan de que éste funcione con las versiones más recientes de su entorno de ejecución. Pero... hay un problema con el instalador.<br /><br />Para inicializar la base de datos y otros elementos de refbase se utiliza el script "install.php". Y resulta que "install.php" utiliza la extensión "<a href="http://php.net/manual/es/intro.mysql.php" target="_blank">MySQL original</a>". La "de siempre", con funciones o métodos como mysql_connect, mysql_query, etc.), que resulta estar declarada obsoleta a partir de PHP 5.5.0 y eliminada en PHP 7.0.0. De modo que, aunque la aplicación funcione con PHP 7, el instalador no.<br /><br />Y, claro, no puedes utilizar una aplicación si antes no la instalas. <br /><br />Por fortuna para quienes quieran actualizar refbase desde una versión anterior, la estructura de la base de datos no cambia. Basta con copiar los nuevos scripts, quizá tocar algún fichero de configuración y... todo listo y funcionando. Supongo que esto es lo que habrán hecho los desarrolladores a la hora de poner en marcha y probar las nuevas versiones. De ser así, "install.php" no les habría hecho falta y, por tanto, nadie se fijó en él y no fue objeto de pruebas.<br /><br />Carecer de unos procedimientos de gestión que permitan determinar todas las dependencias entre módulos del sistema y de éstos con el entorno de ejecución es, en sí mismo, <a href="http://418iamateapot.blogspot.com/2017/05/vulnerabilidad-de-insufficient.html" target="_blank">una segunda "vulnerabilidad administrativa" a añadir a la de ayer</a>. Cosa que no pruebas, error que no pillas. Pero dejémonos de burocracia y vayamos al lado divertido de la tecnología. <br /><br />Para empezar, a mí no me funcionó el instalador ni siquiera usando PHP 5.6.30. De modo que, por ser constructivos, ahí van los cambios que tuve que hacer en "install.php" para arreglarlo:<br /><br />1.- Cambiar todas las veces que aparece "mysql_" por "mysqli_"<br />
<br />2.- Cambiar todas las veces que aparece "mysqli_errno()" por "mysqli_errno($connection)"<br /><br />
3.- Cambiar "mysqli_select_db($adminDatabaseName, $connection)" por "mysqli_select_db($connection, $adminDatabaseName)"<br /><br />
4.- Cambiar el orden de los dos parámetros en todas las llamadas a "mysqli_query". Para ello se puede utilzar un editor de texto avanzado, como Notepad++ o Kate, y realizar una sustitución global de la expresión regular "mysqli_query\s*\(([^,]+),([^\)]+)\)" por "mysqli_query\(\2,\1\)". Y, si no lo ves claro, siempre puedes hacerlo "a mano".<br /><br />Para los siguientes ejemplos se descargaron las últimas versiones "trunk" y "bleeding edge" del repositorio SVN:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOVeN2ycpX770E_A6H5m9RM9_fuRuDX7HVxjL36SnNKkPzzuAsns-8tUO8Ap_NaS6CWSJXGPUgP-o5Y0_G-zNzJBOJW5TAIHObzD2MtJRJkf4TP7DyipalMZNS37b0eoEgy7OQCP3j3m0E/s1600/01.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOVeN2ycpX770E_A6H5m9RM9_fuRuDX7HVxjL36SnNKkPzzuAsns-8tUO8Ap_NaS6CWSJXGPUgP-o5Y0_G-zNzJBOJW5TAIHObzD2MtJRJkf4TP7DyipalMZNS37b0eoEgy7OQCP3j3m0E/s400/01.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Repositorio SVN</td></tr>
</tbody></table>
<br />
<br />
<br />
<br />
<br />
<h2>
Instalar refbase</h2>
La verdad es que instalar refbase, una vez tienes el entorno apropiado y el instalador arreglado, debería ser bastante fácil. Vayamos a ello:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuO8O5ZuWOUPzOr57S3V6sVvDCVP7kdynNbYJkyr0NIHrYgsw6qR8oi2SroDpLAlHT-JLy-27rUMhKOJ8z0kHAXBBxEXE1lI0O80qWl8gqdinrHzwiqBZRkObcwJnWpZk-iSrS4ExB0V_c/s1600/02.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuO8O5ZuWOUPzOr57S3V6sVvDCVP7kdynNbYJkyr0NIHrYgsw6qR8oi2SroDpLAlHT-JLy-27rUMhKOJ8z0kHAXBBxEXE1lI0O80qWl8gqdinrHzwiqBZRkObcwJnWpZk-iSrS4ExB0V_c/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">El instalador. Si no ves en él nada raro... </td></tr>
</tbody></table>
<br /><br />Es buena cosa que se recomiende modificar los parámetros de conexión a la base de datos indicados en el fichero "initialize/db.inc.php". En él aparecen unas variables cuyos nombres son bastante explicativos, aparte de que los comentarios del fichero lo dejan todo muy claro si sabes inglés. Estas variables y sus valores por defecto son:<br /><br />$hostName = "localhost";<br />$databaseName = "literature"; <br />$username = "litwww"; <br />$password = "%l1t3ratur3?";<br /><br />No hace falta que la base de datos ni la cuenta de acceso existan. De eso se encargará el instalador. Lo malo es que, si MySQL (o MariaDB) está instalado en el mismo equipo que el servidor web, se puede realizar la instalación sin cambiar estos parámetros de configuración. Y, ya se sabe, los valores por defecto suelen hacer que todo funcione, pero no siempre de forma optimizada o segura.<br />
<br />
No es bueno usar credenciales por defecto y las aplicaciones no deberían tenerlas. Mejor preguntarlas a quien realiza la instalación.<br /><br />Es hora de rellenar el formulario. Para empezar, unas credenciales para acceder al servidor de bases de datos. Debe tratarse de una cuenta con permisos de administración pues con ella se creará la base de datos y la cuenta de usuario, se asignarán permisos, etc.<br /><br />Después va la ruta del programa de línea de comandos que permite interactuar con la base de datos, típicamente "mysql.exe" o "mysql". Y le sigue la ruta de un fichero con los comandos SQL que crean las tablas y les añaden sus primeras filas. Paro aquí y no sigo porque el resto carece de relevancia para las pruebas que estoy realizando. Y te dejo tiempo para que vuelvas a leer este párrafo.<br /><br />Sí. Has leído y entendido bien. No es que haya un problema de vulnerabilidad de inyección de comandos de sistema operativo ni otra de SQL injection. Es que ambas cosas forman parte del propio diseño del procedimiento de instalación. Y, sí, ésta es una de las cosas que les comentaba hace año y pico a los desarrolladores.<br /><br />En todo caso, debe señalarse que hay un factor que mitiga el riesgo. Por la forma de funcionar del instalador, si las credenciales de acceso a la base de datos proporcionadas no son válidas, o si la cuenta no puede seleccionar la base de datos "mysql", el proceso de instalación se detiene y no se ejecutan comandos ni del sistema operativo ni SQL. Además, se comprueba que las rutas se refieren a ficheros y que se tienen los permisos apropiados. <br /><br />Pero una cosa es conocer unas credenciales válidas de administración de MySQL y otra es poder ejecutar comandos en el sistema operativo con la cuenta del servidor web. Como esta vez estaba usando XAMPP en "modo usuario", sin instalar servicios, me acordé de nuestra amiga la calculadora:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjcsYTYq4gcmPh-KIV6FcZXkxMrAHw4Xwwk6BpzOnA4b7-T5D_yBDPzzvqNYSc6LWHv8SiPCaiBsi66Hsv75es_FRRdRZYhtOnGIjXvE9UUZfvPZ_89UrCJqA8QxJIG8eCCC2KlC0xJYxp/s1600/03.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjcsYTYq4gcmPh-KIV6FcZXkxMrAHw4Xwwk6BpzOnA4b7-T5D_yBDPzzvqNYSc6LWHv8SiPCaiBsi66Hsv75es_FRRdRZYhtOnGIjXvE9UUZfvPZ_89UrCJqA8QxJIG8eCCC2KlC0xJYxp/s400/03.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">El formulario relleno y el efecto que causa al enviarlo</td></tr>
</tbody></table>
<br /><br />Además, el formulario tiene una vulnerabilidad de Cross Site Request Forgery. Esto permite explotar las vulnerabilidades presentes incluso si no se tiene acceso a la instancia de refbase a atacar. Bastaría con que alguien con malas intenciones (y sabiendo credenciales de adminsitración de MySQL) tuviera una página en su servidor como "http://malicioso.example.net/1/index.html" con un código como el siguiente:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1A6YKFUHCaop3iMQz2mydZKORvZFI1tpKE3tnD11vZoHhVcZTt62wQdO85-sSNM-vDrZMarFSzwtdCP9pQ8szUnb1KlE0BFiLcP3_zXuSHDNhvzVmJf0rpEkgxWLSXPWtjz6mYNTisUJ9/s1600/04.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1A6YKFUHCaop3iMQz2mydZKORvZFI1tpKE3tnD11vZoHhVcZTt62wQdO85-sSNM-vDrZMarFSzwtdCP9pQ8szUnb1KlE0BFiLcP3_zXuSHDNhvzVmJf0rpEkgxWLSXPWtjz6mYNTisUJ9/s400/04.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Código fuente de la página maliciosa</td></tr>
</tbody></table>
<br />
<br />Como puede observarse, es un formulario de instalación ya relleno que es enviado de forma automática al servidor de la instancia de refbase y cuyos valores fuerzan la ejecución de comandos en el servidor web. Si ahora consiguiera que alguien que sí tenga acceso a la aplicación visitara la página maliciosa...<br /><br />A lo del fichero SQL no le dedico mayor espacio. A todo lo dicho habría que añadir que quien tenga ya las credenciales de adminsitración de MySQL posiblemente encuentre, o haya encontrado, formas de hacer lo que quiera y no necesite andar jugando con el instalador de refbase. De todos modos, casos habrá en que éste sea de utilidad.<br /><br />
<h2>
Instalando ya refbase. Esta vez, de verdad</h2>
Bueno, ha llegado la hora de instalar refbase. Relleno los campos bien y envío y...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrpfFTDPJw6QV_daPc0DMB5ZKid5l2AXx1csm5YltBijUzJzQm_6UT_aN_aDkrGWffDsWSRUf4S9I0wmytD-i71bmmEOUo3JOSs8Mu8kYnVhJviz4176nSfu8PIsNdeL8vKCQ4b43486F_/s1600/05.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrpfFTDPJw6QV_daPc0DMB5ZKid5l2AXx1csm5YltBijUzJzQm_6UT_aN_aDkrGWffDsWSRUf4S9I0wmytD-i71bmmEOUo3JOSs8Mu8kYnVhJviz4176nSfu8PIsNdeL8vKCQ4b43486F_/s400/05.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Instalado</td></tr>
</tbody></table>
<br />
<br />
<br />
<br />Al acabar la instalación, de nuevo, la aplicación da buenos consejos. Me dice que cambie la cuenta de administración de refbase (por defecto "user@refbase.net" con contraseña "start") y que, ya que no me va a hacer más falta, elimine el script "install.php". No sea que alguien lo utilice para volver a instalar la aplicación y hacer tabla rasa con todos los datos que pudiera contener.<br />
<br />
Algún "install.php" me he encontrado usando Google. ¿Y cuántos habrá en Internet no indexados, pero que están "al ladito" de instalaciones de refbase que sí aparecen en el buscador? Iba a poner un ejemplo llamativo, pero mejor me paro un poquito...<br /><br />De este tema hablé también con los autores de refbase. Y me alegra ver que en la nueva versión, la página principal de la aplicación´se niega a prestarnos servicio en tanto exista el fichero "install.php" (y también "update.php", utilizado para actualizaciones desde versiones muy antiguas).<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiybucToIAR470PQ6UjNYod8Ekqn_ZkHI-sWkaXLAqv1rmB1gz5qH1yISj77riYNIdj7xEXkgJFm6LTILO7qqozbm0it-8oV-gOmbt3HuyI-oe73kF4KLfTK1TfKiE6xMhf3zMOXX4T5m5V/s1600/06.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiybucToIAR470PQ6UjNYod8Ekqn_ZkHI-sWkaXLAqv1rmB1gz5qH1yISj77riYNIdj7xEXkgJFm6LTILO7qqozbm0it-8oV-gOmbt3HuyI-oe73kF4KLfTK1TfKiE6xMhf3zMOXX4T5m5V/s400/06.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Si no eliminas los scripts de instalación, no te hago caso</td></tr>
</tbody></table>
<br />
Eso sí, si te sabes algunas URLs, otras funcionalidades no cuentan con esta protección. Como se dice por aquí, nos van dando "una de cal y otra de arena". Una cosa buena y otra mala. Además, algunas de estas funcionalidades en mi caso muestran muchos mensajes de error:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpIqeWSDnfabUd60OQRDOD5E-2OekDY_fnQg5xc3u77_fnoRdtZ6ZHtIHjtfnrga2kVGGOvOqZp9SNkTupvc3X90ZiSNXyUiF5I6AStALqD1zoKlTlQfhebvsdH-nx6Vu8md7A-GxqCWfj/s1600/07.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpIqeWSDnfabUd60OQRDOD5E-2OekDY_fnQg5xc3u77_fnoRdtZ6ZHtIHjtfnrga2kVGGOvOqZp9SNkTupvc3X90ZiSNXyUiF5I6AStALqD1zoKlTlQfhebvsdH-nx6Vu8md7A-GxqCWfj/s400/07.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Errores a gogo</td></tr>
</tbody></table>
<br />De eso también les hablaba en el informe que envié en su día a los desarrolladores de refbase. Que si era conveniente deshabilitar los mensajes de error, que si éstos podrían proporcionar información a un potencial atacante... La respuesta fue que esto no era problema de refbase. Que bastaba con configurar el servidor PHP, con "display_errors=Off" en el "php.ini", para que no mostrara los mensajes y listo.<br />
<br />
¡Ay! ¡Costumbre peligrosa, la de dejar que sean otros los que corrijan algo que uno podría haber dejado bien! ¡Y mira que les habría bastado con poner un "error_reporting(0);" al inicio de unos cuantos ficheros! Pues ni por esas.<br /><br />Bueno. Elimino "install.php" y "update.php", configuro mi servidor para que no muestre errores y lo reinicio. Todo mejor.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8il1N4qFGHpSkOvveqXL9THpmG6YHaUsHwVSfp6B_-gHqFlUSHTaGkQFdmky-SRALVNE-LqEO9Clt_dmlrwKX-fb8T5_C41mxTi4clwivH62r_bRcdFwZMBcPQD56lrHKHrWd33Lok49/s1600/08.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8il1N4qFGHpSkOvveqXL9THpmG6YHaUsHwVSfp6B_-gHqFlUSHTaGkQFdmky-SRALVNE-LqEO9Clt_dmlrwKX-fb8T5_C41mxTi4clwivH62r_bRcdFwZMBcPQD56lrHKHrWd33Lok49/s400/08.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Esto ya parece un programa</td></tr>
</tbody></table>
<br />
<h2>
Una pregunta que me hago</h2>
Digo yo: El instalador te pide que le indiques mediante el formulario las rutas del fichero con sentencias SQL a instalar y del ejecutable de la interfaz de línea de comandos de MySQL. Y tienes que tocar ficheros PHP para indicar los parámetros de conexión y el nombre de la cuenta de administración.<br /><br />En todo caso... ¿no sería preferible que fuera al revés? Que lo que estuviera configurado mediante ficheros PHP fueran las rutas del ejecutable y el fichero SQL. Que el formulario solicitara los parámetros de conexión y la cuenta de administración.<br /><br />Supongo que pensarían: "A ver dónde va a poner el instalador las credenciales de conexión y otras cosas por estilo. Porque si es en un fichero de texto o similar alguien podría descargarlo y ver su contenido. Y usar los valores para generar código PHP de forma automática... da un poco de mal rollo. No sea que alguien averigüe cómo inyectar código PHP en alguno de los parámetros y nos la líe parda".<br /><br />Pero no es éste un tema del que deberían preocuparse demasiado.<br />
<br />
Refbase ya tiene otras vulnerabilidades de ejecución de código PHP arbitrario. <br /><br />La próxima vez os lo cuento.Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-2315570333244409052017-05-10T09:32:00.001-07:002017-05-10T09:32:29.722-07:00Vulnerabilidad de "Insufficient resources to accomplish the task"<h2>
Refbase es el nombre</h2>
En la última entrega hablaba de una aplicación vulnerable cuyo nombre no quería revelar. Estaba siendo objeto de cambios en su código fuente y prefería esperar a ver cómo quedaba al final. Ahora que la cosa se ha estabilizado, creo que es momento de dedicarle unos cuantos posts.<br />
<br />
Muchos posts.<br />
<br />
Vaya aquí el primero. Hace ya más de un año que me puse en contacto con los desarrolladores de "Web Reference Database", también llamado "refbase" para comunicarles algunos fallos de seguridad que le había encontrado. Y no había costado demasiado dar con ellos. Para quien no lo conozca, refbase es el software al que, sin nombrarlo, me referí en varias entregas de esta serie como en "<a href="http://418iamateapot.blogspot.com/2014/11/normal-0-21-false-false-false-es-x-none.html" target="_blank">El parque del oso</a>" y "<a href="http://418iamateapot.blogspot.com/2014/11/by-design-2.html" target="_blank">otros casos parecidos</a>" o en "<a href="http://418iamateapot.blogspot.com/2014/11/by-design-3.html" target="_blank">Más cosas de la web del oso</a>". Y, sí, también en "<a href="http://418iamateapot.blogspot.com/2017/04/by-design-5.html" target="_blank">Sube que te sube</a>".<br />
<br />
Tras intercambiar varios mensajes con ellos y esperar (esperar mucho), os cuento mi experiencia y mis reflexiones.<br />
<br />
Vaya por delante que refbase es una aplicación muy compleja, con muchas funcionalidades, y que, si no tuviéramos en cuenta los aspectos relacionados con la seguridad, me parecería estupenda, pero...<br />
<br />
<h2>
Primer contacto</h2>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Pero me parece que no se diseñó con la seguridad en mente. Y, cuando el producto está hecho, cambiar sus especificaciones es complicado, de modo que la cosa se suele arreglar con parches, de esos que no suelen quedar "bonitos". Pero vayamos a la web de refbase y veamos qué ofrece:<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeW0jn-Ig4i8_0-EEhHUJ6fXL2T07lLI-Q8Sl5Rv5tLJjsZo8amapPyct9eUopMgba3Si1SsJmVPiA4Dyr8oa984v6FzTvU2YuP00_Vohums2TuJyoCZ00lfhVrAXic_dEgk8M9PN_3LPk/s1600/01.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeW0jn-Ig4i8_0-EEhHUJ6fXL2T07lLI-Q8Sl5Rv5tLJjsZo8amapPyct9eUopMgba3Si1SsJmVPiA4Dyr8oa984v6FzTvU2YuP00_Vohums2TuJyoCZ00lfhVrAXic_dEgk8M9PN_3LPk/s400/01.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">New - Download refbase 0.9.6</td></tr>
</tbody></table>
<br />
<br />
Estamos de suerte. Hay una versión nueva, la 0.9.6 y se supone que ha corregido algunos problemas. Quizá... si no fuera porque esa misma versión ya era "nueva" hace unos tres años:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYgkZ_ENrnAvJ1yhL0HMVUFDi1D70TMPkpD7gAkxmcrLgP-6niw-TVspYMU0S7Y_Ma_1PfKQWSqqGRKl3drE8G4H4IRXTmJvV2Ogt4V2ot8XE-_lmLjunhOiYj3Yui4U1s31Okq4JtL5rt/s1600/02.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" height="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYgkZ_ENrnAvJ1yhL0HMVUFDi1D70TMPkpD7gAkxmcrLgP-6niw-TVspYMU0S7Y_Ma_1PfKQWSqqGRKl3drE8G4H4IRXTmJvV2Ogt4V2ot8XE-_lmLjunhOiYj3Yui4U1s31Okq4JtL5rt/s400/02.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Not that new</td></tr>
</tbody></table>
<br />
Al hacer clic sobre este anuncio de nueva versión se inicia la descarga de refbase. Así procedí yo hace año y pico. Y cuando les envié un reporte de vulnerabilidades me señalaron que algunas de ellas ya estaban solucionadas y que lo comprobara en su repositorio de Subversion, donde hay una versión más actualizada.<br />
<br />
A este respecto debo señalar que en su página principal tienen un enlace al mismo y que en alguna ocasión he encontrado recomendaciones de los propios desarrolladores para que se use la versión del SVN.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjtUPCNm1cRUrA9dXRMB78RD08GzIGriFJRGgedV3_b7OXqewdT0Uniy9QR_2uco3k149KEj6eb2DyFlq-iugL1JBfsCKoxpqsBNuHGpJ5K_2P3d_INbXLmZdBZUO_7Gqq0WYdtdF9Oxgt/s1600/03.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="118" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjtUPCNm1cRUrA9dXRMB78RD08GzIGriFJRGgedV3_b7OXqewdT0Uniy9QR_2uco3k149KEj6eb2DyFlq-iugL1JBfsCKoxpqsBNuHGpJ5K_2P3d_INbXLmZdBZUO_7Gqq0WYdtdF9Oxgt/s400/03.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Espera, que hay versiones posteriores</td></tr>
</tbody></table>
<br />
<br />
<br />
La tecnología puede ser sexy y llamativa. Pero no siempre es lo más importante. Y, desde luego, no lo es en este caso. Porque si la versión 0.9.6 es muy vulnerable (que, serlo, lo es) y existen versiones más recientes (que, existir, existen)... yo me pregunto: "¿Por qué no se ofrece una versión más reciente en la página principal de la web?". Y se me ocurren dos respuestas:<br />
<br />
- Porque no han considerado estable ninguna de las versiones posteriores a la 0.9.6.<br />
- Porque no han actualizado la web.<br />
<br />
Sea como sea, ahí está el mensaje. Colocado en una zona privilegiada de la página, de modo que habrá quien, como yo en su día, se limite a hacer clic en él y no siga leyendo.<br />
<br />
Y aseguro que creo, quiero creer, que al equipo de desarrollo de refbase le preocupa la seguridad. De hecho, incluso he encontrado casos en que recomiendan a sus usuarios actualizar sus entornos de ejecución a versiones más recientes.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNIki9sXh-96NOotokG3zuvafjgUgPdRKMkcjx9SpTyhwTUj5_n_kUqrLZnYNi5KX3_EnTct_09bjIseIfwKxYZ4_0ZaRUTp3R1W5CvqXwWmZAsP8JNfubjuqLxZVqeRgUfIeGTpzK26rH/s1600/04.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNIki9sXh-96NOotokG3zuvafjgUgPdRKMkcjx9SpTyhwTUj5_n_kUqrLZnYNi5KX3_EnTct_09bjIseIfwKxYZ4_0ZaRUTp3R1W5CvqXwWmZAsP8JNfubjuqLxZVqeRgUfIeGTpzK26rH/s400/04.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Buenos consejos</td></tr>
</tbody></table>
<br />
<br />
Pero es que es un equipo muy reducido. Dependiendo del momento, quizá dos... quizá 3... quizá lleguen a 5 miembros. Y muchos de ellos van y vienen: "los de siempre" parecen ser sólo dos. Que, además, parecen tener otras ocupaciones principales que, supongo, les dejarán poco tiempo libre.<br />
<br />
Mientras tanto, sigue habiendo quien se descarga la versión antigua, supervulnerable, y la instala en producción, con los riesgos que ello supone:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOnper_yPeLzKKa4rWtUJSAJpvA1wvfJYDFzajQigfd03CPDCx6LRwsRR0cO4KbRFVfD4YNl1600RxaDEVt8wv0h0sepcykJ4jaMv9waqVARCS-ng6FVKjzP7gkN0u_UdVnE4iMp1AbAWL/s1600/05.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOnper_yPeLzKKa4rWtUJSAJpvA1wvfJYDFzajQigfd03CPDCx6LRwsRR0cO4KbRFVfD4YNl1600RxaDEVt8wv0h0sepcykJ4jaMv9waqVARCS-ng6FVKjzP7gkN0u_UdVnE4iMp1AbAWL/s400/05.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Sí, amigo. Instálate la 0.9.6, que verás que bien te lo pasas</td></tr>
</tbody></table>
<br />
Ahí dejo, pues, un ejemplo (uno más) de "vulnerabilidad administrativa". Por usar la forma de expresarse del Top 10 de OWASP supongo que podría denominarse: "Insufficient resources to accomplish the task". Y a la larga es de las graves. Más que un SQL injection. Porque mientras ésta puede corregirse puntualmente, la otra es una tendencia.<br />
<br />
Quien no mire este tipo de cosas a la hora de seleccionar los proyectos de software a implantar, tanto libre como propietario, que después no se queje.<br />
<br />
La próxima vez nos pondremos a ver si se arreglaron los problemas de seguridad de la aplicación. Que os adelanto que más bien no.Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-3786561294852525392017-04-25T11:58:00.003-07:002017-04-25T12:14:17.051-07:00By Design (5)<h2>
Sube que te sube </h2>
Una página que permite subir un fichero a un servidor... ¿qué puede salir mal?<br />
<br />
No quiero dar por ahora el nombre de la aplicación porque me consta que en estos días está siendo sometida a una importante "reforma" y quisiera antes ver cómo termina la cosa. Pero, sin decir el "pecador", sí voy a mencionar uno de sus muchos, y en ocasiones importantes, "pecados". De modo que en los ejemplos que siguen se mostrará un formulario que he creado aprovechando su código (se trata de software libre) y copiando su comportamiento.<br />
<br />
La idea es que el usuario sube un fichero y la aplicación lo almacena en cierto directorio. El nombre con el que el fichero es guardado se determina teniendo en cuenta el valor de una variable de configuración:<br />
<ul>
<li>Si el valor de ésta es verdadero, se usa un nombre predeterminado y se le pone como extensión la del fichero original. Esta extensión se obtiene tomando los caracteres que sigan al último carácter de punto (.). Esta es la opción por defecto.</li>
</ul>
<ul>
<li>Si es falso, se usa el nombre y la extensión del fichero original.</li>
</ul>
El primer error de diseño, aunque es algo que no siempre es posible evitar, es que por defecto el directorio en el que se copian los ficheros subidos es un subdirectorio de la propia aplicación web. Peligroso. Muy peligroso. Pero no todo está perdido (¿o sí?): los desarrolladores implementan un control de las extensiones de archivo permitidas con objeto de impedir que alguien cuele algo dañino:<br />
<br />
<table style="border: solid;"><tbody>
<tr><td>if (<span style="color: blue;">preg_match("#\.(exe|com|bat|zip|php|phps|php3|phtml|phtm|cgi)$#i", $uploadFile["name"])</span>)<br />
// file name has an invalid file name extension (adjust the regex pattern if you want more relaxed<br />
//file name validation)<br />
$errors["uploadFile"] = "You cannot upload this type of file!";<br />
// file name must not end with .exe, .com, .bat, .zip, .php, .phps, .php3, .phtml, .phtm or .cgi</td></tr>
</tbody></table>
<br />
El resultado es que si, por ejemplo, se intenta subir un fichero PHP, la aplicación se niega a obedecer:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXagFEPx50bT5NlkAB02dlCWr8AmkbUHWwtmd1OXw5cpDVkev4_ELbwRgFfq-Tp-OKy0Q4UasEg7dhgvPOgX9sMa0ubnBcyX59kanjGvjTZeERt1O9-qQFmMjh1ZArf5IKkQV6EdUhd9xt/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXagFEPx50bT5NlkAB02dlCWr8AmkbUHWwtmd1OXw5cpDVkev4_ELbwRgFfq-Tp-OKy0Q4UasEg7dhgvPOgX9sMa0ubnBcyX59kanjGvjTZeERt1O9-qQFmMjh1ZArf5IKkQV6EdUhd9xt/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 1 - No puedes subir este tipo de fichero</td></tr>
</tbody></table>
<br />
<br />
Así que nada de ".exe, .com, .bat, .zip, .php, .phps, .php3, .phtml, .phtm or .cgi" ¿verdad? <br />
<br />
<h2>
Blanco. Blanco como la nieve</h2>
Cuando de medidas de seguridad se trata, es más fácil terminar
arrepentiéndose de haber usado una lista negra que de usar una lista
blanca.<br />
<br />
Y, para muestra, un botón. Porque mirando esas extensiones me pregunto: ¿y si, por ejemplo, la aplicación estuviera corriendo en un servidor Apache que tuviera instalados módulos como <a href="http://www.mono-project.com/docs/web/mod_mono/" target="_blank">mod_mono</a>, que permite la ejecución de páginas ASP.NET? ¿Y si, entonces, alguien subiera un fichero con extensión .ASPX?<br />
<br />
Sin necesidad de ir tan lejos, lo que más a mano tenía yo para hacer pruebas era un servidor <a href="https://www.apachefriends.org/es/index.html" target="_blank">XAMPP</a> sobre Windows. Y... XAMPP trae Perl activado. Así que probé a subir un fichero con extensión ".PL":<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0r3lH8g051iRWaVigAiQm0S1p3_1I8MrrZRBE_vqH7ci9qPnry-xJ89zTHZFFeiP13nMVAea8PCzsLgVLvVXEluwrwXPwrQ0gXi-eyoSwFadzLSdkZGdjWVOt4EHZy2wPuq1iOhxPTKqy/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0r3lH8g051iRWaVigAiQm0S1p3_1I8MrrZRBE_vqH7ci9qPnry-xJ89zTHZFFeiP13nMVAea8PCzsLgVLvVXEluwrwXPwrQ0gXi-eyoSwFadzLSdkZGdjWVOt4EHZy2wPuq1iOhxPTKqy/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 2 - Subiendo CGI en Perl</td></tr>
</tbody></table>
Et voilà:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQy1ZAGQUaY3ckW5dc-mnQlJV4Vz2wbhNyjyMTjd7ZqDcyUT0EhxVZ7BEJUTtc56zJtY7K0d2KLPVgUz3qoztjJO1MZQOwRalb0n4rixqCRW0L69kWEQs6PmdZ-lwwJ1bnYpV9pd5FNx-l/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQy1ZAGQUaY3ckW5dc-mnQlJV4Vz2wbhNyjyMTjd7ZqDcyUT0EhxVZ7BEJUTtc56zJtY7K0d2KLPVgUz3qoztjJO1MZQOwRalb0n4rixqCRW0L69kWEQs6PmdZ-lwwJ1bnYpV9pd5FNx-l/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 3 - Ejecutando el CGI</td></tr>
</tbody></table>
<br />
Lo mejor es que si se cambia el shebang (eso que empieza por #! en la primera línea) se puede invocar otros programas para interpretar el programa. Eso sí, teniendo que lidiar "a mano" con las complejidades del CGI. Que, por otro lado, tampoco son tantas ni tan grandes. Por ejemplo, ahí va PHP:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiroRnogO8TpnFfZ5FfYp_bDN-9Mz6AOcJTsGB-oUAdu44GU0c76rdS68165Q14-X9-SgEXCt3DA9klFdrfiDb0uo-6ykO9QipBVhyphenhyphen1vL5E0IIi3FUKqK4I6pRcvux7Pt-W6aQTvPK5VD_/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiroRnogO8TpnFfZ5FfYp_bDN-9Mz6AOcJTsGB-oUAdu44GU0c76rdS68165Q14-X9-SgEXCt3DA9klFdrfiDb0uo-6ykO9QipBVhyphenhyphen1vL5E0IIi3FUKqK4I6pRcvux7Pt-W6aQTvPK5VD_/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 4 - CGI escrito en PHP</td></tr>
</tbody></table>
<br />
<br />
O, puesto que estoy ejecutando Apache como usuario (no como servicio) ¿por qué no acordarnos de nuestra gran amiga, la calculadora?<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyVLI-LJAULEOp_EmvNABe2gzw3ybM759zl3tOUw_GrvrMAv7IYm0AO-L3PQxzg0iUCMNxH5wi44ZReaj_uaRb8TGpnDH7SgxMI-C0hXXY8xE1TpVTGKJxlP-1_bmp-LH_QQr4ANlsocLr/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyVLI-LJAULEOp_EmvNABe2gzw3ybM759zl3tOUw_GrvrMAv7IYm0AO-L3PQxzg0iUCMNxH5wi44ZReaj_uaRb8TGpnDH7SgxMI-C0hXXY8xE1TpVTGKJxlP-1_bmp-LH_QQr4ANlsocLr/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 5 - La calculadora es buena. La calculadora es tu amiga</td></tr>
</tbody></table>
<br />
También me llama la atención que, aunque se prohíbe la subida de ficheros .EXE, no se dice nada de los PS1 de Powershell, los .VBS y los .JS de Windows Scripting Host, etc., que pueden proporcionar funcionalidades similares.<br />
<br />
Todo ello por no pensar en que alguien suba un fichero HTML y tenga su XSS bien asentadito. O su tienda ilegal de fármacos o de falsificaciones de prendas de moda.<br />
<br />
Es lo que tienen las listas negras: o estás al tanto de todas las posibilidades y sus consecuencias y lo haces todo a la perfección o después toca lamentarse.<br />
<br />
Pero aún hay más. Hagamos borrón y cuenta nueva y exploremos otro camino.<br />
<h2>
Regular. O sea: ni bueno ni malo </h2>
Las expresiones regulares facilitan mucho las cosas a los programadores. Son potentes y sencillas... pero no siempre fáciles.<br />
<br />
Quizá sea una trivialidad, pero resulta que para resolver un problema usando expresiones tienes que dominar dos cosas:<br />
<ul>
<li>El problema que quieres resolver y sus condicionantes</li>
<li>Las expresiones regulares</li>
</ul>
Y cuando todo sale mal, muchas veces no sabes en cuál de ellas se falló. Como dije antes, yo estaba usando XAMPP sobre Windows. Uno de los muchos entornos en los que la aplicación puede ser desplegada. Y, como cada uno de ellos, con sus características propias.<br />
<br />
En este caso, basta con fijarse en una de ellas: cuando en Windows creas un fichero cuyo nombre tiene espacios al final, dichos espacios son ignorados. Como una imagen vale más que mil palabras:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM1dol6Wh6vpa8yRn8pLn9GJQkxQseZHDs9a-jkpQt8D5zgvKZ0Ac6P-kUE9Kb3VRmGdTb0h5PXdsa9oNV7iZ7jV8ce2ZqAZh-SH_r6TMfEWyH66vSoetAkfoHyNo3iS-1d99sGra5PieQ/s1600/1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM1dol6Wh6vpa8yRn8pLn9GJQkxQseZHDs9a-jkpQt8D5zgvKZ0Ac6P-kUE9Kb3VRmGdTb0h5PXdsa9oNV7iZ7jV8ce2ZqAZh-SH_r6TMfEWyH66vSoetAkfoHyNo3iS-1d99sGra5PieQ/s400/1.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 6 - Espacio</td></tr>
</tbody></table>
<br />
De modo que, si se intenta subir un fichero PHP...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpJLzcCPIxUJ1kMp1lIs4aJzcEoCaswWr7ZLtCskBsnTqRQtoX9wblWFNYTO1DAfKQw4jVazt0bEawrEgzbdfJatusorSHSmxBHei0vuFfxqN21Ft3spKSaj6hwRmYN6eJu5XUv8YGNh9i/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpJLzcCPIxUJ1kMp1lIs4aJzcEoCaswWr7ZLtCskBsnTqRQtoX9wblWFNYTO1DAfKQw4jVazt0bEawrEgzbdfJatusorSHSmxBHei0vuFfxqN21Ft3spKSaj6hwRmYN6eJu5XUv8YGNh9i/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 7 - Subiendo PHP</td></tr>
</tbody></table>
<br />
<br />
... y se intercepta la petición usando un proxy como ZAP y se modifica el nombre del fichero, añadiendo un espacio al final (y también el tamaño de la petición, que habrá que incrementar en uno como consecuencia de lo anterior)...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVX0aDfPmj-fSexZTSn030M-5kY-j_AswNC_mo-sfxVC7fUbcdNAqCjiHzRgm4Gtd7hQOAIoQr7FintWucGukd14NZHBvt6T8eHXSbTqGs0tZ7EepAFfEbHpj-Uo8r1gc2mYXW94B4r0MM/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVX0aDfPmj-fSexZTSn030M-5kY-j_AswNC_mo-sfxVC7fUbcdNAqCjiHzRgm4Gtd7hQOAIoQr7FintWucGukd14NZHBvt6T8eHXSbTqGs0tZ7EepAFfEbHpj-Uo8r1gc2mYXW94B4r0MM/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 8 - Modificando la petición</td></tr>
</tbody></table>
<br />
... El resultado será<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqPYM4GX0eaJdrqlyWnQrgmTn94rS4CQiVEPdLLly_RkTQcroWIlVv7b_ao7BQ7IjICgxg6IQ6szzkb1P8wpmfTlF_Gq6lIls51KPrPiAqlYO_CuiicOgkrRUw4zJ0sDyot7ap7H1J_SKm/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqPYM4GX0eaJdrqlyWnQrgmTn94rS4CQiVEPdLLly_RkTQcroWIlVv7b_ao7BQ7IjICgxg6IQ6szzkb1P8wpmfTlF_Gq6lIls51KPrPiAqlYO_CuiicOgkrRUw4zJ0sDyot7ap7H1J_SKm/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 9 - Subido...</td></tr>
</tbody></table>
<br />
Y, si se conoce en qué directorio ha sido colocado, el fichero será de lo más "aprovechable"<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO0VhAEeDcXzsqyRxYzMoPDhUeNM6M_t_-knaKVBS0dax7_x_PBOchYT-JyoBxnIpOumgDHULGD4FX-EenJZl6wIQbD6OysAhYXhaw-D5A6bafODYV47vzMMQsAjppGG_zLIa4I3uCmhN6/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO0VhAEeDcXzsqyRxYzMoPDhUeNM6M_t_-knaKVBS0dax7_x_PBOchYT-JyoBxnIpOumgDHULGD4FX-EenJZl6wIQbD6OysAhYXhaw-D5A6bafODYV47vzMMQsAjppGG_zLIa4I3uCmhN6/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 10 - ...Y funcionando</td></tr>
</tbody></table>
<br />
Podría ser aún peor. Porque si se hubiera configurado la aplicación para no renombrar archivos, en lugar del espacios al final del nombre también valdría con uno o varios puntos:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg52_K2zZugCRLJDEY2ayAoO8SGkPr4F_ORknlBS_W66p_Qk6_P9qMMU9qWu-Z8iEt6CxxLdR3kEDVOwBAj3zM-YfLNE8GxM7t1DVCbK3kna5t8NGT0_sDMTJywh9AEftkriAoK9faM20-e/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg52_K2zZugCRLJDEY2ayAoO8SGkPr4F_ORknlBS_W66p_Qk6_P9qMMU9qWu-Z8iEt6CxxLdR3kEDVOwBAj3zM-YfLNE8GxM7t1DVCbK3kna5t8NGT0_sDMTJywh9AEftkriAoK9faM20-e/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen 11 - Por si fuera poco</td></tr>
</tbody></table>
<br />
<h2>
Por ir acabando</h2>
Menos mal que la aplicación hace otras comprobaciones y no deja que el nombre del fichero contenga cosas rarunas, como la barra de directorio o la barra invertida. En realidad, ahí se hace un buen diseño y se limita los caracteres válidos, tanto para ficheros como para directorios, a un conjunto muy preciso: "a-zA-Z0-9+_.-" para los primeros y "a-zA-Z0-9+_-" para los segundos.<br />
<br />
Lástima que las comprobaciones se hacen sólo para la parte del "nombre de archivo" y no para la de la extensión.<br />
<br />
Por si a alguien le cabía duda: lo del upload era sólo la anécdota. Lo que realmente quería decir con este post era:<br />
<ul>
<li>Eso de que los ficheros subidos vayan a un directorio que está publicado por el servidor web es muy, muy, muy mala idea. </li>
<li>En general, para esto de la seguridad: Lista negra= caca. Lista negra= problemas. Lista negra = quebraderos de cabeza.</li>
<li>Las expresiones regulares son como las cerillas: son algo bueno, pero tienes que ser responsable y saber lo que estás haciendo antes de usarlas. No hacen magia. No resuelven tus problemas. Sólo son una herramienta rápida para que tú los soluciones. Si tú te equivocas, las expresiones regulares te ayudarán a equivocarte más rápido.</li>
</ul>
No es éste, el de la subida de ficheros, el único problema de seguridad de la aplicación. Ésa cuyo nombre por ahora callo pero que alguien seguro que intentará, y posiblemente logrará, localizar. Que para eso están los buscadores.<br />
<br />
Tiene tantos como para dedicarle un blog entero.<br />
<br />
Lo bueno es que de los errores se aprende. Y mejor que sea de los ajenos. <br />
(Continuará...)Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-38895247691588976702017-02-11T10:32:00.001-08:002017-02-11T10:32:23.746-08:00Biometría y ataques de fuerza brutaLos aspectos legales de los mecanismos biométricos para la seguridad son, cuando menos, sorprendentes. Hace algún tiempo, en un post llamado "<a href="http://418iamateapot.blogspot.com/2016/07/biometria-identificacion-autenticacion.html">Biometría: Identificación, Autenticación o Autorización</a>", planteaba mis dudas sobre el estado actual de la tecnología biométrica y, de paso, dejaba caer que, en los Estados Unidos, las autoridades policiales y judiciales no pueden forzar a un acusado a entregar su contraseña pero sí a poner el dedo sobre el lector de huellas que desbloquee un equipo.<br />
<br />
Y eso es lo que pasó en el caso de "<a href="http://mn.gov/law-library-stat/archive/ctappub/2017/OPa152075-011717.pdf">el Estado de Minnesota contra Matthew Vaughan Diamond</a>". Se forzó al acusado a desbloquear su teléfono y se dictaminó que eso no iba en contra de la "quinta enmienda". Esa que, entre otras cosas, dice que un acusado no puede testificar contra sí mismo. Y es que "hacer algo", como desbloquear un teléfono, no se considera prestar testimonio.<br />
<br />
Pero, según me entero al oir un episodio del podcast <a href="https://www.grc.com/securitynow.htm">Security Now</a>...hubo apelación. Basada en que la policía no indicó al acusado qué dedo debía usar, sino que le ordenó usar "el que desbloqueara el teléfono". Y, como no, a alguien se le ocurrió que eso sí era forzar a testificar, a decir qué dedo había que usar.<br />
<br />
No sé cómo terminarán estas cosas, pero a las autoridades les habría bastado con un ataque de fuerza bruta. Al fin y al cabo, sólo hay diez dedos a probar.<br />
<br />
Me pongo a pensar en como elevar el número de posibilidades y me pregunto: ¿contratarán los ricos a gente para que les desbloqueen los teléfonos con datos más sensibles? ¿tendrán huellas dactilares los dedos de los pies?<br />
<br />
Y mejor que me deje de preguntas, que ya habrá por ahí quien esté pensando en otras partes del cuerpo con las que incrementar el "espacio de claves".Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-78623818361277869302016-09-06T13:20:00.001-07:002016-09-07T10:41:19.405-07:00El mercado y el mercadeo del typosquatting (4)<h2>
¿Cómo protegerse?</h2>
El typosquatting puede terminar derivando en phishing, usos de tu imagen fraudulentos o que pudieran atentar contra ella, envío de visitas a tu competencia,... Pero... ¿Cómo te proteges de todo esto?<br />
<br />
Todo depende de en qué momento decidas actuar y de lo que otros hayan hecho ya al respecto. Vamos por partes:<br />
<br />
<h2>
Mejor prevenir que curar</h2>
Si el dominio que pudiera ser usado contra tí está libre... lo mejor sería que lo adquirieras. Por lo general, el coste anual no tendrá más allá de dos cifras (decimales al margen, claro) y en muchos casos puede que sea sólo una.<br />
<br />
El problema aquí es que hay que imaginar. Prever qué dominios pudieran causarte problemas. Y seguro que no son pocos. Por poner un ejemplo, para "blogspot.com", donde nos estamos viendo, habría cosas como "wwwblogspot.com", "www-blogspot.com", "blogpot.com", "blogsppt.com", etc.<br />
<br />
Unos serán más probables que otros. Quizá prefieras registrar sólo estos. Pero entonces...<br />
<h2>
Vigila</h2>
<div>
Sí. Vigila aquellos nombres de dominios que, sin ser tuyos, podrían confundirse contigo. Porque aunque hoy no estén registrados o tengan contenidos inofensivos, mañana todo puede haber cambiado.</div>
<div>
<br /></div>
<div>
Quizá cambien de propietario. Quizá el propietario cambie de ideas o lo aparque o alquile. Sea como sea, entonces sí será problema tuyo.</div>
<div>
<br /></div>
<div>
Así que comprueba el contenido de sus páginas, si es posible desde distintas ubicaciones (quizá te interese utilizar herramientas del tipo Browserling o BrowserStack), y también los resultados que puedan aparecer en las páginas de buscadores. Y, dado que lo más probable es que se protejan de la indexación mediante ficheros "robots.txt", si puedes irles echando un vistazo de vez en cuando tampoco te hará daño.</div>
<div>
<br /></div>
<div>
Vigilancia 24 x 7. Algo que en otras áreas no es (o no debería ser) tan raro de encontrar.</div>
<h2>
Cuando ya no puedas prevenir...</h2>
<div>
Si llegas cuando ya hay una campaña de phishing utilizando un domino, actúa.</div>
<div>
<br /></div>
<div>
Actúa tanto si eres el responsable del servicio como si eres un usuario. Aparte de las denuncias policiales y/o judiciales que corresponda poner, todo irá mejor si les ponemos las cosas difíciles a los phishers.</div>
<div>
<br /></div>
<div>
Si el dominio malicioso es un ".es", se puede realizar una notificación enviando un correo al <a href="https://www.certsi.es/">CERT de Seguridad e Industria</a>, dependiente del <a href="https://www.incibe.es/" target="_blank">INCIBE</a>, tal y como se cuenta en la página de <a href="http://www.dominios.es/dominios/es/todo-lo-que-necesitas-saber/valores-anadidos/antiphising">dominios.es</a>. En pocas palabras: manda un correo electrónico a incidencias@certsi.es. Si quieres más información, <a href="https://www.certsi.es/respuesta-incidentes">haz clic aquí</a>. Otros TLD podrían tener cosas parecidas.</div>
<div>
<br /></div>
<div>
Para los ".com" y otros dominios habituales gestionados por ICANN, es cuestión de mirar los datos de Whois. Los agentes registradores dan datos de contacto para la notificación de cualquier abuso que se pueda encontrar. Busca una etiqueta que ponga "Registrar abuse contact email" o algo parecido y al lado tendrás una dirección de correo electrónico. </div>
<div>
<br /></div>
<div>
Una vez sepas a quién, envía ese mensaje. Que el texto sea clarito y que tenga capturas de pantalla del sitio legítimo y el del phishing si es posible. Pero no corras riesgos inútiles: cuando se trate de algo en lo que no confíes, usa un servicio de los que te dejan usar un navegador durante un rato o hacen capturas de cómo se mostraría el sitio.</div>
<div>
<br /></div>
<div>
¿Que si funciona? Cuando la cosa está clara, normalmente sí. En cuestión de horas.</div>
<div>
<br /></div>
<div>
Y si no sabes qué hacer... cuenta con Google, que tiene también una <a href="https://www.google.com/safebrowsing/report_phish/">página para reportar phishing</a>.</div>
<h2>
Recuperar lo que no tuviste</h2>
<div>
Si el dominio está registrado pero no lo usan para nada raro... aparte de vigilarlo puedes actuar.</div>
<div>
<br /></div>
<div>
Para apoderarte del dominio que te tiene con la mosca detrás de la oreja puedes irte a los juzgados. Pero posiblemente sea algo costoso y lento. También, dependiendo del TLD del que estemos hablando, puede existir un procedimiento extrajudicial denominado "recuperación". Y que lo de recuperar no te lleve a engaño: no hace falta haber sido antes propietario del dominio.</div>
<div>
<br /></div>
<div>
Si se trata de un dominio ".es", te propongo <a href="http://www.dominios.es/dominios/es/todo-lo-que-necesitas-saber/sobre-registros-de-dominios/recuperacion-de-dominios">un poco de lectura</a>. Y por si prefieres que te lo resuma, ahí voy:</div>
<div>
<ul>
<li>Tienes que tener un dominio ".es" registrado para poder iniciar un procedimiento de recuperación.</li>
<li>Existen una serie de "proveedores de resolución extrajudicial de conflictos" ante los que puedes interponer la demanda. Actualmente son:</li>
<ul>
<li><span style="font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 0.875em;">(Adigital), Asociación Española de la Economía Digital</span></li>
<li><span style="font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 0.875em;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; box-sizing: border-box;">(Autocontrol), Asociación para la Autorregulación de la Comunicación Comercial</span></span><span style="font-size: 0.875em;">.</span></li>
<li><span style="font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 0.875em;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; box-sizing: border-box;">Consejo Superior de Cámaras de Comercio, Industria y Navegación de España</span></span><span style="font-size: 0.875em;">.</span></li>
<li><span style="font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 0.875em;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; box-sizing: border-box;">Centro de Arbitraje y Mediación de la Organización Mundial de la Propiedad Intelectual</span></span><span style="font-size: 0.875em;">.</span></li>
</ul>
<br />
<li>En la demanda debes justificar:</li>
<ul>
<li>Que el nombre del dominio se parece demasiado a tu marca o nombre de dominio legítimo.</li>
<li>Que el propietario del dominio "raruno" no los tiene.</li>
<li>Que el registro o el uso posterior del dominio denota mala fe. O sea, que se registró o utilizó pensando en tí.</li>
</ul>
</ul>
<div>
Si tienes razón... te darán el dominio en litigio y una cosa menos de la que preocuparte.</div>
</div>
<div>
<br /></div>
<div>
Eso sí. Todo tiene un lado malo. El coste por procedimiento, que tendrás que pagar TÚ, es de 1.400 euros. Mil cuatrocientos, por si alguien se lía con eso de los puntos y las comas. Si no me equivoco, más el correspondiente IVA. Y, por supuesto, añádele lo que corresponda si contratas a alguien para que te lleve estos papeles.</div>
<div>
<br /></div>
<div>
Cuando hablamos de euros y de cuatro cifras...</div>
<div>
<br /></div>
<div>
Si te interesa, puedes consultar los procedimientos que se abrieron en el pasado y sus resoluciones <a href="http://www.dominios.es/dominios/es/todo-lo-que-necesitas-saber/sobre-registros-de-dominios/recuperacion-de-dominios">aquí</a>, visitando la pestaña "Resoluciones dictadas". Algunas cosas curiosas encontrarás, como el caso de "facebook.es" del 2009 o el de "viajescarrefour.es" en el 2010. Nombres que habrían confundido incluso a un experto.</div>
<div>
<br /></div>
<div>
Para dominios dependientes del ICANN <a href="https://www.icann.org/resources/pages/help/dndr/udrp-en">también tienes una referencia que consultar</a>. En este caso los proveedores de resolución aparecen listados <a href="https://www.icann.org/resources/pages/providers-6d-2012-02-25-en">en esta página</a>. Sólo comentarte que la "WIPO" es lo mismo que la "OMPI" (siglas en inglés las primeras y en español las segundas). Y que la principal diferencia con las normas para los dominios ".es" es que, en el caso de los dependientes de ICANN eso de "el registro O el posterior uso denote mala fe" se cambia por un más restrictivo "el registro Y posterior uso denoten mala fe". Deben darse ambas circunstancias.</div>
<div>
<br /></div>
<div>
Por lo demás, <a href="http://www.wipo.int/amc/en/domains/fees/">tampoco es barato</a>. De modo que vuelvo a lo que decía al principio de este post. Mejor prevenir que curar.</div>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-74238245926618757422016-09-06T08:33:00.001-07:002016-09-06T11:27:55.678-07:00El mercado y el mercadeo del typosquatting (3)<h2>
Los que no estaban</h2>
Esta gente tiene más peligro que un plugin sin firmar.<br />
<br />
Y no se trata de una única persona o de una única personalidad en Internet, que a priori es difícil distinguir un caso del otro.<br />
<br />
Vimos <a href="http://418iamateapot.blogspot.com/2016/09/el-mercado-y-el-mercadeo-del_4.html" target="_blank">el otro día</a> que el propietario del dominio que trataba de propagar el plugin lo tenía aparcado y que era dueño de otros que hacían cosas igual o más raras que aquel. Pero ¿habrá dominios de otros propietarios que también te inviten a instalarlo? La respuesta parece clara: sí. Pero vamos a comprobarlo. Por ejemplo, buscando en Google el título de la página:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg73PJUyd2VSDvcqUXff3G6-3vfHjQdngQoF9GVHoroB1vq0gUrB0N9E1h3mLNQVQ9DvQ8sw6Y4A5S0EMK3ZOpkyegNOieThTfnki4D3KzZDCWfpTnVG12Ram-GxXu9zvYX83062VO_yHqY/s1600/apn.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg73PJUyd2VSDvcqUXff3G6-3vfHjQdngQoF9GVHoroB1vq0gUrB0N9E1h3mLNQVQ9DvQ8sw6Y4A5S0EMK3ZOpkyegNOieThTfnki4D3KzZDCWfpTnVG12Ram-GxXu9zvYX83062VO_yHqY/s400/apn.png" width="296" /></a></div>
<br />
327 resultados. Referencias a dominios en páginas que se dedican a ello. Sí, algunos son casos repetidos, pero siguen siendo un buen número. Y muchos de ellos en dominios ".es".<br />
<br />
Como comentábamos, el que NIC.ES te haga resolver un CAPTCHA antes de ver los datos de un dominio ha servido, en cierta medida, para proporcionar un cierto nivel de privacidad a los registrantes. O, por lo menos, para que no aparezcan sus datos directamente en los buscadores y otros sistemas de agregación de datos. Eso ha hecho que algunos vieran innecesario el uso de sistemas de anonimización y protección de datos en el registro de Whois.<br />
<br />
Pero <a href="http://www.whoises.com/" target="_blank">WhoisEs</a> ha cambiado las reglas al ofrecer los datos sin CAPTCHA alguno y ser indexado por buscadores y sistemas como <a href="http://domainbigdata.com/" target="_blank">Domain Big Data</a>. Y parece que todo ha sucedido demasiado rápido para algunos. Para casi todos. Por lo que no debe extrañar encontrarse ahora con mucha información y muchas posibilidades de relacionarla.<br />
<br />
Eso sí, como decía en el post anterior, comprueba siempre los datos en las fuentes originales, que no siempre están actualizados. Recuerda que esta gente trabaja con dominios a corto plazo y muchas veces los ponen a la venta. Y si piensas en comprarles alguno, piensa que te los llevas con todo el historial que han adquirido previamente. Que quizá figuren en listas negras por las prácticas en las que se han visto involucrados o están etiquetados como distribuidores de malware. Cuidado, en todo caso.<br />
<br />
Lo que ahora interesa es que aparecen muchos datos y que a partir de cada dominio tenemos hilo del que tirar.<br />
<br />
Como este caso. En la imagen aparece una referencia a una noticia de un tema policial entre los resultados proporcionados por Google. Téngase en cuenta que podría tratarse de otra persona con el mismo nombre que el utilizado para registrar el dominio y que no tenga nada que ver con éste. Al fin y al cabo, nombres que en un país parecen extraños en otros son de lo más común. Y no siempre se da un nombre real al hacerse con un dominio:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeXNL-iu_XmymmSm-TMI-O9dJlNQPfFSmqQfhixKCpHdzd1YUZ0tPRcI2_PViiGhw6jhPxPOp_PaP0QtU_PUbrlebSbK01JInymYCTxB65rL4tzsfwp8EEFq6MIHoJ6MRnbgG22UGidHej/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeXNL-iu_XmymmSm-TMI-O9dJlNQPfFSmqQfhixKCpHdzd1YUZ0tPRcI2_PViiGhw6jhPxPOp_PaP0QtU_PUbrlebSbK01JInymYCTxB65rL4tzsfwp8EEFq6MIHoJ6MRnbgG22UGidHej/s400/1.png" width="400" /></a></div>
<br />
O este otro, cuyos apellidos harían pensar en un hermano del propietario del dominio con el que empezamos esta serie:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD3GkkA7Mgrh_HHpvS0J6XpmTmnUZxz_Kvmpg6yHrPVcyKbxvVaGblwO63WtqoDtMnTPl745jq2sZexiltPOJwMImt2tpbAdYNDdumBYAAU1M0TI58UBeShCsgvC7193_PNalu1bqUV2FL/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD3GkkA7Mgrh_HHpvS0J6XpmTmnUZxz_Kvmpg6yHrPVcyKbxvVaGblwO63WtqoDtMnTPl745jq2sZexiltPOJwMImt2tpbAdYNDdumBYAAU1M0TI58UBeShCsgvC7193_PNalu1bqUV2FL/s400/2.png" width="263" /></a></div>
Hermano y compañero de fatigas, por lo que parece.<br />
<br />
<h2>
Riesgos futuros</h2>
No quiero repetirme más y me remito a los posts anteriores (1 y 2). Pero tampoco que no se transmita la preocupación que ciertos dominios me inspiran. Dominios que podrían confundirse con los de organismos y administraciones públicas o sitios populares. A los que un sencillo error, como el de no escribir el punto que separa el típico "www" del nombre del dominio, podría llevar. Por citar algunos (entre los resultados, en negrita, aparece un "falso positivo":<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLOuqLh4Oh1LatgV6Vt6X6dzvHCdwYpIMEXLbNfJSK6-0pbfWg9e4pysj3i9Ryk6d3Su37lMQ6tJQ8Vo965PYbIIMonmcPSftf8VTO0z15Vmblqb4M0rYxAmQOaI3sMdfET-YlWJqtTgjL/s1600/_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLOuqLh4Oh1LatgV6Vt6X6dzvHCdwYpIMEXLbNfJSK6-0pbfWg9e4pysj3i9Ryk6d3Su37lMQ6tJQ8Vo965PYbIIMonmcPSftf8VTO0z15Vmblqb4M0rYxAmQOaI3sMdfET-YlWJqtTgjL/s400/_3.png" width="278" /></a></div>
<br />
Y sucede que si te equivocas en el nombre de un banco quizá termines en una página que simula parecer Facebook y que te intenta contar lo afortunado que eres:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyeSgICyoBAS2LFZU_7zaTsaWbRdQ9YDPrmr-1mzxYY28yFuEsjFAqimhMR6Plzp_ZXdc98W28grU3pcle4Lm-4hoVRamNSkRpG1l8NmYjdlHSQG-h8h35TjCrYNBaxD9Vdd0ppa-nN865/s1600/_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyeSgICyoBAS2LFZU_7zaTsaWbRdQ9YDPrmr-1mzxYY28yFuEsjFAqimhMR6Plzp_ZXdc98W28grU3pcle4Lm-4hoVRamNSkRpG1l8NmYjdlHSQG-h8h35TjCrYNBaxD9Vdd0ppa-nN865/s400/_1.png" width="400" /></a></div>
<br />
O quizá dominios que parecen hechos a medida de un intento de phishing, en los que uno de esos puntos que separan las partes de un nombre de equipo fue sustituido por otro carácter:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCNVhiA-Qp8rDhv12NlCjTfmp5fNuXXOqGlTx0B8M-NyMNic5F1l-AnAGFUgNbwE3P0C6rOPamp9WKZ4RrZ8NbFhLh2inhEAnyxat2uWANloLho9g62R9yvxy_4XX_83a7KcG7QUFWqsS2/s1600/_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCNVhiA-Qp8rDhv12NlCjTfmp5fNuXXOqGlTx0B8M-NyMNic5F1l-AnAGFUgNbwE3P0C6rOPamp9WKZ4RrZ8NbFhLh2inhEAnyxat2uWANloLho9g62R9yvxy_4XX_83a7KcG7QUFWqsS2/s400/_4.png" width="400" /></a></div>
<br />
Muchos de ellos son ofrecidos a precios más que económicos, como se puede apreciar en la imagen. Económicos para un phisher. Y económicos para las organizaciones que, a causa de ellos, podrían ser objeto del phishing. La cuestión es saber quién se va a adelantar o si alguno de ellos no está intersado en la carrera.<br />
<br />
Para dejar buen sabor de boca, ahí os dejo una remesa de dominios que, si algún día caen en malas manos, podrían causar verdaderos quebraderos de cabeza a más de uno. Sólo una muestra, sacada de "nic.es":<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH0bvTTj3sZ9zGGUJjskgTjz6fUaKvKgrUeB9yvfXZ_OXOLHPQ5Kv78y0REuBr8pRg224mnkKqyOVX3INQeZaVVjp9RbDQi2w-Lp0yVPCaVrSKblfZkKB0FYqvvmlbrlVLdg71aB3s_JJ5/s1600/_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH0bvTTj3sZ9zGGUJjskgTjz6fUaKvKgrUeB9yvfXZ_OXOLHPQ5Kv78y0REuBr8pRg224mnkKqyOVX3INQeZaVVjp9RbDQi2w-Lp0yVPCaVrSKblfZkKB0FYqvvmlbrlVLdg71aB3s_JJ5/s400/_5.png" width="400" /></a></div>
<br />
Llegado el caso, posibles objetos de los ataques podrían ser el Boletín Oficial del Estado, la Agencia Tributaria, la RAE (a la que desde que se pusieron a definir lo que es un "hacker" sin saber del tema...), la Agencia Española de Meteorología, la Agencia de Protección de Datos, Amazon, la Junta de Andalucía, la Dirección General de Tráfico...<br />
<br />
O el propio "dominios.es".<br />
<br />Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-57031997709170570072016-09-05T05:25:00.000-07:002016-09-05T07:29:17.582-07:00Conseguir que tus aplicaciones sean seguras (o al menos, intentarlo) 3<h2>
Cloud, software propio, software propietario, software libre... ¿Qué camino sigo?</h2>
<a href="http://418iamateapot.blogspot.com/2016/08/conseguir-que-tus-aplicaciones-sean_8.html" target="_blank">La última vez </a>dejamos una pregunta en el aire ¿Cómo elegir, o en su caso desarrollar, el software? Echémosle valor al toro.<br />
<br />
Para empezar, como dice el título: Cloud, software propio, software propietario, software libre... ¿Qué camino sigo?<br />
<br />
<h2>
Cloud (?)</h2>
Sobre el uso de tecnologías Cloud se ha escrito mucho. Y en el mundillo de la seguridad abundan quienes que se declaran excépticos. Incluso yo comentaba hace poco algo del tipo: "la nube simplifica mucho las cosas... sobre todo si sabes taparte la nariz y mirar hacia otro lado cuando huele mal". Cosa de la que no me desdigo. Pero que tampoco quisiera llevar más allá de lo razonable. Me explico:<br />
<br />
El problema principal que le veo al Cloud cuando de seguridad se trata es que las organizaciones pueden terminar perdiendo el control sobre su información. La dejan en manos de otro y confían en que hará bien las cosas. Pero siguen siendo responsables de ella, legal y moralmente hablando. Está muy bien eso de contratar un servicio y olvidarse de él, pero la seguridad no es algo de lo que te puedas desentender, porque se infiltra en cada matiz de tu organización. Y no puedes comprarla. Recuerda: "no es un producto sino un proceso". Si te la proporciona una empresa, debes implicarte y controlar lo que ésta hace porque, lo haga quien lo haga, no es algo que puedas contemplar de forma independiente del resto de tus actividades.<br />
<br />
En ese aspecto, el Cloud no simplifica las cosas. Más bien todo lo contrario. Pero ¿significa eso que no se debe usar? Ni mucho menos.<br />
<br />
Hace algún tiempo, en una charla que di sobre vulnerabilidades del tipo CSRF y XSS, alguien me preguntó por las Content Delivery Networks y lo que yo pensaba de utilizarlas como fuente de librerías JavaScript para tus páginas web. Creo que esperaba que me opusiera categóricamente a su uso y, de hecho, me pareció que mi respuesta no le satisfacía. Pero era la única que tengo para este tipo de cosas: depende.<br />
<br />
Sí. Depende, principalmente, de si tú eres capaz de hacer las cosas mejor que ellos. O de si tienes los medios necesarios (técnicos, humanos, organizativos, ...) para garantizar el servicio. Por poner un ejemplo: si tu sitio web está alojado en un servidor gratuito que ni siquiera soporta HTTPS quizá sea más fiable descargar algo de un servicio prestado por Google que de él.<br />
<br />
Volviendo al Cloud, piensa en el correo electrónico. ¿Tienes medios para instalar un sistema de control de acceso que utilice dos factores? ¿Eres capaz de atender la carga administrativa que supone la gestión (altas, bajas, modificaciones, desbloqueos, etc.) de todos tus usuarios? ¿Tienes un servidor apropiado y con suficiente capacidad? ¿Dispones de un software suficientemente seguro y eres capaz de mantenerlo actualizado para que siga siéndolo? ¿Tienes personal para operarlo sin problemas y dar respuesta rápida a los incidentes de seguridad? ¿Dispones de infraestructuras para garantizar el servicio en caso de que algo falle? ¿Eres capaz de ofrecerlo sobre varios clientes, incluyendo smartphones?<br />
<br />
Si respondiste "no" a alguna de estas preguntas... plantéate usar la nube. Plantéate si Gmail.com o Outlook.com, por citar dos ejemplos, hacen mejor que tú estas cosas. Porque es verdad que con la nube pierdes un grado de control pero también lo es que estas grandes empresas, gracias a la economía de escalas, pueden permitirse cosas que tú no. Y están sujetas a un marco regulatorio y a un escrutinio público del que quizá tú escapes.<br />
<br />
Eso sí: si te decides por la nube... que no te vendan humo. Elige bien tus compañeros de camino y antes de seleccionarlos piensa en (y asegúrate de que figuren en el contrato) cosas como:<br />
<br />
<ul>
<li>Cómo se almacenarán tus datos. </li>
<li>Qué cifrados se aplicará a tus datos, dónde se realizará la encriptación y quiénes tendrán las claves.</li>
<li>Quiénes tendrán acceso a tus datos.</li>
<li>Dónde se van a alojar tus datos y si tienes algún grado de decisión sobre ello.</li>
<li>Qué normativas les serán aplicables a tus datos.</li>
<li>Cuántas copias existirán de tus datos.</li>
<li>Qué control te dejan sobre tus datos y la forma en que se gestionan.</li>
<li>Qué procedimientos existen para llevarte tus datos a otro servicio y cómo y en qué condiciones puedes utilizarlos.</li>
<li>Qué responsabilidades asume la empresa propietaria del servicio en la nube y cuáles asumes tú.</li>
<li>Cómo te compensará la empresa en caso de que existan problemas de seguridad.</li>
<li>Cómo actuará la empresa propietaria del servicio en la nube y cómo interactuará contigo (y con tus clientes, si procede) en caso de que se produzcan incidentes de seguridad.</li>
<li>Qué pasará con tus datos (y con sus copias de seguridad) cuando dejes de trabajar con ellos.</li>
</ul>
<br />
Y repito: "tus datos". Y tu responsabilidad. Si te dicen que esto de la nube es cuestión de confianza... no lo creas. No basta con confiar. Necesitas garantías. Muchas garantías.<br />
<br />
Pero si decidiste alejarte de la nube y alojar tú mismo tu software... tampoco habrás acabado de elegir. Te quedan al menos dos cuestiones por responder<br />
<br />
<h2>
¿Software Libre o Propietario?</h2>
Buena pregunta... ¿no crees?<br />
<br />
O no tan buena, si lo miras bien. Si me pongo a mirar lo que hay por ahí me doy cuenta de que la elección entre software libre o propietario no me parece tan relevante. Conozco aplicaciones de software propietario malas. Malísimas. Con más agujeros que un queso de gruyère. Pero igual de malas las hay de software libre.<br />
<br />
Que el código fuente sea público es un arma de doble filo. Como cualquiera que se mueva en estos mares, en alguna ocasión he encontrado una vulnerabilidad en un producto al revisar su código. O he podido realizar con mayor facilidad ataques de SQL Injection al conocer la estructura de la base de datos. Y habrá quien diga: "claro, la gente puede analizar el código y encontrar los problemas y resolverlos -- eso lo hace más seguro".<br />
<br />
Y otros replicarán: "pero... ¿quién le dedica el tiempo necesario a analizar la seguridad del código de las aplicaciones que utiliza". O: "pero si el código es cerrado nadie, ni siquiera los delincuentes, lo tendrán tan fácil para dar con las vulnerabilidades".<br />
<br />
O: "¿y si los bugs son encontrados por gente que no los hace público y los explota durante mucho tiempo". Porque de esto también hay precedentes. Por poner uno, cuando <a href="http://www.bloomberg.com/news/articles/2014-04-11/nsa-said-to-have-used-heartbleed-bug-exposing-consumers" target="_blank">la NSA reconoció saber de HeartBleed años antes de que fuera publicada</a>. Y estamos hablando de una vulnerabilidad introducida en 2012 y de la que todos (al menos, los que no estábamos en el ajo) nos enteramos en abril del 2014.<br />
<br />
Ambos están en lo cierto y ambos se equivocan. Y yo también. El software es algo demasiado complejo como para que sea el carácter abierto o cerrado de las fuentes lo que determine su seguridad.<br />
<br />
Estudia qué aplicación o sistema responde mejor a tus necesidades. Y trata de conocer cómo se desarrolla. Independientemente del tipo de producto, busca algo que no te vaya a dejar en la cuneta. Huye como del fuego de proyectos gestionados por una única persona o un grupo reducido. Aléjate de aquellos que no sean la principal dedicación de quienes los crean y mantienen.<br />
<br />
Mira el historial del software, pero no te dejes engañar por la cifra de vulnerabilidades encontradas. Más vulnerabilidades detectadas no quiere necesariamente decir que el software es menos seguro. Quizá sea todo lo contrario y estemos hablando de "más problemas corregidos".<br />
<br />
Porque vulnerabilidades, con el tiempo, seguro que aparecen y más aún en aquellos productos software que son utilizados por mucha gente. Entonces lo importante será ver cómo las corrigen. Qué protocolos y procedimientos tienen establecidos para el reporte y la gestión de bugs. Qué tiempos de respuestas manejan. Qué tipo de soluciones suelen darles. Qué recursos dedican a ello.<br />
<br />
Lo del software libre tiene un pro y una contra que no quisiera dejar de citar. Por un lado, quizá tengas algún margen de maniobra. Si puedes, trata de participar y aportar recursos a aquellos proyectos de software libre que utilices. Al fin y al cabo, es algo que parece justo y que, visto desde el punto de vista egoísta, te permitirá tener alguna influencia en su evolución.<br />
<br />
Y, por otro, ten cuidado con todo lo que parezca salir gratis, sea o no libre. No sólo porque podría no serlo (gastos de formación, consultoría, etc.) sino también porque podría serlo. Al ser gratis y no tener que pasar por los trámites necesarios para pagar una licencia, cualquiera puede pensar en instalárselo. O en tener muchas instancias corriendo. Y con ello podríamos estar perdiendo el control sobre el software instalado en nuestros equipos y sobre la forma en que lo gestionamos y tratamos de mantenerlo tan seguro como nos sea posible. Estaríamos acabando con nuestra útil "lista blanca".<br />
<h2>
¿Lo hago yo o lo encargo a una empresa?</h2>
<div>
Si no utilizas un software ya existente, ya sea libre o propietario, también tendrás que decidir si lo haces con tus medios o contratas a alguien.</div>
<br />
Aquí te digo lo mismo que cuando hablábamos con la nube: ¿puedes hacerlo tú mejor que ellos?<br />
<br />
Pregúntate: ¿con qué personal cuento? ¿se dedica a otras cosas que no les va a permitir centrarse en los desarrollos? ¿me puedo permitir después realizar el mantenimiento del producto? ¿tiene mi personal formación suficiente en programación? ¿la tiene en seguridad y hacking?<br />
<br />
Si es que no... piensa en que lo haga otro. Eso sí, antes de encargárselo, hazte las mismas preguntas de antes pero referidas a éste: ¿con qué personal cuenta la empresa? ¿se dedica a otras cosas que no les va a permitir centrarse en MIS desarrollos? ¿se pueden permitir después realizar el mantenimiento del producto? ¿tiene SU personal formación suficiente en programación? ¿la tiene en seguridad y hacking?<br />
<br />
Y ni te plantees contratar con nadie que no sea mucho mejor que tú en esto.<br />
<br />
Cuando contrates el desarrollo, asegúrate de que aparezcan cláusulas que te garanticen, entre otras cosas:<br />
<br />
<ul>
<li>La adecuada formación en materia de seguridad de TODO el personal de la empresa involucrado en el proyecto.</li>
<li>Los datos del personal que va a trabajar en él, con su formación y cualificación, tanto general como específica en materia de seguridad, la relación que tienen con la empresa, el puesto y el tiempo que lleva en ella. Y no estaría de más que les hicieras alguna entrevista antes de decidir.</li>
<li>La metodología a utilizar, en general y en particular en lo referente a la gestión de seguridad durante todo el ciclo de vida y de mantenimiento.</li>
<li>La garantía de resolución de las vulnerabilidades que pudiera tener el producto en un tiempo y unas condiciones adecuadas.</li>
<li>Las responsabilidades que asume la empresa en materia de la seguridad del producto (y no me vale eso tan manido de "la empresa no se hace responsable...") así como de producirse cambios sustanciales en el personal encargado del proyecto.</li>
<li>Las compensaciones que tendrá que hacerte la empresa en los casos anteriores.</li>
<li>Y algo que nunca me cansaré de repetir: TRANSFERENCIA DE CONOCIMIENTO. Que la empresa proporcione formación e información que mejore tu organización. Entre otras cosas, en seguridad.</li>
</ul>
<div>
Seguro que me dejo muchas cosas en el tintero, pero en algún momento tengo que dejar de escribir. Dejemos para más adelante algunas notas sobre el ciclo de vida y otros aspectos más técnicos.</div>
<div>
<br /></div>
<br />
<br />
<br />
<div>
Lo importante es que, lo hagas como lo hagas, que no tengas nunca que decir (o volver a decir) eso que una vez oí de "esto es que lo hicieron unos becarios que tuvimos hace tiempo y ahora vaya usted a saber quién será capaz de entenderlo y mantenerlo". </div>
<div>
<br /></div>
<div>
En aquel caso, si no me falla la memoria, la aplicación tenía vulnerabilidades de Local File Inclusion (no recuerdo si también remoto), SQL Injection y XSS. Que no es poco. </div>
<div>
<br /></div>
<div>
Y les habían cascado publicidad de pastillitas azules y otros fármacos.</div>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-89750293459427974502016-09-04T16:12:00.002-07:002016-09-04T16:13:34.981-07:00El mercado y el mercadeo del typosquatting (2)<h2>
Whois y dominios .es</h2>
<div>
Visto lo que hace <a href="http://418iamateapot.blogspot.com/2016/09/el-mercado-y-el-mercadeo-del.html" target="_blank">el plugin del post anterior</a>, posiblemente te interese saber quién es su propietario. Y para eso están las consultas a Whois. En el caso de los dominios ".es" podemos hacer la consulta a través de "<a href="http://www.dominios.es/">http://www.dominios.es</a>". Curioso que no me funcionen las consultas a través de HHTPS: "https://www.dominios.es". Curioso y preocupante.</div>
<div>
<br /></div>
<div>
En la parte derecha encontrarás un formulario que te permite consultar si un dominio está disponible. Si lo usas, la respuesta te llegará desde otro domino, "nic.es", y esta vez, sí, sobre HTTPS. Te mostrará diversas variaciones sobre el dominio consultado, indicándote si está libre o no y, en el primer caso, incluyendo un enlace para ver sus datos. Eso sí, antes tendrás que resolver un CAPTCHA.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUi9eU8PNAT-zOqNT2e2MMwV7pnLo2QY02F7xlTHy1nA4ele70ZSVesEN9rEKPypOnLEqfdXbPissOedyH14jRi7dwBm7iqaSiCzspQUjGnKmjF0ym_ZqUk-PywX5O2t9wKSfQFAQvJOks/s1600/pasos.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUi9eU8PNAT-zOqNT2e2MMwV7pnLo2QY02F7xlTHy1nA4ele70ZSVesEN9rEKPypOnLEqfdXbPissOedyH14jRi7dwBm7iqaSiCzspQUjGnKmjF0ym_ZqUk-PywX5O2t9wKSfQFAQvJOks/s400/pasos.png" width="400" /></a></div>
<div>
Como todo esto es mucho rollo, te cuento como hacerlo un poco más fácil. Hace algún tiempo me encontré en una página que lamento no recordar (con lo que a mí me gusta citar mis fuentes...) una URL que, poniendo el nombre de dominio como parámetro GET, te lleva directamente a la página del CAPTCHA. Y me hice un pequeño fichero HTML con un formulario. Os lo copio:</div>
<div>
<br /></div>
<div>
=========</div>
<div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><form onsubmit="visita()"></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Dominio: </span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span><input type="text" id="dominio" />.es<br /></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span><input type="submit" value="Consultar" /></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"></form></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><script></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">function visita(){</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>window.open("https://www.nic.es/sgnd/dominio/publicValidacionDetalleWhois.action?volverWhoIs=1&TDominio.nombreDominio=" +</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>document.getElementById("dominio").value + ".es"</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>);</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>document.getElementById("dominio").value = "";</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>return false;</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">}</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"></script></span></div>
</div>
<div>
=========</div>
<div>
<br /></div>
<div>
Y no creo que sea necesario un manual para utilizarlo:</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ7KdyGqScynKF85GoYSB_Lwl1iG2KJp7rpLArL7nxvKttJE3MhCXXvJckxaVYQxeuEP9tndc-BuJ5h-ZjKzmUflY0lKXBd0m-bzEj8aY7912OHRWyQcStLRnmsM8WctzkGDrIwBvl-Efo/s1600/f.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ7KdyGqScynKF85GoYSB_Lwl1iG2KJp7rpLArL7nxvKttJE3MhCXXvJckxaVYQxeuEP9tndc-BuJ5h-ZjKzmUflY0lKXBd0m-bzEj8aY7912OHRWyQcStLRnmsM8WctzkGDrIwBvl-Efo/s400/f.png" width="400" /></a></div>
<div>
<br /></div>
<div>
Si esto te parece demasiado difícil... estás de suerte. Hay un sitio web que ofrece datos sobre dominios ".es" sin necesidad de resolver ningún CAPTCHA. Y que además está siendo indexado por los buscadores y utilizado como fuente por sitios como <a href="http://domainbigdata.com/" target="_blank">Domain Big Data</a>. Se trata de <a href="http://www.whoises.com/">http://www.whoises.com</a>. Dejemos que sea él mismo quien se presente y diga qué es capaz de hacer:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPNGLrnAA5vqkav7Lds1tQMcYuFpYinwb0O_ZsqVZ9_Oae3Vd6OGkLfZDpcpDC1AuHbdbqZlQ1GXFO1ABx5ZeDlG7w8UwF9GwlVG0X-H-yPbTJX70zo8KHVrJYiNusXCZxPFIUueco1OZ/s1600/wes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPNGLrnAA5vqkav7Lds1tQMcYuFpYinwb0O_ZsqVZ9_Oae3Vd6OGkLfZDpcpDC1AuHbdbqZlQ1GXFO1ABx5ZeDlG7w8UwF9GwlVG0X-H-yPbTJX70zo8KHVrJYiNusXCZxPFIUueco1OZ/s400/wes.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
Eso sí, sin querer meterme donde no me llaman, creo que hoy no es mi día con eso del HTTPS. Porque si visito WhoisEs con ese protocolo, tras recibir avisos relativos al certificado...</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFEBj8qqOdspBNVHYeij5Vvwd0KppOmdv-giVkA7esJQNKsb96PPssk8_269GjXUc-3A3T-V68D-dnpRqTrgLCwpFx1qaW84PpnTeH0PBqY6n7Vuw2VumMpq7PWxV0xA7YA0st3oK5kaXX/s1600/wes2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFEBj8qqOdspBNVHYeij5Vvwd0KppOmdv-giVkA7esJQNKsb96PPssk8_269GjXUc-3A3T-V68D-dnpRqTrgLCwpFx1qaW84PpnTeH0PBqY6n7Vuw2VumMpq7PWxV0xA7YA0st3oK5kaXX/s400/wes2.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Queden ahí estos "trucos y consejos". Que, por otro lado, no sé cuánto tiempo seguirán siendo útiles.</div>
<div>
<br /></div>
<h2>
El dominio del plugin</h2>
<div>
En esta ocasión usé "nic.es" para ver los datos del dominio:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin8kYBJSc7W_N-NOVlRut4DxWcggTZQ9xM_8_1iAd62S6kMLcrYov0WXSl3Wjfqc7_mLsJNLhyphenhyphen82gQBnpQucB5dnU9IdFc-aDyHXVkUVk3Dmt_BCmFRRlZsPj202Hg6jHVDpB7n82t1pDa/s1600/nic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin8kYBJSc7W_N-NOVlRut4DxWcggTZQ9xM_8_1iAd62S6kMLcrYov0WXSl3Wjfqc7_mLsJNLhyphenhyphen82gQBnpQucB5dnU9IdFc-aDyHXVkUVk3Dmt_BCmFRRlZsPj202Hg6jHVDpB7n82t1pDa/s400/nic.png" width="390" /></a></div>
<div>
<br /></div>
<div>
¿Que por qué tapé los datos del propietario? La verdad es que, ante la duda, preferí hacerlo. Por un lado, porque de las imágenes del post anterior parece desprenderse que se trata de un dominio aparcado. O sea, que el propietario no es quien lo está explotando. Por otro lado, no sería la primera vez que se usa un nombre falso para registrar un dominio y podríamos estar poniendo en evidencia a una persona que no tiene nada que ver con este negociete.</div>
<div>
<br /></div>
<div>
<div>
En todo caso, los Whois son públicos y si alguien tiene interés en el dato concreto no tendrá problema en saberlo. Ni tampoco le será difícil encontrar otros dominios del mismo dueño. Puede hacerlo con buscadores:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD82f6IA0IrbYy5T79cnjNFabXY2m5-0rFB6RfxOh1MDv8y4j2Cp3ZxAMD9lE8ork9_dM56N8ghBX8Sk1RovlmNP-FUVfEGPTAPbojKk0cIB23RBJesCgL4tZrPvuZQXtdOb2Ashixu9tm/s1600/gw.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD82f6IA0IrbYy5T79cnjNFabXY2m5-0rFB6RfxOh1MDv8y4j2Cp3ZxAMD9lE8ork9_dM56N8ghBX8Sk1RovlmNP-FUVfEGPTAPbojKk0cIB23RBJesCgL4tZrPvuZQXtdOb2Ashixu9tm/s400/gw.png" width="400" /></a></div>
<div>
O, mejor aún con un servicio que agregue datos de whois como Domain Big Data, buscando por el nombre del propietario:</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmCU_tMGhxfsH8e0Z0auTS8pe3BildJturJ0fI-VaUy7F6rwBRtqzEmHS4He5rVjIz_Fw09taHLi-dtGhR6Fc5HpgGtX5vVF_DIcZ7fvB-Ekirk9vErocjf9uLqI3RWPYSeXnKHzMNoWI_/s1600/j.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmCU_tMGhxfsH8e0Z0auTS8pe3BildJturJ0fI-VaUy7F6rwBRtqzEmHS4He5rVjIz_Fw09taHLi-dtGhR6Fc5HpgGtX5vVF_DIcZ7fvB-Ekirk9vErocjf9uLqI3RWPYSeXnKHzMNoWI_/s400/j.png" width="265" /></a></div>
<div>
<br /></div>
<div>
Si me dejas hacer un inciso te señalaré que tienes que tener cuidado siempre con los datos de dominios. Porque, salvo que los obtengas de las fuentes originales, pueden haber cambiado desde que el buscador o el sistema utilizado los obtuvo. Quizá el propietario consiguió venderlos. Quizá expiraron.</div>
<div>
<br /></div>
<div>
En todo caso, creo que está clara la estrategia que este registrante tiene a la hora de elegir sus nombres de dominios. Visité algunos de ellos. En algún caso se me volvió a invitar a instalar un plugin ("quien no te conozca... que te compre", que decía aquel cuento):</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFt5j1LFEUBsMGC-AI2tMU5lBBjBrf2PwoCVHuOdwKFZMSe0nKEqDhXT3LoJa1PjtsU5EAUuiKDez4tOScqBSgnQlreWLRZ1gpP8_jH2n5mpw82gbNzsL9LBxalRUcnVeMTOHfyL6pU5Vb/s1600/sfs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFt5j1LFEUBsMGC-AI2tMU5lBBjBrf2PwoCVHuOdwKFZMSe0nKEqDhXT3LoJa1PjtsU5EAUuiKDez4tOScqBSgnQlreWLRZ1gpP8_jH2n5mpw82gbNzsL9LBxalRUcnVeMTOHfyL6pU5Vb/s400/sfs.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
Otros no mostraban nada raro. El típico listado de enlaces que sueles encontrar en cualquier dominio aparcado. Pero hice más pruebas utilizando una página llamada <a href="https://www.browserstack.com/" target="_blank">BrowserStack </a>que es muy útil cuando <a href="http://www.browserling.com/" target="_blank">Browserling </a>se te queda pequeño.</div>
<div>
<br /></div>
<div>
Lo bueno de BrowserStack es que no sólo te permite probar con distintos sistemas operativos y navegadores para PC o Mac. También soporta dispositivos móviles. Y lo que me encontré fue un montón de redirecciones, tanto mediante JavaScript como mediante HTTP, que terminaban en páginas del tipo "has ganado este gran premio, rellena esta encuesta" o "participa en este sorteo, que casi lo tienes ganado". Y si probabas varias veces te salían cosas distintas. Así ocurría con un HTC One M8:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxhX5hFKSIh1GrBjvqKZbuNpY91nCA_83rUhG9rH3aWiDq131_owUsdKlsmv6wJ0D31s0QF8Nu_Jfph7i6WUG41DMO66m5X7al3Giq80l0x9chKQSOmIaK67QQqhY_-8cYV88fQMxxrxrp/s1600/gg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="343" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxhX5hFKSIh1GrBjvqKZbuNpY91nCA_83rUhG9rH3aWiDq131_owUsdKlsmv6wJ0D31s0QF8Nu_Jfph7i6WUG41DMO66m5X7al3Giq80l0x9chKQSOmIaK67QQqhY_-8cYV88fQMxxrxrp/s400/gg.png" width="400" /></a></div>
<div>
<br /></div>
<div>
O con un Chrome sobre Windows 8.1:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu4mBa6Su7TN0wB3UYaCxmHfn-QiHxC-QQTpGELmsU7SdcYWW1Os7KQVL63OJHISqsZRf0AY2Lr_4jbWkza7rLr4QUX0aHBWLpKCyGTA4spP6tmyKXH9I_7NcaRjj6QpAftXVyp9hS4cey/s1600/bs_win8.1_Chrome_52.0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu4mBa6Su7TN0wB3UYaCxmHfn-QiHxC-QQTpGELmsU7SdcYWW1Os7KQVL63OJHISqsZRf0AY2Lr_4jbWkza7rLr4QUX0aHBWLpKCyGTA4spP6tmyKXH9I_7NcaRjj6QpAftXVyp9hS4cey/s400/bs_win8.1_Chrome_52.0.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
Pero, como veremos, en esto del plugin y este registrante de dominios ni son todos los que están ni están todos los que son. </div>
</div>
<div>
<br /></div>
<div>
<br /></div>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-57606873947442995272016-09-02T06:51:00.001-07:002016-09-02T06:51:17.587-07:00El mercado y el mercadeo del typosquatting (1)<h2>
Typosquatting</h2>
<div>
Últimamente hemos hablado aquí de la campaña de phishing a Carrefour y de como los phishers usaban <a href="https://en.wikipedia.org/wiki/Typosquatting" target="_blank">typosquatting </a>para utilizar nombres de dominio medianamente creíbles para sus sitios web fraudulentos.<br />
<br />
Nada nuevo bajo el sol, pero éste es uno de esos temas que me preocupan. Algo parecido a cuando veo que se usan técnicas ilegítimas o ilegales para el posicionamiento en buscadores y que ciertos personajes ensucian el nombre de una actividad en la que hay otros que se ganan la vida de forma honesta.<br />
<br />
Con el typosquatting nos encontramos con prácticas inapropiadas muy parecidas. En algunos casos, coincidentes. Para empezar, se toma un dominio popular. Uno que reciba muchas visitas. Después se buscan nombres que puedan confundirse con aquel. Quizá cambiando una "n" por una "m" o quitando alguna letra o poniendo tres "r" donde en el legítimo aparecen sólo dos. La idea es que cuando la gente cometa un error al escribir la dirección pueda terminar visitando tu sitio.<br />
<br />
¿Y ahora qué?<br />
<br />
<h2>
Ganar dinero</h2>
Dudo que haya demasiada gente que se dedique al typosquatting por hobby. Más bien creo que será por dinero. Y hay varias formas en que un dominio como estos de los que hablamos puede ser aprovechado.<br />
<br />
Por poner un ejemplo, se me ocurrió ver qué pasaba si cambiaba la "y" de PayPal.es por una "i". Ignoro si la pesona que registró el dominio resultante pensaba en esto, pero a mí fue lo primero que se me ocurrió. Y lo que me salió fue:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV04rPZjkUMXxUevhmWIJ5IHbdbZR6-YNkm17O2KayR_6xdxLbUCNA7qQxSwZORBifpiykCDnOZ6wfeaXD7tVes1PgpGBe6O_j0wJKmRhO2KcpP3pDlmv74rrqtX8HmhpJV5jwKFWPeCm8/s1600/01+-+paipal.es.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV04rPZjkUMXxUevhmWIJ5IHbdbZR6-YNkm17O2KayR_6xdxLbUCNA7qQxSwZORBifpiykCDnOZ6wfeaXD7tVes1PgpGBe6O_j0wJKmRhO2KcpP3pDlmv74rrqtX8HmhpJV5jwKFWPeCm8/s400/01+-+paipal.es.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
¡Uf! Que me instale un complemento en el navegador para que no se sepa dónde me he estado metiendo.<br />
<br />
Confieso que, tras leerme los términos y condiciones, mi primer idea fue no hacerlo. Pero entonces alguien dijo: "no hay cohones". Y, ya sabes,...<br />
<br />
Eso sí, alguna protección tomé.<br />
<h2>
Un plugin desfasado</h2>
<div>
La página de la imagen anterior me aparecía independientemente del navegador que utilizara. Eso sí, si utilizaba Internet Explorer me salía un mensaje indicando que mi navegador no era compatible y me redirigía a la página de descarga de Chrome.</div>
<div>
<br /></div>
<div>
Con Chrome, sin embargo, tuve el primer problema. El plugin, que se promocionaba como una forma de descargar anónimamente desde distintos sitios, parece haber sido eliminado de la Chrome Web Store:<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy3MBIPuYjFFHIza_v0MP7c9XyVYILUym1vRrYrctd7bVIfZFUC_mks0GrcDBPuw2WFUJ1ARdObT7fBXG143GaQRB6c8vww7hk3NKQ3RXCPemJozIbKYft4kEuuFHT53_0evxj49l20C3F/s1600/02+-+chrome+no+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy3MBIPuYjFFHIza_v0MP7c9XyVYILUym1vRrYrctd7bVIfZFUC_mks0GrcDBPuw2WFUJ1ARdObT7fBXG143GaQRB6c8vww7hk3NKQ3RXCPemJozIbKYft4kEuuFHT53_0evxj49l20C3F/s400/02+-+chrome+no+2.png" width="400" /></a></div>
</div>
<div>
Probé, pues, con Firefox. En particular, con su versión 43, lo que más adelante se revelará como relevante. La ventana de instrucciones era distinta pero la cosa tampoco iba a ser fácil:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgwydUZMptqTJjUHIPx1Ux_N6JrLwY_tRwwVJGaC1RLpA-vT2X-ggbFLf3ooUFNbpT7-XPzeJrmFGyBj0fRXUVzGjCLDOe2rQq1mxS0a0ey6pGYho1pWU7Dm2pfhF7VaBPAqd7Nqmseyo5/s1600/02+as+01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgwydUZMptqTJjUHIPx1Ux_N6JrLwY_tRwwVJGaC1RLpA-vT2X-ggbFLf3ooUFNbpT7-XPzeJrmFGyBj0fRXUVzGjCLDOe2rQq1mxS0a0ey6pGYho1pWU7Dm2pfhF7VaBPAqd7Nqmseyo5/s400/02+as+01.png" width="400" /></a></div>
<div>
Tras hacer clic en "Permitir" para decirle al navegador que instalara el plugin ne salió otro mensaje indicándome que éste no viene firmado y que por tanto Firefox se niega a instalarlo.Como yo iba ya en plan kamikaze, entré en "about:config" y (niños: no hagáis esto en casa) modifiqué el valor del parámetro "xpinstall.signatures.required", como se indica en la <a href="https://support.mozilla.org/es/kb/firma-de-complementos-en-firefox#w_lquae-puedo-hacer-si-firefox-desactiva-un-complemento-que-tenaga-instalado" target="_blank">documentación de Mozilla</a>.</div>
<div>
<br /></div>
<div>
Al final... ¡lo conseguí! Ahora puedo visitar el dominio que elegí y...</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifbzDNu9_d3YwYZVmOjmhLyOAlQM8Dca7AKom9e84X4_SPyres_sGbfcu-w1L9g38iUhx3HFYS8TJDqEFFIOld0dRwdzst_KOlEZyimqD0h_ZHwB4mJGx5RKRb2Xb_QjxfpcpRcB6tjqko/s1600/pp2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifbzDNu9_d3YwYZVmOjmhLyOAlQM8Dca7AKom9e84X4_SPyres_sGbfcu-w1L9g38iUhx3HFYS8TJDqEFFIOld0dRwdzst_KOlEZyimqD0h_ZHwB4mJGx5RKRb2Xb_QjxfpcpRcB6tjqko/s400/pp2.png" width="400" /></a></div>
<div>
<br /></div>
<div>
... Ahora resulta que el dominio está aparcado y en venta. O sea, que su propietario no lo usa y lo "alquila" para que otros le busquen rentabilidad. En este caso ponen enlaces a páginas de PayPal pero entre ellos salpican algunos a distintos dominios no tan conocidos. Lo de siempre: enlaces y visitas.</div>
<div>
<br /></div>
<div>
En todo caso, como podemos ver, se trata de un plugin desfasado. Parece que lo intentaron en la Chrome Web Store pero les dieron de baja. Y aún no se adaptaron a la forma en que funcionan las nuevas versiones de Firefox. Dudo que un usuario normal se meta en camisas de once varas, como yo hice, para instalarse este plugin.</div>
<div>
<br /></div>
<div>
Además, tras actualizar a la versión 48 de Firefox, ya no funciona eso del "xpinstall.signatures.required". Como dice la <a href="https://wiki.mozilla.org/Add-ons/Extension_Signing" target="_blank">documentación</a>: "</div>
<div>
<ul style="background-color: white; color: #252525; font-family: "Open Sans", "Trebuchet MS", sans-serif; font-size: 14.4px; line-height: 1.5em; list-style-image: url("data:image/png; margin: 0.3em 0px 1em 1.6em; padding: 0px; widows: 1;">
<li style="margin-bottom: 0.1em;"><b>Firefox 40-42</b>: Firefox warns about signatures but doesn't enforce them.</li>
<li style="margin-bottom: 0.1em;"><b>Firefox 43</b>: Firefox enforces the use of signatures by default, but has a preference that allows signature enforcement to be disabled (<i>xpinstall.signatures.required</i> in about:config).</li>
<li style="margin-bottom: 0.1em;"><b>Firefox 48</b>: (Pushed from Firefox 46). Release and Beta versions of Firefox for Desktop will not allow unsigned extensions to be installed, with no override. Firefox for Android will enforce add-on signing, and will retain a preference — which will be removed in a future release — to allow the user to disable signing enforcement.<span style="background-color: transparent; font-size: 14.4px; line-height: 1.5em;">"</span></li>
</ul>
</div>
<div>
¿Adivinas? A mí se me actualizó mientras hacía las pruebas. Y tuve que "desactualizar" a mano.</div>
<div>
<br /></div>
<div>
Pero en su día sí era más fácil y posiblemente no fuera despreciable el número de usuarios afectados.</div>
<div>
<br /></div>
<div>
¿Con qué se encontraron?</div>
<div>
<br /></div>
<h2>
La licencia</h2>
<div>
Cuando me fui a la página de Plugins de mi navegador me encontré a mi nuevo inquilino:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qKqFEnrOMVSOuxPNymd24o3kuGH2pr96ymsP9RwZjp4AkqTDq5ubG9m5NX3dK4V0hcb97dFQq6jYajCtgZ7Xs1b2__go4l8ajG0ovBdENpV8AaGZkyvOtWJa0u9qkqJJz63Oten0MgVh/s1600/09+as.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qKqFEnrOMVSOuxPNymd24o3kuGH2pr96ymsP9RwZjp4AkqTDq5ubG9m5NX3dK4V0hcb97dFQq6jYajCtgZ7Xs1b2__go4l8ajG0ovBdENpV8AaGZkyvOtWJa0u9qkqJJz63Oten0MgVh/s400/09+as.png" width="400" /></a></div>
<div>
Con éste, ya iban tres nombres: "Anonsurf", "Safe" y "Navegación Oculta 3.0". La descripción: "Paquete de instalacion necesario para navegacion anonima en las webs que lo requieran. El plugin modifica el contenido del navegador y actualiza sus datos para que estos puedan ser visualizados de forma segura y anónima".</div>
<div>
<br /></div>
<div>
Lo de "webs que lo requieran" ya lo había comprobado, aunque al final se trataba de un dominio aparcado con poco interés para mí. Lo de "modifica el contenido del navegador y actualiza sus datos"... creo que debería dar un poquito de miedo. Así que creo que habría que revisar los términos y condiciones que aparecían en la página inicial.</div>
<div>
<br /></div>
<div>
Parecía una, no demasiado mala pero tampoco buena, traducción de un texto en inglés. Y en ella aparecían perlas como:</div>
<div>
<ul>
<li>"Este es un contrato legalmente vinculante entre usted y el creador del instalador". Aunque no vi ningún dato que permitiera identificar a este "creador del instalador".</li>
<li>"AL ACCEDER A LOS SITIOS Y DESCARGA DEL CONTENIDO, USTED autoriza el mostrar información PROMOCIONAL , anuncios y ofertas de productos o servicios de terceros (conjuntamente " PUBLICIDAD ")". Eso me temía yo.</li>
<li>"NO SOMOS RESPONSABLES ANTE USTED O CUALQUIER OTRA PERSONA POR CUALQUIER DAÑO INCIDENTAL , CONSECUENTE , INDIRECTO , PUNITIVO O EJEMPLARES , INCLUYENDO, SIN LIMITACIÓN , TIEMPO MUERTO DEL EQUIPO , PÉRDIDA DE DATOS, O DE GANANCIAS , INCLUSO SI SE NOS HA ADVERTIDO DE LA POSIBILIDAD DE TALES DAÑOS. AL INSTALAR O USAR EL CONTENIDO, USTED ACEPTA RESPONSABILIDAD EXCLUSIVA PARA TODAS LAS CONSECUENCIAS DERIVADAS DE LOS MISMOS Y reconoce que ninguna reclamación será realizada en contra de nosotros, nuestros licenciatarios , distribuidores, agentes , empleados o afiliados".</li>
<li>"NO HACEMOS NINGUNA REPRESENTACIÓN O GARANTÍAS RELATIVAS DE TERCEROS O SOCIOS OFERTAS, USTED ACEPTA QUE NO SOMOS RESPONSABLES POR CUALQUIER PÉRDIDA O DAÑO DE CUALQUIER TIPO INCURRIDO , O COMO CONSECUENCIA DE LA PRESTACIÓN O EXHIBICIÓN DE LAS OFERTAS". O sea, que no te quejes si una oferta te cuela algo en tu equipo o es fraudulenta.</li>
<li>"EN ALGUNAS OCASIONES , A COMPARTIR se puede cobrar por dichos servicios a EL USUARIO FINAL PARA EL MANTENIMIENTO DEL SITIO WEB O DICHO DE SERVICIOS".</li>
</ul>
<div>
Eso sí, para acabar aparecía un tranquilizante "Ningún dato personal será recogido por esta página web" que ahondaba aún más en un anterior "En un esfuerzo por cumplir con la Ley de Protección de datos, nosotros no recogemos información de identificación personal ni usamos cookies de identificacion o rastreo".</div>
</div>
<div>
<br /></div>
<h2>
El sitio web</h2>
<div>
Cuando eché un vistazo al plugin en las opciones de Firefox aparecía una dirección. A ver si dan más información al respecto:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRCfDZVsPflOQlahKaYuAHV42SG7NddnzE1BiOOBxwc8hwCRV4o2MAv1NUlylNBBbDJxVoKbctC1th38o5lC96C0ihfJIK1z_dKNpjFdXU7pTHX5KpLus0TB6E3Nec3Calq6Qki09rFJKs/s1600/spis.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRCfDZVsPflOQlahKaYuAHV42SG7NddnzE1BiOOBxwc8hwCRV4o2MAv1NUlylNBBbDJxVoKbctC1th38o5lC96C0ihfJIK1z_dKNpjFdXU7pTHX5KpLus0TB6E3Nec3Calq6Qki09rFJKs/s400/spis.png" width="343" /></a></div>
<br />
Pues... no. He tenido la mala suerte de pillarlos de mantenimiento. Un administrador cuidadoso debe tener esta web, pues eché un vistazo a "archive.org" por si tuviera copias anteriores y se ve que "mantiene mucho su web". Sólo encontré algo distinto cuando me remonté al año 2014:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4TqIFP51Di6iHpIt8M4W2TFIDZOLLXtm2QeHZKeudjx99LKjow-UXrIgfEncJ3kV6MRQOIk-ULN76LaBKKWTmt51k7yh33C-RNuFJYo51G4tMRV5F_8eXgLsunfZ3dp_5V6RVCjRcmM6k/s1600/spis2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4TqIFP51Di6iHpIt8M4W2TFIDZOLLXtm2QeHZKeudjx99LKjow-UXrIgfEncJ3kV6MRQOIk-ULN76LaBKKWTmt51k7yh33C-RNuFJYo51G4tMRV5F_8eXgLsunfZ3dp_5V6RVCjRcmM6k/s400/spis2.png" width="400" /></a></div>
<br />
Una palabra, "hola", que parece apuntar a alguien que habla español.<br />
<br />
<h2>
Los efectos</h2>
<div>
Estuve navegando un rato. ¿Que si noté algún cambio?</div>
<div>
<br /></div>
<div>
Bueno, el navegador se me quedó colgado varias veces mientras visitaba páginas de periódicos. También es verdad que la máquina virtual que estaba usando tenía poca RAM. Todo era aparentemente normal hasta que eché un vistazo al código JavaScript incluido en el fichero XPI de la extensión y utilicé las herramientas para desarrollador del navegador.</div>
<div>
<br /></div>
<div>
El código fuente del plugin tenía cosas "llamativas":</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsbVbRwdhVZVUvO_xXqqErpGykyridogYk4n_qrK0sNQnxqdmARwezVWWutnxsZ4LPJiw9LJi2ous0QlU_i4b-qc8z4lpzAve0LT5OSZXV_OjUmp7J09CO4hRgqovrnA8cKZebSWLp9QBI/s1600/js1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsbVbRwdhVZVUvO_xXqqErpGykyridogYk4n_qrK0sNQnxqdmARwezVWWutnxsZ4LPJiw9LJi2ous0QlU_i4b-qc8z4lpzAve0LT5OSZXV_OjUmp7J09CO4hRgqovrnA8cKZebSWLp9QBI/s400/js1.png" width="400" /></a></div>
<div>
<br /></div>
<div>
O sea: código para modificar las páginas visitadas y añadirles un script. O, dicho en otras palabras, un XSS basado en complementos del navegador. Eso sí, consentido por el usuario al aceptar los términos y condiciones si lo que hace es añadir publicidad a las páginas. Pero, concediendo que así sea hoy... ¿quien nos garantiza que los scripts sigan haciendo mañana lo mismo que hacen hoy?. Incluso si la voluntad del desarrollador fuera otra... ¿no sería posible que alguien comprometiera su sitio web?</div>
<div>
<br /></div>
<div>
Eché un vistazo al fichero que se incluía en el nuevo script. Y básicamente encadenaba otra carga</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOd7Hd-8J_jhQDiGzYiyqRPqCIhyphenhyphen6dLE7QtBm5eqBP8PsrlZJ3U7fmS1KnnuSocH6MJpIJgr1qZEJKqvQRW7JsvINmMgYwmQJXgNs3idPlEQpXR6V32Y1E24H1CT2geoKbK66hPtHrpxaS/s1600/js2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOd7Hd-8J_jhQDiGzYiyqRPqCIhyphenhyphen6dLE7QtBm5eqBP8PsrlZJ3U7fmS1KnnuSocH6MJpIJgr1qZEJKqvQRW7JsvINmMgYwmQJXgNs3idPlEQpXR6V32Y1E24H1CT2geoKbK66hPtHrpxaS/s400/js2.png" width="400" /></a></div>
<div>
<br /></div>
El cual contenía nombres de variables y textos en español y sí que hacía otras cosas. Como insertar IFRAMES con páginas de terceros:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4SDVG0yCHB7Zv0oRCWS2iw1hMMX6mnjF1OsaK7akAJOy_LTOMnddzyvO1qweoYO3hoZ9jNQMkCHjACLAA77C-QuoGvru3J30fKYsAgPwvkFsBHF2dEcQG1PJvIRj4qx9p41umTMjaq47b/s1600/js3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4SDVG0yCHB7Zv0oRCWS2iw1hMMX6mnjF1OsaK7akAJOy_LTOMnddzyvO1qweoYO3hoZ9jNQMkCHjACLAA77C-QuoGvru3J30fKYsAgPwvkFsBHF2dEcQG1PJvIRj4qx9p41umTMjaq47b/s400/js3.png" width="400" /></a></div>
<br />
O modificar las direcciones de las páginas solicitadas:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioLlpXBjVxbU3Zw7OkatO8Npl2_Uaeg6GM1fPt7S92HQezEOxHa8msOivjvuxIh8MnERjxnuX0fH4dXaQ5eFMW0zMbeLigmBsI9kxIMpMg-dxgAqf2iYdZjITtxUH9xHpHdWgTK2HHm0st/s1600/js4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioLlpXBjVxbU3Zw7OkatO8Npl2_Uaeg6GM1fPt7S92HQezEOxHa8msOivjvuxIh8MnERjxnuX0fH4dXaQ5eFMW0zMbeLigmBsI9kxIMpMg-dxgAqf2iYdZjITtxUH9xHpHdWgTK2HHm0st/s400/js4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Por cierto que ese "getCookie" y el otro "setCookie" me hacen revisar los términos y condiciones. Firefox avisaba de vez en cuando de la redirección:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOh2cX6wTzRIrBZ1ksxZAxUoCy9Lyrb8jwrmNZnlNKvKlR1PEug13-It6IpxLd53KxgScKkB8Obj1WG9sJTLiZeO5X8Mttnkuzy1Eml7hqJ_S72PVima7QhgnKLF9evSnsjYucZS8covCw/s1600/r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOh2cX6wTzRIrBZ1ksxZAxUoCy9Lyrb8jwrmNZnlNKvKlR1PEug13-It6IpxLd53KxgScKkB8Obj1WG9sJTLiZeO5X8Mttnkuzy1Eml7hqJ_S72PVima7QhgnKLF9evSnsjYucZS8covCw/s400/r.png" width="400" /></a></div>
<br />
Las nuevas direcciones terminaban redirigiendo a la solicitada. Parecía que se trataba más de rastreo que de intentos de phishing u otros tipos de engaño similares.<br />
<br />
O también añadir IFRAMES a las páginas:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkG7oaEfa-J2usgYG-0FPkXLLdZhULla0QAYoAgxWN3MfNfl66KdZqbcnGxTvwXpdIUIhhba_pvQavBKGrpfhrdYlKvay-z6pcg1kFQEaCN755lrgWuqqa-Ldf6owI8qXh8yGhFmuf5F8H/s1600/js5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkG7oaEfa-J2usgYG-0FPkXLLdZhULla0QAYoAgxWN3MfNfl66KdZqbcnGxTvwXpdIUIhhba_pvQavBKGrpfhrdYlKvay-z6pcg1kFQEaCN755lrgWuqqa-Ldf6owI8qXh8yGhFmuf5F8H/s400/js5.png" width="400" /></a></div>
<br />
¿Cómo se traduce todo esto en la práctica? Valga como muestra un ejemplo. Si visito la página de Google, me encontraré con una sorpresa al comparar el código fuente de la página descargada con el de la mostrada (este último puede obtenerse seleccionando todo y usando la opción "ver código fuente seleccionado"). Ahí está el script añadido. En la línea 49 me sale a mí:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgohqIsqbvEopfpxlzh-bVzLmrMbXHVCJIoEaSK5Usn8_RjPU9_1T2wovC3YTOdYYIFEVCM5VtQUsYaIYVUhAT854h_Ok2I65Gs4Ayw-wR1F96yWDF9k-GRF20YaxGbVhrZOEl8Y15SKlr9/s1600/g3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgohqIsqbvEopfpxlzh-bVzLmrMbXHVCJIoEaSK5Usn8_RjPU9_1T2wovC3YTOdYYIFEVCM5VtQUsYaIYVUhAT854h_Ok2I65Gs4Ayw-wR1F96yWDF9k-GRF20YaxGbVhrZOEl8Y15SKlr9/s400/g3.png" width="400" /></a></div>
<br />
O al ver el IFRAME añadido al final del documento con el "Inspector" de las herramientas para desarrolladores (F12):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilzRonnnE87VHNMPpxd-JvKQtLrmNcKqSUGW0HKmXrSRMiMKIAlrEiWFnqiTHuC5yk7sIkEIOIkDaoRfKf1Z-gC2jkIfCDB7ZpSqaYKY5yBb7bjaN09I4-76gpaVyNE5gGbjNJJMNgasif/s1600/g2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilzRonnnE87VHNMPpxd-JvKQtLrmNcKqSUGW0HKmXrSRMiMKIAlrEiWFnqiTHuC5yk7sIkEIOIkDaoRfKf1Z-gC2jkIfCDB7ZpSqaYKY5yBb7bjaN09I4-76gpaVyNE5gGbjNJJMNgasif/s400/g2.png" width="400" /></a></div>
<br />
O al comprobar los accesos a páginas en dominios ajenos al solicitado:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBXaeWK2UV4adYe49iBelQdrEYnTFR6mQMC4VnHxJxqYbxxUysBZM_QprU_Ath6in_dp5QrdMG3E4UE7y0ts2Y-DsijdYJ5PI9pdZL373p-0YbISDVOBFsuQanWihdr_WyLghFCWpqsQ3b/s1600/g1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBXaeWK2UV4adYe49iBelQdrEYnTFR6mQMC4VnHxJxqYbxxUysBZM_QprU_Ath6in_dp5QrdMG3E4UE7y0ts2Y-DsijdYJ5PI9pdZL373p-0YbISDVOBFsuQanWihdr_WyLghFCWpqsQ3b/s400/g1.png" width="400" /></a></div>
<br />
<h2>
Cloaking</h2>
Quizá quieras hacer tú mismo o tú misma las pruebas que hice yo y alguna más que se te haya podido ocurrir. Pues vete haciendo el cuerpo a que quizá no puedas. Porque cuando he intentado acceder al dominio objeto de este post desde otros sitios, incluyendo equipos de conocidos, me he encontrado con que la respuesta era distinta.<br />
<br />
Para que te hagas una idea, ahí van varias capturas de pantalla. La primera realizada utilizando <a href="https://www.browserling.com/" target="_blank">Browserling</a>, una web que te "presta" un navegador por un ratito:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxjK5e8WEna20qFjS0p5diWD2gny9LPSGLypdbbRcvD17_XM4ATrO2W5McjM5xVzlefaMPQEQ2-KO6Iqk0s08qkGjCTm0MYEojpZ5TJbvMof9jNseOknoJpHvmedPHHoD9YMMMGaoZWrJ5/s1600/browserling.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxjK5e8WEna20qFjS0p5diWD2gny9LPSGLypdbbRcvD17_XM4ATrO2W5McjM5xVzlefaMPQEQ2-KO6Iqk0s08qkGjCTm0MYEojpZ5TJbvMof9jNseOknoJpHvmedPHHoD9YMMMGaoZWrJ5/s400/browserling.png" width="400" /></a></div>
<br />
Y ahí va <a href="http://browsershots.org/" target="_blank">Browsershots</a>:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH0p_NEj1gx6VIlObCOr2Aa_KcgUDUeI608w5FpoCtDYSr_D9RHUi5KOPkJ3poL2sgWr4nMJhQH8hIm9-xkgkeRqqD7ZgJYYqM6WVSLYR3DilQ7cnYmoLCdD6ZhV4lO3vZjEKSC3RXJ7he/s1600/browsershots.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH0p_NEj1gx6VIlObCOr2Aa_KcgUDUeI608w5FpoCtDYSr_D9RHUi5KOPkJ3poL2sgWr4nMJhQH8hIm9-xkgkeRqqD7ZgJYYqM6WVSLYR3DilQ7cnYmoLCdD6ZhV4lO3vZjEKSC3RXJ7he/s400/browsershots.png" width="400" /></a></div>
<br />
Y lo que ve el <a href="https://translate.google.com/" target="_blank">traductor de Google</a>:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH0UNtF7QdmA0fvxwWqtqjOsRBwkiXGhs6du7NQO1iEIBCsEIfrytRKOgjd_6GlowiA0vkbH-3IJ7fmbCvL4ZsdDNesOdKTzNx_r9uKv1PxHJ5eySl2KXZhMdqU50oBvomHYyeqIoBpYTA/s1600/goo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH0UNtF7QdmA0fvxwWqtqjOsRBwkiXGhs6du7NQO1iEIBCsEIfrytRKOgjd_6GlowiA0vkbH-3IJ7fmbCvL4ZsdDNesOdKTzNx_r9uKv1PxHJ5eySl2KXZhMdqU50oBvomHYyeqIoBpYTA/s400/goo.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
O el motor de generación de thumbnails usado por <a href="http://www.exalead.com/search/" target="_blank">Exalead Search</a> para los iconos personalizables de su página de inicio:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL6GXQe90NvNovjSuG9QlbTJ39eIGS8A7L6hI8-xeaTykqAZ0_tqf7FJ-gHZwp1mIngnesP0tYlF3Nz8p-QyHWesUbC2v27jZN34U0hevlqtWcjbuFADpA19B3sg1txV4lBl7sHg6zYGTC/s1600/exalead.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL6GXQe90NvNovjSuG9QlbTJ39eIGS8A7L6hI8-xeaTykqAZ0_tqf7FJ-gHZwp1mIngnesP0tYlF3Nz8p-QyHWesUbC2v27jZN34U0hevlqtWcjbuFADpA19B3sg1txV4lBl7sHg6zYGTC/s400/exalead.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Queda vintage eso de "Esto es el fin de internet". ¿verdad?<br />
<br />
<h2>
Resumiendo, que es gerundio</h2>
<div>
Que te inyecten un script en las páginas de Google (o de Amazon, o de Bing, o de PayPal, o de...) no es cosa baladí. Un script puede tomar control de una página web y hacerle hacer cuanto desee. Desde hacer peticiones arbitrarias, saltándose cualquier protección anti-CSRF que pudiera haber en juego, hasta exfiltrar a terceros los datos manejados y las transacciones realizadas. Pasando por robar credenciales o cookies de sesión o por realizar escaneos de red o realizar ataques de denegación de servicio contra terceros sitios.</div>
<div>
<br /></div>
<div>
Como indiqué anteriormente, no parece ser éste el caso en el ejemplo que nos ocupa. Todo parece tener más que ver con el rastreo que con otra cosa. Pero no existen garantías sobre qué pasará en el futuro, quizá incluso en contra de los deseos de quienes escribieron y explotan el plugin.</div>
<div>
<br /></div>
<div>
De si se trata de un caso aislado o existen redes dedicados a esto trataremos otro día...</div>
<br /></div>
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-22372448486281388402016-08-22T00:15:00.002-07:002016-08-22T00:15:36.245-07:00Sigue el phishing a la PassNo hace mucho me quejaba de no haber podido llegar lo suficientemente pronto para poner a la gente sobre aviso de un <a href="http://418iamateapot.blogspot.com/2016/08/phishing-la-pass.html" target="_blank">phishing a la tarjeta Carrefour Pass</a>. Esta vez espero de poder ser de más ayuda.<br />
<br />
Toda vez que los phishers han tenido ya problemas con su anterior infraestructura... se han montado una nueva y ¡a seguir con el negocio!<br />
<br />
Hoy se han recibido dos mensajes que simulan proceder de dos direcciones de correo distintas del dominio "carrefour.es":<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVgOi8Shh1g9IOuCWxAa-U81kdTGg8csZmthbr5Z_ipj3umS6k989Rw62pW69IHZ9Pdwo-W3hnMPo3uL4QYkIKwrSWFjO-kFjiLj4R9EEkgXJz_plCRTzF9_6VlaAfAg6Kz7a3mPGw6_H0/s1600/mensajes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVgOi8Shh1g9IOuCWxAa-U81kdTGg8csZmthbr5Z_ipj3umS6k989Rw62pW69IHZ9Pdwo-W3hnMPo3uL4QYkIKwrSWFjO-kFjiLj4R9EEkgXJz_plCRTzF9_6VlaAfAg6Kz7a3mPGw6_H0/s400/mensajes.png" width="371" /></a></div>
<br />
La imagen de logo de la cabecera, que no es mostrada por Thunderbird al tratarse de contenido remoto, vuelve a ser aquella que sacaban de una web de un torneo de fútbol sala:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7eIOAuuDwb0LTOyaIePKnUORo_vXcjSMpVg9TRXzsLLVLBgPIdPUm3_Isb7fAQqE2s4OqdeEC2y1rDn7KpQ0IsBSavsqys4sB4Uidtn8GmnQyNTDiH02l0r6xlzhWsS4psxTmHqYtTrZo/s1600/img.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7eIOAuuDwb0LTOyaIePKnUORo_vXcjSMpVg9TRXzsLLVLBgPIdPUm3_Isb7fAQqE2s4OqdeEC2y1rDn7KpQ0IsBSavsqys4sB4Uidtn8GmnQyNTDiH02l0r6xlzhWsS4psxTmHqYtTrZo/s400/img.png" width="400" /></a></div>
<br />
Los mensajes tienen el mismo texto, pero el destino del enlace "Confirmar ahora" es distinto. Eso sí, ambos pertenecen al mismo dominio. Y ¡oh sorpresa! las páginas de destino simulan ser formularios de acceso. Eso sí, con las mismas modificaciones que en la vez anterior. El mismo GET sobre HTTP:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinuA9xAtmZsXCugcNQQLaR3iQREEgLODGpD5ZZF_Eu6jGqC7S_aIQhQ6bRttSnKMB5oOX96NetRV8SfNhUScwxcl8JDFPARw6sDMF8BgkZTOT4bbbO7Y36ypCNC8HtnmSIv-xJmMCwSTT2/s1600/web.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinuA9xAtmZsXCugcNQQLaR3iQREEgLODGpD5ZZF_Eu6jGqC7S_aIQhQ6bRttSnKMB5oOX96NetRV8SfNhUScwxcl8JDFPARw6sDMF8BgkZTOT4bbbO7Y36ypCNC8HtnmSIv-xJmMCwSTT2/s400/web.png" width="400" /></a></div>
<br />
Un dominio, typosquatting incluido (le falta una "r"), registrado hace una semana:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh02IaZo0wrsIAwFkTd2cFXlsgIv_EvGQV65sfmNuWbdtn0-IPIMbPsUWYLYoqI_N7sNzpRgth5NSYuuZTjy0Nmzwda2U1qhyG5lqxgZ9kJaEc17l6pSJu1QZhS6flAaurYrZP-RQZF410D/s1600/registro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh02IaZo0wrsIAwFkTd2cFXlsgIv_EvGQV65sfmNuWbdtn0-IPIMbPsUWYLYoqI_N7sNzpRgth5NSYuuZTjy0Nmzwda2U1qhyG5lqxgZ9kJaEc17l6pSJu1QZhS6flAaurYrZP-RQZF410D/s400/registro.png" width="400" /></a></div>
<br />
Esto hace que me vuelva a hacer <a href="http://418iamateapot.blogspot.com/2016/08/hasta-donde-llegar.html" target="_blank">las preguntas de ayer</a>. Por más controles y medidas de protección que tengan tus sistemas, si no es difícil enviar correos fraudulentos cuyos remitentes parezcan pertenecer a tu organización y hay montones de dominios descontrolados que pueden ser utilizados en campañas de phishing contra ti... ¿es seguro tu servicio?<br />
<br />
Y a todo esto, si pensabas que el dominio con las dos "r" era legítimo...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzFf0MPbsLSsn4CRfsJzVWPHQYJc70hltFEmxT_m4NvLbBGkyn9jqZ7-adn8SbFt5cIZE2BrMagTqs9VKX34CB2Ae5GMReymHL1dyARPCT_gAlf_W0sl7ZoJ_eHpWO4vHEW18QsYXr1-y1/s1600/bueno+o+no.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzFf0MPbsLSsn4CRfsJzVWPHQYJc70hltFEmxT_m4NvLbBGkyn9jqZ7-adn8SbFt5cIZE2BrMagTqs9VKX34CB2Ae5GMReymHL1dyARPCT_gAlf_W0sl7ZoJ_eHpWO4vHEW18QsYXr1-y1/s400/bueno+o+no.png" width="400" /></a></div>
<br />
Los DNS de éste pertenecen a un dominio, "spam-and-abuse.com", propiedad del registrador de dominios GoDaddy. Creo que el nombre deja claro para qué lo usan. Buena cosa es ver que alguien hace algo.<br />
<br />
<br />Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-23946117937406307592016-08-21T16:28:00.002-07:002016-08-21T16:28:16.456-07:00¿Hasta dónde llegar?El otro día, cuando veíamos lo del <a href="http://418iamateapot.blogspot.com/2016/08/phishing-la-pass.html" target="_blank">phishing a Carrefour Pass</a>, dejaba caer una cosa que me había llamado la atención: Carrefour no era titular de un dominio que muchos habríamos dado por bueno si nos lo encontramos por ahí:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYhCiyW12f-y01WhH6iqxHweabXkF8UkIUJ0x8A4yktgRjD3kajed9boWDsFLiKNAh3YNkX57oqbX2l6lEIu1PRGY1RlnaT1zjgaykLPdm5dbF07CYx-ZbtGo1-rnTCBkolYYZwD_6pJEg/s1600/c.es.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYhCiyW12f-y01WhH6iqxHweabXkF8UkIUJ0x8A4yktgRjD3kajed9boWDsFLiKNAh3YNkX57oqbX2l6lEIu1PRGY1RlnaT1zjgaykLPdm5dbF07CYx-ZbtGo1-rnTCBkolYYZwD_6pJEg/s400/c.es.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Estuve echando un rato, no demasiado largo, con la cabeza puesta en los nombres de dominio razonables y el typosquatting. Y nuestro ejemplo no era un caso aislado:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwftC3cOijT8Sn2nYtYa5OW__SK5miREgfIK_8LjTVnCD-ELsA8GPquRqsk3xKoGC0MVph7pbx-amoFlv22RRjWB2kGVQorxBc2It9ACNCHlwrA8TiyPj2JnNIMHEvBu8cJMtjtH4FZq-c/s1600/carefour.es.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwftC3cOijT8Sn2nYtYa5OW__SK5miREgfIK_8LjTVnCD-ELsA8GPquRqsk3xKoGC0MVph7pbx-amoFlv22RRjWB2kGVQorxBc2It9ACNCHlwrA8TiyPj2JnNIMHEvBu8cJMtjtH4FZq-c/s640/carefour.es.png" width="457" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Quisiera poner en orden mis ideas y no centrar el tema en Carrefour, que ciertamente no es la única organización con este tipo de problemas, ni en los registradores de estos dominios, sobre cuyas intenciones no podría pronunciarme. Ni tampoco sólo en los dominios registrados, pues hay otros parecidos a los anteriores que aún no lo están. Quisiera tener respuestas y sólo me salen preguntas.<br />
<br />
Con el paso del tiempo, veo como términos que antes sonaban muy bien se van quedando cortos. Muy cortos. Como "Seguridad Informática", que al centrarse más en las herramientas que en los objetivos, fue (o está siendo, según el caso) paulatinamente sustituido por "Seguridad de la Información".<br />
<br />
Pero la información es escurridiza. Difícil de guardar. Y las formas de llegar a ella son, por otro lado, prácticamente ilimitadas. En esas condiciones... ¿Hasta qué punto se puede esperar que una organización registre todos los dominios que pudieran confundirse o asociarse con sus servicios, productos y marcas, incluyendo aquellos que consisten en un error ortográfico o de escritura? ¿Hasta dónde sería preciso llegar en ese frenesí registrador?<br />
<br />
Y, por otro lado... ¿puede considerarse seguro un servicio si existen nombres de dominios que podrían ser utilizados de forma creíble para hacer phishing relacionado con él?<br />
<br />
¿Podría regularse de alguna manera este tema? ¿Tendría cabida, por citar algún ejemplo, en la normativa sobre Protección de Datos o en el Esquema Nacional de Seguridad?<br />
<br />
Lo que sí tengo claro es que se trata de algo que incide directamente sobre la seguridad. Y no hablo ya de "Seguridad de la Información", término al que creo que también le llegó ya su hora. Seguridad financiera. Seguridad patrimonial. Seguridad jurídica. Seguridad personal y de la privacidad y la intimidad. Seguridad de la imagen y la marca...<br />
<br />
Seguridad. Sin matices añadidos. O se mira de forma global o se pierden de vista los detalles.<br />
<br />Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-65614376427672881942016-08-16T16:58:00.000-07:002016-08-16T16:58:20.993-07:00Phishing a la PassConfieso que querría haber escrito antes este post. Habría sido mucho más útil. Pero a veces las cosas vienen como vienen y los datos llegan cuando llegan... Si no de aviso, al menos servirá para ver cómo los malos hicieron las cosas.<br />
<br />
Hace unos días me llamó un conocido. Le habían llegado dos correos de Carrefour diciéndole que tenía bloqueada su tarjeta Pass y que tenía que desbloquearla. Pero él acababa de usarla sin problemas.<br />
<br />
Tras pedirle que me reenviara los mensajes (como adjuntos) y que me hiciera alguna captura de pantalla, le di los consejos de rigor: que no hiciera nunca clic en los enlaces del mensaje; que, llegado el caso, pusiera él la dirección en la barra del navegador, etc.<br />
<br />
Ahora que me llegó cuanto le solicitaba puedo compartirlo aquí. Tarde, sí, pero quizá mejor que nunca.<br />
<br />
Se trataba de dos mensajes de correo. Uno del día 11:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZsCScgJ7vLg8wzlL5YX5Rk4-cn-CyGjoG5_ar7zwBHkJwKVkZ9pF7fwhvFG-PbB11z4CPslXYqa2TwBNSXcc5W6gs7dmc0nWIJZVFOjvH-szhcGbYK8GWpNBM0ALpeSA2-UHj1bUetqkc/s1600/mensaje1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZsCScgJ7vLg8wzlL5YX5Rk4-cn-CyGjoG5_ar7zwBHkJwKVkZ9pF7fwhvFG-PbB11z4CPslXYqa2TwBNSXcc5W6gs7dmc0nWIJZVFOjvH-szhcGbYK8GWpNBM0ALpeSA2-UHj1bUetqkc/s400/mensaje1.png" width="400" /></a></div>
Y otro del 12:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJuZZNwM3dhODFZAqEapYXIddxv2-TlPlLyD85_NfipewAbc-N8X1EP9oIlN9oZUxBKJJ62jola-QA4rc6KgZUu6GxtyI1yrQWUv0xP81qtGt1RPbTH6_uwoihGwigbyt1uUibz-wX4Bi2/s1600/mensaje2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJuZZNwM3dhODFZAqEapYXIddxv2-TlPlLyD85_NfipewAbc-N8X1EP9oIlN9oZUxBKJJ62jola-QA4rc6KgZUu6GxtyI1yrQWUv0xP81qtGt1RPbTH6_uwoihGwigbyt1uUibz-wX4Bi2/s400/mensaje2.png" width="400" /></a></div>
Ni que decir tiene que cambié los datos del destinatario del mensaje.<br />
<br />
La verdad es que, comparándolos, el primero parece más trabajado. Eso sí, el otro tiene un remitente más acojonante: "emergencias@carrefour.es". En todo caso, ambos indican provenir de direcciones de correo verosímiles.<br />
<br />
El primero te alaba las bondades de la tarjeta para después decirte que la tuya está "desactivada por las nuevas normas de seguridad" (¡cachis!) y termina con "Este email es resultado de una investigación Carrefour S.A.". Supongo que por eso de asustar. Indican además los cuatro primeros dígitos del número de tarjeta y el resto va en asteriscos. Ciertamente, ocultar parte de la numeración es una práctica habitual en las comunicaciones. Por si acaso. Pero es que <a href="https://es.wikipedia.org/wiki/N%C3%BAmero_de_tarjeta_bancaria#Identificador_de_la_gran_industria_o_.28MII.29" target="_blank">los primeros cuatro dígitos forman parte de la identificación del emisor de la tarjeta</a> y, claro, son conocidos.<br />
<br />
Eso sí, quizá llamen la atención esos caracteres raros que aparecen salpicados por el texto. Y es que, en lugar de las típicas entidades "&aacute;", "&eacute;", etc., en estos mensajes las vocales acentuadas se pusieron tal cual:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkNIqUWy33xm4NddigY7qPLx9O3RRgCzLxtni6AtOaAWGTaqcQO-0-FXDyKM3Q-Qt92oIqCz-n2WJR95JmPGnAVvVvK-6Fv_E0P1a1956EWFkSqIKQgJDTUCVr_bm-3WF-2uXunjBD0iHI/s1600/acentos.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkNIqUWy33xm4NddigY7qPLx9O3RRgCzLxtni6AtOaAWGTaqcQO-0-FXDyKM3Q-Qt92oIqCz-n2WJR95JmPGnAVvVvK-6Fv_E0P1a1956EWFkSqIKQgJDTUCVr_bm-3WF-2uXunjBD0iHI/s400/acentos.png" width="400" /></a></div>
<br />
En la imagen anterior, aparece otra cosa sospechosa: La URL de la que sacan el logo de Carrefour. El sitio en cuestión parece de lo más legítimo. Dedicado a un torneo de fútbol sala o algo que se le parece mucho. Lo que pasa es que la empresa tiene un equipo inscrito en él...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja9cjMFAyVL4_dkNXMGLTx8RA2cah62QtYTWHFaQ4iLMOj9Q1qZQ5WQwFqVYD4Ex24kj_RRR5qI_7CZahTUhuICQaqwvWWR0WEV7ND7lm2jKAmmlLam05gDOQ1SxXRjh0KnKtAnhjV3mPn/s1600/fsala.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja9cjMFAyVL4_dkNXMGLTx8RA2cah62QtYTWHFaQ4iLMOj9Q1qZQ5WQwFqVYD4Ex24kj_RRR5qI_7CZahTUhuICQaqwvWWR0WEV7ND7lm2jKAmmlLam05gDOQ1SxXRjh0KnKtAnhjV3mPn/s400/fsala.png" width="400" /></a></div>
<br />
Y... ¿para qué iban los phishers a buscar más si ahí está el logo? <br />
<br />
La cosa se comienza a poner caliente cuando se llega al botón para restablecer tu tarjeta:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg60sc0wAX4ImS9dOOtEWxTpWzLI21X8pcU5_1Fx3G2EmgZr9BDDteP2C2R_d0r9-jzj5ksYkGOXJSzWwRAE9718DLiM370yOQPZLXHAmtsHjnUVD-zq9e4vHWjB2rHZDl2Qr02iSoCC6wv/s1600/phishing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg60sc0wAX4ImS9dOOtEWxTpWzLI21X8pcU5_1Fx3G2EmgZr9BDDteP2C2R_d0r9-jzj5ksYkGOXJSzWwRAE9718DLiM370yOQPZLXHAmtsHjnUVD-zq9e4vHWjB2rHZDl2Qr02iSoCC6wv/s400/phishing.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
A fecha de hoy ninguna de las dos URL que aparecen en la imagen llevan a nada interesante pero, cuando se hicieron las pruebas, una de ellas redirigía a una página cuando menos curiosa:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCokc7ngNMuMrEQdmzzmgWfhY4pIOleV2j0WwOZbU3HaIjo1ab2uFWT1cnsbHB6aDHR2keWPyqObEoyIcT7Nk4NwAd79JxskC7Fu-V-jT3qzmemADV27Ga7Obbqbv351jt7sTMJFhjAoJq/s1600/sitio+phishing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCokc7ngNMuMrEQdmzzmgWfhY4pIOleV2j0WwOZbU3HaIjo1ab2uFWT1cnsbHB6aDHR2keWPyqObEoyIcT7Nk4NwAd79JxskC7Fu-V-jT3qzmemADV27Ga7Obbqbv351jt7sTMJFhjAoJq/s400/sitio+phishing.png" width="400" /></a></div>
<br />
Algo parecido se puede ver por algunas páginas de Internet que tomaron sus "fotografías" en el momento oportuno. Como ésta:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZbPMV2HN02tkAKlbEBiCT73BhbXGZfMZkBkOcQXDpQNPplIjETNHnifZ6oIFgPKxpPv9nxZ3GbVUpZGRs0Lrl-TumEUoMpIamnxorpnshx7G7QtzEzPvX-mBs8oIkZtO9YsO4ZcUhsdo/s1600/captura.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZbPMV2HN02tkAKlbEBiCT73BhbXGZfMZkBkOcQXDpQNPplIjETNHnifZ6oIFgPKxpPv9nxZ3GbVUpZGRs0Lrl-TumEUoMpIamnxorpnshx7G7QtzEzPvX-mBs8oIkZtO9YsO4ZcUhsdo/s400/captura.png" width="400" /></a></div>
<br />
... o esta otra:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqXpKvhh1GxwaoFZnHnQqWHzr2Y8j0ggJNK_UNvuX6FxbCeoZ6YxN7BYxUqc9lCLG1aB1T6RuzmJXOoHX2dXO3wADQdPPi2ODU8SDq7aigKrogbFM5BjpvTvLjf3nvHvIXjE9u1H-kktoK/s1600/Otra+captura.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqXpKvhh1GxwaoFZnHnQqWHzr2Y8j0ggJNK_UNvuX6FxbCeoZ6YxN7BYxUqc9lCLG1aB1T6RuzmJXOoHX2dXO3wADQdPPi2ODU8SDq7aigKrogbFM5BjpvTvLjf3nvHvIXjE9u1H-kktoK/s400/Otra+captura.png" width="400" /></a></div>
<br />
<br />
Bastante parecidas a la legítima página de inicio de sesión de los clientes de la tarjeta Pass ¿verdad? No es de extrañar, visto lo que aparece en su código HTML:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1FfsHoZR1cSYafwPyPfE0bBKrn35UZId2-YkiMM3DtKiaCxptGrel0rtRjaZMVDn8T0BWywIDVimzntI9QriiJAF54UvYZZ7V9FlOhOlCxNp7W8eEfB8AZuJdkSIWHlEpmi2X2QHiW1vZ/s1600/mirror.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1FfsHoZR1cSYafwPyPfE0bBKrn35UZId2-YkiMM3DtKiaCxptGrel0rtRjaZMVDn8T0BWywIDVimzntI9QriiJAF54UvYZZ7V9FlOhOlCxNp7W8eEfB8AZuJdkSIWHlEpmi2X2QHiW1vZ/s400/mirror.png" width="400" /></a></div>
<br />
O sea, duplicada del original con <a href="https://www.httrack.com/" target="_blank">HTTrack</a>, un programa que hace copias de sitios web para su posterior consulta offline. Claro que, aunque la apariencia sea similar, los phishers introdujeron sus cambios. Y... ¿dónde mejor que en el formulario de inicio de sesión?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu7BGMXJar0AncY3SzZ0fLQWaAGa5R3CoaIXklVcg0o3ym1OQtLgW5tJsP4idEuB6EnT-8I_Iyazx9FdeEWSKthdw6r3RMc2dKpczvu4Bs8DeqWujoCp36ZgZOzfnE1ZG4GxwuYvA5BiqM/s1600/form.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu7BGMXJar0AncY3SzZ0fLQWaAGa5R3CoaIXklVcg0o3ym1OQtLgW5tJsP4idEuB6EnT-8I_Iyazx9FdeEWSKthdw6r3RMc2dKpczvu4Bs8DeqWujoCp36ZgZOzfnE1ZG4GxwuYvA5BiqM/s400/form.png" width="400" /></a></div>
<br />
Bien comienza la cosa: método GET y uso de HTTP. Nada que ver con el POST sobre HTTPS de Carrefour. Y, por supuesto, a una página del dominio controlado por los phishers. Dominio cuyos datos de registro tampoco auguran nada bueno:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiulgjSyZKGYEhvapZPJxZTDCo3Ww0WRahZojOln67RMULoX5CTkXp2WrN9zPLaC94mglgovXnUzf9Y1vs3rJuCztkzDUdWJKibEos4jbC335MR8g-crbybXeQTkjYakNCkUwlAclzs7hz2/s1600/Registro+dominio.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiulgjSyZKGYEhvapZPJxZTDCo3Ww0WRahZojOln67RMULoX5CTkXp2WrN9zPLaC94mglgovXnUzf9Y1vs3rJuCztkzDUdWJKibEos4jbC335MR8g-crbybXeQTkjYakNCkUwlAclzs7hz2/s400/Registro+dominio.png" width="400" /></a></div>
<br />
Un nombre de contacto raro con ganas y una cuenta de correo de Yahoo. Cabe aquí preguntarse: ¿qué comprobaciones se hacen sobre los datos proporcionados para registrar un dominio .es?<br />
<br />
Y la respuesta es rotunda: DEPENDE. Porque cuando se quiere registrar un dominio .es, la autoridad "dominios.es" ofrece dos opciones: ellos mismos y un agente registrador:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDcSeekBxWzP_p5XQ9fW5vRxSgOTRESCRUQNGG0crAcE40UcYtpB0WzHjqHUaPGfHodVs1s9JmleKwMcnpNUEoUlP1jIIsF_6yHdeSstL0R_109xcXWc-fWmzOtsDHOOMhkTjGqM8ePhNq/s1600/comoregistrar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDcSeekBxWzP_p5XQ9fW5vRxSgOTRESCRUQNGG0crAcE40UcYtpB0WzHjqHUaPGfHodVs1s9JmleKwMcnpNUEoUlP1jIIsF_6yHdeSstL0R_109xcXWc-fWmzOtsDHOOMhkTjGqM8ePhNq/s400/comoregistrar.png" width="400" /></a></div>
<br />
Y, mientras "dominios.es" te pide muchos datos y "muy oficiales":<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWWy0BWNT9NSXBYj9kTJgUtloBtQQjsuFt39V9KKH3cEsJ7xjsLWBAggfTAxUN8izvs_YR-wlb3feG_epY8UVaDk0GRCUdz0lmFMsR-e15ntZAH9tsC9c0lzjR5QyWvB8qapBvEAlXfJRJ/s1600/Datos+registro+en+dominios.es.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWWy0BWNT9NSXBYj9kTJgUtloBtQQjsuFt39V9KKH3cEsJ7xjsLWBAggfTAxUN8izvs_YR-wlb3feG_epY8UVaDk0GRCUdz0lmFMsR-e15ntZAH9tsC9c0lzjR5QyWvB8qapBvEAlXfJRJ/s400/Datos+registro+en+dominios.es.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
... hay otros que no exigen tanto. Como el usado por los phishers en esta ocasión (y, curiosamente, también por Carrefour): KEY-SYSTEMS. Esta empresa ofrece varias alternativas dependiendo del perfil del cliente<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw1Y1vHH_O9C_pmXIsUAmx8RNHpBFQRiiE8r9RGw-dno1p_m2LNhAqx1q5IVgR8z_pi1Bd7dByXdqBtq3-r71R1zOkeZ_swOJXUvaLvKhZ2miL_oHdYsPrTQ-hn9j-9qUJCXlqrbWiDnj0/s1600/key-systems+-+portales.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw1Y1vHH_O9C_pmXIsUAmx8RNHpBFQRiiE8r9RGw-dno1p_m2LNhAqx1q5IVgR8z_pi1Bd7dByXdqBtq3-r71R1zOkeZ_swOJXUvaLvKhZ2miL_oHdYsPrTQ-hn9j-9qUJCXlqrbWiDnj0/s400/key-systems+-+portales.png" width="400" /></a></div>
<br />
Y si nos vamos al registro de usuarios de la de "individuos y pequeñas y medianas empresas", los datos personales solicitados son más ligeritos...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj191Ex2t82ao44YXDK3oLOGpA2E1mtY3WgJeRfYIJkRDyTVqyDwSEeNsZEQADYPs0-0OhDWSYp8VHdECfvsTeso7lO30HMqap_WZqXZqIiN47VTCZnGlPka3bx4blFeVFaAWccVLZCO0hF/s1600/crear+cuenta+en+discount+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj191Ex2t82ao44YXDK3oLOGpA2E1mtY3WgJeRfYIJkRDyTVqyDwSEeNsZEQADYPs0-0OhDWSYp8VHdECfvsTeso7lO30HMqap_WZqXZqIiN47VTCZnGlPka3bx4blFeVFaAWccVLZCO0hF/s400/crear+cuenta+en+discount+1.png" width="400" /></a></div>
<br />
Por no hablar de las formas de pago<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_eL_qP-pRYUD4UAUx9Wn_sEu_x2vayFGuJJYTTTkF9_ZeuSmTZR6-Hb7r6IjJSEZF0fD-Z_koH5r_TixdhkTBoNAbhpnI-fXOEZ9mjx0d-Xd_J6bduvHGBltqXse4p21eb4QgIxZj4WZk/s1600/crear+cuenta+en+discount+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_eL_qP-pRYUD4UAUx9Wn_sEu_x2vayFGuJJYTTTkF9_ZeuSmTZR6-Hb7r6IjJSEZF0fD-Z_koH5r_TixdhkTBoNAbhpnI-fXOEZ9mjx0d-Xd_J6bduvHGBltqXse4p21eb4QgIxZj4WZk/s400/crear+cuenta+en+discount+2.png" width="400" /></a></div>
<br />
A una empresa como ésta, verificar la autenticidad de la información introducida le puede resultar complicado y eso le viene bien a los phishers. Y también lo hace el uso de PayPal, que les ayuda a mantener el anonimato.<br />
<br />
Que Carrefour no hubiera registrado este dominio de forma preventiva tampoco es tan raro. Son demasiadas las combinaciones posibles y nadie puede abarcarlo todo. Pero lo que sí me llamó la atención fue este otro, que podría llevar a error hasta a las personas más experimentadas, y que al parecer tampoco está bajo su control:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIeWJrgKfg_w3z-ooXKg6YKD9whyty3ls9lUtZz5qaUYs-ACidp5x7b2qfd0OovE5xy7fD5so9L0wmoL46xd0yb_OeeGQwnvaHySnuehQ0XDg0u7S0HPGhksQqWzccjQxMqFnI65-GoYYh/s1600/c.es.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIeWJrgKfg_w3z-ooXKg6YKD9whyty3ls9lUtZz5qaUYs-ACidp5x7b2qfd0OovE5xy7fD5so9L0wmoL46xd0yb_OeeGQwnvaHySnuehQ0XDg0u7S0HPGhksQqWzccjQxMqFnI65-GoYYh/s400/c.es.png" width="400" /></a></div>
<br />
Espero que ni su actual propietario ni ninguno de los futuros se proponga utilizar este dominio para cosas malas. Miedo me daría, porque llevaría todas las papeletas para tener éxito en su empeño. Actualmente este dominio parece que no aloja contenidos. Lo único que pude encontrar en el poco tiempo que le dediqué fue unos cuantos nombres de domino y URLs proporcionadas por Google:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPzRAagu62IMBk10Q8muL0aqUnWSjsFn14E52hDENrXsO9mJ1W9TJoi-ysiNU46s3UTnle0brGT_jHz7g9bGix4iuzQtedJlF7AzQtSGZ8FgkVS7AUH7uj_I5jfkt5Zp3CK7Jlg7hc-7iB/s1600/goo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPzRAagu62IMBk10Q8muL0aqUnWSjsFn14E52hDENrXsO9mJ1W9TJoi-ysiNU46s3UTnle0brGT_jHz7g9bGix4iuzQtedJlF7AzQtSGZ8FgkVS7AUH7uj_I5jfkt5Zp3CK7Jlg7hc-7iB/s400/goo.png" width="400" /></a></div>
<br />
Sitio por defectos, sitios para móviles, página que parece destinada a la autenticación de usuarios o a información sobre seguridad... El futuro dirá lo que encontraremos ahí.<br />
<br />
Y queda una cosa por señalar. Los phishers spoofearon cuentas de correo del dominio "carrefour.es". Ya sé que en estas cosas intervienen tanto los servidores de origen como los de destino pero... ¿utiliza este dominio cosas como SPF, DKIM o DMARC para tratar de evitarlo?<br />
<br />
Utilizando la herramienta de <a href="http://mxtoolbox.com/SuperTool.aspx?action=spf" target="_blank">MXTOOLBOX </a>se puede hacer unas cuantas pruebas rápidas. Al parecer, "carrefour.es" no utiliza SPF, aunque otros dominios de él dependientes como "envios.carrefour.es" sí lo hacen:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxafZvtEjJM0vDBR09bE8lgQxLIqo9kjQp8JUX9TnjefNh4d5QIq8Q9mVRIgLM4ToQ4DJ9SsnNsh3oZlpMP5vwAb7YC8zi_M6ENflnijZ0GIxLxpitXSEJL7uNoRbXCxJA-GhqKtb39bCp/s1600/spf.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxafZvtEjJM0vDBR09bE8lgQxLIqo9kjQp8JUX9TnjefNh4d5QIq8Q9mVRIgLM4ToQ4DJ9SsnNsh3oZlpMP5vwAb7YC8zi_M6ENflnijZ0GIxLxpitXSEJL7uNoRbXCxJA-GhqKtb39bCp/s400/spf.png" width="400" /></a></div>
<br />
<br />
No es de extrañar que se aceptara un mensaje que venía de una IP<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQp26LXtgVhIGOaRS53b6Ve-dtdAyxHDcfALwizeK548wuSamefNxz4LWs6yOzhgMxeVZUROO7zqEr1OHb07b6fAlverHVzpoFKEcIHBvqHLtHebdL8I1J4b8_AQ_LoG3lpDSzORY5sNXh/s1600/ip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQp26LXtgVhIGOaRS53b6Ve-dtdAyxHDcfALwizeK548wuSamefNxz4LWs6yOzhgMxeVZUROO7zqEr1OHb07b6fAlverHVzpoFKEcIHBvqHLtHebdL8I1J4b8_AQ_LoG3lpDSzORY5sNXh/s400/ip.png" width="400" /></a></div>
<br />
... alojada, por lo que indica <a href="https://www.robtex.com/en/advisory/dns/119/9/30/69/" target="_blank">Robtex</a>, en un hosting en Australia que no recuerda para nada a Carrefour.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl6l5ePbT9shpiR-sqybAp5jrNcXEyywQ71OJAJsqs9FrF-2Rf4CMS2Aro8b4Aa_ycd5O3sPyvRUswctihTVyUeZ9iqn6xyNVmIq-94LoNWZWunNq1M7kSQkg-bFIsQh7f2HmX_kh5uYNQ/s1600/hosting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl6l5ePbT9shpiR-sqybAp5jrNcXEyywQ71OJAJsqs9FrF-2Rf4CMS2Aro8b4Aa_ycd5O3sPyvRUswctihTVyUeZ9iqn6xyNVmIq-94LoNWZWunNq1M7kSQkg-bFIsQh7f2HmX_kh5uYNQ/s400/hosting.png" width="400" /></a></div>
<br />
Y, por otro lado, según MXTOOLBOX, "carrefour.es" tampoco ofrece registros MX:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPTrBjHuGXZwjDxQFfbsk-W-DZnZVPmguOmNenmBbtdfUnrh6HzHfCtaqs9FEJZbX16o5xYUc5IDDs4Yei1QP5fcVCAACiuUR0SSOg-J_VMr0ThGoXLALBXjZ2E7aYn8FIpOdvQ6uskeRs/s1600/mx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPTrBjHuGXZwjDxQFfbsk-W-DZnZVPmguOmNenmBbtdfUnrh6HzHfCtaqs9FEJZbX16o5xYUc5IDDs4Yei1QP5fcVCAACiuUR0SSOg-J_VMr0ThGoXLALBXjZ2E7aYn8FIpOdvQ6uskeRs/s400/mx.png" width="400" /></a></div>
<br />
<br />
Y si de DMARC se trata...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6YkxSMjTsWpA9nT77mGL6HJ-Qhq2VwFR3axybkRqzCv2Xz9suriVQ3fkmNkM5eulmwZDLDS9xDmPAieV7cEpeCbV2YRlk5_4VMGBay8sqEPVB_XDVx2FKIPLaevc2GN8xogAovvQStJed/s1600/dmarc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6YkxSMjTsWpA9nT77mGL6HJ-Qhq2VwFR3axybkRqzCv2Xz9suriVQ3fkmNkM5eulmwZDLDS9xDmPAieV7cEpeCbV2YRlk5_4VMGBay8sqEPVB_XDVx2FKIPLaevc2GN8xogAovvQStJed/s320/dmarc.png" width="320" /></a></div>
<br />
SaludosEnrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-19347362051148721122016-08-08T04:23:00.002-07:002016-08-09T15:17:46.972-07:00Conseguir que tus aplicaciones sean seguras (o al menos, intentarlo) 2Si <a href="http://418iamateapot.blogspot.com/2016/08/conseguir-que-tus-aplicaciones-sean.html" target="_blank">limitar las aplicaciones que tus usuarios pueden utilizar </a>te parece <a href="https://es.wikipedia.org/wiki/Bastard_Operator_from_Hell" target="_blank">divertido</a>, posiblemente no hayas pensado en lo que se te viene encima. Ahora tienes un conjunto de aplicaciones en las que centrarte y te toca hacerlo. Para empezar, tendrás que monitorizar los problemas de seguridad que pudieran afectar a cada instalación particular que tengas de cada software.<br />
<br />
¿De dónde pueden venir los problemas? Poca cosa:<br />
<ul>
<li>Vulnerabilidades del propio software.</li>
<li>Dependencias. Por ejemplo: que el software sólo funcione con una versión obsoleta de Java o de Flash. O que utilice una librería a la que se han encontrado fallos, como <a href="http://unaaldia.hispasec.com/2016/08/desbordamiento-de-bufer-en-imagemagick.html" target="_blank">el reciente problema de Imagemagick</a>.</li>
<li>Software mal configurado. </li>
<li>Fallos del software que obliguen a utilizar una configuración insegura. Como que no funcione correctamente el uso de contraseñas a la hora de acceder a carpetas compartidas y haya que establecer en éstas permisos del tipo "acceso total para todo el mundo".</li>
<li>Interrelaciones entre software que supongan merma para la seguridad. Por poner un caso: quizá nuestro software tenga que conectarse con un servicio web. Si éste no funciona sobre HTTPS, el uso de HTTP supondría el correspondiente riesgo de intercepción y/o modificación de peticiones y respuestas</li>
<li>etc.</li>
</ul>
Pero si conocer dónde puede estar el problema es importante, no lo es menos enterarse de que existe. Y aquí también tenemos distintas opciones. Ten en cuenta que no son excluyentes entre sí, de modo que tienes que ir preparando unos cuantos canales. Entre ellos:<br />
<ul>
<li>Pruebas realizadas por tu organización: análisis de vulnerabilidades, tests de intrusión internos, etc.</li>
<li>Repaso de logs que pudieran encontrar ataques, ya fueran estos exitosos o no.</li>
<li>Información proporcionada por los distintos <a href="https://es.wikipedia.org/wiki/Equipo_de_Respuesta_ante_Emergencias_Inform%C3%A1ticas" target="_blank">CERT</a>. </li>
<li>Boletines de seguridad de los desarrolladores.</li>
<li>Repositorios de vulnerabilidades tipo <a href="https://cve.mitre.org/" target="_blank">CVE</a>.</li>
<li>Otras organizaciones y fuentes de información (blogs, foros,...) relacionadas con la seguridad de la información.</li>
<li>Notificaciones por parte de profesionales de, y aficionados a, la seguridad que pudieran encontrar las vulnerabilidades. Dado que por este conducto puede llegarnos información muy cualificada (al menos, a veces) es muy importante cuidarlo y asegurarnos de que existan dos cosas y de que estén claras desde el principio:</li>
<ul>
<li>Un cauce para que estas personas puedan realizar las comunicaciones.</li>
<li>Un marco en el que se deje claro qué se les permite y qué no hacer y cómo se va a tratar la información proporcionada.</li>
</ul>
</ul>
A este respecto se me viene a la cabeza <a href="http://www.elladodelmal.com/2011/02/hackerstxt.html" target="_blank">un antiguo artículo de Chema Alonso</a> sobre la propuesta de un archivo "hackers.txt". Algo similar al "robots.txt", pero para gente de este mundillo. <br />
<br />
Por no acabar este post sin poner otro par de listas, un elemento que puede complicarte la vida es lo variado de los tipos de software con los que puedes terminar trabajando. Una posible clasificación sería:<br />
<ul>
<li>Software libre, en distribuciones originales o modifados por terceros.</li>
<li>Software libre modificado por tu organización. </li>
<li>Software hecho a medida, bien por tu organización o por terceros.</li>
<li>Otro software propietario.</li>
</ul>
Dependiendo de en cuál puedas catalogar el sistema que presenta la vulnerabilidad, y de la naturaleza de ésta, tendrás una serie de opciones para corregir la situación:<br />
<ul>
<li>Modificar la configuración del software. Posiblemente estés deseando que sea esto lo que haya que hacer. </li>
<li>Obtener una nueva versión del producto, o de las dependencias afectadas, y aplicarla. En este caso, la fuente de esta nueva versión podría ser:</li>
<ul>
<li>El desarrollador del software afectado. Esta solución suele ser la mejor pues ofrece mayores garantías de continuidad en el futuro. Téngase en cuenta que el resto de opciones puede suponer tener que seguir manteniendo el software en el futuro sin el soporte de su desarrollador, quizá con medios propios. Y medios no siempre sobran...</li>
<li>Un tercero que ofrezca modificaciones del software (forks). En este caso, mejor que elijas algo fiable y con garantías de futuro.</li>
<li>Una modificación o desarrollo propio. O una modificación o desarrollo contratada a un tercero. Ya sabes que ésta te seguirá dando qué hacer durante mucho tiempo...</li>
</ul>
<li>Plantearte la sustitución del producto afectado por otro que proporcione las mismas funcionalidades, pero que sea más seguro.</li>
</ul>
Tanto si obtienes una nueva versión y la aplicas como si cambias de software tendrás que actualizar la lista de software aprobado.<br />
<br />
Eso, como se comentaba en el post anterior, tenía necesariamente su complejidad admistrativa. Pero no nos olvidemos de la parte técnica: ¿cómo elegir o, en su caso, desarrollar el software?<br />
Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-27858629283234695892016-08-02T14:18:00.000-07:002016-08-02T14:18:00.286-07:00¡Qué poco dura la alegría en la casa del pobre!Quizá te haya pasado: Tienes un blog o un sitio web que apenas recibe visitas y un día, de pronto, cuando, de puro aburrido, compruebas si alguien ha visualizado alguna de sus páginas... ¡guau! ¡los contadores se han disparado y parece que comienzas a tener toda esa relevancia que siempre creíste merecer!<br />
<br />
Bueno, sí, puede que sea eso. Pero es más probable que hayas sido víctima de un ataque de "SPAM de Rererer". Alguien ha puesto un programita a hacerte visitas incluyendo una cabecera "Referer" con una determinada URL. Una URL cuyo documento, por supuesto, no incluye ninguna referencia a tu sitio web.<br />
<br />
¿Para qué?<br />
<br />
Para empezar, si tu sitio tiene alguna página de estadísticas de acceso, en ella podría aparecer la URL que te enviaron como Referer. Y, si los bots de los buscadores la ven... ya sabes cómo interesa a cierta gente que haya enlaces a sus páginas y qué son capaces de hacer para conseguirlos.<br />
<br />
Pero lo más probable es que se trate de una técnica de Ingeniería Social. Si, al revisar tus estadísticas, ves que recibes muchas visitas desde una URL, quizá te pique la curiosidad y quieras saber qué dicen de ti. Si te recomiendan o te critican. Si se trata de otra web con una temática similar a la tuya que podría interesarte. Si...<br />
<br />
Y vas y visitas esa URL para comprobarlo.<br />
<br />
A partir de ahí puede pasar cualquier cosa: que te intenten vender algo, que te traten de colar malware, que recopilen de ti toda la información que tu navegador proporciona (que no es poca) y la procesen para preparar un posterior ataque "más grave"... ¡cualquier cosa que pudiera ocurrírsete y alguna otra más!<br />
<br />
Por supuesto, si tienes un sitio web popular posiblemente no repares en el Referer que te envían como SPAM. Quizá ni siquiera aparezca en las estadísticas de acceo. Quedará relegado a un puesto poco visible entre tantas visitas legítimas.<br />
<br />
Pero si, como comenzaba planteando al principio, apenas tienes quien te lea... ¡entonces sí que aparecerá en lugar destacado en tus estadísticas, tentador e insinuante!<br />
<br />
Lo dicho: ¡Qué poco dura la alegría en la casa del pobre!<br />
<br />Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-8716742589908038382016-08-01T15:17:00.000-07:002016-08-01T15:17:36.260-07:00Conseguir que tus aplicaciones sean seguras (o al menos, intentarlo) 1La petición no presagiaba nada bueno:<br />
- Tú que haces cosas de hacking y eso... ¿podrías decirnos cómo conseguir que nuestras aplicaciones sean completamente seguras?<br />
<br />
Menos mal que esta vez tenía una respuesta:<br />
-No podéis. Decir "completamente seguras" es como decir "perfecto". Y no existe nada perfecto.<br />
<br />
- Vaya. Pero, al menos, podrías hacernos un listado de pruebas a realizar a los programas y cosas así.<br />
<br />
Otra vez lo mismo. ¡empezar la casa por el tejado! Al final quedé en mandarles un documento con recomendaciones. No era la primera vez que me encontraba con esta situación ni que trataba el tema, de modo que tengo claro qué proponer. Y también que no es lo que esperan de mí, porque porque los consejos que suelo dar no tienen demasiado que ver con el hacking y sí con el sentido común y la gestión.<br />
<br />
Eso sí, que nadie espere que vaya a ser fácil.<br />
<br />
Para empezar, unas preguntas: ¿perteneces a una organización que te da recursos ilimitados para hacer tu trabajo? ¿todo el personal que le pidas? ¿todo el equipamiento que solicites? ¿todo el dinero que digas necesitar? ¿sin restricciones de tiempo ni de ningún otro tipo?<br />
<br />
Si respondiste "no" a alguna de estas cuestiones (y, no sé por qué, creo que será el caso) entonces no puedes dedicar esfuerzos a gestionar y mantener todas las aplicaciones pasadas, presentes y futuras.<br />
<br />
Haz, por tanto una lista blanca de aplicaciones, con indicación de las versiones, que tu organización puede utilizar y consigue que la alta dirección firme un documento en el que se prohíba el uso de todo programa o versión que no figure en la lista.<br />
<br />
Por supuesto, habrá programas que todo el mundo podrá utilizar y otros restringidos a aquellas personas que desarrollan determinadas tareas.<br />
<br />
Y, también por supuesto, tendrás que arbitrar procedimientos para actualizar la lista. Dar de baja aquellos programas que ya no se usan, han quedado obsoletos o han dejado de recibir soporte por su desarrollador, incluir nuevas aplicaciones que cubren necesidades no satisfechas con el software disponible y reemplazar elementos por otros que presten mejor servicio u ofrezcan un mayor grado de seguridad.<br />
<br />
Mi siguiente consejo es que las modificaciones de la lista requieran también la firma de la alta dirección. Puedes tratar de embaucar a la misma persona que puso su rúbrica al documento que daba oficialidad a la creación de la lista blanca de software. Y que, en ningún caso, se añada una aplicación si existe otra u otras en la lista que cubra satisfactoriamente sus funcionalidades.<br />
<br />
Ahora viene lo bueno: hacer que la lista no sea papel mojado. Utiliza herramientas que te digan qué software hay instalado en cada equipo de tu organización y comprueben que no hay nada que no figure en la lista.<br />
<br />
Deja claro desde el principio, si es posible por escrito, que si encuentras algo raro lo reportarás al jefe de la unidad en que aparezca y a la alta dirección. Yo incluso lo incluiría en el documento que crea la lista blanca de aplicaciones, de modo que la firma de la alta dirección suponga una orden para tí.<br />
<br />
Y cumple tu palabra. Amigos, lo que es amigos, no te va a ayudar a hacer, pero es lo que tiene esto de la seguridad.<br />
<br />
Para acabar por hoy, una última recomendación. Piensa en qué harías tú si fueras ellos. En qué haces cuando el antivirus no te deja utilizar tranquilo uno de esos programas que hacen cosas "graciosas". ¿Creas, quizá, una máquina virtual?<br />
<br />
Pues, llegado el caso, a alguien más se le ocurrirá. De modo que controla expresamente a quién se le permite utilizar software de virtualización y haz un listado de máquinas virtuales autorizadas. Si alguien se crea una "de estranjis", trátalo igual que si hubiera instalado un software no permitido. Y, por supuesto, controla lo que corre en los equipos virtualizados como si de máquinas físicas se tratara.<br />
<br />
¿Te parece mucho lío? ¿Muchos quebraderos de cabeza? ¿Muchos posibles conflictos?<br />
<br />
Pues la cosa no ha hecho más que comenzar.Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0tag:blogger.com,1999:blog-95722507885994729.post-7192489920525586752016-07-27T06:58:00.000-07:002016-07-27T07:00:59.324-07:00Go, go, goLo de Pokemon Go está dando que hablar. Hoy leo que<a href="http://elpais.com/elpais/2016/07/25/videos/1469447852_096663.html" target="_blank"> un individuo se puso a trepar por la fachada del hotel Arts de Barcelona, el edificio más alto de la ciudad</a>, en medio de una peculiar partida.<br />
<br />
Que se indique que el protagonista de la historia es un experto en <a href="https://es.wikipedia.org/wiki/Parkour" target="_blank">parkour</a> y que grabó la gesta en video me hace pensar en una búsqueda de publicidad y notoriedad. Pero no es la primera persona que se mete en líos: ha habido incluso casos en los que los jugadores se han introducido en una propiedad privada buscando monstruos que capturar y los propietarios han disparado sobre ellos. Y también se han dado caso de ladrones que, sabiendo que la gente iba a buscar a un pokemon en un determinado lugar, se han colocado por las inmediaciones a la espera de un incauto al que asaltar.<br />
<br />
En el futuro, es probable que Niantic, la desarrolladora del juego, busque formas de hacer caja. Una que se me ocurre es la "aparición esponsorizada": que restaurantes, cines, parques de ocio y otros establecimientos paguen para que en sus instalaciones aparezcan una serie de monstruos u objetos virtuales. Esto no debería ser demasiado preocupante... a no ser que caiga en malas manos.<br />
<br />
Se me ocurren varias formas en que algo así podría ser explotado con fines perversos. Desde "simpáticos" ataques de denegación de servicio, llenando una oficina de jovenzuelos, y no tan jovenzuelos, que anden por allí mirando el móvil o colpasando de forma parecida el tráfico hasta deleznables intentos de engañar a menores para que se acerquen a un lugar, pasando por reventar manifestaciones haciéndolas coincidir con una multitudinaria partida de entrenadores. El futuro dirá...<br />
<br />
Pero el pasado ya habló y me preocupó lo que oí. En particular la noticia de que la aplicación <a href="https://support.pokemongo.nianticlabs.com/hc/es/articles/222648408-Actualizaci%C3%B3n-de-permisos" target="_blank">requería inicialmente, en su versión para iOS, permisos completos de acceso a la cuenta de Google</a>.<br />
<br />
Ciertamente, no tardó mucho en aparecer una nueva versión con muchos menos requisistos, pero... ¿para qué tanto acceso? Porque una cuenta Google es búsquedas, calendario, correo y mucho más. A bote pronto, encuentro tres explicaciones:<br />
<br />
1.- Que se hiciera todo el desarrollo de forma correcta, pero que, en el último momento y por error,
se hubiera configurado unos permisos inadecuados. Que en la nota del enlace anterior se indique que "en cuanto supimos de este error, empezamos a trabajar para encontrar una solución" y que ésta no estuviera disponible cuando se publicó el aviso me hace pensar que hay algo más. Que el problema radicaba en otro sitio y no tenía una solución tan obvia.<br />
<br />
2.- Esta es más conspiranoica y vaya por delante que la considero errónea: Que la empresa quisisera acceder a toda esa información para crear perfiles para rastreo, publicidad personalizada y tantas otras cosas que hoy día tanto se estilan. Eso, desde luego, sería preocupante. Pero parece que no es el caso.<br />
<br />
3.- Que, para acelerar el desarrollo, alguien dijera "vamos a quitarnos una preocupación de encima" y <br />
los permisos o bien no hubieran sido establecidos desde el princio o bien hubieran sido ampliados de forma descontrolada para solucionar algún problema de funcionamiento. Espero que no sea eso porque lo de "permiso total y así seguro que funciona todo" es un mal principio de diseño. Un síntoma de sistema en cuyo ciclo de vida la seguridad se dejó para más adelante y en el que, por tanto, ésta tendrá poca cabida y no terminará de encajar.<br />
<br />
Si a alguien se le ocurre otra...<br />
<br />
<br />Enrique Randohttp://www.blogger.com/profile/08559407912244644767noreply@blogger.com0