Ola Habr.
Gustaríame presentarvos un pequeno proxecto sobre
Fixen un proxecto sobre o almacenamento oculto de información no sistema de ficheiros (máis FS).
Isto pódese usar para roubar información confidencial con fins educativos.
Escolleuse un Linux FS moi antigo como prototipo
Implantación
Consideracións de implantación
Se é bo "desentrañar" o estándar ext2, pode substituír que no FS hai un chamado
Se almacenas información oculta sen cifrado, aínda que sexa borrosa no FS, aínda será demasiado visible, especialmente se o programador sabe que buscar. Polo tanto, decidiuse cifrar todos os bloques do ficheiro fonte. Elixín o cifrado de bloques
Para separar os bloques necesarios de todos os demais ao ler, decidiuse engadir un marcador especial a cada bloque ao comezo do bloque. Este token foi cifrado dependendo do número de bloque no ficheiro de orixe. Este truco permitiu inmediatamente non só atopar os bloques necesarios, senón tamén recoñecer a súa orde correcta.
Principio xeral de funcionamento do sistema.
Algoritmo de gravación
Os puntos:
- Primeiro escribe algunha información no sistema de ficheiros fonte;
- Elimina esta información (non necesariamente toda);
- O ficheiro que se vai ocultar divídese en bloques de igual lonxitude, engadindo un marcador;
- Cifra estes bloques;
- Coloque bloques cifrados en bloques FS baleiros.
Para os amantes dos diagramas de bloques
A continuación móstrase un diagrama de bloques do algoritmo de gravación. O algoritmo recibe catro ficheiros como entrada:
-Imaxe dun sistema de ficheiros modificable;
-Expediente suxeito a esteganografía;
-Arquivo con clave de cifrado para AES;
-Arquivo con marcador.
Paga a pena notar de inmediato que este algoritmo ten un inconveniente: despois de escribir o ficheiro no FS, non pode escribir calquera cousa nova no FS, xa que calquera información nova pode acabar nos bloques que asignamos ao noso ficheiro comprimido, aínda que isto tamén abre a posibilidade de "cubrir rapidamente as nosas pistas".
Pero é bastante obvio como se pode solucionar isto: é necesario reescribir o algoritmo para escribir bloques no FS. Esta é unha tarefa comprensible, pero que leva moito tempo.
Para Proof Of Consept non implementei isto.
Como resultado, faranse os seguintes cambios no FS; este é o aspecto do FS antes da esteganografía (gravouse previamente un ficheiro de audio).
E así se ve o FS coa información xa comprimida.
Algoritmo de lectura
Os puntos:
- Con coñecemento da clave e do método de construción de marcadores, compón os primeiros N marcadores, coa garantía de que N multiplicado pola lonxitude do bloque do sistema de ficheiros é maior que a lonxitude do ficheiro comprimido;
- Busca bloques no FS comezando con marcadores;
- Descifra os bloques recibidos e separa os marcadores;
- Recolle os bloques resultantes na orde correcta e obtén o ficheiro fonte.
Para os amantes dos diagramas de bloques
A continuación móstrase un diagrama de bloques do algoritmo de gravación. O algoritmo recibe tres ficheiros como entrada:
-Imaxe do sistema de ficheiros;
-Arquivo con clave de cifrado para AES;
-Arquivo con marcador.
Despois de que se execute o programa, aparece o ficheiro de lectura, que será o ficheiro extraído do sistema de ficheiros esteganografado; se a clave ou o marcador se especificou incorrectamente, o ficheiro de lectura estará baleiro.
(Para os amantes da beleza, pode inserir non só o ficheiro, senón un "cabeceiro" que contén metainformación: nome do ficheiro, dereitos, hora da última modificación, etc.)
Automatización de arranque
Por comodidade, escribíronse scripts bash para automatizar o lanzamento en Linux (probado en Ubuntu 16.04.3 LTS).
Vexamos o lanzamento paso a paso.
Rexistro:
- sudo Copy_Flash.sh "DEVICE" - obtén a imaxe FS de DEVICE (flash);
- ./Write.sh “ARQUIVO” “CLAVE” “MARCADOR” – crea un ambiente virtual, descarga as bibliotecas necesarias e executa o script de escritura;
- sudo ./Write_Flash.sh "DEVICE": escriba o FS modificado de novo en DEVICE.
Lectura:
- sudo Copy_Flash.sh "DEVICE" - obtén a imaxe FS de DEVICE (flash);
- ./Read.sh “KEY” 'MARKER” - crea un ambiente virtual, descarga as bibliotecas necesarias e executa o salto para ler;
- No directorio actual, abra o ficheiro Read - esta é a información comprimida.
Conclusión
Este método de esteganografía probablemente necesite melloras, probas adicionais e extensión a sistemas de ficheiros máis populares, como
Pero o propósito deste traballo era mostrar o principio polo cal é posible levar a cabo o almacenamento oculto de información no sistema de ficheiros.
Coa axuda deste tipo de algoritmos, pode almacenar información sen medo, e se, se coñece a clave, é posible piratear un sistema deste tipo non por forza bruta (senón por un algoritmo moi longo), entón sen coñecer a clave, este paréceme absolutamente estable, pero isto pode servir como motivo para un artigo separado.
Todo o código está implementado na versión 3.5.2 de Python.
(Si, si, sei que para a versión de produción hai que escribir algo "rápido", por exemplo C 😉)
Nesta implementación, o tamaño do ficheiro de entrada para a esteganografía non debe exceder os 1000 kB.
Quero expresar o meu agradecemento ao usuario
Fonte: www.habr.com