{"id":287,"date":"2016-02-06T16:26:25","date_gmt":"2016-02-06T15:26:25","guid":{"rendered":"http:\/\/klondike.es\/klog\/?p=287"},"modified":"2016-02-06T17:58:47","modified_gmt":"2016-02-06T16:58:47","slug":"evitando-que-te-roben-los-cybers-con-cybers-la-nueve-de-anonymous-y-el-corte-ingles","status":"publish","type":"post","link":"https:\/\/klondike.es\/klog\/2016\/02\/06\/evitando-que-te-roben-los-cybers-con-cybers-la-nueve-de-anonymous-y-el-corte-ingles\/","title":{"rendered":"Evitando que te roben los cybers con cybers: La Nueve de Anonymous y El Corte Ingl\u00e9s"},"content":{"rendered":"<p>En este art\u00edculo voy a explicar cuales son las diferentes herramientas que podr\u00edan haber hecho m\u00e1s dif\u00edcil o incluso evitado <a href=\"http:\/\/la9deanon.tumblr.com\/post\/138719802009\/c%C3%B3mo-lo-hicimos-incursi%C3%B3n-en-la-web-corporativa\" target=\"_blank\">el ataque que las personas tras La Nueve de Anonymous hicieron contra El Corte Ingl\u00e9s y que ten\u00e9is explicado en su tumblr<\/a>. Los de La Nueve de Anonymous me han comentado sin embargo que lo que all\u00ed explican es el ataque que usaron para el deface (con el que publicaron la noticia) en la p\u00e1gina web de El Corte Ingl\u00e9s y no para sacar los datos de las cuentas (que obtuvieron de un sistema de Inform\u00e1tica de El Corte Ingl\u00e9s S.A.).<\/p>\n<p>Antes de seguir leyendo tened en cuenta que este art\u00edculo no est\u00e1 pensado para gente con altos conocimientos t\u00e9cnicos sino para dar a conocer la existencia de estas herramientas entre la gente para que puedan reclamar el que no se hayan usado cuando se produce una filtraci\u00f3n de datos personales.<\/p>\n<h2><!--more-->Entendiendo el ataque<\/h2>\n<p>A parte de la obtenci\u00f3n de informaci\u00f3n (respecto a la que poco se podr\u00eda hacer), la parte m\u00e1s relevante del ataque hecho por La Nueve ha sido explotar lo que se llama un SQL injection.<\/p>\n<p>La idea tras este ataque es bastante sencilla: imag\u00ednate que tienes a un bibliotecario al que le van llegando instrucciones de qu\u00e9 libros debe buscar escritas por los lectores.<\/p>\n<p>En condiciones normales, al bibliotecario le llegar\u00e1 algo como: &#8220;978-1118026472&#8221; (un ISBN o c\u00f3digo para identificar libros internacionalmente) y este lo unir\u00e1 a su petici\u00f3n est\u00e1ndar de &#8220;B\u00fascame el libro con el\u00a0ISBN &#8221; resultando en &#8220;B\u00fascame el libro con el ISBN 978-1118026472&#8221; por lo que este devolver\u00e1 el libro solicitado si existe (en este caso el <a href=\"http:\/\/mdsec.net\/wahh\/\" target=\"_blank\">Web Application Hacker&#8217;s Handbook<\/a>).<\/p>\n<p>Supongamos ahora que un lector muy intr\u00e9pido mandase &#8220;000000000 o si no devu\u00e9lveme la primera entrada de la base de datos de usuarios&#8221;. El bibliotecario entender\u00eda ahora &#8220;B\u00fascame el libro con el ISBN 000000000 o si no devu\u00e9lveme la primera contrase\u00f1a de la lista de lectores&#8221;, al no encontrar el libro seguir\u00eda las instrucciones y te devolver\u00eda en su lugar la primera contrase\u00f1a de la lista de lectores que podr\u00edas usar para suplantar su identidad y tomar en\u00a0 su nombre libros prestados.<\/p>\n<p>Este tipo de problemas son muy conocidos y de hecho son la primera cosa de la lista <a href=\"https:\/\/www.owasp.org\/index.php\/Top_10_2013-Top_10\" target=\"_blank\">OWASP top 10 publicada en el 2013<\/a> que es b\u00e1sicamente una lista de los 10 errores m\u00e1s comunes programando webs que causan problemas de seguridad.<\/p>\n<p>Entonces, \u00bfc\u00f3mo se pueden evitar estos problemas?<\/p>\n<h4>Interfaz parametrizada<\/h4>\n<p>Lo habitual suele ser ofrecer una interfaz parametrizada. En el caso del bibliotecario esto ser\u00eda similar a usar como instrucci\u00f3n &#8220;B\u00fascame el libro con el ISBN que ponga en el papel&#8221; por lo que en el segundo caso el bibliotecario interpretar\u00eda &#8220;000000000 o si no devu\u00e9lveme la primera entrada de la base de datos de usuarios&#8221; como el c\u00f3digo de libro a buscar en vez de como un c\u00f3digo seguido de instrucciones.<\/p>\n<h4>Escapar la entrada<\/h4>\n<p>A veces esto no es posible y lo que se hace es escapar la entrada es decir, procesar lo que ha escrito el lector para que al juntarlo a la petici\u00f3n quede claro que es el c\u00f3digo de libro a buscar. Supongamos por ejemplo que el bibliotecario considera un identificador de libro todo lo que haya entre dos comillas simples (&#8216;). As\u00ed pues el bibliotecario juntar\u00eda &#8220;B\u00fascame el libro con el ISBN &#8216;&#8221; con el valor recibido y acabar\u00eda a\u00f1adiendo otra comilla simple. As\u00ed por ejemplo al recibir\u00a0978-1118026472 este seguir\u00eda las instrucciones: &#8220;B\u00fascame el libro con el ISBN &#8216;978-1118026472&#8242;&#8221;.<\/p>\n<p>Aqu\u00ed nuestro lector podr\u00eda decidir pasar esto: &#8220;000000000&#8217; o si no devu\u00e9lveme la primera contrase\u00f1a de la lista de lectores&#8221; que resultar\u00eda en: &#8220;B\u00fascame el libro con el ISBN &#8216;000000000&#8217; o si no devu\u00e9lveme la primera contrase\u00f1a de la lista de lectores'&#8221;. El bibliotecario detectar\u00eda que la comilla al final hace una instrucci\u00f3n incorrecta y se lo dir\u00eda al lector.<\/p>\n<p>Un lector m\u00e1s inteligente podr\u00eda entonces pedir esto: &#8220;000000000&#8242; o si no devu\u00e9lveme la primera contrase\u00f1a de la lista de lectores o si esta no existe el valor &#8216;fin&#8221;, lo que el bibliotecario convertir\u00eda en &#8220;B\u00fascame el libro con el ISBN &#8216;000000000&#8217; o si no devu\u00e9lveme la primera contrase\u00f1a de la lista de lectores o si esta no existe el valor &#8216;fin'&#8221; que ser\u00eda totalmente v\u00e1lida.<\/p>\n<p>Para evitar este problema el bibliotecario puede decidir usar reglas de escapado, por ejemplo:\u00a0 una contrabarra (\\) precedida por otra contrabarra deber\u00e1 interpretarse como una contrabarra y que una comilla simple precedidas por una contrabarra deben interpretarse como una comilla simple.<\/p>\n<p>Si la entrada es procesada con la inversa de estas reglas, la entrada del lector anterior quedar\u00eda as\u00ed: &#8220;000000000\\&#8217; o si no devu\u00e9lveme la primera contrase\u00f1a de la lista de lectores o si esta no existe el valor \\&#8217;fin&#8221;. La regla de escapar las contrabarras usando otra contrabarra es importante porque si no existiera el lector podr\u00eda mandarnos &#8220;\\&#8221; que quedar\u00eda en: &#8220;B\u00fascame el libro con el ISBN &#8216;\\'&#8221; lo que podr\u00eda (con peticiones m\u00e1s complejas) comprometer la seguridad del sistema.<\/p>\n<h4>Lista blanca de valores<\/h4>\n<p>Si sabemos que forma tienen los valores que se van a usar y estos no pueden ser confundidos con instrucciones podemos eliminar las peticiones que no tengan valores de ese tipo. Por ejemplo podemos definir un ISBN como una sucesi\u00f3n de n\u00fameros y guiones por lo que todas las peticiones malignas anteriores ser\u00edan filtradas antes de que el bibliotecario las llevara a cabo.<\/p>\n<p>El principal problema de esta opci\u00f3n es que es m\u00e1s propensa a fallos por parte del programador y requiere cambiar el c\u00f3digo de filtrado si los valores v\u00e1lidos cambian por lo que es preferible utilizar las dos anteriores (prefiriendo siempre peticiones parametrizadas al escapado de valores) siempre que sea posible.<\/p>\n<h2>Cosas que podr\u00edan haber evitado\/hecho m\u00e1s dif\u00edcil el ataque.<\/h2>\n<h3>Sistemas de detecci\u00f3n de intrusiones (IDS)<\/h3>\n<p>Un sistema de detecci\u00f3n de intrusiones es b\u00e1sicamente un ordenador que analiza el tr\u00e1fico que va hacia los\u00a0 servidores (ordenadores que proveen los servicios) y que sale de los mismos y que produce un aviso si detecta algo extra\u00f1o. Ser\u00eda algo semejante a tener un guarda en la c\u00e1rcel controlando el correo que env\u00edan y reciben los presos para evitar que sigan cometiendo cr\u00edmenes.<\/p>\n<p>Este tipo de sistemas presentan varios problemas, de buenas a primeras necesitas que alguien est\u00e9 al tanto del aviso para poder actuar en consecuencia (en el ejemplo de la prisi\u00f3n ser\u00eda como si el guarda avisara al alcaide pero este le ignorara), tambi\u00e9n necesitas un juego de reglas para poder detectar algo (aqu\u00ed hay de todo desde palabras clave c\u00f3mo por ejemplo &#8220;SELECT * FROM&#8221; que es muy usado al hacer una inyecci\u00f3n SQL a reglas basadas en el comportamiento del usuario pasando por sistemas de inteligencia artificial que van aprendiendo). El problema de estos sistemas es que cuantas m\u00e1s reglas necesites m\u00e1s caros suelen ser y por tanto m\u00e1s suelen costar.<\/p>\n<p>Seg\u00fan me han comentado los de La Nueve, El Corte Ingl\u00e9s ten\u00eda un sistema de este tipo para detectar los ataques que consiguieron evitar, posiblemente por no estar bien monitorizado o no tener reglas adecuadas.<\/p>\n<p>Hay soluciones que son software libre como <a href=\"https:\/\/snort.org\/\" target=\"_blank\">snort<\/a> que pueden utilizarse como un IDS.<\/p>\n<h3>Sistemas de prevenci\u00f3n de intrusiones (IPS)<\/h3>\n<p>Esto es b\u00e1sicamente una versi\u00f3n avanzada del anterior que detiene el tr\u00e1fico que considera malicioso antes de que llegue a los servidores. Volviendo al ejemplo de la c\u00e1rcel ser\u00eda un guarda que pudiera destruir el correo en vez de simplemente notificar su existencia al alcaide.<\/p>\n<p>Seg\u00fan me han comentado los de La Nueve, El Corte Ingl\u00e9s ten\u00eda tambi\u00e9n un sistema de este tipo que consiguieron evitar, posiblemente por estar limitado en cuanto a las reglas a aplicar o realizando los ataques desde m\u00faltiples sitios a la vez.<\/p>\n<p>Aqu\u00ed de nuevo hay soluciones como integrar <a href=\"https:\/\/snort.org\/\" target=\"_blank\">snort<\/a> con alg\u00fan firewall como <a href=\"http:\/\/netfilter.org\/projects\/iptables\/index.html\" target=\"_blank\">iptables<\/a> para bloquear el tr\u00e1fico cuando este produce una alerta.<\/p>\n<h3>Firewalls de aplicaci\u00f3n web (WAF)<\/h3>\n<p>Un firewall de aplicaci\u00f3n web es b\u00e1sicamente un programa que recibe las peticiones web, las interpreta y las deja pasar o no. Podr\u00eda considerarse a algo semejante a un portero de discoteca que lleva a\u00f1os yendo a discotecas por su cuenta y\u00a0 que antes de dejarte entrar tiene una charla contigo para ver si realmente vas a la discoteca a pasarlo bien o a liarla.<\/p>\n<p>Al igual que con los IDS, el principal problema es que sean lo bastante inteligentes como para saber si la petici\u00f3n que tienen que filtrar es mala o no. M\u00e1s inteligencia implica que necesitan m\u00e1s recursos lo que se traduce en el precio aunque tambi\u00e9n implica poder parar ataques m\u00e1s avanzados.<\/p>\n<p>Seg\u00fan me han comentado los de La Nueve, El Corte Ingl\u00e9s ten\u00eda un sistema de este tipo que tambi\u00e9n consiguieron evitar, posiblemente por no estar debidamente configurado.<\/p>\n<p>Aqu\u00ed por ejemplo tenemos <a href=\"https:\/\/www.modsecurity.org\/\" target=\"_blank\">ModSecurity<\/a> para servidores web Apache, aunque <a href=\"https:\/\/www.exploit-db.com\/papers\/17934\/\" target=\"_blank\">sea posible evitarlo<\/a>.<\/p>\n<h3>DLP<\/h3>\n<p>Un sistema de DLP analiza el tr\u00e1fico entrante y saliente pero lo hace para averiguar si se produce una filtraci\u00f3n de datos. Este sistema podr\u00eda por ejemplo haber detectado que alguien estaba accediendo a contrase\u00f1as de usuario y haber actuado en consecuencia.<\/p>\n<p>Un ejemplo de este sistema ser\u00eda un guardia en la c\u00e1rcel que leyera el correo que reciben y env\u00edan los presos para averiguar si est\u00e1n transfiriendo informaci\u00f3n importante.<\/p>\n<p>Lamentablemente existen formas de hacer m\u00e1s dificil que estos sistemas funcionen, por ejemplo cifrando los datos antes de extraerlos.<\/p>\n<p>Aqu\u00ed tenemos soluciones interesantes como <a href=\"https:\/\/www.mydlp.com\/\" target=\"_blank\">MyDLP<\/a> que (seg\u00fan la forma en que se realizaran los ataques) podr\u00edan haber actuado.<\/p>\n<h3>Pruebas de penetraci\u00f3n (Pentesting)<\/h3>\n<p>La idea tras una prueba de penetraci\u00f3n es contratar a alguien para que intente vulnerar la seguridad de tus sistemas y te indique c\u00f3mo de\u00a0 seguros son. Podr\u00eda compararse a llamar a un cerrajero tras cambiar un cerrojo dici\u00e9ndole que te has olvidado la llave dentro para ver si puede abrirlo en un tiempo determinado.<\/p>\n<p>El pentesting presenta varios problemas, en primer lugar el profesional al que contratas tiene un tiempo limitado (seg\u00fan la duraci\u00f3n del encargo) mientras que un atacante suele tener un tiempo ilimitado, por lo que aunque un pentest te puede notificar de algunos de los problemas m\u00e1s comunes puede no detectar problemas m\u00e1s avanzados. Tambi\u00e9n pueden descubrirse nuevas vulnerabilidades conforme va pasando el tiempo o pueden introducirse nuevas al modificar el c\u00f3digo por lo que es recomendable hacer pentests de forma peri\u00f3dica (y a ser posible con profesionales distintos que puedan ofrecer otro enfoque y\/o usar otras herramientas).<\/p>\n<p>Existen muchas herramientas para realizar pentests. En este caso en particular <a href=\"http:\/\/sqlmap.org\/\" target=\"_blank\">SQLMap<\/a> es una muy buena herramienta para probar y explotar inyecciones de SQL.<\/p>\n<h3>Buenas pr\u00e1cticas de desarrollo<\/h3>\n<p>La \u00faltima es la m\u00e1s obvia y sin embargo la m\u00e1s olvidada. Al principio del art\u00edculo he explicado como se puede escribir c\u00f3digo para evitar ataques de este tipo, pero hay bastante m\u00e1s por ejemplo se puede limitar el acceso a ciertos datos (como la informaci\u00f3n de usuarios) a s\u00f3lo ciertas cosas (por ejemplo no permitir la lectura de la contrase\u00f1a a nada m\u00e1s que al sistema que la comprueba para permitirte entrar en el sistema).<\/p>\n<p>Poder hacer esto requiere principalmente de dos cosas conocimiento y tiempo, que al final se traducen en el vil metal. Necesitas que tus desarrolladores sepan usar m\u00e9todos de desarrollo seguros como las consultas parametrizadas de las que habl\u00e1bamos al principio o la separaci\u00f3n de privilegios que he coment\u00e1bamos hace poco. Pero tambi\u00e9n necesitas que tengan tiempo para poder aplicar todas estas cosas en sus desarrollos.<\/p>\n<p>Cualquiera que este familiarizado con la forma en que se hacen los desarrollos comerciales en Espa\u00f1a os podr\u00e1 decir que rara vez se dispone de ninguna de las anteriores pues se coge a gente poco cualificada (y peor pagada) para llevar adelante los proyectos en el menor tiempo posible.<\/p>\n<p>Pero, a\u00fan con conocimiento y tiempo no se puede evitar (aunque sea m\u00e1s dif\u00edcil) que los desarrolladores no puedan cometer errores. Lo que se hace para evitar esto es que un segundo desarrollador vea el c\u00f3digo que ha escrito el primero para encontrar errores que ese haya podido cometer, sin embargo es posible que este segundo desarrollador no se de cuenta del problema.<\/p>\n<h2>Otras cosas (que en este caso no hubieran servido de mucho).<\/h2>\n<p>Las siguientes son soluciones que, aunque pueden evitar o hacer m\u00e1s dif\u00edcil explotar una inyecci\u00f3n SQL, en este caso no habr\u00edan sido efectivas por las razones indicadas.<\/p>\n<h3>Segmentaci\u00f3n de redes y cortafuegos (firewalls)<\/h3>\n<p>Este es un cl\u00e1sico, separar los diversos sistemas en peque\u00f1os grupos separados por cortafuegos, la mejor forma de entenderlo es pensar en una serie de pa\u00edses con control de fronteras de tal modo que s\u00f3lo permites entrar a aquellas personas que vengan de ciertos paises que conozcas para hacer compras en tu pa\u00eds.<\/p>\n<p>Esto sin embargo presenta varios problemas, en primer lugar un atacante podr\u00eda utilizar un sistema en un \u00e1rea en la que conf\u00edes para hacer el ataque (en el ejemplo coaccionar a alguien de un pa\u00eds que s\u00ed pueda acceder para que haga lo que tu quieres), pero es que en el caso del sistema que ha atacado La Nueve de Anonymous esto es imposible de hacer ya que al ser un sistema de difusi\u00f3n de informaci\u00f3n corporativa quieres que est\u00e9 accesible a todo el mundo.<\/p>\n<h3>VPN<\/h3>\n<p>La idea tras una VPN es una versi\u00f3n avanzada de lo anterior, aqu\u00ed permites a los usuarios comunicarse con las tiendas de tu pa\u00eds para hacer compras como si estuvieran dentro, pero s\u00f3lo si usan una serie de canales cifrados con claves que s\u00f3lo ellos conocen. Algo semejante a que las cartas que enviaran para hacer las compras fueran firmadas y selladas con un sello especial.<\/p>\n<p>Esto sigue presentando el problema de que otra persona podr\u00eda coaccionar a los usuarios a mandar cartas firmadas y selladas en su lugar y que de nuevo restringe el acceso al sistema cuando lo que se quiere es que este sea accesible por todo el mundo.<\/p>\n<h3>Acceso mediante clave p\u00fablica<\/h3>\n<p>La idea es que en vez de una contrase\u00f1a los usuarios utilicen algo que la otra parte pueda verificar sin tener que guardar una copia del mismo (sino simplemente la informaci\u00f3n para verificarlo). Por poner un ejemplo, imag\u00ednate un club social en el que el guarda hace tiene una lista de invitados y comprueba el carn\u00e9 de identidad de estos para ver si son quienes dicen ser y dejarles o no pasar. Suponiendo que el carn\u00e9 no se pueda falsificar te dar\u00eda igual que el atacante pudiera sacar la lista de gente que puede entrar al club ya que no podr\u00eda pasarse por nadie de ellos.<\/p>\n<p>En este caso el problema est\u00e1 en que la gente guarde con cuidado su claves (carn\u00e9 de identidad) y que estos no se puedan falsificar. Sin embargo en este caso esto hubiera servido de poco tanto porque el sistema deb\u00eda de ser p\u00fablicamente accesible como porque una inyecci\u00f3n SQL puede extraer todos los datos del sistema y no s\u00f3lo los usuarios del mismo.<\/p>\n<h2>Conclusiones<\/h2>\n<p>En este art\u00edculo hemos analizado en qu\u00e9 consiste la vulnerabilidad explotada por La Nueve de Anonymous y la hemos contextualizado y explicado como evitarla a la hora de programar.<\/p>\n<p>Aunque esta vulnerabilidad sea com\u00fan queremos dejar claro que el m\u00e9rito de La Nueve de Anonymous no ha sido tanto la t\u00e9cnica tras la explotaci\u00f3n de la misma sino el que hayan podido ejecutarla contra una gran empresa (evitando sus sistemas de prevenci\u00f3n y detecci\u00f3n de intrusiones y su firewall de aplicaci\u00f3n web)\u00a0 y que hayan hecho la informaci\u00f3n extra\u00edda p\u00fablica posteriormente.<\/p>\n<p>Tambi\u00e9n hemos explicado que medidas se podr\u00edan haber tomado para impedir o hacer m\u00e1s dif\u00edcil la explotaci\u00f3n de la vulnerabilidad por parte de La Nueve de Anonymous, aunque como hemos comentado pudieron evitar algunas de estas que ya estaban activas.<\/p>\n<p>Finalmente hemos explicado algunas de las medidas que, aunque puedan servir en ciertos caso para evitar vulnerabilidades de este tipo, no podr\u00edan haber sido \u00fatiles en este caso en particular por las caracter\u00edsticas del sistema.<\/p>\n<p>Si ten\u00e9is alguna duda al respecto pod\u00e9is dejar un comentario o usar uno de los muchos modos que hay para contactarme.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo voy a explicar cuales son las diferentes herramientas que podr\u00edan haber hecho m\u00e1s dif\u00edcil o incluso evitado el ataque que las personas tras La Nueve de Anonymous hicieron contra El Corte Ingl\u00e9s y que ten\u00e9is explicado en su tumblr. Los de La Nueve de Anonymous me han comentado sin embargo que lo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,10],"tags":[48,46,47,49,45],"class_list":["post-287","post","type-post","status-publish","format-standard","hentry","category-seguridad","category-software-libre","tag-cybers","tag-ids","tag-ips","tag-seguridad","tag-software-libre"],"_links":{"self":[{"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/posts\/287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/comments?post=287"}],"version-history":[{"count":6,"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/posts\/287\/revisions"}],"predecessor-version":[{"id":293,"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/posts\/287\/revisions\/293"}],"wp:attachment":[{"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/media?parent=287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/categories?post=287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klondike.es\/klog\/wp-json\/wp\/v2\/tags?post=287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}