Un informe sobre seguridad del internet de las cosas

Antenas

Si has pasado el verano enterrado, oculto y no has escuchado las noticias sobre los ataques a coches conectados (demostraciones de la posibilidad, aún nadie está realizando los ataques, que sepamos) este informe debería ser tu lectura para estos días. En FTC Report on Internet of Things Urges Companies to Adopt Best Practices to Address Consumer Privacy and Security Risks se puede descargar un informe sobre la seguridad y la privacidad de la internet de las cosas y los análisis realizados por un grupo de expertos bajos los auspicios de la FTC (Federal Trade Commission).

Las conclusiones e ideas no resultarán novedosas para nadie que haya estado un poco atento, pero pueden servir para los despistados y como recopilatorio de lo que se sabe (con referencias a otras fuentes de información). Interesante.

El informe: Internet of things: Privacy & Security in a Connected World.

Ya habíamos hablado de Seguridad e Internet de las cosas y se pueden leer algunos casos concretos y más informes en etiqueta hogar del viejo blog.

Manejo de memoria en Gmail

Buzón

Aunque lo que necesitan los grandes proveedores está muchas veces fuera de nuestro alcance (y poco relacionado con nuestras propias necesidades) siempre vale la pena leer documentos como este Effectively Managing Memory at Gmail scale que nos habla de los problemas de gestión de memoria al usar JavaScript en Gmail. También el proceso de mejorar el navegador y el intérprete correspondiente para obtener mejores prestaciones.

Análisis de intentos de entrada a una instalación de Wordpress

Libro WordPress

Cada instalación tiene sus peculiaridades, pero siempre es interesante la recopilación de datos sobre intentos de ataques: sobre todo porque muchos son automatizados y tratan de explorar contraseñas comunes, debilidades frecuentes y esas cosas.

En Analysis of WordPress Login Attempts hay justamente eso, un análisis de 241082 intentos de acceso a una instalación de WordPress y un resumen de las claves utlizadas, sus tamaños, …

También hay un análisis temporal donde puede verse que hay dos intentos bastante ‘ruidosos’ pero el resto del tiempo parece tratarse de una actividad mantenida, contrarrestada por las medidas de seguridad habilitadas por el propietario.

Medidas anti-fraude molestas

Banco

Lo cuento a veces, cuando hay que explicar que hay que ser cuidadosos con las medidas anti-fraude: estás en una conexión que no es la tuya, tienes prisa y el Google (o Facebook, o tu banco) de turno te hace pasar por algún paso extra de verificación. Más nervioso te pones y todo va peor. O cuando por pereza vas retrasando compras por no ir a buscar la tarjeta que no la tienes a mano y se te acumulan unas cuantas: las haces todas de vez y en tu banco saltan las alarmas correspondientes y et paran las operaciones.

Justamente de esto último hablaba Paul Wallich en Don’t pay your bills all at once (recomendable el The Risks Digest.

The suspicious transactions: one small purchase from an online retailer we use often, and three $100-plus payments over the course of 30 minutes to what turned out to be the local cable company, electric company and a mobile phone provider.

Está claro que los sistemas anti-fraude tienen que mejorar, pero tenemos que ser conscientes como usuarios de su existencia y estar preparados para ser ‘frenados’ en cualquier momento.

Adjuntos MIME

Correo malicioso

Ya hablamos sobre como Enviar una imagen por correo en Python. Por eso me pareció interesante leer Adjunto MIMEtizado donde Sergio Brisa da un repaso a las consideraciones que hay que tener a la hora de abrir y analizar un mensaje de correo electrónico sospechoso.

Para ello nos da un repaso a cómo se envía un correo electrónico con adjuntos, la forma de verlo, decodificarlo…

Insertar fórmulas de libreoffice en un CSV

Calculadora

Supongamos que tenemos un montón de ficheros de texto que contienen datos que queremos procesar de una determinada manera con nuestra hoja de cálculo. El proceso de extracción de la información se puede hacer con más o menos facilidad utilizando un script sencillito (con sus grep, awk, …) y generamos algo que parece que tiene filas y columnas con datos.

Si los datos forman agrupaciones sobre las que querríamos hacer ciertos cálculos (por ejemplo, la media de un valor cada cierto número de filas) podríamos trabajar con el propio script, pero a veces necesitamos ‘masajear’ los datos para ver qué sucede.

Por eso estuve el otro día viendo cómo se podría hacer y lo comparto aquí. Primero, libreoffice permite insertar fórmulas en un CSV (comma separated values) siempre que la fórmula vaya entre comillas y al insertarla desde un fichero (importarla) no tengamos marcada la opción (‘Quoted field as text’).

Y luego insertamos la fórmula correspondiente en los lugares que nos parezca oportuno. Por ejemplo:

# Sum of the last 10 rows
sum='"=SUM(INDIRECT(ADDRESS(ROW()-10;COLUMN())&"":""&ADDRESS(ROW()-1;COLUMN())))"'
# Divide the last two columns
avg='"=INDIRECT(ADDRESS(ROW();COLUMN()-2))/INDIRECT(ADDRESS(ROW();COLUMN()-1))"'

En estas fórmulas:

  • [ROW()](https://help.libreoffice.org/Calc/Spreadsheet_Functions#ROW) es el número de la fila actual (puede llevar una referencia). Se le pueden sumar y restar valores, ROW()-10 hace referencia a la fila menos 10. COLUMN() es análogo.
  • [ADDRESS()](https://help.libreoffice.org/Calc/Spreadsheet_Functions#ADDRESS) se refiere al nombre de la celda como texto (y por eso se utiliza el & para concatenar y las comillas (dobles, para que no se interpreten como las comillas que finalizan la fórmula) para introducir texto…
  • [INDIRECT()](https://help.libreoffice.org/Calc/Spreadsheet_Functions#INDIRECT) es la referencia especificada por una cadena de texto.

Finalmente, con SUM hacemos la suma de esos valores. En las dos líneas de arriba vemos dos ejemplos (el primero podríamos usarlo para sumar los diez valores de una columna, y el segundo para hacer la división entre el número de valores -no tienen por qué ser válidos todos-).

¿Se podría hacer de otra manera? Claro, en lugar de los scripts (o con ellos, pero con algo más de trabajo) podríamos incluir las sumas y operaciones en el propio programita.

Otra alternativa sería utilizar sistemas orientados a la generación final del informe, como Documentos de Latex que incluyen código de R a los que tal vez algún día podamos dedicar algo de nuestro tiempo y paciencia.

¿Otras ideas?

Evaluación del generador de números seudo-aleatorios

Azar

Por algún motivo he estado leyendo unas cuantas cosas sobre generación de números aleatorios (la última vez en Aleatoriedad y seguridad) que no soy capaz de agrupar en menos entradas, así que vuelve a salir como tema recurrente.

En How do you know if an RNG is working? justamente hablan de ese tema(afortunadamente con un enfoque diferente): ¿podemos confiar en nuestro generador de números aleatorios? Siempre se habla de que hay que medir la entropía pero no es algo que sea fácil de realizar ni que todo el mundo esté dispuesto a hacer.

If you look at the literature on random number generators, you’ll find a lot of references to statistical randomness testing suites like Diehard or NIST’s SP 800-22. The gist of these systems is that they look a the output of an RNG and run tests to determine whether the output is, from a statistical perspective, “good enough” for government work (very literally, in the case of the NIST suite.)

Luego pasa a analizar las cosas que pueden ir mal (la propia inclusión de código para evaluar un generador podría introducir sus propios problemas, por ejemplo). ¿La conclusión?

Solving this problem, at least in software, so we can ensure that code is correct and does not contain hidden ‘easter eggs’, represents one of the more significant research challenges facing those of us who depend on secure cryptographic primitives. I do hope some enterprising graduate students will give these issues the attention they deserve.

Que sería otro aviso de: no tratéis de hacerlo solos y en casa. O algo así.

El viajante y su Tesla

Mapas

Una entrada muy chula en Traveling Salesman Problem donde se mezcla un problema clásico, el viajante de comercio (Traveling Salesman Problem) y algo de actualidad, como son los coches con batería, que hay que recargar.

El problema del viajante de comercio es un viejo conocido: dada una lista de ciudades y sus distancias encontrar el recorrido más corto que pase por todas ellas y vuelva a la de inicio TSP en Wikipedia. Es uno de los problemas conocidos como NP difíciles (o NP-duros).

La formulación de esta entrada habla de los puntos de recarga de las baterías del Tesla y ese hipotético recorrido entre ellas, con código, mapas y todo para poder jugar con él. Muy chulo.

Mejorando las prestaciones de la biblioteca matemática en glib

Laplace

En Improving math performance in glibc pudimos leer hace algún tiempo una entrada precisamente sobre eso: mejorar las prestaciones de la biblioteca matemática de glib.

Sobre la forma en que algunas funciones trabajan:

Transcendental functions in glibc are implemented as multiple phases. The first phases of computation use a lookup table of pre-computed values and a polynomial approximation, a combination of which gives an accurate result for a majority of inputs. If it is found that the lookup table may not give an accurate result the next, slower phase is employed. This phase uses a multiple precision representation to compute results to precisions of up to 768 bits before rounding the result to double. As expected, this kills performance; the slowest path for pow for example is a few thousand times slower than the table lookup phase.

Esto es, primero buscan algunos valores precalculados en una tabla y si no se tiene el restultado, se calculan de alguna forma.

Sobre la implementación de números grandes:

The multiple precision number is implemented in glibc as a structure with an integral exponent and an array of numbers for the mantissa.

The exponent e can be any integer value and the array d represents the mantissa. Each number in d is a non-negative integer less than 224. Only 32 of the 40 digits are used (the rest being there for additional precision for rounding), giving a maximum precision of 768 bits. The first question one may have is why the mantissa digits are double and not int if their values are going to be only integral.

Y luego ya se mete en detalles más próximos a las operaciones, por ejemplo con la multiplicación y su efecto en el cálculo de potencias:

As much as 97% of the time in computation of pow is spent in the multiplication function! So it is obvious that the first place to look at to get improvements is the multiplication routine.

Lectura interesante.

Aleatoriedad y seguridad

Azar

No es tan frecuente encontrar textos explicando cosas de las que nos gusta comentar aquí. Por eso me gustó leer Cómo se usa la aleatoriedad en la seguridad que es un tema del que hablamos de vez en cuando por aquí (etiqueta random.

Se muestran algunos ejemplos negativos, como el bug de Debian que me suena que habíamos comentado (pero no lo encuentro) y algunos más. También los sistemas de obtención de números aleatorios en sistemas Linux (/dev/random y /dev/urandom).

Por completar, hace tiempo hablábamos de Números aleatorios y seguridad.