Mostrando entradas con la etiqueta macOS. Mostrar todas las entradas
Mostrando entradas con la etiqueta macOS. Mostrar todas las entradas

miércoles, febrero 05, 2025

Error "-apple-system Font Not Available" en MS Power Point para MacOS

Hoy os vengo a contar una de esas cosas que me encuentro utilizando todos los días la tecnología, por si os ayuda en algún momento. Y sobre todo, por si has llegado aquí buscando la solución a un error que yo he tenido y he tenido que resolver previamente. En este caso el mensaje de error del título, que sabía por qué se había producido, pero que me costó localizar.

Figura 1: Error "-apple-system Font Not Available" en MS Power Point para MacOS

El mensaje de error "-apple-system Font Not Available" me salió en mi copiar de Microsoft Power Point para MacOS, por una supuesta fuente que había utilizado en una de las diapositivas y que me estaba impidiendo trabajar con normalidad.

Figura 2: Error "-apple-system Font Not Available"

Como me dejaba guardar la presentación, y la presentación no era para compartir o usar en un evento, sino para mí, tampoco me preocupó demasiado, pero en un momento quise exportarlo a PDF y entonces sí que tuve el problema.

Figura 3: La ausencia de la fuente te dificulta la exportación a PDF

Al intentar exportar con la ausencia de esa fuente, se ponía a buscar en Internet, y tardaba una eternidad, hasta que al final tenía que cancelar. No sé si con un time-out mayor al final hubiera sustituido la fuente por otra y listo, pero yo quería resolverlo y sabía por qué había sido.

Figura 4: Se queda "iddle" intentando exportar

El error de la "Font Not Available" se produce cuando copias de otra aplicación y pegas con el estilo original. Es decir, copias y pegas con normalidad, y eso genera automáticamente que se copie y pegue el estilo origen del objeto que estás copiando.

Figura 5: A cancelar y buscar el texto con la fuente not available

Para evitar eso, Microsoft Office tiene una opción desde innumerables versiones atrás en el menú de Paste Special, que es para pegar sin formato -> Unformatted Text, utilizando el formato del punto de destino del objeto, lo que te simplifica la vida, y evita que te pase justo esto.

Figura 6: Paste Special -> Unformatted Text en MS Office

Resolver el problema implicaba repasar todos los textos de la presentación hasta localizar el lugar en el que se encuentra esa fuente. Primero lo hice buscando todos los cuadros de texto, pero me volví loco y no lo conseguí encontrar manualmente. Después probé con las plantillas, y también me volví loco y no conseguí encontrar el texto con la fuente cambiada.

Una búsqueda binaria para acabar antes

Al final, como era MS PowerPoint utilicé una búsqueda logaritmica, en las diapositivas para tardar Log(n) en encontrar el error. Tan sencillo como eliminar la mitad de las diapositivas y probar a grabar. Si daba el error, la fuente maldita se encontraba en la mitad de diapositivas que quedaban, si no, en las que había quitado.

Figura 7: Texto con fuente Calibri (que sí está en el sistema)

Después de eso, volvía a pegar y cortaba la mitad de la mitad donde estaba el error, hasta que localicé la puñetera diapositiva que tenía el texto con la fuente maldita que me estaba dando el maldito error que me estaba ganando la partida.

Figura 8: El número 173 con fuente -apple-system

Al final, lo localicé, y se trataba sólo de un número. Un número que había copiado de una página web de Google Chrome en el que el programador no ha elegido ninguna fuente en los estilos CSS, así que por defecto se aplica -apple-system, la fuente del sistema, que Google Chrome interpreta perfectamente como la de por defecto, pero que no existe como tal en Microsoft Office Power Point.

Figura 9: En el CSS de la Web no se definía fuente.

Al final lo resolví, hice el PDF, y lo pude arreglar, pero como me quitó mucho tiempo, hice las capturas para compartirlo por vosotros, que si alguno lo sufre alguna vez - como ya me pasó con el bug de UX de WhatsApp que a tanta gente le pasó -, podáis arreglarlo fácilmente. Y recordad, siempre Paste Special -> Unformatted Text.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


miércoles, diciembre 25, 2024

Cómo montar tu propio servidor de Inteligencia Artificial: Apple Silicon, Ollama, LMStudio & Pinockio

Ayer vimos en la primera parte de este artículo de "Cómo montar tu propio servidor de Inteligencia Artificial: Modelos Open Source, Parámetros y Hardware NVIDIA" cómo elegir un modelo de lenguaje LLM Open Source, en qué nos debemos fijar, y una serie de alternativas con NVIDIA o, como ejemplo, cómo es mi servidor. Hoy vamos a ver otras alternativas y más cosas a tener en cuenta para poder tener nuestro entorno de pruebas para entrenar algoritmos de Machine Leaning y ejecutar proyectos con Inteligencia Artificial on-premise.

Figura 10: Cómo montar tu propio servidor de Inteligencia Artificial.
Apple Silicon, Ollama, LMStudio & Pinockio

Además de las alternativas descritas, tenemos también la opción Apple Silicon, que también utilizo ya que tengo un Macbook Pro M1 Max con 1TB de disco duro y 32GB de RAM - el jefe tiene un M3 - Con esta configuración puedo levantar modelos de 7B (y algunos de más billions) a una velocidad más que decente, aunque teniendo ya la generación M4 se empieza a notar. Ahora con los M4 la potencia y la velocidad como podéis imaginar es mayor, aunque como pasa siempre en Apple, tenemos que pagarla (a veces a precio de oro). 

Figura 11: Libro de Machine Learning aplicado a Ciberseguridad de
Carmen TorranoFran Ramírez, Paloma Recuero, José Torres y Santiago Hernández

Una configuración mínima para poder ejecutar modelos decentes sería un Macbook Pro M4 con 32GB de RAM y 1TB de disco duro. Esta configuración ronda los 3.000€ pero vas a tener el rendimiento “parecido” (sólo se equipara si tienes el M4 Max) al de una 4090 a la hora de entrenar y ejecutar modelos LLMs (no hablo de juegos ni FPS). Pero recuerda el precio de una 4090 … los Silicon de Apple se han convertido en una buena opción. Pero eso sí, en principio siempre serán más rápidas las NVIDIA pero a mayor consumo energético.

Otra configuración que se está poniendo de moda es usar los Mac mini que rondan los 800€ y crear con ellos clústeres a través del puerto Thunderbolt o de red. Esto nos permite poner por ejemplo 3 Mac mini digamos 16GB por menos de 2.500€ y conectarlos entre ellos para sumar su potencia. Ojo con esto que no es del todo así (hay más factores que influyen en la velocidad que ahora veremos), no tendremos 48GB de VRAM pero sí más o menos unos 30GB. Con la opción de poder añadir nodos bajo demanda de manera muy sencilla. En este vídeo tienes un ejemplo completo de cómo se pueden conectar usando exo que te permite unir cualquier ordenador Mac Silicon en formato clúster.

Figura 13: M4 Mac Mini Cluster

Un pequeño disclaimer. No sólo es la VRAM, también tenemos que tener en cuenta parámetros tan opuestos en su naturaleza como por la velocidad el bus de memoria de los Silicon, el contexto del LLM o la cuantización. Pero sí podemos hacernos una idea del consumo de VRAM usando por ejemplo esta fórmula en este artículo o usar alguna calculadora online como esta para modelos de HuggingFace. Por ejemplo, usando la fórmula del artículo anterior, para levantar un modelo Llama 2 a 70B con cuantización de 4 bits necesitaríamos 42GB de VRAM (en principio y según esta fórmula, yo creo que con menos se podría).

Bien, pues ya tenemos nuestro servidor preparado, es hora de instalar el software necesario para ejecutar todo tipo de modelos o de utilidades que usen la IA. Se me olvidaba algo importante … el consumo eléctrico. En esto los Mac Silicon están a años luz de las gráficas NVidia. Estas requieren fuentes de alimentación mínimo de 750W para gráficas como la 4070 y de 1000W o más para las 4090 mientras que los mac consumen mucha menos electricidad.

Los tokens por segundo marcan la usabilidad

La velocidad de generación medida en tokens por segundo es el factor que define el rendimiento y usabilidad de los modelos locales de LLMs. Los tokens ya sabemos que representan las unidades mínimas en las que se descompone el texto (palabras, sílabas o incluso caracteres), y la rapidez con la que un modelo puede procesar y generar estas unidades determina su eficiencia en tareas como la creación de texto, la traducción o el análisis de datos que hagamos.

Esta velocidad depende de varios factores: la arquitectura del modelo (por ejemplo, cuántos parámetros tiene), la capacidad de cómputo (potencia de la GPU o CPU utilizada) y la optimización del software (uso de librerías como CUDA, cuDNN o frameworks optimizados como Hugging Face Transformers). En nuestro caso, para entornos locales, la limitación de recursos suele ser más estricta que en soluciones en la nube por lo que es importante justar tanto el hardware como el software para maximizar el número de tokens por segundo.

Para optimizar los tokens por segundo en un modelo local LLM, se pueden implementar diversas estrategias enfocadas en hardware y software. Por ejemplo, utilizar una buena GPU compatible con librerías como CUDA y cuDNN nos permite acelerar los cálculos matriciales de la arquitectura Transformer, optimizando la inferencia.

A nivel de software, podemos aplicar técnicas como la cuantización que ya hemos mencionado antes, que reduce la precisión de los parámetros del modelo (por ejemplo, de FP32 a INT8) sin sacrificar significativamente el rendimiento, logrando una mayor velocidad de procesamiento. Por otro lado, el uso de batching eficiente y librerías optimizadas como PyTorch con operadores adaptados a hardware específico, o herramientas como TensorRT, permite ejecutar el modelo de forma más rápida y con un menor consumo de recursos. 

Por último, reducir el tamaño del modelo mediante técnicas como pruning o utilizar modelos más ligeros, como los LLMs optimizados para dispositivos locales (por ejemplo, LLaMA 7B o GPTQ), también ayuda obtener una aceptable generación de tokens por segundo en un hardware limitado.

Software a utilizar: Ollama, LMStudio & Pinockio

Lo que voy os a contar ahora es independiente de si tienes un GNU/Linux, Windows o Mac Silicon, todos sirven en las tres plataformas. Voy a centrarme solamente en tres que creo que son indispensables y sobre todo sencillas de utilizar. Vamos a empezar con dos que serán el motor principal de nuestro servidor: Ollama y LMStudio.

Ollama es una plataforma pensada para que puedas ejecutar modelos de lenguaje directamente en tu máquina de una manera sencilla y eficiente. Es como el “plug and play” de los LLMs: descargas, configuras y en unos minutos tienes funcionando modelos como LLaMA, Mistral o Vicuna. Su gran ventaja es que está optimizado para funcionar en hardware local, ya sea un Mac con Apple Silicon o una GPU NVIDIA decente, lo que te permite usar modelos bastante potentes sin depender de la nube ni complicarte con instalaciones infernales. Además, la biblioteca de modelos de Ollama ya viene ajustada y lista para usar, lo que te ahorra tiempo y dolores de cabeza.

Figura 15: Ollama

Por otro lado, LMStudio tiene otro enfoque porque está pensado más para el fine-tuning y personalización de modelos, RAG, etcétera. Aquí no solo ejecutas un LLM, sino que lo adaptas a lo que necesitas: puedes entrenar tu propio modelo con datasets específicos y ajustar los parámetros para obtener resultados optimizados y personalizados. Es ideal si tienes un proyecto concreto y necesitas que el modelo “hable” o “sepa” del contexto que quieras. 

Figura 16: LMStudio

Mientras que Ollama te permite desplegar un modelo rápidamente y sin complicaciones, LMStudio te da el control completo sobre el proceso de entrenamiento. ¿La diferencia clave? Ollama es perfecto para usar modelos preexistentes, mientras que LLMStudio es tu herramienta si quieres crear o hacer fine-tunning de un modelo a medida (aunque por supuesto, también te permite ejecutar modelos).

Pinokio es en cambio una herramienta que nos va facilitar mucho la vida. Se trata de una especie de “hub” de aplicaciones que permite instalar, ejecutar y controlar de manera programada y local cualquier aplicación de IA con un solo clic. Pinokio automatiza todo el proceso, por lo que sólo tienes que centrarte en utilizar la herramienta. 

Figura 17: Vídeo instalación y uso de Pinokio

Esto sabiendo lo complicado que es a veces ejecutar entornos de IA (por ejemplo por las dependencias), la verdad es que es una gran ayuda. Pinokio tiene su propio repositorio de GitHub aunque se puede instalar directamente en MacOS, GNU/Linux o MS Windows descargando la aplicación desde su web.

A partir de este punto ya tenemos todo lo necesario para poder ejecutar todo tipo de aplicaciones de IA en local, ya sea para generar imágenes, vídeo, texto, LLMs, etcétera. Existen herramientas como Ollama WebUI (que puedes instalar desde Pinokio) que te ofrecen una interfaz parecida a ChatGPT para tus modelos locales de Ollama, puedes llamar a tu modelo a través de una API, usar RAG, etcétera.

This is the way …

El futuro, en mi humilde opinión, se basa en agentes y el uso de IA local (ambos combinados) para crear una especie de ecosistema de “microservicios” inteligentes locales creando tareas complejas partiendo de tareas más sencillas. Con la llegada de GPUs más potentes (como la RTX 5090), nuevas tecnologías de hardware como Groq, el desarrollo de clústeres accesibles (como los Mac mini) y soluciones de cuantización más eficientes, la capacidad de ejecutar modelos LLM de alta complejidad en hardware asequible será cada vez algo más habitual. Además, herramientas que faciliten el fine-tuning local y las APIs conectadas a servicios propios permitirán que cada usuario o empresa ajuste la IA a su medida.

Prácticamente cada día entramos en nueva era de la inteligencia artificial, donde la privacidad, el control de costes y la potencia accesible son cada vez más una parte importante a tener en cuenta. El hardware sigue mejorando, el software simplificándose y los modelos avanzando; el objetivo, poder controlar nosotros mismos esta tecnología (democratizarla) que está cambiando día a día toda la Humanidad (por mucho que haya gente que no crea aún en la IA o diga que estamos en un punto muerto o sin salida). 

Happy Hardware Hacking Hackers!!! 

Autor: Fran Ramírez, es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

 Contactar con Fran Ramírez en MyPublicInbox

domingo, julio 21, 2024

Aprendizajes del Crowstrike BSOD: ¿Debes abandonar Windows?

Supongo que muchos os habéis enterado ya del Blue Screen Of Death que ha provocado el EDR de Crowdstrike en todas las máquinas Windows. Supongo que algunos compañeros aún estáis arreglando máquinas o con los planes de contingencia de muchos de los servicios que han dejado de funcionar. Porque sí, ha sido una buena, y en mis grupos con colegas de profesión en otras empresas, se han pasado un viernes y un sábado divertido.

Figura 1: Aprendizajes del Crowdstrike BSOD.
¿Debes abandonar Windows?

Se pueden sacar muchos aprendizajes de este caso, y muchos de ellos acercando el ascua a su sardina. También he visto a muchos tecnicoless hablando con recetillas de "Windows malo", "Linux bueno", o "Mac Mejor", como si en GNU/Linux o en MacOs no funcionaran las cosas de manera similar y estuvieran ajenas a estas situaciones. Tecnicoless. Todos tienen su modo protegido, todos tienen sus programas que se han metido en modo protegido y la han liado parda y todos han tenido "Security Nightmares" alrededor de parches. 

Aprendizajes del Crowdstrike BSOD: ¿Debo abandonar Windows?

Os podría contar casos de todos los sistemas operativos, pero no se trata de eso, sino de que el mensaje y los aprendizajes de estos incidentes tengan que venir desde los expertos en tecnología, y no desde los tertulianos y aprovechados que se suben a cualquier trending topic de las redes social para ganar flow con el populismo. Es un problema técnico del que tenemos que aprender cosas y mejorar cosas.
Instalar cosas que corren en Ring0 siempre es un movida. En las máquinas GNU/Linux, gracias a esta posiblidad, aparecieron los Rootkits, que se migraron exitosamente a Windows y MacOs. Estos bichos malos implicaba que, para defenderte de ellos, había que restringir qué se puede instalar en Ring0, con programas de certificación para los fabricantes de drivers en nivel privilegiado que pudieran extender las funciones de protección en el equipo. Algunos drivers de red, de gestión de dispositivos, de seguridad, necesitan ese nivel de acceso a las funciones del sistema operativo.

(Revisada y Ampliada) de Carlos Álvarez y Pablo González en 0xWord

Uno de los certificados es la empresa Crowdstrike, que tiene un EDR (EndPoint Detection & Response) para detectar amenazas de seguridad capturando eventos del sistema operativo y la red y analizándolos en cloud, que desplegó una actualización de ese driver que "funcionaba en el ordenador del programador", pero que hace un acceso a una zona de memoria protegida con el nivel de privilegio de Ring0, lo que implica que no estén activas las protecciones de Ring3 que hubieran tumbado al programa y listo.
Como estaba en Ring0, el sistema operativo, por seguridad y protección de la integridad de los datos, se detiene haciendo un Halt con un BSOD. El despliegue de este agente en Ring0, que se ocupa de detectar amenazas se convirtió en la gran amenaza a la continuidad de negocio, y ahora hay que entrar en planes de contingencia para recuperar todos los sistemas. Con cosas curiosas que nos hacen pensar.

En primer lugar, como es un fallo con un driver defectuoso que se carga en el arranque, implica que los equipos no arrancan. Así que si quieres tomar control del equipo hay que empezar con arranques en "Safe Mode" del sistema operativo, lo que evita que se carguen drivers de terceros en el kernel. Después, se desinstala o actualiza, manualmente o con un script, el driver dichoso. Y una vez hecho esto ya podemos arrancar otra vez el equipo y tener acceso a la red, y a todas las funciones del sistema operativo.

Con este panorama, hay que ver cómo hacer este proceso, que como os podéis imaginar no es desatendido y ni remoto, lo cual es una movida "big time", porque estamos en un mundo de equipos remotos, de máquinas virtuales, de portátiles con USBs restringidos, incluso físicamente, de equipos que no están mapeados, etcétera.  Y no muchas empresas están preparadas para responder.


Figura 5: Cómo gestionar la Seguridad Informática de una empresa

A mí me hizo reflexionar en esta situación sobre muchas cosas. La primera y más evidente es que los procesos de Quality Assurance en los despliegues de las nuevas versiones deben tener mucha más protección contra el error humano. Procesos de Deployment con DevSecOps en entornos de prueba y pre-producción, etcétera. Muy evidente, y es lo que marca la diferencia entre una empresa que quiere hacer productos y servicios digitales y otra que no.

El segundo pensamiento fue, evidentemente, en el programa de certificación de estos drivers en Ring0 y lo que puede significar en el futuro. Los equipos de Microsoft de certificación habrán sentido en sus carnes la importancia de su rol, y los controles para garantizar que no llegué un software en mal estado a miles de millones de máquinas por mucho que esté creado por una empresa certificada, no han sido suficientes. Y esto va a obligar a fortalecer todos estos procesos. Y entender bien, bien, por qué ha pasado. Al final, todos estos fabricantes se convierten en una gigantesca "Supply Chain" de Windows que hay que controlar. Si se instala en Ring0, entones es parte del funcionamiento básico del sistema.
Por otro lado, esto nos puede llevar a entornos como el de iOS, donde Apple se ha negado a dar acceso al nivel protegido de su iPhone o iPad a nadie. Imaginaos un mundo en el que tuviéramos este caso en iPhone, que no tiene para arrancar en modo a prueba de fallos y cargarle con un USB un parche. Hubiera sido un caos mundial espectacular. Así que es probable que vayamos a un mundo Ring0-less para la mayoría de los sistemas operativos, y donde las técnicas de Jailbreak sean una línea que se se desarrolle mucho más, donde los exploits a bajo nivel con instrucciones del microprocesador sean la siguiente línea de batalla, como hemos visto con GhostRace y los Speculative Use-After-Free Exploits.

También estuve pensando que los grandes proveedores de cloud con infraestructuras IaaS jugaban un gran papel, porque seguro que se podría - en muchos entornos - hacer una deshabilitación desde la nube del driver malicioso. Un entorno de DevSecOps en Cloud ha permitido scriptar el arranque en Safe Mode, aplicar el hot-fix, y re-arrancar el servicio, así que los entornos bien afinados de DevSecOps sacando el máximo de Docker & Kubernetes, ha ayudado. También los entornos VDI en Cloud, lo que da mucho que pensar a cuánto de moderna es la arquitectura IT de tu compañía.
Por supuesto, si tus servidores están en IaaS hay un Ring0 del que te tienes que preocupar, pero si tienes toda tu arquitectura tecnológica en PaaS y los servicios en SaaS, pues no hay Ring0 del que preocuparte tú, lo que debería pensarte si aquel Go-To-Cloud con Lift & Shift fue el más adecuado, o era necesario hacer re-ingeniería a Moderm Cloud Apps.

Dicho esto, dentro de los planes de contingencia de tus entornos de Fail-Safe, debes tener todo preparado para que el bug esté en los procesos que corren en Ring0 - e incluso en el Kernel de los sistemas operativos base de tus servicios -, por lo que si tienes una copia completa de tu entorno preparada para tomar el relevo ante una caída como esta, más vale que tengas en mente este caso, porque si te actualizan al mismo tiempo el nodo activo con un bug como este en Ring0, y en el entorno pasivo tienes el mismo bug, pues has hecho un pan como dos tortas.

En fin, muchos aprendizajes y buenos sobre todo lo que en tu empresa podría estar mejor, pero pensar que la solución es "¡pásate a GNU/Linux!" o "Yo uso Mac", y crees que con esto vas a estar libre de que te pase en el futuro... ¡enhorabuena, eres un Tecnicoless!. 

PD: He dejado los libros de 0xWord relativos a la seguridad de los sistemas operativos y la charla de Cómo gestionar la Seguridad Informática de una empresa para que se los recomendéis a todos los Tecnicoless que opinen y den recomendaciones de este tema sin tener ni "·$·$%&%$& idea. Sólo a ellos.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


lunes, junio 03, 2024

Mac OS Sonoma: El "Misterioso" caso de la Operación en Curso que no existe en tu MacOS

Hoy lunes os voy a dejar un pequeño UX-Issue de Mac OS Sonoma (versión 14.1.1) en mi caso que me tuvo un poco loco pensado que podía ser un proceso malicioso de malware moderno, y que no era más que un mal mensaje de UX que te lleva a buscar el problema donde no está. Al final, reproducir el caso es muy sencillo, y puedes probarlo tú mismo. No es nada más que algo que Apple puede arreglar desde UX para mejorar la vida de los usuarios, y no dar sustos a los paranoicos del hacking. Os cuento el caso, que tiene que ver con un mensaje de error de procesos que no deberían existir que me tuvo preocupado. 

Figura 1: Mac OS Sonoma y el "Misterioso" caso de
la Operación en Curso que no existe en tu MacOS

Cuando de dedicas a lo que me dedico yo, que hasta tenemos un libro de MacOS Hacking donde hablamos de estos temas, los mensajes "raros" no se ignoran a la ligera. Veréis, cuando voy a dar una charla con mi MacBook, intento dejar el escritorio vacío. Esta carpeta "Deskotp", para mí, es como la bandeja de entrada de mi buzón. Lo que está ahí es lo que tengo que procesar, el resto está borrado o en carpetas de proyectos. 
Para los que no entendáis mi locura a la hora de gestionar mi tiempo, que esto va de clavar clavos, donde decido no clasificar el correo electrónico, puede parecer algo caótico o radical, pero es que mi clasificación de ficheros es muy minimalista. Una carpeta Telefónica, otra MyPublicInbox, otra Personal, otra  Charlas, 0xWord y una decena de carpetas de primer nivel. Nada más. Y si necesito un documento, uso el buscador. Además, no uso nube para mis archivos, así que tengo volcados cifrados en discos externos, y carril.

Figura 3: Un vista "parcial" de mi caótico "Desktop". Mi estructura de archivos,
como podéis ver, es la default, porque no uso nada de esto en mi MacBook.

De esta forma, cada vez que voy a dar una charla, limpio temporalmente el "Desktop" de la manera que a mí me gusta que es, mover todos los ficheros que no voy a usar en la charla a una carpeta temporal que llamo Folder o Folder2, o lo que sea, y listo. Para ello uso la opción de "New Folder with Selection" y listo. Luego, una vez terminada la charla, vuelvo a poner los archivos en el Desktop otra vez, y liso. Es "my way" desde hace años. Es como "recoger la habitación sólo para la inspección de la mami" y poner todas las cosas "debajo de la alfombra".

Figura 4: El mensaje cuando estaba trayendo de vuelta a Desktop
todos los ficheros escondidos debajo de la alfombra temporalmente.

El tema es que después de hacer esto muchas y muchas veces, un día me salió el mensaje de arriba. De que hay un proceso que está bloqueando la operación. Y saltaron las alarmas. Que cuando pasa esto, después de años en la investigación del hacking, piensas varias cosas:
  1. Me han hackeado. Esto perdido. Panic Button!! Es un Malware Moderno seguro.
  2. ¿Ya se ha petado algún programa y me ha bloqueado el sistema de ficheros? ¿Qué programa puede estar roto?¿Qué acabo de usar? Vamos a cerrar todos los programas y volver a probar.
  3. ¿Será un bug? ¿Acabaré de encontrar un hilo sobre el que tirar que me puede llevar a una nueva técnica de hacking? Vamos a reproducirlo.
Os garantizo que por mi cabeza - y supongo que por la de muchos "tarados" que nos dedicamos a esto, pasan las tres cosas que os he puesto, y justo en ese orden. Primero piensas que te has comido un Malware Moderno, y lo que te preocupa es "¿Cómo puedo ser tan luser y no conocer este nuevo malware?". Y si no, que venga Sergio de los Santos aquí a negar que no piensa eso cada vez que aparece un mensaje no esperado.

Lo siguiente es revisar y cerrar todos los programas, para asegurarte de que no es una aplicación a la que se le ha ido un puntero. Pero una vez hecho esto, pasas a la fase de querer saber qué ha sido e intentar reproducirlo de todas, todas. Y es lo que os voy a contar ahora mismo.

Reproducción del Bug "Misterioso"

Si habéis visto el mensaje, te puede llevar a un a conclusión errónea - como la de que tengas un malware o que haya un proceso colgado -, porque realmente es un mensaje de UX "misleading", o engañoso. Y lo que tenía que hacer era repasar mis pasos hacia atrás y conseguir volver a un momento donde no me diera el paso. Y haciendo un poco d Command+Z en Finder (que se puede hacer) y en mi memoria. Todo volvió a la normalidad y el mensaje desapareció. ¿Por qué? Pues el error era más sencillo de lo que parecía.

Figura 6: Una carpeta "madre" se llama igual que su carpeta "hija"

Como podéis ver en la imagen anterior, tengo una carpeta dentro de una carpeta que se llama como la carpeta madre. Esto es tan sencillo porque esto de "recoger las cosas debajo de la alfombra", a veces lo hago de forma recursiva.  Pero claro, cuando eso lo hago sólo para "ocultar" temporalmente los ficheros, y luego copio estos ficheros para ponerlos en la carpeta "Desktop", donde está la carpeta madre, va a pasar lo que os imagináis cuando le de a pegar en la carpeta superior.

Figura 7: Al intentar devolver en este escenario los ficheros...

Sí, sucede lo que os imagináis porque estáis en este artículo y estáis leyendo este artículo, pero no es lo que debería suceder. Lo que pasa es que hay una carpeta en el destino que se llama como la que quiero mover, así que no puede moverla. Pero... ¿es realmente este el mensaje que debería de darme?

Figura 8: Mensaje de error reproducido al pegar los ficheros y carpetas

La respuesta es que no debería ser este el mensaje de error. Es un mensaje de error "misleading" y por lo tanto se debería arreglar este bug a nivel de UX. El mensaje que debería salir es el que esperamos todos, que es el que pasa cuando copias un fichero en una ubicación donde existe un fichero con ese nombre.

Figura 9: El mensaje CORRECTO que debería salir
con dos ficheros iguales en la misma ubicación

Pero lo más curioso es que esto, si se hace copiando "sólo" una carpeta, está resuelto y Finder de MacOS Sonoma lo resuelve bien, ya que te dice que hay una carpeta más antigua con ese nombre y te da las opciones de lo que quieres hacer. Es decir, no es un mensaje "misleading". 

¿Y entonces cómo es esto?

Pues el problema es que cuando se copian archivos en lotes, y se da el caso de una carpeta duplicada con el nombre tal y como os he descrito, el gestor de excepciones no está "fino", y acaba en un mensaje de error que NO es correcto. Vamos, que realmente es un Bug de UX, aunque no de seguridad. Y esa es una de esas muchas historias de aventuras que vivo yo sólo con mi ordenador. ¿Te pasa a ti también alguna vez? ¡Te queremos!

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


domingo, abril 21, 2024

Tu cuenta de MyPublicInbox con AppleID

Durante este tiempo, los compañeros del equipo han estado trabajando para tener la plataforma de MyPublicInbox más adaptada a los usuarios de Apple que tengan iPhone, iPad, o MacOS en su día a día de trabajo. Han estado haciendo una versión WebApp de MyPublicInbox para iOS especial, que tenga validada la UX en este sistema operativo, y ahora han añadido la posibilidad de crearse una cuenta con AppleID, y utilizarla para iniciar sesión de forma mucho más transparente.
Cuando se crea una cuenta con AppleID, el "Proveedor de Indentidad" (Identity Provider o IdP) es Apple, y eso quiere decir que él es que autentica usuarios y contraseñas, por lo que en el proveedor de identidad de MyPublicInbox no hay ningún dato de usuarios y contraseñas de esos usuarios.
Cuando se crea una cuenta, o se hace login, o se recupera una contraseña, es Apple quién gestiona todos esos procesos, limitándose MyPublicInbox a preguntar si ese usuario está autenticado o no, y si le tiene que dar acceso o no a la plataforma con esa cuenta. Lo mismo que sucede si creas tu cuenta e inicias sesión co LinkedIn o GoogleID.
Por debajo todo está funcionando con Tokens OAuth de autenticación y autorización, por lo que para el usuario del ecosistema Apple es una vida más sencilla, y una forma más cómoda de gestionar su identidad al no tener que preocuparse de nuevas credenciales para MyPublicInbox.

Además, como ya os he dicho, hemos hecho la WebApp de iOS para usuarios de iOS, que permite tener como una App más del sistema la cuenta de MyPublicInbox y con un clic en ella acceder a todos los servicios. Tienes en este artículo "Cómo configurar la WebApp de MyPublicInbox en iPhone & iPad". 

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


miércoles, diciembre 27, 2023

MLX o ML Explore: El framework de Apple para Inteligencia Artificial

Tras haber sido evaluado durante todo este verano, Apple acaba de anunciar MLX o ML Explore, un framework para Machine Learning diseñado específicamente para Apple silicon. Este hecho marca un hito importante en la trayectoria de la empresa en el ámbito de la IA. Con MLX, Apple intenta posicionarse de manera estratégica en el competitivo mundo de la Inteligencia Artificial.


El diseño de MLX está inspirado en frameworks existentes como PyTorch o JAX, pero a diferencia de estos, ofrece un soporte para un modelo de memoria unificada, lo que significa que los arrays pueden vivir en memoria compartida y las operaciones pueden realizarse en cualquier tipo de dispositivo (CPU o GPU) sin tener que hacerse copias de datos, no como en otros frameworks donde por ejemplo es necesario mover estructuras de datos un dispositivo a otro.

Figura 2: Libro de Machine Learning aplicado a Ciberseguridad de
Carmen TorranoFran Ramírez, Paloma Recuero, José Torres y Santiago Hernández

La API Python ofrecida es muy similar a Numpy, con ligeras excepciones, además de ofrecer una API C++ también similar a la API Python, permitiendo accesibilidad para una amplia gama de desarrolladores con diferentes preferencias y experiencias.


Para poder realizar la instalación de MLX debes comprender algunos conceptos básicos. En esta página se puede consultar toda la documentación necesaria para empezar a utilizar este framework. En el caso de usar Python, simplemente habría que hacer pip install mlx. 

Figura 4: Libros de Python para Pentesters y Hacking con Python
de Daniel Echeverri publicados en 0xWord.

En este caso para poder utilizar este framework se necesita un chip de la serie M (Apple Silicon), una versión Python >=3.8 y MacOS >=13.3, aunque se recomienda bastante utilizar MacOS 14 (Sonoma). El paso más básico es la creación de un array. Para ello, importamos mlx.core:

import mlx.core as mx
Y ya podemos proceder a la creación del array:
a = mx.array([1, 2, 3, 4])
b = mx.array((9, 8, 7, 6))

Cuando creamos un array en MLX no hay que especificar su localización, ambos viven en memoria unificada. Como ya se ha comentado, a diferencia de otros frameworks, no es que los arrays se muevan a dispositivos (como a la GPU), sino que simplemente se especifica el dispositivo a utilizarse cuando ejecutas la operación deseada que hace uso de estos arrays:

mx.add(a, b, stream=mx.cpu)
mx.add(a, b, stream=mx.gpu)

Si no existen dependencias entre las operaciones estas se ejecutarán en paralelo. En caso de existir alguna, MLX gestionará automáticamente que se ejecute la operación dependiente al finalizar la independiente. En el repositorio oficial de MLX puedes ver ejemplos para generar imágenes con Stable Diffusion, generar texto con un modelo de lenguaje y transcribir audios con Whisper, entre otros.

Acercando la IA avanzada al iPhone

El pasado 12 de Diciembre de este año, Apple ha publicado el artículo "LLM in a flash: Efficient Large Language Model Inference with Limited Memory", destacando un posible avance significativo en el campo del procesamiento de lenguaje natural. Los LLMs se están convirtiendo en algo esencial como asistentes en nuestra vida cotidiana, pero su alta demanda de recursos computacionales y de memoria representa un desafío, especialmente en dispositivos con DRAM limitada. El artículo aborda esta problemática mediante un enfoque que consiste en almacenar los parámetros de los LLMs en memoria flash, transfiriéndolos a DRAM según sea necesario. Este método no solo mejora la eficiencia, sino que también permite la ejecución de modelos que exceden la capacidad de memoria DRAM disponible.


En el documento, se introducen dos técnicas principales para optimizar este proceso. La primera, conocida como Windowing, reduce la transferencia de datos mediante la reutilización de neuronas ya activadas. La segunda técnica, Row-Column Bundling, se adapta a las fortalezas de acceso secuencial de la memoria flash, permitiendo leer datos en bloques más grandes. Estas innovaciones colectivas posibilitan la ejecución de modelos hasta dos veces más grandes que la capacidad de DRAM disponible, logrando un aumento notable en la velocidad de inferencia, que varía entre 4 y 25 veces más rápido que los métodos de carga convencionales.

Este progreso abre nuevas perspectivas para la implementación eficaz de LLMs en dispositivos con restricciones de memoria, lo cual puede marcar un hito importante en la evolución de la tecnología de procesamiento de lenguaje natural. 
Con el nuevo framework MLX, que hace uso de todo el potencial del hardware de Apple, y las nuevas investigaciones que va realizando su área de Machine Learning Research, parece haber claras intenciones de aprovechar al máximo todo lo que la Inteligencia Artificial pueda ofrecer en todos sus dispositivos, desde el Mac al iPhone, pasando por el iPad.

Conclusiones

Aunque Apple ha mantenido un perfil relativamente bajo en el escenario de la IA Generativa hasta ahora, el lanzamiento de MLX podría ser un indicativo de futuras iniciativas y desarrollos. Es una declaración de intenciones, a través de ML Explore y las nuevas investigaciones Apple está facilitando un terreno fértil para la innovación y el desarrollo en IA, lo que podría tener implicaciones significativas para el futuro de la tecnología y su integración en nuestra vida cotidiana. 
Puedes consultar todas las investigaciones que realiza Apple en el mundo de la Inteligencia Artificial en la web del Machine Learning Research at Apple, donde publican sus trabajos el equipo de investigación en Machine Learning.

Un saludo,

Autor: Javier del Pino, intership en Ideas Locas

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares