Asegurando y promoviendo la innovación en ciberseguridad. En EEUU.

Flores

No es que haga un seguimiento exhaustivo, pero normalmente de estas cosas nos enteramos. En enero de este año el Presidente de EEUU firmó la Executive Order on Strengthening and Promoting Innovation in the Nation’s Cybersecurity donde se refuerza la idea de que hay que prestar atención a la ciberseguridad.

Esto ha cambiado mucho a lo largo del tiempo y muchas organizaciones se van dando cuenta (a veces por las malas) de que efectivamente hay que prestar atención a estos asuntos. No es que creamos que las leyes tengan efectos mágicos sobre los resultados, pero sí que es verdad que señalan direcciones y acciones que muchas seguirán.

La orden tenía 11 secciones y marcaba en algunos casos plazos (fundamentalmente para las agencia gubernamentales) sobre determinadas acciones que debían llevar a cabo, y nombra un enemigo ‘oficial’.

I am ordering additional actions to improve our Nation’s cybersecurity, focusing on defending our digital infrastructure, securing the services and capabilities most vital to the digital domain, and building our capability to address key threats, including those from the People’s Republic of China

Por lo demás, no estoy seguro de que haya grandes novedades reseñables, más allá de la atención por parte de los políticos a cuestiones que son importante y por las que se pasa de largo en muchas ocasiones.

La policía puede limpiar tu sistema

Muro, cruz de madera y plantas

Creo que no es la primera vez que hablamos de esto, pero tampoco estoy seguro. En FBI Deletes PlugX Malware from 4,250 Hacked Computers in Multi-Month Operation nos cuentan como el FBI borró, con autorización judicial, un programa malicioso (malware) de más de 4000 sitios.

The U.S. Department of Justice (DoJ) on Tuesday disclosed that a court-authorized operation allowed the Federal Bureau of Investigation (FBI) to delete PlugX malware from over 4,250 infected computers as part of a “multi-month law enforcement operation.”

Si lo pensamos, es bastante interesante como este tipo de acciones puden resonar en el sentido de que nos parezca positivo que las policías se dediquen a protegernos, aunque el tema puede tener sus propias aristas: ¿entrar en mi sistema para arreglarlo? ¿Y si al arreglarlo estropean otra cosa? ¿Es legítimo puesto que por mi inacción se pueden estar produciendo daños a otros?

El trabajo consistión en borrar los ficheros creados por el programa malicioso, borrar las claves de registro del programa que le permitían ejecutarse automáticamente, crear un programa temporal que borraba el programa después de detenerlo, y algunas tareas más de limpieza.

Según el FBI no era peligroso para las máquinas infectadas.

The FBI said the self-delete command does not affect any legitimate functions or files on the targeted devices located within the U.S. nor transmit any other data from them.

Interesante.

Inteligencia de fuentes abiertas en Bluesky

Pantallas

No hablamos mucho por aquí de OSINT (Open Source Intelligence, inteligencia de fuentes abiertas) pero es un tema que tiene su interés. En Blueprint for Bluesky: An OSINT Guide un artículo sobre el tema, explorando sus usuarios, que serían más bien de izquierdas, según el autor y algunos informes.

Bluesky has developed a reputation as platform with a left-leaning userbase, and this continues to be supported by data following the November surge in registrations.

También habla de su progresión, donde nos dice que será difícil que supere a X o a Threads.

It’s hard to say, at this point, but it is unlikely to overtake Threads or X in numbers of users anytime soon.

Habla un poco sobre la plataforma, incidiendo en su naturaleza descentralizada y la ausencia de planes de pago.

Bluesky offers a decentralized approach to user data. […] at least for the time being, Bluesky doesn’t support any kind of paid subscriptions or premium features.

Y, ya metiéndose en harina, nos habla de las búsquedas en la plataforma, con su versión avanzada. No permite búsquedas basadas en la localización.

For OSINT practitioners already familiar with X’s advanced search language, you will find, unsurprisingly, a number of similarities in Bluesky search. Notably, Bluesky does not support location-based searches (beyond searching keywords or hashtags for a location).

También puede ser de interés el seguimiento de perfiles concretos. En este caso la ventaja sería que no hace falta identificarse para ver perfiles, sus seguidos, seguidores, ….

Unlike X, unauthenticated users can generally view following and follower lists, as well as content posted by a Bluesky account. Just click on either ‘followers’ or ‘following’. And, of course, any posts made by a user will be visible under ‘posts’.

Aunque hay metadatos que no son visibles directamente, pero nos muestra formas de obtener esa información.

Después nos recuerda que la red social permite el seguimiento con RSS y que además es fácil de encontrar.

Finding an RSS feed for a Bluesky account is easy – simply add ‘/rss’ to the end of a user’s profile, and then load the URL into your feedreader of choice.

Después presenta una serie de herramientas tales como Hoaxy, Bluesky Meter, Open Measures, …

Así que ya saben, si hay que hacer averiguaciones sobre alguien, este puede ser un lugar por donde empezar.

Evaluación de métodos para generar las claves RSA

La suerte (?)

En Benchmarking RSA Key Generation no hablan mucho de la evaluación en sí, pero me pareció un recurso valioso porque hablan un poco de los problemas relacionados con la generación de claves (aunque tampoco entra en mucho detalle).

Como sabemos, se trata de generar dos números primos grandes (se habla de 1024 bits en la entrada), multiplicarlos y hacer algunos cálculos más.

The idea is that you generate random 1024-bit numbers until you find two that are prime, you call them p and q, and compute N = p × q and d = 65537⁻¹ mod φ(N)1

Para elegir los primos se suelen utililzar métodos probabilistas, generando un número grande con un generador seudoaleatorio. Se usan algunos trucos, como cambiar el último bit (para que el número sea impar) y los dos primeros (para que el número sea grande).

There is almost nothing special to selecting prime candidates. You draw an appropriately sized random number from a CSPRNG, and to avoid wasting time, you set the least significant bit and the two most significant bits: large even numbers are not prime, and setting the top two guarantees N won’t come out too small.

Luego hay que verificar si efectivamente es primo, normalmente con la prueba de Miller-Rabin, que es un algoritmo probabilista.

Checking if a number x is prime is generally done with the Miller-Rabin test2, a probabilistic algorithm where you pick a “base” and use it to run some computations on x.

El algoritmo puede decirnos que el número no es primo, y entonces lo descartamos; o que no lo sabe, y entonces tenemos que decidir qué hacer. Normalmente se repite unas cuantas veces y se acepta el resultado.

Checking if a number x is prime is generally done with the Miller-Rabin test2, a probabilistic algorithm where you pick a “base” and use it to run some computations on x. It will either conclusively prove x is composite (i.e. not prime), or fail to do so.

Luego habla un poco de la evaluación. Muy interesante.

Manejo de errores en aplicaciones: algunas ideas y estrategias

Teruel. Torre mudéjar.

En The Ultimate Guide to Error Handling in Python una lista de consejos sobre manejo de errores programando en Python que me gustó leer, aunque se pueden aplicar casi a cualquier otro lenguaje.

Primero comenta las dos aproximaciones típicas para afrontar los problemas:

  • Mirar antes de avanzar (verificar que se cumplen las condiciones necesarias para realizar la acción que vamos a llevar a cabo).

The “look before you leap” pattern for error handling says that you should check that the conditions for performing an action that can fail are proper before triggering the action itself.

El problema es que es difícil saber todo lo que puede salir mal a la hora de realizar una acción, así que es fácil que nuestro código siga teniendo problemas. También pueden aparecer condiciones de carrera (cuando algo cambia entre la verificación y la realización de la acción).

  • Es mejor pedir perdón que pedir permiso (esto es, realizamos la acción y si falla, manejamos los errores).

The competing pattern says that it is “easier to ask forgiveness than permission”. What does this mean? It means you should perform the action, and deal with any errors afterwards.

El problema en este caso es que podemos capturar el fallo, pero es posible que en muchos casos la captura sea genérica, poco informativa y cuando vayamos a mirar lo sucedido no lo sepamos muy bien.

On the other side, we need to know what exceptions to write down in the except clause, because any exception classes that we miss are going to bubble up and potentially cause the Python application to crash.

Una vez establecidas estas ideas nos lleva por algunos detalles interesantes.

Primero, saber si estamos ante un error, o se trata de un error de otra parte del código que nos llega.

You either need to introduce a new error yourself and put it in the system for some other part of the application to handle, or you received an error from somewhere else and need to decide what to do with it.

A continuación, hay que tener en cuenta que hay errores de los que nos podemos recuperar, y otros de los que no.

Recoverable vs. Non-Recoverable Errors

Si encontramos errores de los que el código que tenemos es el responsble, podemos manejarlos, añadiendo instrucciones que gestionen el problema y nos permita continuar con la tarea.

What do you think is the best way to handle this case? Well, recover from the error and continue, without bothering anyone else!

También puede ocurrir que los errores vengan de otra parte del código y en ese caso aplicamos la estrategia de mejor pedir perdón que pedir permiso, y añadimos instrucciones para remediar lo que tengamos entre manos.

How do we handle this case? We use EAFP to catch the error, and then we do whatever needs to be done to recover from it and continue.

Pero también pueden aparece errores que no son recuperables. En este caso, podemos interrumpir la ejecución de esa parte del código y lanzar el error hacia arriba, con la esperanza de que en un nivel superior puedan manejarlo.

The only reasonable action that can be taken is to stop the current function and alert one level up the call stack of the error, with the hope that the caller knows what to do.

De cualquier modo, habrá errores que nosotros no hayamos sido capaces de manejar, pero que los niveles superiores tampoco podrán.

Now we have a piece of code that called some function, the function raised an error, and we in our function have no idea how to fix things up so that we can continue, so we have to consider this error as non-recoverable. What do we do now?

Al final, este tipo de errores podrían capturarse al máximo nivel para estar seguros de que el programa no hará nada extraño.

The reason is that at this level we really cannot let any exceptions reach Python because we do not want this program to ever crash, so this is the one situation in which it makes sense to catch all exceptions.

También discute sobre si el tratamiento de errores se debería hacer a más bajo nivel o más alto, y es partidario de llevarlo hacia arriba, para tener código más limpio y fácil de mantener.

In fact, you should design your applications so that as much code as possible is in functions that do not need to concern themselves with error handling. Moving error handling code to higher-level functions is a very good strategy that helps you have clean and maintainable code.

Cambiando el terreno, luego habla de los errores en producción frente a los errores en desarrollo. Parece claro que en la fase de programación el fallo catastrófico de una aplicación no debería ser un problema. Incluso es bueno, porque nos permite encontrar los errores y poder arreglarlos.

During development, there is actually nothing wrong with the application crashing and showing a stack trace. In fact, this is a good thing, since you want errors and bugs to be noticed and fixed.

Y también dice que es más fácil gestionarlo cuando los errores se manejan al máximo nivel (fuera de la lógica del programa).

This becomes much easier to implement when the error handling is in one place and separate from the application logic.

Simplemente el tratamiento sería diferente: en desarrollo dejamos al programa fallar y que pase lo que tenga que psar; en producción, capturamos el problema, informamos y hacemos una salida ‘limpia’.

When we are running in development mode we now re-raise the exceptions to cause the application to crash, so that we can see the errors and the stack traces while working.

Interesante, recordatorio y organización de las ideas.