sábado, 9 de noviembre de 2013

Reviviendo Szenio PC Tablet 2000

Hoy llegó a mis manos esta tablet con un problema bastante desesperante. O se quedaba bloqueada al intentar arrancar el sistema operativo o simplemente se producía un bucle de apagado encendido donde al final daba error de poca batería. Nunca en todos los intentos dio llegado a arrancar en Android.

Después de navegar por foros vi que era un problema muy común y le había pasado a más gente, y la compañía distribuidora puso al parecer instrucciones y archivos para solucionar el tema. Digo "al parecer", ya que ahora todos esos enlaces están caídos y no hay forma de encontrar nada de la tablet en la web oficial.

En ciertas instrucciones hablaba de un modo recovery al que se accede aguantando Vol+ + Power, pero vamos, en la mía ni de casualidad di entrado al recovery. Al final la solución que a mi me sirvió y por eso la quiero compartir, la encontré en HTCManía (dónde si no!), y resulta que consiste en que la Woxter 101 CXi y la Szenio son iguales, con lo que por suerte se puede usar el software de recuperación de la primera e incluso la misma versión de android.

Me fui a la web oficial de la Woxter 101, y seguí las instrucciones de instalación de la versión 4.1.1 de Android. Lo más complicado a mi punto de vista es entrar en el "modo upgrade", ya que a diferencia de otros dispositivos, la pantalla seguirá en negro mientras se encuentra en ese modo.

A partir de aquí, pues a probar custom roms a ver cuál va ligerita y bien, aunque la del Woxter va bastante fina.

Espero que os sea útil, a mí esto hace varias horas me hubiera venido muy bien.

Un saludo ;)

martes, 15 de octubre de 2013

¿Por qué lenguaje de programación empiezo?

Estoy seguro que si os dedicáis al mundo de la informática desde hace tiempo sabéis que cuando alguien quiere aprender a programar es lo primero que pregunta, como no podía ser de otro modo. Y cada uno aquí da sus opiniones lo mejor que puede y basado en su propia experiencia. Yo voy a dar la mía, que para eso es mi blog.

Para empezar yo diferencio dos clases de usuarios, los que quieren realmente meterse al mundillo y dedicarse a la informática, o los "casual", gente que no se va a dedicar a la informática pero tienen la curiosidad de querer aprender para programarse algo sencillito y no complicarse mucho la vida. También hay los que se quieren meter "porque la informática tiene futuro", aunque sin más pasión y/o interés que ése no les auguro mucho futuro en estos lares.

Para los usuarios puntuales que sólo quieren algo rápido para sacar algún proyecto pequeño adelante, recomiendo Python. Fácil de aprender, de usar, bonito, te obliga a indentar, módulos para todo (soy de los que creen y esperan que iPython + Numpy se coma a matlab) no tienes que saber ni papa de punteros o de lo que hay por debajo. Te miras algún manual facilito como el de Python para Todos y muy pronto puedes empezar a hacer tus cosillas.

Para los que quieran entrar en el mundillo de la informática de cabeza, aprender a manejar algoritmos, tipos abstractos de datos y demás mariconadas y palabras chungas que usamos los informáticos para parecer más listos mi opinión es:

Para empezar, un lenguaje fuertemente tipado. Pascal puede ser el elegido. Sintaxis sencilla, no tan complicado como C o C++, y te hace coger buenos hábitos de programación. Para usarlo para proyectos grandes no me gusta en absoluto, pero en mi ciudad al menos he visto varias ofertas de trabajo para programadores en Delphi (una evolución de Pascal), así que quizás pueda ser una opción...

Una vez aprendido Pascal, nos vamos a C. Aprendemos lo divertido que puede ser concatenar dos cadenas, lo graciosos que pueden ser los punteros, y por supuesto el poder que tienes sobre la máquina. No voy a negar que me encanta C y lo optimizado que está.

Por supuesto, todo buen programador tiene que saber de Programación Orientada a Objetos. Hay algunos puristas que hablan de empezar por SmallTalk o cosas así, yo recomiendo Java. Tipado, multiplataforma, herencia simple, probablemente el lenguaje más extendido del mundo y el que más se pide para conseguir un trabajo. Esencial. C++ es otra muy buena opción.

Por último un lenguaje funcional es importante, no tanto bajo mi punto de vista para usar de forma cotidiana pero sí para aprender a pensar de otra manera (tail recursión, todo es una función, etc.) En mi caso aprendí Ocaml en la facultad y me gustaría tener algo de tiempo para mirar Haskell, que le tengo ganas.

En este punto puedes aprender los lenguajes que te apetezcan, sin demasiada complicación una vez ya "hablas" los anteriores. C++, PHP, Javascrip, Python, Ruby, C#...

Si alguien quiere saber mi "trayectoria" personal (probablemente no), yo empecé por BASIC hace muchos años, salté a QBASIC y la evolución lógica me llevó a Visual BASIC. Aprendí también algo de C, y al entrar en la facultad desaprendí todo lo aprendido de Basic y aprendí Pascal -> C -> Java -> Ocaml -> Matlab -> Python -> Javascript y el último lenguaje que he aprendido allí ha sido C#.
Luego decidí especializarme en Python, es el lenguaje que más me gusta, con un buen equilibro entre optimización y velocidad de desarrollo (a veces mientras programo en Python pienso en tener que hacer lo mismo en C y me entra un escalofrío de imaginar todas las líneas de código...) y de hecho es el lenguaje que me ha dado trabajo ahora mismo, junto con el querido Framework Django, conjunto de librerías que permiten a Python desarrollar fácilmente aplicaciones web.

Cada uno tiene que probar de todo y ver lo que le va gustando. Cualquier duda ya sabéis dónde estoy!

lunes, 19 de agosto de 2013

Nostalgia: Manual del Amstrad CPC 6128

A pesar de que soy joven y no coincidí temporalmente con los amstrad CPC, por casualidades de la vida he acabado teniendo por casa un CPC 6128 a mis 11 - 12 años, y si bien había cosas que me molestaban mucho como por ejemplo que la disquetera del mío estaba estropeada (me lo habían regalado de segunda mano), guardo un grandísimo recuerdo de él y de su pantalla de fósforo verde. Lástima que mis padres lo hayan tirado un día que yo no estaba "porque ya no servía para nada". Sin embargo, cuando me lo dieron recuerdo que me dijeron "Oye, ¿el manual lo quieres?". Y yo estuve a punto de cagarla y decir que no, sin embargo dije "Pues vale", y me lo empecé a leer.

Me encantó, aprendí muchísimo y bajo mi punto de vista el manual estaba escrito de perlas, para la época quizás mucho mejor que algunos libros técnicos actualmente.

De hecho, tengo que reconocer que por curioso que sea aprendí a programar más o menos en el año 2000 con libros de ordenadores antiguos. Antes el manual del PC no era sólo 3 chorradas, si no que te enseñaban a programar en el lenguaje BASIC, que era el intérprete por defecto del sistema.

Además, cada ordenador de la época tenía distintas instrucciones. El más placentero para programar de los que he probado físicamente ha sido el MSX, ya que además era el que más instrucciones y funciones tenía. Recuerdo por ejemplo la declaración de Sprites y la detección de colisiones para programar videojuegos.

Salvo el libro del CPC que era mío (y aún conservo, cuando vuelva a España tengo que encontrarlo), el resto de los libros los fui cogiendo en préstamo de la biblioteca municipal.

Me dió mucha pena que hace poco después de varios años sin ir volví y habían reformado la biblioteca entera, y de esos libros no quedaba nada. En el estante sólo había cosas como Excel 2010, Access 2007, Dreamweaver, algo de Visual Basic 6 y alguna otra cosilla. Ninguno de los libros que me habían enseñado tanto y que serían tan válidos hoy en día como lo fueron para mí hace 10 años sobrevivieron.

Por eso hoy me sentí tremendamente nostálgico y alegre cuando encontré un sitio web de fanáticos del Amstrad CPC, y entre ellos estaba el manual de mi querido Amstrad CPC 6128. Recomiendo al menos echar un ojo al último capítulo de la historia de la informática y de cómo el tío predice que cuando baje el precio de la memoria se podrán ver películas en un PC...

Por último, si me lee alguno de los hachas que se ha matado a escanear el manual entero, muchas gracias!

lunes, 12 de agosto de 2013

Ataque BREACH, un toque de atención a SSL/TLS/Cualquier tipo de cifrado realmente

Estando desconectado temporalmente del tema de la seguridad, un Security Advisory de Django me volvió a traer al mundo de los vivos. El tema viene siendo éste:

https://www.djangoproject.com/weblog/2013/aug/06/breach-and-django/

Donde avisan del ataque BREACH. Por supuesto, me puse a indagar sobre el tema y echar un ojo al PAPER que presentan, ya que me sorprendió ver que TLS/SSL (y realmente cualquier tipo de cifrado!) eran vulnerables al ataque.

El ataque se basa en uno anterior, CRIME, basado en la comprensión TLS, que no es demasiado común. Ésto va más allá usando la comprensión básica que va sobre HTTP, es decir, antes de realizar ningún tipo de cifrado del tráfico. Es muy común en cualquier tipo de web, tanto usando HTTP como HTTPS, usar algún tipo de compresión para ahorrar ancho de banda, eligiendo muchas veces la compresión gzip.

El ataque tiene varios requisitos:
  • Un servidor que use compresión a nivel HTTP (cae de cajón)
  • Que aparezca algún parámetro introducido por el usuario en el body de la respuesta HTTP
  • Que haya algo "interesante" en el body de la respuesta (un token CSRF, por ejemplo). Algo secreto que queremos robar.
Y ahora empieza la gracia. Si tenemos una petición tal que:

GET /owa/?ae=Item&t=IPM.Note&a=New&id=canary=<guess> 

Y nos devuelve algo como (esto lo hace Outlook Web Access):

<span id=requestUrl>https://malbot.net:443/owa/forms/
basic/BasicEditMessage.aspx?ae=Item&amp;t=IPM.Note&
amp;a=New&amp;id=canary=<guess></span>
...
<td nowrap id="tdErrLgf"><a href="logoff.owa?
canary=d634cda866f14c73ac135ae858c0d894">Log
Off</a></td>


Guess sería lo que nosotros inyectamos. Gzip intenta buscar coincidencias de palabras para comprimir la respuesta. Por lo tanto comprimirá canary= al tenerlo en dos partes (en el ejemplo) de la respuesta. Pero qué pasa si intentamos inyectar cosas? El tamaño de la compresión será el mismo si no acertamos pero si acertamos y metemos canary=d... al encontrar canary=d634... en otra parte del texto la compresión será mejor, y la respuesta por parte del servidor más pequeña. Esto permite que repitiendo el ataque podamos ir sacando, byte a byte, el token.

Y ya el tema de cómo explotarlo, pues a partir de ahí a echarle imaginación. Lo difícil es llegar hasta estas conclusiones. Me he saltado varios detalles que son relevantes, para más información echad un ojo al PDF.

Por último comentar que me gustó ver que uno de los investigadores involucrados es el lugués Ángel Prado, habitual speaker en las Jornadas de Seguridad de A Coruña, y al que espero poder ver este año a finales de octubre en GSICKMINDS (nuevo nombre de dichas jornadas).

Un saludo a todos!

jueves, 1 de agosto de 2013

BlockPrism, cifrando el chat de Facebook

Buenos días a todos, se que llevaba mucho tiempo sin escribir, pero mi vida se me ha puesto de arriba a abajo en apenas un mes (para bien), ya contaré algo de eso.

En este caso os quiero presentar una herramienta que me ha parecido muy útil, sobre todo con todo el jolgorio que se está montando con el tema Snowden.

La idea consiste en algo tan sencillo como una extensión de explorador (por ahora disponible para chrome) que activada en el sitio web de facebook activará un cifrado basado en criptografía asimétrica.

Como entidad de confianza dependemos del servidor del creador de la aplicación, que afirma guardar únicamente el id del usuario de facebook y su clave pública, es decir, lo mínimo indispensable para mantener un sistema de cifrado asimétrico en el que no se tenga que hacer un prenegociado de claves (estilo SSL), ya que de esa manera se perdería la funcionalidad de los mensajes online. Para más confianza al parecer el proyecto va a ser OpenSource, con lo cual cualquiera podrá revisar el código y ver lo que realmente está haciendo el usuario.

Sin más dilación os dejo el enlace del proyecto: http://blockprism.org/ y la dirección de su campaña en IndieGogo .


domingo, 12 de mayo de 2013

Reparando la tabla DSDT (Asus K53SV)


DSDT (Differentiated System Description Table) es parte de la especificación ACPI, y más o menos explicándolo de forma sencilla es una tabla donde se indican los diversos eventos relacionados con la gestión de energía que soporta un equipo. Las tablas DSDT suelen venir preparadas para windows, con lo cual en otros sistemas como linux pueden fallar los ventiladores, o la pantalla no apagarse al cerrar la tapa, etc. Esto es al menos lo que dice en la wiki de arch linux, habrá que fiarse.

En mi caso me gusta optimizar mi SO al límite, así que decidí reparar la tabla DSDT a ver si mejoraba algo, aunque para ser sinceros no noté nada a parte de que el portátil no encendía con el brillo al máximo, de agradecer, y me entretuve un ratillo aprendiendo algo nuevo. A otra gente le supone una mejora mayor y si quieres instalar un Hackintosh en tu PC necesitas tener la tabla reparada antes de nada.

Para rehacer una tabla funcional, en Linux tenéis que hacer como root:

cat /sys/firmware/acpi/tables/DSDT > dsdt.dat

 Esto os dará la tabla en uso actualmente. La descompilamos con:

iasl -d dsdt.dat

Y la compilamos otra vez con:

iasl -tc dsdt.dsl

Y aquí es donde saltarán todos los errores. A partir de este punto es donde tenemos que matarnos un poquillo a solucionar los fallos que están dando. Os comento los que me dieron a mí y cómo solucionarlos:
  • Non-hex letters must be upper case. Pues eso, las letras que no sean hexadecimales ponedlas con mayúsculas. Con unos cuantos buscar y reemplazar se soluciona.
  • Use of compiler reserved name (_T_0). Fácil, cambiamos _T_0 a T_0.
  • Not all control paths return a value. Se coloca un Return (Zero) al final de esa función.
  • Reserved method should not return a value. Pues eso, que no debería devolver un valor así que borramos el return.
  • Found buffer, requires package. Empaquetamos el buffer. Cambiamos por ejemplo Buffer(0x10) por Package(0x10). Fácil y sencillo.
Y esos fueron los fallos con los que tuve que enfrentarme yo. Pongo unos enlaces de webs que me fueron de utilidad y al final de todo parte de la salida de compilar el dsdt sin arreglar.

http://cannibalcandy.wordpress.com/2011/02/18/dsdt-editing-put-an-end-to-your-acpi-woes/

http://sadevil.org/blog/2012/01/01/fixing-the-acpi-dsdt-of-an-acer-ferrari-one-200/

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20121018-64 [Oct 26 2012]
Copyright (c) 2000 - 2012 Intel Corporation

dsdt.dsl   5090:                         Name (_HID, "pnp0c14")
Error    4133 -          Non-hex letters must be upper case ^  (pnp0c14)



dsdt.dsl   5168:                             Name (_T_0, Zero)
Remark   5011 -        Use of compiler reserved name ^  (_T_0)

dsdt.dsl   5761:                         Method (SPBL, 1, NotSerialized)
Warning  1114 -                                    ^ Not all control paths return a value (SPBL)

dsdt.dsl  12509:                 Return (ATKR (Arg0))
Warning  1120 -                            ^ Called method may not always return a value

dsdt.dsl  12515:         Method (ATKR, 1, NotSerialized)
Warning  1114 -                    ^ Not all control paths return a value (ATKR)

dsdt.dsl  13014:             Return (One)
Warning  1104 -                       ^ Reserved method should not return a value (_Q0E)

dsdt.dsl  13077:             Name (_T_0, Zero)
Remark   5011 -                      ^ Use of compiler reserved name (_T_0)

dsdt.dsl  13626:                     Name (_PLD, Buffer (0x10)
Error    4105 -      Invalid object type for reserved name ^  (found BUFFER, requires Package)

dsdt.dsl  14375:         Method (MXDS, 1, NotSerialized)
Warning  1114 -                    ^ Not all control paths return a value (MXDS)

dsdt.dsl  14781:             Name (_HID, "pnp0c14")
Error    4133 -                                 ^ Non-hex letters must be upper case (pnp0c14)

domingo, 17 de febrero de 2013

Information Gathering Tools (1/?)

Buenas a todos, tras mucho tiempo sin escribir por fin he vuelto a tener tiempo para trastear con cosas.

Hoy hablaré de  herramientas de recogida de información, no refiriéndome a herramientas como nmap, si no más bien herramientas orientadas a prepararnos para realizar después ingeniería social.

Jigsaw

Jigsaw es una herramienta destinada a obtener información sobre los trabajadores de una compañía. La herramienta parece funcionar perfecta para empresas como google, donde simplemente elegimos uno de sus dominios (en mi caso probé con google.com) y hace un crafting de todos los emails que encuentra de los empleados en diversos departamentos

El problema de esa gran herramienta es que llama a la base de datos de jigsaw.com, con lo cual dependemos de las empresas que allí figuren. Como os podéis imaginar, para empresas españolas nada de nada, ni siquiera alguna grande como El Corte Inglés o Hacendado. Está Zara, eso sí, y el grupo Inditex.

Creepy

Pues eso, escalofriante es la mejor manera de describir esta herramienta. En un mundo donde servicios como Twitter o Flickr están a la orden del día, y todo el mundo tiene un smartphone con GPS, este programa aprovecha que muchos móviles adjuntan a las fotos que sacas metadatos con la información de tu posición en ese momento, qué majos, ¿no?

Así que tú le das un usuario de twitter o de flickr, y si la persona tiene imágenes subidas con geolocalización, verás en un mapa dónde se ha sacado fotos dicho individuo.

Foca

Hablando de metadatos, pues eso, no podía faltar la foca, lo primero que podemos lanzar contra una web a auditar para sacar usuarios, impresoras, mails, ips, yo qué sé, el mundo de los metadatos es demasiado grande. Siempre aportan pistas curiosas y palabras que usar en wordlists.

Uberharvest

Teóricamente escanea un sitio web y busca direcciones de correo y más cosas, yo sin embargo sólo consigo que me haga una búsqueda en el DNS y me devuelva los servidores, incluídos los de correo. Me saltan excepciones de python con algunas opciones.

No sé si lo estoy usando mal, pero no me convence.

TheHarvester

Este programa me encanta. Le pones un dominio, y le puedes decir que busque en google, bing, linkedlin, etc. Te devolverá las direcciones de correo con dicho dominio, así como los host y virtual hosts que encuentre. Sólo le veo el fallo de que no te deja buscar en el propio dominio ya que todas las búsquedas las hace a través de buscadores, con lo cual estás obviando cosas que no estén cacheadas o que se encuentren en robots.txt.

WebShag

Tiene un modo scanner llamando a Nmap por debajo, un modo de buscar hosts y vhosts, un spider que recorre la web y busca mails, directorios y enlaces externos, un modo USCAN que busca vulnerabilidades recurriendo a Nikto2 o a una base de datos de vulnerabilidades que especifiquemos y por último un modo fuzzer que busca archivos y directorios "ocultos" en el servidor ya sea por fuerza bruta o por diccionario.

Me ha parecido muy útil sobre todo para el caso que nos ocupa el modo Spider.

Por hoy me despido y espero que os sea de utilidad este breve resumen.

¡Un saludo!