Esteganografía práctica. Ocultar información en imágenes PNG





En los concursos de hackers y los juegos CTF (Capture The Flag), a veces se encuentran acertijos de esteganografía: se te da una imagen en la que necesitas encontrar un mensaje oculto . Probablemente la forma más fácil de ocultar texto en una imagen PNG es escribirlo en uno de los canales de color o en el canal alfa (canal de transparencia). Para identificar estos "marcadores" existen herramientas especiales como stegsolve , pngcheck y stegdetect , a veces los concursantes tienen que jugar manualmente con filtros en GIMP o Photoshop.



Sin embargo, el progreso no se detiene y, recientemente, se utilizan cada vez más otros métodos para ocultar datos, por ejemplo, el llenado PNG. Veamos cómo se hace esto.



Comencemos con una pequeña introducción teórica a las partes "invisibles" de PNG.



canal alfa



Cuando se muestra una imagen en la pantalla de una computadora, los colores se crean combinando componentes rojo, verde y azul. Estos tres planos de color se denominan canales. Por lo general, se escriben como RGB.



Además de estos tres canales, PNG puede tener un cuarto canal llamado alfa (indicado por la letra A) para determinar el nivel de transparencia. La imagen RGBA resultante determina los colores visibles y el grado de transparencia.



En la mayoría de los formatos gráficos, el canal alfa es un valor de 0% a 100% (o de 0 a 255 en bytes). Un valor de 0% (negro) indica un lugar en la imagen donde debería estar la transparencia total; aquí se ignora el valor RGB y el fondo debajo de la imagen es completamente visible. Un valor alfa del 100% (blanco) significa que los canales RGB son completamente opacos. Los valores intermedios determinan cuánto mezclar el fondo con el valor de píxel RGB.





PNG Degradado



alfa Los valores de degradado alfa se utilizan normalmente para combinar una imagen con otra imagen o página web. Los degradados alfa están disponibles en PNG, WebP, ICO, ICN y otros formatos ráster. El formato GIF solo admite booleano (un píxel es transparente o no).



El canal alfa es solo una de las opciones para colocar texto oculto. Pasemos al relleno PNG para escribir datos directamente en un archivo binario.



Contenido PNG por columnas



El formato PNG es bastante simple . Cada archivo comienza con una firma estándar de ocho bytes, aquí los valores decimales 137 80 78 71 13 10 26 10. El primer byte se selecciona fuera de ASCII para que ningún editor confunda accidentalmente la imagen con un archivo de texto. Los siguientes tres bytes corresponden a las letras P, N, G. Luego, un salto de línea de DOS (13 10), un marcador de fin de archivo de DOS (26) para evitar que el programa de tipo imprima toda la basura binaria y un marcador de nueva línea de Unix.



Después del encabezado, comienzan los fragmentos con una estructura estándar. Primero viene el bloque IHDR que indica el ancho y alto de la imagen, espacio de color, número de bits por píxel, método de compresión, método de filtrado e indica la presencia / ausencia de codificación entrelazada. Se asignan cuatro bytes para el ancho y el alto, un byte para los demás parámetros.



A esto le sigue un bloque de texto opcional con metadatos de texto, como el nombre del programa que generó el archivo PNG. Puede escribir información de texto sin formato en bloques de texto.



IHDR y tEXt van seguidos de bloques IDAT con valores RGB o RGBA comprimidos para píxeles de mapa de bits. Al renderizar PNG, es procesado por IHDR, se asigna un búfer en la memoria para la imagen, los datos se extraen del formato comprimido y se escriben en el búfer píxel a píxel. El archivo PNG termina con un bloque IEND.



Al final de cada bloque hay una suma de comprobación CRC para ese bloque, que se calcula utilizando el algoritmo estándar .



Por lo general, las imágenes PNG contienen 8 o 16 bits de información por canal RGB o RGBA, es decir, se emiten de tres a ocho bytes por píxel. En este formato, todos los bytes están ocupados con información útil sobre el color y la transparencia, de modo que al final de cada línea de la imagen gráfica, no tenemos lugar para escribir datos arbitrarios.



Pero para las tareas de esteganografía, debe saber que PNG también admite una profundidad de color más baja: 1 bit (2 colores), 2 bits (4 colores) y 4 bits (16 colores). En tal situación, resulta que la información sobre varios píxeles se almacena en un byte. Aquí es donde aparece la posibilidad teórica de llenado "horizontal" de PNG con datos extraños. Si el ancho de la imagen en píxeles no es múltiplo de ocho, entonces el último byte de la línea contiene bits sin usar, que juntos forman una "columna de píxeles" sin usar.



En el caso de una imagen de 1 bit, pueden quedar hasta 7 bits libres al final de cada línea, que no serán procesados ​​por el analizador. En el caso de una imagen de 2 bits, hay hasta 3 bits libres en el último byte. Herramienta en línea FotoForensicsencuentra esas "columnas de píxeles" no utilizadas en imágenes PNG .



Sin embargo, las imágenes PNG con poca profundidad de color son muy raras, por lo que este método de esteganografía puede considerarse exótico. Si encuentra una imagen PNG con 2, 4 o 16 colores, este hecho por sí solo es sospechoso y puede iniciar una verificación del relleno PNG en las columnas.



Un asunto completamente diferente es el relleno de PNG fuera de los bordes de la imagen. Este es un método más simple de esteganografía que le permite ocultar mucha más información en la imagen.



PNG: rellene más allá de los bordes de la imagen



El relleno de post-píxeles PNG se usa a menudo en varios juegos, rompecabezas y concursos, no solo en piratería. Así es como funciona este método:



  1. Tome una imagen PNG (con cualquier profundidad de color).





  2. .





  3. PNG, .

  4. hex-.

  5. IHDR. IHDR.





  6. IHDR — , — . c 00 00 01 9D (413 ), , 00 00 01 7E (382 ).





  7. CRC ( PNG CRC , IHDR), . CRC , PNG- IHDR.



    .





Tenga en cuenta que los datos secretos permanecieron en la parte inferior de la imagen. El tamaño del archivo no ha cambiado: 335,906 bytes. Es solo que el analizador no procesa estos píxeles ahora, y la parte inferior de la imagen no se muestra en la pantalla.



Es fácil adivinar que en la parte "secreta" de la imagen, puede ocultar no solo una inscripción de texto, sino también datos arbitrarios. Por ejemplo, podemos escribir un archivo RAR protegido con contraseña allí. La imagen del mensaje secreto se puede publicar en Habrastorage o en cualquier otro alojamiento compartido. El mensaje será recibido únicamente por la persona con la que previamente acordó el método de transferencia de información y acordó una contraseña. De esta manera, el malware puede transferir la carga útil a través de Habr y otros servicios de alojamiento público.






Publicidad



¡VDS para sitios de alojamiento se trata de nuestra epopeya ! Todos los servidores "listos para usar" están protegidos contra ataques DDoS, instalación automática de un conveniente panel de control VestaCP. Mejor intentarlo una vez;)






All Articles