Seguridad en móviles: un aspecto en que Windows supera a Android

Habitualmente, la perspectiva de interrumpir el trabajo/juego/navegación en que uno está en el computador porque el sistema operativo está solicitando reiniciarse para instalar actualizaciones, no era de lo más agradable. Sobre todo si el sistema en cuestión fuerza dicho reinicio de manera más bien agresiva:

reiniciar-actualizacion-automatica-300x173

 

Te lo puedo volver a preguntar cada diez minutos, veamos quién se rinde primero

Para qué decir cuando uno reinstalaba un sistema operativo desde un DVD, para encontrarse con lo siguiente:

windows_7_updates

¿173? Eso es bastante piola… He visto peores

Sin embargo, Microsoft, al menos, ha moderado bastante la forma en que instala actualizaciones. En Windows 10, con la configuración por defecto, el proceso suele ser bastante transparente para el usuario, a menos que uno voluntariamente apure el proceso de instalación de actualizaciones:

Reiniciar-Actualizaciones-de-Windows-10

La mayor parte de las veces, uno ni siquiera llega a ver este diálogo

Si bien el hecho de instalar actualizaciones no suele ser de las actividades más excitantes que uno puede hacer con su computador, a mí, al menos, me gusta cuando mis sistemas las reciben. Esto responde a dos razones, una de ellas más importante que la otra:

  1. Soy un nerd.
  2. Las actualizaciones mejoran mi sistema y lo hacen más seguro.

Las actualizaciones tienen una razón de ser. Con Windows 10, las actualizaciones automáticas incluyen también mejoras funcionales para el sistema, pero principalmente, su objetivo históricamente ha sido el aplicar parches de seguridad ante vulnerabilidades que se van descubriendo en el sistema. Ningún sistema operativo (sí, ninguno; a ustedes les hablo, apple fanboys) está exento de presentar vulnerabilidades. Y un fabricante responsable, a medida que éstas se van descubriendo, ya sea por sus propios equipos profesionales o por la comunidad, tiene la obligación de ir parchando su sistema. De la misma manera, un consumidor responsable debe ir aplicando estos parches lo más pronto posible tras su publicación, ya que una máquina vulnerable puede, eventualmente, comprometer a otras máquinas en su red. Por esto siempre me han llamado la atención los usuarios que postergan indefinidamente las actualizaciones que van recibiendo; me recuerdan a la gente que reniega de la utilidad de las vacunas, de algún modo.

Pienso que, después de haber tenido un pasado no tan ilustre, la mecánica de actualizaciones en Windows 10 ha llegado a un punto muy usable y conveniente. Para Microsoft es posible corregir defectos que afecten desde un solo archivo del sistema, hasta grandes actualizaciones acumulativas que pueden incluir múltiples actualizaciones previas individuales (aliviando enormemente el peso de los cientos de actualizaciones independientes al reinstalar un sistema operativo, por ejemplo). Esto aplica desde un PC tradicional hasta una tablet con Windows: ambos usan el mismo modelo de actualización, y estoy casi seguro que Windows 10 Mobile (para teléfonos) usa exactamente la misma metodología.

Este modelo, sin embargo, no es el seguido por el sistema operativo que, actualmente, tiene la mayor representación de mercado de todos actualmente: Android. De acuerdo a Gartner, para el 2014 Android tenía el 48,61% de la representación de mercado de todos los otros sistemas operativos de uso común. Pese a esta gran base de usuarios, y después de la divulgación de algunas vulnerabilidades de seguridad bastante graves, como el fallo con la librería StageFright, que permitía la eventual ejecución de código arbitrario en un dispositivo víctima simplemente enviando un mensaje MMS (en la mayoría de los escenarios, el usuario víctima ni siquiera tenía que abrir el mensaje), el modelo de actualización de Android sigue siendo extremadamente lento e inapropiado, y en muchos casos inexistente.

El problema con Android lo componen muchos factores: primero, el tema de la fragmentación. En cualquier momento dado, hay muchas versiones distintas de Android circulando entre los cientos o miles de tipos de dispositivos con este sistema. Sobre esto, además ocurre que muchas veces los fabricantes de equipos “personalizan” el sistema operativo, para agregar funcionalidad, bloatware, o ambos, según lo estimen conveniente. Y en tercer lugar, con los equipos subsidiados por las operadoras telefónicas, en muchos casos el operador debe aprobar una actualización para que sea distribuida entre los equipos subsidiados que funcionan en su red. Entonces, para que un equipo reciba una actualización de seguridad, deben ocurrir todos los pasos siguientes:

  1. Google publica una actualización al código de Android. Esto suele ser más o menos rápido para las versiones más recientes de Android, especialmente después de la problemática que planteó la vulnerabilidad de StageFright (Google se comprometió a publicar parches de seguridad mensuales tras ese caso).
  2. El fabricante del equipo debe tomar la actualización del punto anterior e integrarla a su personalización particular de Android, para después publicarla. Esto puede tomar tiempo, si es que deciden hacerlo; para muchos equipos que no sean último modelo, muchos proveedores simplemente dejan de publicar actualizaciones, para enfocar así sus esfuerzos en los aparatos más modernos o más populares. Samsung y LG han prometido seguir el modelo de actualizaciones de seguridad mensuales propuesto por Google; del resto… no se sabe.
  3. En el caso de equipos subsidiados, finalmente la última palabra la tendrá el operador telefónico, que puede aprobar o no (e incluso volver a modificar, para incluir bloatware, etc.) la actualización de firmware para que finalmente llegue al dispositivo.

Todo lo anterior se confabula para que una enorme mayoría de los equipos con Android no se encuentre totalmente actualizado en lo que a vulnerabilidades de seguridad se refiere. Los equipos que se salvan un poco de esta situación son los Nexus, que reciben actualizaciones directamente desde Google, sin pasar por los pasos 2 y 3 del listado anterior, pero un gran universo de dispositivos no cuentan con esa ventaja.

Microsoft, y Windows en particular, por mucho tiempo tuvieron una mala fama con respecto a aspectos de seguridad. Hoy, esa situación ha cambiado radicalmente, y cada vez más, Android está en la mira como un sistema interesante para hackers poco éticos, corriendo el riesgo de transformarse en “el nuevo Windows” en este sentido. Tal vez, en esta ocasión, Google pueda aprender algo de la experiencia de Microsoft.

Extracción de texto de PDFs de manera automatizada

Vuelvo a reabrir el blog de Kaimon, después de un tiempo cerrado… A ver si esta vez lo conservo y actualizo de vez en cuando. Me dio lata migrar el contenido que tenía en el anterior (también aproveché de cambiar CMS)… así que será una partida en una hoja limpia 🙂

El otro día, tuvimos un problema en el trabajo que implicaba la revisión de varios cientos de informes en formato PDF, buscando un patrón específico de texto en su contenido. Armamos un equipo de personas, cada una con un buen turro de PDFs a su cargo, revisando para tener un listado de aquellos informes que tuvieran el patrón de texto indicado. Obviamente que me pareció que ésta era una tarea totalmente automatizable, y mientras miraba al equipo quemándose las pestañas para poder hacer la tarea en el poco tiempo que teníamos para esto, y siendo que trabajamos en la Dirección de Informática Clínica, pensé “aquí es donde aplicamos nuestro ingenio y conocimiento… ¡Python al rescate!”

monty_python

No, éstos son Monty Python… Me refiero a Python

De más está decir que, sabiendo que el formato PDF es malvado, necesitaría una buena librería para hacer la pega. Así que, tras cinco minutos de buscar en Google, encontré PDFMiner. Ésta es una librería muy simpática que permite, programáticamente desde Python 2.4 o superior (Python 3 no está soportado 🙁 …), extraer el texto y elementos del layout de cualquier PDF. El patrón buscado era muy fácil de modelar con una expresión regular, y con los ejemplos de código incluidos con la librería, podía armar una solución sencilla en unos pocos minutos. ¡Una vez más, Python salvaría el día!

… Y así habría sido, si no fuera por el hecho de que, como mencioné arriba, PDF es un formato diabólico. Al correr el script sobre algunos de los PDFs que debíamos analizar, la extracción de texto devolvía siempre un string vacío. Pronto me pude dar cuenta que estos PDFs, generados por un software al interior de nuestra institución, tienen un atributo que deshabilita la extracción de texto de los mismos (si se han encontrado con un PDF del que no se puede marcar texto para copiar, ésta es la razón). Cuando el PDF tiene este atributo, programas de extracción automatizados no pueden acceder al contenido del mismo.

Hay una forma de pasar por encima de esto: imprimir el PDF en una “impresora virtual” de PDFs, asegurándose de permitir, en la “impresión” virtual, la extracción de texto. Pero, a esas alturas, simplemente me uní al grupo de revisores y terminamos de pasar por todos los PDFs en un par de horas.

De todas maneras, guardo esta librería PDFMiner, que sin duda puede ser útil para una próxima situación.