Linux en JavaScript


Zsh

Esto es muy divertido (y se une a algo que he estado pensando los últimos meses – pero aún no voy a mencionar, pero para que sepan que hay un pastelote en el horno..): un desarrollador encontró que hoy en día javascript (el no tan “poderoso” lenguaje que corre sobre el browser) es capaz de compilar y ejecutar Linux (un sistema operativo!).

http://www.readwriteweb.com/hack/2011/05/run-linux-on-javascript.php

La idea que javascript es un lenguaje limitado tiene que quedar atrás – y esto lleva implicaciones gigantescas en el área de seguridad informática – ya que claramente es capaz de muchas cosas, y aunque el ejemplo sea simplemente ejecutar un kernel de control sin GUI (no se puede ver, sino sólo tiene intérprete de comandos) debe ser suficiente para que los más “téchies” que critican el lenguaje se den cuenta de su “potencial”.

Cada vez más y más el navegador tiene más poder y control sobre nuestro uso de Internet y por lo mismo el lenguaje que se ejecuta en la computadora personal para “ayudar” o “mejorar” tal experiencia cada vez tiene más acceso al sistema en sí. El problema viene cuando una página web (la que sea) tiene control TOTAL sobre el javascript que se va a ejecutar:

Basicamente el que programa la web tiene control total sobre el javascript del usuario (y lo mismo va para todas aquellas vulnerabilidades que rimen con XSS).

Es decir, que cada vez es más y más peligroso simplemente hacer click (bueno, si consideran el ataque estilo “clickjacking” – como el que se ha visto en facebook últimamente – entonces ya ni siquiera eso..) y cada vez será peor.

¿Qué se puede hacer al respecto? No mucho realmente porque si sólo se considera la seguridad entonces hay que obviar la experiencia que puede brindar javascript (para los que no lo saben pueden usar NoScript de Firefox para eliminar javascript) pero eso está super chafa porque gracias a javascript tenemos grandes oportunidades como WebGL (páginas que pronto van a usar modelos y ambientes 3D sin límite), entonces? Pues yo la veo difícil, tal vez se implemente un header de javascript seguro o un “signed javascript” pero eso sigue dando permiso al desarrollador legítimo de usar nuestro browser como shell remoto de javascript… en fin, ya les iré avisando que pasa.

Saludos,
Gorka


La punta del iceberg


Iceberg

Retomando las ideas que usé en http://trotamexico.com/turismo/innovacion-y-creatividad-en-las-redes-sociales-y-turismo.php de una manera más general:

Hemos llegado al punto en el que hay que tomar un segundo para reflexionar y darnos cuenta que ningún proceso de negocio había tenido el poder de comunicación que ofrece Internet (a través de todas sus herramientas y versiones – Web y Mobile) y que gracias a ese nuevo poder se pueden reinventar hasta los procesos más estrictos (hasta los que ya se habían documentado en piedra).

Se ha caído en el vicio de usar Internet sólo como una herramienta de difusión y publicidad sin realmente visualizar el verdadero alcance que puede tener. Parece irónico que muchos se autonombren “innovadores” o “creativos” cuando lo único que proponen es imitar el modelo de la revolución industrial de “masificación impersonal”. Internet puede sin duda lograr masificar el alcance de nuestra comunicación y con métodos virales llegar a todas aquellas personas interesadas en cualquier producto/servicio, pero ¿qué pasa con las personas que ya saben lo que quieren, qué no buscan un medio masivo de oportunidades de consumo sino simplemente buscan satisfacer una necesidad específica?

Gracias a Internet hemos cambiado el paradigma de quién tiene el poder. En un principio los productores (o los que ofrecían servicios) controlaban las agendas de consumo ya que eran tan limitadas las opciones que no había mucho espacio para la decisión personal. En un primer cambio interesante de paradigma los distribuidores (con esquemas potencialmente viciosos) nos hicieron creer que el “main stream” o “moda” debía ser el fin aspiracional de cualquier persona en posición de consumo. No fue hasta que se empezó a entender que lo que uno quiere es lo que se puede tener (obviamente de la mano de una globalización de servicios y productos que abarató y facilitó el alcance a toda la oferta) que el individuo recuperó el poder de decisión de consumo.

Todo empezó con una página muy sencilla donde se podía buscar algo. Los resultados eran terribles, pero las búsquedas tenían un aspecto personal que podía reconocer hasta el menos interesado: ¡cada persona buscaba de manera diferente con todo y que buscaban lo mismo! Lo natural era que los resultados mejoraran al punto en que (y es donde estamos hoy) los buscadores web saben distinguir lo que buscamos entre todas las posibilidades lógicas gracias a que llevan un registro de qué y cómo buscamos – y es tan fácil de entender con sólo buscar lo mismo (mismos términos) en dos computadoras de dos personas diferentes, los resultados van a ser muy diferentes.

De ahí que primero se creyó que había una sola opción y era “aparecer en los primeros resultados siempre”. Ese paradigma hace creer que la persona sigue siendo un abstracto al cual hay que atacar de la misma manera que los distribuidores originales que querían acaparar al consumidor limitando sus opciones de consumo, y sin embargo, poco a poco hemos logrado entender que lo importante no es “crear un círculo de consumidores” sino “encontrar al nicho que ya quiere consumir lo que se ofrece”.

Con todo este análisis lo que queda es explicar que las herramientas de comunicación en Internet (sean web o Mobile) recrean el poder de los productores (y prestadores de servicio) ya que pueden personalizar la experiencia de sus clientes de una manera que antes no se podía imaginar. Hoy en día se puede conocer el nombre y gustos de cada uno de los clientes y sobre esos gustos se puede personalizar el producto o servicio de tal manera que el cliente se sienta tan identificado con la marca que la “disfrute como propia”.

Usando un restaurante como ejemplo: antes el proceso era rígido, se hacía una comida y las personas tenían que aceptar lo que se había cocinado (al precio que se tenía); luego eso cambió (tuvo que cambiar al aumentar la oferta) y el proceso se volvió un poco más flexible, se tenía un menú con una base de opciones y un espacio para opciones “exclusivas” que cambiaban periódicamente (muchas veces simplemente para dar la “ilusión” de exclusividad); hoy en día, gracias a que se puede llevar un registro de consumo personal, el proceso se tuvo que volver completamente flexible y (aunque suene irreal), ¡ya hay lugares que aceptan que la persona modifique las opciones del menú a capricho y hasta solicite elementos no existentes en el menú mismo! Con una distribución en redes sociales de esta información y un programa de incentivos una empresa tuvo una idea genial: cada cliente que ordenara algo que antes no se había solicitado generaría a partir de ese momento un registro que le permitiría tener acceso a beneficios exclusivos (completamente personales e individuales). Esa empresa logró conocer tanto a sus clientes que el cliente mismo ha olvidado su estatus de cliente (muchas veces representado sólo por un número, una llave, una cama o un mal trato constante) y desde ese momento el mismo cliente se convierte en un “portavoz oficial” de la marca en sí – caso Starbucks.

¿Cómo lograron esto? Se dieron cuenta que una estrategia de aumento del alcance de los servicios de la empresa (y de recrear un proceso flexible de producción) enfocada en los gustos personales de sus clientes podía funcionar mucho mejor que simplemente limitar el potencial de Internet y redes sociales a la no tan sutil (y cada vez más agresiva) tarea de publicidad y difusión.

Lo malo es que no existe una sola “bala de plata” que puedan usar todas las empresas para llegar a tal éxito, pero eso mismo es lo que invita a que cada empresa tenga que llevar a cabo un análisis creativo de cómo recrear y “flexibilizar” sus propios procesos para ofrecerlos de manera más personalizada. ¡Y lo genial es que cada vez tenemos más herramientas a la mano para lograr esto y que además ya no es importante lograr captar clientes según sus características demográficas/sociales sino encontrar el nicho de personas que quieren consumir lo que la empresa ofrece!

Saludos,
Gorka


Ideas sobre el valor de Internet


De entrada para saborear este post es OBLIGATORIO leer: http://thepiratebay.org/blog/192

Luego, pasen por este: http://www.wired.com/threatlevel/2011/05/biggest-bittorrent-case/ (no hace falta lectura completa, sólo reconocer que están muy mal haciendo eso).

Así que de entrada, yo lo que quiero defender es a Internet como un medio anárquico basado en el libre intercambio de información (es a mi entender la máxima expresión de la sociabilidad humana – el masivismo del SER social).

Muchas veces ese anarquismo recae en vicios (seguro), pero también tiene sus virtudes y sus logros y su manera de unir personas con metas en común (metas que se cumplen que de otra manera nunca se hubieran realizado). Es gracias a este mismo medio que se puede separar a aquellas personas cuya personalidad/alma los lleva a buscar información hedonistica sin trasfondo de los que quieren aprender para lograr algo (mejorar o cambiar o por lo menos sólo aprender) y luego compartirlo de la misma manera (porque sí somos seres sociales aunque escuche críticas continuamente de que cada vez parecemos menos sociales porque nos encerramos en cuartos e interactuamos desde una cajita con teclado – este es otro paradigma a reinventar…).

Ya he criticado antes los modelos de negocio retrógrados (y es claro que demandar a personas por intercambio de información “con derechos de autor” es un vicio – una grosería – por falta de imaginación, si hubieran inventado una manera de obtener dinero por todas estas personas que descargan peliculas e intercambian información ya estaríamos hasta el tope de espectaculares y anuncios mediáticos promoviéndolo) y lo volveré a hacer siempre que me tope con historias como los links de arriba.

¿No les parece una idea del siglo pasado limitar lo que podemos intercambiar/sociabilizar sólo porque hay dinero de por medio?

Creo que es nuestro deber recrear los modelos con los cuales podemos llegar al futuro. Entre esos modelos es necesario recrear el modelo de “conexión a Internet”, no podemos seguir creyendo que sea un servicio ofrecido por algunos (y menos por algunos que son capaces de liberar información que debería ser anónima ante presión de grupos “adinerados”) y trataré de hacer lluvia de ideas con mis amigos/conocidos/extraños para ver qué se nos ocurre. Lo ideal sería lograr un libre acceso real y de calidad a Internet, todo para romper con esos esquemas antiguos de control absurdo que proponen que uno puede aprender español sólo para decir lo que los diccionarios “oficiales” permiten.

Y pasa y seguirá pasando, pero es nuestro deber romper esquemas y poner en la mesa las “nuevas reglas” y ojo, todo esto va a ser difícil pero eso no significa que no lo vayamos a hacer correctamente, al contrario, no considero estar del “lado” equivocado sino que son esos “sistemas de control” los que tienen que perderse hasta que sean olvidados.

Saludos,
Gorka


¿Qué hacer cuando un cliente tiene 'dificultades' para pagar?


Dificultades

Estoy seguro que todas aquellas personas que trabajan de manera “freelance” o “por proyecto” en algún momento han tenido esta situación:

El cliente promete un pago en una fecha y cuando llega la fecha “algo” pasó y el pago no se pudo efectuar.

En lo personal se me hace una grosería no llevar una planeación donde se tenga claro que hay que pagarle a la gente por un trabajo realizado pero no por eso uno puede olvidar que la seriedad y sutileza son mejores armas que el enojo.

Lo que puedo recomendar es primero acordar fechas de pago antes de iniciar un proyecto. Lo más seguro es que en contraparte el cliente pida fechas de entrega del proyecto (o por lo menos de documentos que demuestren el avance que se va logrando). Y con eso en cualquier momento se puede detener el proyecto hasta que se cubra la cuota omitida.

Si no se logró tal acuerdo/planeación y ya se llegó al fin del proyecto lo que va a pasar es que el cliente casi siempre va a pedir la entrega del mismo con la promesa de pago (podrá ser contraentrega misma o fechas posteriores) y me parece bien, al final del día el cliente quiere su “proyecto” pero ese es el segundo error (el primero fue no calendarizar fechas de pago). NUNCA se debe entregar un proyecto si no se ha cubierto el total del pago por el trabajo realizado.

Ahora, la verdad, es que aún con lo que escribí arriba (y con todo y que puse NUNCA) lo más seguro es que se entreguen proyectos y no se cubran los pagos.

¿Qué hacer entones?

Lo primero: mantener la cabeza fría. Cualquier decisión tomada con la cabeza caliente puede generar una mala reputación y hasta una excusa perfecta para no llevar a cabo el pago de lo acordado.

Lo segundo: dar espacio (una o dos semanas es más que suficiente) al cliente para realizar el pago por el faltante. Siempre es bueno recordar que somos personas y que si uno mismo no pudo planear un calendario de pagos lo mismo le puede pasar al cliente.

Lo tercero: si ya pasó ese tiempo límite y aún no se recibe pago hay que avisar al cliente que no se puede tolerar tal situación y exigir pago inmediato. Aqui es donde uno toma acciones de “aviso” (digamos que un proyecto se ha entregado pero aún se tienen elementos para limitar la funcionalidad de lo entregado) para que el cliente se de cuenta de la seriedad de la situación – y por favor – no puedo ser suficientemente exagerado con esto: SUTILEZA y TRANQUILIDAD.

Lo cuarto: tomar acciones legales. Si no se ha llegado a un acuerdo lo mejor que se puede hacer es contactar a las instituciones que puedan forzar al cliente a realizar el pago. Preferiría nunca llegar a este paso pero hay veces que no queda de otra. Aqui también sería cuando uno toma acciones “definitivas” (si es que todavía se tiene control sobre el proyecto entregado aqui se debe quitar el control completo al cliente).

La verdad es que nadie quisiera llegar al paso 4 pero hay que ser responsable en todos los aspectos de un proyecto y de la misma manera que se es responsable para entregar un proyecto a tiempo, hay que tomar medidas cuando el cliente no cubre su parte del acuerdo.

Saludos,
Gorka

P.D. – Sabiendo todo esto es bueno tomar una metodología de trabajo que permita a) calendarizar pagos y b) tomar precauciones en las entregas del proyecto para poder tomar acciones como en los pasos 3 y 4.


Otra vez más: el iPhone/iPod Touch como control remoto


iPhone Remote Control

La verdad es que desde que uso un iPod Touch busqué una app para poder controlar mi computadora a distancia y vía WiFi. Las razones son muchas y pueden variar pero entre lo que a mí me interesa les puedo enumarar las siguientes ocurrencias:

Esas son sólo unas de las razones por las cuales vale la pena conectar el iPhone/iPod Touch con la computadora y para hacerlo hay muchas (MUCHAS) apps. Yo recomiendo la serie de apps de JUMI, tienen el típico escritorio remoto/control remoto, uso de la cámara, control de videjuegos, control de multimedia y hasta la broma de la mosca.

En pocos y fáciles pasos pueden hacer todo esto:

Se necesita:

  1. Un iPhone/iPod Touch u iPad
  2. Una pc/mac
  3. Acceso a Internet o una Red Propia

Pasos:

Listo y fácil no? Disfruten.

Saludos,
Gorka


¿Cómo entrarle al desarrollo de apps para iPhone?


Apps

La cosa es así: ¿qué se necesita para hacer apps para iOS? y que sea sencillo de entender.

Primera versión (la orginal, la tradicional, la apretada de apple porque de “a fuerzas” necesitas una Mac):

Para “desarrollar” o “programar” para iOS se necesita descargar una serie de “librerías” con las cuales la secuencia del programa queda lista para poder “funcionar” en todos los dispositivos o gadgets que usan iOS – ipod touch, iphone, ipad.

Esas librerías se descargan gratuitamente del sitio de desarrolladores de apple (developer.apple.com) con un sencillo y gratuito registro.

Hay que instalar esas librerías en tu Mac (sólo se pueden instalar en una Mac) y con eso ya tienes listo los programas para hacer apps (bueno, casi porque ahora necesitas programar en Objective C con estructura/arquitectura de Cocoa y Xcode).

Fácil no?

Segunda versión (la peleada, la terca, la que demostró que la “banda” puede más que el capricho de algunos):

Se puede usar Flash CS5 para desarrollar/programar apps. Hay que descargar una serie de librerías (también gratuitas del sitio de Adobe – luego agrego el link) y con eso al iniciar un nuevo proyecto se puede seleccionar la opción de apps.

Esta versión fue muy peleada porque por mucho tiempo no Apple no quería que ningún programa de fuera pudiera crear apps y hasta llegaron al punto en que dijeron que no iban a aceptar apps hechas de esta manera, pero le pegaron a Apple porque ellos siempre dijeron ser de mente abierta y desarrollo abierto para todos – pero crearon un esquema tan cerrado que demostraba ser contrarío a su filosofía – al final, se rindieron y hoy en día aceptan apps de esta manera.

El problema es que esas librearías tienen alcance limitado y no pueden todas las usar herramientas al alcance como la cámara, geolocalización, el giroscopio, entre otras. Y además no se puede agregar código que se ejecute en “run time” porque no hay un intérprete de actionscript (esto de hecho se me hace muy chafa pero por seguridad lo puedo entender) y sólo necesitas aprender AS3 y flash.

Más fácil pero muy chafa no?

Tercera versión (ya la de perdida, la que nos queda, la “no tan” cerrada):

Usar un SDK de un framework externo que si tenga acceso a las herramientas que flash no puede. Porque hay cuates que vieron el negocio de flash y lo quisieron mejorar con el slogan de “si tu puedes hacer una página web con HTML5, CSS3 y Javascript (y hasta algún lenguaje de script como php) entonces vas a poder hacer una app”.

Esto para invitar a TODO mundo a entrarle a este tipo de desarrollos, con el catch que para usar este tipo de herramientas en su máximo potencial todavía se necesita comprar una Mac ya que al final del día la “compilación” tiene que ser hecha con el “toolchain” de Mac – y ni pregunten porque yo todavía estoy entendiendo esta parte.

Entre los frameworks que se pueden usar para esto están Titanium y DragonFire.

Chido pero aún caro no?

Cuarta versión (la hacker, la barata, la accesible para todos aquellos con conocimientos técnicos MUY elevados):

De los mismos creadores del jailbreak, de cydia y de muchas de las grandes maravillas que la gente pelea porque quieren recuperar la libertad de “hacer lo que se le de la gana con los gadgets que compra” – Saurik – encontró la manera de imitar ese “toolchain” de Mac con lo cual se pueden compilar apps para iOS desde otros lenguajes similares (como C, C++, Java y derivados de bajo nivel).

Esto para que todos aquellos interesados en crear apps desde Linux lo puedan hacer. Pero la verdad es que se necesitan conocimientos técnicos MUY avanzados, casi tanto que en lugar de aprender a hacer esto es más fácil y barato aprender código de Objective C y comprar una Mac (ese es mi caso).

Super chido pero NADA fácil..

Quinta versión (la socialista (hasta que pegue y empiecen a cobrar) y novedosa y de geeks muy inteligentes):

Unas personas proponen lo siguiente: haz, desarrolla, programa en lo que sea que se te de la gana (no tan así pero hay amplio espectro de lenguajes y arquitecturas aceptadas) y luego pásanos tus códigos fuente y nosotros compilamos y te regresamos tu app.

Sea windows, mac, linux o lo que sea, les envías los códigos fuente y ellos lo pasan por una Mac (o ve tu a saber si por el una manera estilo la cuarta versión) y después te regresan la app lista para vender en app store. Así no tienes que comprar una mac ni aprender un lenguaje nuevo – PERO – tienes que confiar en darle tus códigos fuente a alguien más y confiar en que no modificaron, copiaron, piratearon, voltearon, jugaron, vieron, editaron nada y te dieron algo a cambio (y hasta ahora gratis) – estoy hablando de phoneGap.

Super duper chido pero demasiado comprometido y falto de confiabilidad (si es que se entiende)..

Así que bueno, este es un primer análisis. Hay muchas maneras y cada vez llegarán más pero serán similares a esto que explico. Por ahora lo que puedo recomendar es tomar el camino de menos esfuerzo según el conocimiento técnico de cada uno: para los genios el #4, para los no tan genios el #1, para los que tienen el billete y no llegan al dos pues el #3, para los que no les importa tanto el alcance la #2 y para los confiados el #5.

Espero esto ayude a tomar el camino correcto. Yo sigo decidiendo por donde voy a ir y seguiré escribiendo de mi experiencia en general en este tipo de proyectos/emprendimiento.

Saludos,
Gorka


Framework de reverse-exploit para metasploit


Luring

Este post es puramente hipotético pero si algún día tengo tiempo me pondré a hacer un PoC (Proof Of Concept):

En la manera más sencilla de explicar qué y cómo se hace un exploit a una vulnerabilidad la cosa es así:

  1. Un programa para funcionar puede recibir parámetros de fuera de sí mismo (le pueden llegar vía usuario o vía sistema).
  2. Esos parámetros pueden ser órdenes y/o datos que usa el programa para hacer lo que sea que haga.
  3. Si una persona tiene control de como y que hacerle llegar al programa en esos parámetros ese programa se puede intentar “explotar” , es decir se puede buscar si el programa es vulnerable.
  4. Si el programa no revisa bien, o no filtra los parámetros éstos pueden generar errores en la ejecución del programa.
  5. Si esos errores tienen algún tipo de respuesta donde se incluya algún tipo de información generada o relacionada a los parámetros o simplemente se logra que el programa se detenga (pero no detenga su ejecución en memoria) entonces se ha “explotado” el programa y se ha encontrado una vulnerabilidad en tal o cual parámetro.

Sin entrar a detallar los millones de tipos de ataques y sus infinitas variantes dados los diferentes tipos de parámetros que se pueden enviar (desde código en sí, hasta sub códigos, y la más fina y difícil – a mi parecer – de usar código en lenguaje de máquina para hacer un buffer overflow) la cosa se puede resumir así (y obvio sin entrar en el detalle de programas que le envían parámetros a otros programas porque ahí la cosa se vuelve Kafkiana).

Existen plataformas (frameworks) de programas que se usan para hacer pruebas de penetración. Una de las más potentes es Metasploit cuyo core está basado en explotar windows desde MUCHOS ángulos y de maneras super específicas hasta completamente universales. Además, llevan un registro de todos los errores que encuentran y la manera de usarlos para no tener que repetir el proceso de encontrar las vulnerabilidades sino ya nada más “explotarlas”.

¿Qué hace metasploit – bueno, no en sí metasploit, sino los programas dentro de este framework?

Envían parámetros a ciertos programas en windows para aprovechar vulnerabilidades conocidas y así controlar las computadoras que son atrapadas (de la manera explicada arriba).

¿Cómo se enteran los programas en metasploit si han logrado su cometido?

Reciben una respuesta de parte de la computadora/programa que quisieron atacar/hacer prueba de penetración.

Si se pudiera saber cuando se está llevando a cabo un ataque y en lugar de simplemente detenerlo se pudiera controlar la respuesta que van a recibir los programas atacantes… ¿no se podría buscar errores en la manera que reciben las respuestas y con eso tratar de encontrar vulnerabilidades en los mismos programas atacantes?

En teoría:

En la práctica? Aún no llego ahí, hahaha. Pero esto es obviamente simplificando todo lo que se lleva a cabo a la hora de “explotar” una vulnerabilidad, seguramente ya al momento de intentarlo las cosas son mucho más complicadas.

Lo divertido es pensar que si existe un framework que ataca a Windows se podría crear un anti-framework con el cual no sólo te defiendes sino que atacas a los atacantes y los puedes llegar a dominar. Ojo que para evitar que entonces se haga un anti-anti-framework (y así infinitamente) lo que hay que hacer es desde un principio revisar bien los parámetros que reciben los programas y si eso ya lo sabemos pues se lo ponemos al anti-framework para que no nos la puedan aplicar, hahaha.

Saludos,
Gorka


Pagination