No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript,...
Transcript of No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript,...
![Page 1: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/1.jpg)
No es una impresora, es una máquina de voto
Ignacio E. Losiggio
29/09/17 (ekoparty)
![Page 2: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/2.jpg)
$ whoami
Ignacio Losiggio (@memepowered)
I Dev. en Huayra GNU/LinuxI Estudio CS de la Computación (UBA-Exactas)
![Page 3: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/3.jpg)
1. Es una impresora
¿Qué puede salir mal?
Son los primeros dispositivos IOT, todo IOT está roto (mal software,configuración nula, passwords por defecto, etc).
![Page 4: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/4.jpg)
1. Es una impresora
¿Qué puede salir mal?
Son los primeros dispositivos IOT, todo IOT está roto (mal software,configuración nula, passwords por defecto, etc).
![Page 5: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/5.jpg)
2. Caso de estudio: Ilusionistas informáticos
Microimpresiones
Nicolás D’Ippolito y Hernán Melgratti mostraron un sistema conmicroimpresiones puede revelar el orden de voto (y así romper elsecreto)
Dependía de tener malicia en el sistema
![Page 6: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/6.jpg)
2. Caso de estudio: Ilusionistas informáticos
Microimpresiones
Nicolás D’Ippolito y Hernán Melgratti mostraron un sistema conmicroimpresiones puede revelar el orden de voto (y así romper elsecreto)
Dependía de tener malicia en el sistema
![Page 7: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/7.jpg)
2. Caso de estudio: Ilusionistas informáticos
Si no asumimos malicia en el sistema ¿Cómo nos divertimos?
En el senado hubo una propuesta del peor sistema posible:
Figure 1: Les juro que pensé que era un chiste
Suposición: podemos imprimir una hoja arbitraria
![Page 8: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/8.jpg)
2. Caso de estudio: Ilusionistas informáticos
Si no asumimos malicia en el sistema ¿Cómo nos divertimos?
En el senado hubo una propuesta del peor sistema posible:
Figure 1: Les juro que pensé que era un chiste
Suposición: podemos imprimir una hoja arbitraria
![Page 9: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/9.jpg)
2. Caso de estudio: Ilusionistas informáticos
Si no asumimos malicia en el sistema ¿Cómo nos divertimos?
En el senado hubo una propuesta del peor sistema posible:
Figure 1: Les juro que pensé que era un chiste
Suposición: podemos imprimir una hoja arbitraria
![Page 10: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/10.jpg)
3. PostScript, programando hojas de papel
Las páginas de impresión se especifican en PostScript en muchasimpresoras (incluso en muchas modernas por retrocompatibilidad)
Características:
I Es en lenguaje de programación, posta, no jodo
I Stack-basedI Usado casi exclusivamente para impresión y administración de
impresorasI El estado se revierte finalizado el trabajo de impresión
![Page 11: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/11.jpg)
3. PostScript, programando hojas de papel
Las páginas de impresión se especifican en PostScript en muchasimpresoras (incluso en muchas modernas por retrocompatibilidad)
Características:
I Es en lenguaje de programación, posta, no jodoI Stack-based
I Usado casi exclusivamente para impresión y administración deimpresoras
I El estado se revierte finalizado el trabajo de impresión
![Page 12: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/12.jpg)
3. PostScript, programando hojas de papel
Las páginas de impresión se especifican en PostScript en muchasimpresoras (incluso en muchas modernas por retrocompatibilidad)
Características:
I Es en lenguaje de programación, posta, no jodoI Stack-basedI Usado casi exclusivamente para impresión y administración de
impresoras
I El estado se revierte finalizado el trabajo de impresión
![Page 13: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/13.jpg)
3. PostScript, programando hojas de papel
Las páginas de impresión se especifican en PostScript en muchasimpresoras (incluso en muchas modernas por retrocompatibilidad)
Características:
I Es en lenguaje de programación, posta, no jodoI Stack-basedI Usado casi exclusivamente para impresión y administración de
impresorasI El estado se revierte finalizado el trabajo de impresión
![Page 14: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/14.jpg)
3. PostScript, programando hojas de papel
El verbo que necesitaba: startjob
Limpia todos los stacks (gráfico, operadores, ejecución, diccionarios,etc), restaura el estado inicial de la VM de PostScript y continúa laejecución desde el siguiente verbo del trabajo de impresión.
Se puede usar de dos formas posibles:
I true <password> startjob; Crea un nuevo trabajo deimpresión, los cambios al estado son persistentes
I false <password> startjob: Crea un nuevo trabajo deimpresión
![Page 15: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/15.jpg)
3. PostScript, programando hojas de papel
El verbo que necesitaba: startjob
Limpia todos los stacks (gráfico, operadores, ejecución, diccionarios,etc), restaura el estado inicial de la VM de PostScript y continúa laejecución desde el siguiente verbo del trabajo de impresión.
Se puede usar de dos formas posibles:
I true <password> startjob; Crea un nuevo trabajo deimpresión, los cambios al estado son persistentes
I false <password> startjob: Crea un nuevo trabajo deimpresión
![Page 16: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/16.jpg)
3. PostScript, programando hojas de papel
IdeaGenerar un trabajo de impresión que condicione los siguientes(deniegue ciertas boletas o formularios, imprima cosas inesperadas,cuente boletas de papel)
Figure 2: Persistimos en RAM (random ancestral memory)
![Page 17: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/17.jpg)
3. PostScript, programando hojas de papel
IdeaGenerar un trabajo de impresión que condicione los siguientes(deniegue ciertas boletas o formularios, imprima cosas inesperadas,cuente boletas de papel)
Figure 2: Persistimos en RAM (random ancestral memory)
![Page 18: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/18.jpg)
3. PostScript, programando hojas de papel
vot.ar.ps, tareas:
1. Detectar que la página imprimiéndose es una boleta
2. Cambiar a contexto persitente, contar el voto3. Cambiar a contexto común, restaurar los gráficos anteriores e
imprimir
![Page 19: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/19.jpg)
3. PostScript, programando hojas de papel
vot.ar.ps, tareas:
1. Detectar que la página imprimiéndose es una boleta2. Cambiar a contexto persitente, contar el voto
3. Cambiar a contexto común, restaurar los gráficos anteriores eimprimir
![Page 20: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/20.jpg)
3. PostScript, programando hojas de papel
vot.ar.ps, tareas:
1. Detectar que la página imprimiéndose es una boleta2. Cambiar a contexto persitente, contar el voto3. Cambiar a contexto común, restaurar los gráficos anteriores e
imprimir
![Page 21: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/21.jpg)
4. Problemas para seguir investigando
I La implementación actual depende de que el trabajo deimpresión sea únicamente identificable en tres lugaresindependientes
I PostScript es complejo y es posible que tenga errores¿Podemos ejecutar algo por fuera de la VM? (Transmitir datosen tiempo real en impresoras con red)
I Hay otras formas de describir las páginas que son másmodernas
I Nuestra impresora no tiene reloj :(I Identificar votantes y agregar metadatos podría facilitarse
mucho con una impresora más modernaI Actualmente la persistencia es en RAM tocar el firmware sería
un golazo
![Page 22: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/22.jpg)
5. Conclusión
Imprimir = ejecución de código arbitrario
Figure 3: ¿Quién sospecharía de una impresora?
![Page 23: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/23.jpg)
6. Fuentes y recursos
I PostScript Language Reference Manual:https://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf
I Printer Exploitation Toolkit:https://github.com/RUB-NDS/PRET
I Hacking Printers:http://hacking-printers.net/wiki/index.php/Main_Page
I vot.ar.ps: https://github.com/iglosiggio/vot.ar.ps
Mil gracias a Javi, Iván y a todos los chicos de HackThePrinterpor el aguante
![Page 24: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/24.jpg)
6. Fuentes y recursos
I PostScript Language Reference Manual:https://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf
I Printer Exploitation Toolkit:https://github.com/RUB-NDS/PRET
I Hacking Printers:http://hacking-printers.net/wiki/index.php/Main_Page
I vot.ar.ps: https://github.com/iglosiggio/vot.ar.ps
Mil gracias a Javi, Iván y a todos los chicos de HackThePrinterpor el aguante
![Page 25: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/25.jpg)
6. ¿Preguntas?
Hack the printer!
Figure 4: ¿Seguro?
![Page 26: No es una impresora, es una máquina de voto › files › ps › slides.pdf · 3. PostScript, programando hojas de papel El verbo que necesitaba: startjob Limpiatodoslosstacks(gráfico,operadores,ejecución,diccionarios,](https://reader034.fdocuments.es/reader034/viewer/2022042401/5f103a957e708231d44813aa/html5/thumbnails/26.jpg)
6. ¿Preguntas?
Hack the printer!
Figure 4: ¿Seguro?