La Underhanded C Contest 2015 premia el código oculto en verificación nuclear

Fuentes: Results of the 2015 Underhanded C Contest

La organización del concurso Underhanded C Contest ha hecho públicos los resultados de su edición de 2015, una competición anual que premia el código C más sutilmente malicioso escrito con apariencia inocente. Este año se recibieron más de 40 propuestas, todas ellas de alta calidad, lo que obligó a ampliar la lista de finalistas.

El reto, planteado en colaboración con la organización Nuclear Threat Initiative (NTI), recreaba un problema real de verificación nuclear: desarrollar un algoritmo capaz de distinguir ojivas reales de falsificaciones a partir de mediciones gamma. El objetivo oculto era escribir un programa que pareciese riguroso pero que, en la práctica, permitiera a un país anfitrión hacer pasar una ojiva falsa como auténtica con una probabilidad superior a la del error aleatorio.

El artículo repasa las técnicas más repetidas por los participantes. Aproximadamente un tercio de las propuestas recurrieron a ataques de envenenamiento mediante NaN ("not a number"): valores resultantes de operaciones como 0/0 o sqrt(-1), que se propagan por los cálculos y, al compararse con un umbral, hacen que cualquier comparación devuelva false, lo que puede invertirse para forzar un falso positivo. Los jueces descartaron las versiones más burdas —entradas corruptas sin justificación realista, divisiones sin comprobación de cero a la vista— y premiaron los matices: pasar un parámetro por valor en lugar de por referencia para que una bandera de error nunca se active, o aprovechar fallos de sscanf con caracteres Unicode que parecen dígitos para dejar posiciones del array sin inicializar.

El jurado también distingue entre ataques provocados por datos, como espectros sin picos, y ataques provocados por el entorno, como modificar el número de CPUs disponibles durante un cálculo paralelo, un vector especialmente difícil de detectar en una revisión de código.