Primeros pasos con el C.H.I.P.

C.H.I.P. Durante el último año he apoyado algunos proyectos en Kickstarter. Por ser más concreto, el MeARm que lo tengo en dique seco, PiJuice que sigue sufriendo retrasos, Pine64, que llegó hace algunas semanas pero todavía no he podido ponerlo a funcionar (comentaré, supongo, sobre ello más adelante). Además compré un par de C.H.I.P. que no era en Kickstarter pero si ha seguido el modelo de compra anticipada y ya lo recibirás. Entre los inconvenientes de este modelo de compra es que el momento en que decides apostar por un proyecto no tiene nada que ver con el momento en el que recibes el resultado.

El C.H.I.P. llegó la semana pasada y me encanta: buena documentación, todo bien pensado para trabajar rápido y unas prestaciones adecuadas (que nadie espere supercomputación, claro).

Frente a otras placas y sistemas que nos hacen esforzarnos un poco al principio, este aparatito de 9 dólares está muy bien pensado: lo conectamos a nuestro ordenador, arranca y abre un puerto serie a través del que podemos empezar a trabajar (para los que lo prefieran, también se puede conectar a una pantalla o a la televisión para configurarlo):

If everything went OK, you can now power up your CHIP again and connect via serial as a USB gadget:

  screen /dev/ttyACM0 115200

Ya imagino que esto puede ser un freno para muchos así que tranquilos, que también se puede usar con la tele o con una pantalla y usar el ratón:

C.H.I.P. on TV

Y desde allí configurar la red (sin más cables que un USB), el ssh, el usuario de trabajo y ponerse a funcionar la próxima vez que arranque. También tiene (por si fuera necesario) un gestor de conexiones basado en texto (nmcli) y sólo si queremos redes más complicadas (de tipo empresarial) necesitaremos trabajar un poco más. Aunque gracias a eso he ‘descubierto’ las ventajas de copiar y pegar las configuraciones entre sistemas (con cuidado) e incluso se me ha ocurrido un posible proyecto: Sharing WiFi configuration files over diffferent computers. También que, aparentemente, es un tema que ya está bien resuelto en Windows 10 y en Mac OS. Tenemos que espabilar.

El escritorio:

C.H.I.P. Desktop

No he tenido tiempo de mucho más (instalar el Python, el pyenv y fantasear sobre hacer algunas pruebas con el MeArm (ahora sí).

En el apartado negativo: C.H.I.P. es un mal nombre. Buscar en internet algo que se llama chip es perder el tiempo y la paciencia (no ayuda tampoco, claro, que es un proyecto relativamente nuevo y con poca difusión). Otra pequeña pega es que cuando añades un disco USB no lo monta automáticamente (con el esritorio sí, pero no quiero usarlo con una pantalla).

Entre sus características (copiadas y traducidas de [The PocketC.H.I.P. Is the Handheld Linux Machine I’ve Been Looking For)[http://lifehacker.com/the-pocketc-h-i-p-is-the-handheld-linux-machine-ive-be-1783247338])

  • Procesador Cortex A8 R8 a 1Ghz con una GPU Mail-400
  • 512 Mb de RAM
  • 4 Gb de memoria flash
  • Wifi 802.11 b/g/n y Bluetooth 4.0
  • Salida de vídeo con conector de 3.5mm para vídeo compuesto y audio.
  • Puerto USB y puerto micro USB OTG (se usa para alimentación)

Interesante

Amazon. Elogio de los métodos formales

Bug Cuando hablemos de métodos formales en informática enseguida nos tacharán de teóricos, alejados de la realidad y poco prácticos. Tal vez sea así para programas sencillos y poco comprometidos, pero a partir de cierto nivel de complejidad una herramienta más siempre ayudará. En How Amazon Web Services Uses Formal Methods (no se si está accesible públicamente, tal vez este sí que sea fácil de leer [PDF] Use of Formal Methods at Amazon Web Services).

En concreto nos hablan de modelos formales y ‘model checking’ para ayudar a rseolver problemas difíciles de diseño en sistemas críticos. Las herramientas estándar de la industria se quedan cortas en algunos casos:

We have found the standard verification techniques in industry are necessary but not sufficient. We routinely use deep design reviews, code reviews, static code analysis, stress testing, and fault-injection testing but still find that subtle bugs can hide in complex concurrent fault-tolerant systems.

Las limitaciones de las pruebas (‘testing’):

We have found that testing the code is inadequate as a method for finding subtle errors in design, as the number of reachable states of the code is astronomical.

Tampoco es que lo utilicen de manera extensiva, claro. Lo usan para encontrar fallos sutiles y también para mejorar la comprensión y la confinanza en las mejoras que aplican en unos cuantos sistemas:

At the time of this writing, Amazon engineers have used TLA+ on 10 large complex real-world systems. In each, TLA+ has added significant value, either finding subtle bugs we are sure we would not have found by other means, or giving us enough understanding and confidence to make aggressive performance optimizations without sacrificing correctness.

En varios equipos y con apoyo al máximo nivel:

Amazon now has seven teams using TLA+, with encouragement from senior management and technical leadership.

Yo creía que esto sólo les pasaba a los principiantes, pero parece que es algo común: nos centramos en los casos normales, sin pensar en que puede haber fallos y errores.

Engineers naturally focus on designing the “happy case” for a system, or the processing path in which no errors occur.

La forma de enfrentarse al problema: cómo debería funcionar, en lugar de pensar en lo que podría ir mal:

We find this rigorous “what needs to go right” approach to be significantly less error prone than the ad hoc “what might go wrong” approach.

Para evitar fallos es necesario que todo el mundo comparta la misma visión del sistema, que debe ser correcta, ajustada, precisa, completa …:

To avoid creating subtle bugs, we need all engineers to have the same mental model of the system and for that shared model to be accurate, precise, and complete.

Los métodos formales también tienen sus inconvenientes, claro: es difícil evaluar (al menos para ellos en este momento) los fallos que provocan degradación del sistema y que se realimentan:

… surprising “sustained emergent performance degradation” of complex systems that inevitably contain feedback loops

También se habla de la forma de comenzar, los aspectos ‘sociales’ (el lenguaje utilizado):

Engineers think in terms of debugging rather than “verification,” so we called the presentation “Debugging Designs.

We initially avoid the words “formal,” “verification,” and “proof” due to the widespread view that formal methods are impractical.

¿Qué proporcionan los métodos formales? Según los usuarios ayudan a obtener buenos diseños (‘Get design right’), comprender mejor el sistema (‘Gain better understanding’) y también a escribir código mejor (‘Write better code’).

Lectura muy interesante.

Seguridad, usabilidad e incentivos

Robusto pero incómodo En Usable Security: How to Get It un artículo sobre usabilidad y seguridad. Se habla de la seguridad por culpa de los fallos, pero también se nos recuerda que muchas veces tenemos menos seguridad de la debida porque preferimos la comodidad:

Conflicts: Even more important, security gets in the way of other things you want. In the words of General B.W. Chidlaw, “If you want security, you must be prepared for inconvenience.”a For users and administrators, security adds hassle and blocks progress. For software developers, it interferes with features and with time to market.

También se habla de la seguridad como gestión de riesgos, y hay que tener en cuenta todos los costes:

Security is really about risk management: balancing the loss from breaches against the costs of security. Unfortunately, both are difficult to measure. Loss is the chance of security breaches times the expense of dealing with them. Cost is partly in dollars budgeted for firewalls, software, and help desks but mostly in the time users spend typing and resetting passwords, responding to warnings, finding workarounds so they can do their jobs, and so forth. Usually all of these factors are unknown, and people seldom even try to estimate them.

Porque, en definitiva, estamos hablando de economía:

More broadly, security is about economics.2 Users, administrators, organizations, and vendors respond to the incentives they perceive. Users just want to get their work done; …

Las organizaciones tienden a valorar sólo una parte de la ecuación:

They don’t measure the cost of the time users spend on security and therefore don’t demand usable security.

Pero todo depende de los incentivos:

People think that security in the real world is based on locks. In fact, real-world security depends mainly on deterrence, and hence on the possibility of punishment.

Lectura interesante

Sobre la autentificación de dos factores

Enséñame la patita. Vale, no tenía otra foto con patitas. Llevamos una temporada en la que uno de los mantras de los de seguridad en temas de autentificación es: ‘utiliza autentificación de dos factores’. Ya saben: normalmente una contraseña que nos sabemos y algo más (típicamente un mensaje que recibimos de alguna forma o algún dato generado de alguna forma). Aunque los beneficios están claros, me resisto a recomendarla abiertamente porque cuando funciona lo hace muy bien, pero cuando falla estamos fuera (ese SMS/correo que no llega, justo cuando más lo estamos necesitando o ese canal alternativo que en ese momento no está disponible). Sin ponernos en el caso de que alguien sea capaz de interceptar los mensajes de ese canal secundario, como nos recordaban recientemente en SMShing para robar tu 2nd Factor Authentication en tus cuentas Google o Apple #SMShing #Google #Apple. Y sin olvidar que ese canal alternativo (típicamente el teléfono móvil) se ha convertido en canal unitario.

A lo que vamos, en Why You Don’t Need 2 Factor Authentication nos lanzaban una serie de argumentos contra el sistema, que me gusta traer aquí:

  • Mito 1: lo que sabes, lo que tienes, bla, bla, bla

El autor dice que no todo es tan sencillo y que hay más categorías y más que centrarnos en esa clasificación deberíamos preocuparnos de los factorse utilizados y sus características.

  • Mito 2: la autentificación de dos factores hace mi cuenta más segura, sin consecuencias negativas

En realidad, perdemos tiempo en esa parte del proceso, la aplicación es más compleja, y no evita otros inconvenientes.

Al final, la autentificación de dos factores es un gestor de contraseñas para ‘perezosos’ (porque lo gestiona el proveedor del servicio). Me parece un punto de vista interesante, aunque conociendo la tendencia a la pereza de los usuarios igual es la única solución viable.

Manifiesto ágil para el desarrollo seguro

Agile Security Manifesto No es la primera vez que hablamos de desarrolo ágil y seguridad (Seguridad en proyectos ágiles y DevOps y seguridad. En esta ocasión nos referiremos a The Agile Security Manifesto de la empresa Cigital, que propone los siguientes principios:

  • Confiar en los desarrolladores y probadores más que en los especialistas en seguridad
  • Asegurar mientras desarrollamos mejor que cuando el trabajo está hecho
  • Implementar las características de manera segura mejor que añadir características de seguridad.
  • Mitigar los riesgos mejor que arreglar los fallos.

Interesante.

Desarrollar software cuando el software no es tu objetivo

ADN En The myths of bioinformatics software algunos comentarios sobre los programas que se utilizan en bioinformática pero que creo que se puede extender a casi cualquier rama del conocimiento: poco pensado para ser publicado y reutilizado, desarrollado muchas veces por personas sueltas o equipos muy pequeños y un poco a salto de mata, que luego es difícil de leer/modificar/mantener por otros.

También comenta con que las licencias permisivas no son una ayuda cuando se desarrolla con esa precariedad (y esos objetivos). También habla de la posibilidad de vender los programas y hasta qué punto podemos estar subvencionando a empresas privadas si les cedemos de manera gratuita los programas para uso comercial y algunas cosas más.

No estoy seguro de estar de acuerdo con todo, pero es interesante leer el punto de vista de alguien que desarolla software pero no es su misión principal.

Seguridad para usuarios no interesados en seguridad

Palabras Transmitir conceptos de seguridad a gente ya preparada es más fácil (aunque hasta en eso tengo dudas). Pero cuando hablamos de usuarios finales tenemos realmente un problema. Yo suelo decir que los usuarios (y muchos profesionales) conocen sobre seguridad lo que escuchan/leen en las noticias y esto es bastante preocupante.

De eso hablaban en Escape the Echo Chamber: Educating End-Users and Non-Security People.

El autor lleva tiempo dedicándose al tema, incluso ha escrito un libro:

Since that day in March (2014), I have studied this problem and what began as a set of practices for my family has evolved into a new book, How Not To Be Hacked. Below, I share the barriers that I discovered in educating regular people and how you can carry this forward within your own organization.

Las barreras serían:

  • Los usuarios no quieren convertirse en expertos en seguridad.

No hay mucho que comentar sobre esto. Cada uno quiere hacer su tarea, acabarla pronto y bien.

  • Demasiado preciso no es suficientemente preciso.

Si le preguntamos a algún técnico sobre algo la respuesta suele ser: ‘depende’ y esto es algo que al usuario no le sirve para nada al final. Tendríamos que cambiar este tipo de respuestas por las que sean suficientemente buenas (en lugar de perfectas).

  • Falta de inteligencia emocional.

Tenemos que empatizar con los usuarios de tecnología, ayudarles, explicarles, y simplificarles los problemas.

Creo que compraré el libro.

Un informe sobre productos criptográficos

Escondido En A Worldwide Survey of Encryption Products podemos leer un interesante informe en el que se puede leer la prometida lista de productos pero también una introducción donde se sugieren algunas ideas interesantes.

Se identifican 587 productores de este tipo de software:

The new survey also identified 587 entities that sell or give away encryption products, and of those, two-thirds are outside the US.

Se comenta sobre la eficacia de las instrucciones para añadir puertas traseras a los productos criptográficos que algunos gobiernos imponen:

Schneier argues in the paper that the survey findings call into question the efficacy of any US mandates forcing backdoors for law-enforcement access. He asserts that they show that anyone who wants to avoid US surveillance has hundreds of competing products to choose from. The report findings indicate that foreign products offer a wide variety of secure applications—voice encryption, text message encryption, file encryption, network-traffic encryption, anonymous currency—providing the same levels of security as US products do today.

Los mayores productores de criptografía serían, después de EEUU:

The most common non-US country for encryption products is Germany, with 112 products. This is followed by the United Kingdom, Canada, France, and Sweden, in that order.

Entre los datos se pueden encontrar siete productos identificados como españoles de, si no cuento mal, seis empresas diferentes:

Mirando los enlaces veo que algunas de estas empresas tienen más productos y tampoco es fácil determinar el origen así que, como decíamos arriba, igual lo más interesante son las primeras páginas del informe y echarle un ojo a la lista para hacerse una idea.

Transplantes de código para arreglar fallos

Bicho Me dan un poco de miedo las analogías ‘médicas’ porque siempre hay quien termina tomándoselas al pie de la letra (recuerdo hace un montón de años escuchar una conversación en el tren de alguien que le contaba a otro como los virus informáticos se inoculaban con una jeringuilla).

En este caso la idea es muy sugerente: MIT tests ‘software transplants’ to fix buggy code, utilizar el código de programas que funcionan correctamente para ‘reparar’ programas con fallos:

La idea se basa en entradas de datos que hacen fallar el programa y otras que no lo hacen fallar.

To fix a buggy program, CodePhage requires two sample inputs, one that causes the program to crash, and another that does not.

Se utilizan para verificar en un ‘donante’ que se obtienen los resultados correctos y a partir de allí ya se sabe que se puede utilizar ese nuevo código para corregir el programa defectuoso:

It runs those inputs through a second program, known as the donor program, that has similar functionality. The Internet is awash with open source software that could provide parts for donor programs, though there’s no particular reason the donor code needs to be open source.

Si leemos algunos detalles más en System fixes bugs by importing functionality from other programs—without access to source code podemos ver que se trata de algo que deberíamos denominar, más bien, ‘microtransplantes’, porque se trataría de pequeños bloques de código.

En el artículo (seguramente no accesible para todos), Automatic error elimination by horizontal code transfer across multiple applications se puede ver, por ejemplo un fallo en el programa gif2tiff, corregido mediante la ‘donación’ desde ImageMagick:

#define MaximumLZWBits  12
if (data_size > MaximumLZWBits)
   ThrowBinaryException(CorruptImageError,
         "CorruptImage",image.filename);

Este código sería susceptible de un ataque de desbordamiento de memoria y el programa propondría corregirlo con:

if (!(datasize <= 12)) {exit(-1);}

Me encanta.

Correo para la gestión de accesos

Asignando identificadores Traigo hoy un par de referencias sobre algo que muchas veces ya estamos haciendo los usuarios en la práctica (y que algunos proveedores han ‘estandarizado’ más o menos en lo que denominan sistemas de acceso sin clave): cuando no recordamos la contraseña utilizamos el botón de recordarla y accedemos al sitio. Posteriormente, si no es un sitio que visitamos con frecuencia la olvidamos y la próxima evez seguiremos el mismo procedimiento.

En este caso lo contaban en How to Fix Authentication: Email as a Password Manager. En este caso proponen que este sea el método de acceso y, por lo tanto, proponen que la contraseña remitida sea de un sólo uso. Las ventajas: no hacen falta aplicaciones extra, no hay problemas de sincronización (aunque a veces sabemos que los correos se ‘atascan’ o no podemos acceder a ellos de forma temporal), simple para los desarrolladores (al final los protocolos de recuperación de contraseña tienen su complejidad, recordemos Introducing the “Secure Account Management Fundamentals” course on Pluralsight), el registro y la entrada son iguales (con matices, supongo, por la cuestión de si estás ya registrado con una cuenta de correo diferente), sólo es necesario un click, podemos controlar la duración de la validez del enlace, y no necesitamos almacenar constraseñas (y, por lo tanto, no nos las pueden robar). No termino de estar de acuerdo con la ‘ventaja’ de evitar el Facebook Connect (y similares) salvo por evitar su complejidad. Y tampoco con que no se puede aplicar fuerza bruta: obviamente se puede, aunque nosotros ahora tenemos más control sobre la dificultad de encontrar los enlaces, frente a las contraseñas que los usuarios suelen elegir de manera inadecuada.

Como inconveniente, está claro que trasladamos toda la seguridad de nuestro sistema al proveedor de correo y a la gestión que el usuario haga de él. Hay más, claro, nunca nada es tan fácil como creemos al principio.

No habría que olvidar la vigilancia de las cuentas gestionadas de esta manera (observación de anomalías, cambios, novedades,…) que también parece ser una de las tendencias en seguridad de cuentas hoy en día.

En History of Email-Only Auth hay más información y opiniones de diversas personas sobre ideas similares.