La integridad inesperada de Turing en todas partes

Un catálogo de construcciones de software, lenguajes y API que se completan inesperadamente con Turing; Las implicaciones de esto para la seguridad y la fiabilidad. Aplicación: ¿cuántas computadoras hay en tu computadora?

Cualquier programa C o Fortran bastante complejo contiene una implementación recientemente escrita, no especificada, con errores y lenta de la mitad del lenguaje Common Lisp . - Décima Regla Greenspan

La integridad de Turing (TC) es una propiedad del sistema para implementar cualquier función computable con alguna representación simple de entrada y salida.

La integridad de Turing es un concepto fundamental en informática. Ayuda a responder muchas preguntas clave, por ejemplo, por qué es imposible crear el programa antivirus perfecto. Pero al mismo tiempo, es un hecho sorprendentemente común . Parecería que es difícil para un sistema informático lograr tal universalidad que pueda ejecutar cualquier programa, pero lo contrario es cierto: es difícil escribir un sistema útil que no se convierta inmediatamente en un Turing completo. Resulta que incluso un pequeño control sobre los datos de entrada y convertirlos en un resultado, como regla, le permite crear un sistema completo. Puede ser divertido, útil (aunque generalmente no ), dañino o extremadamente inseguro y un verdadero regalo para un hacker (ver "seguridad teórica del lenguaje" , que estudia los métodos de piratería de "máquinas extrañas" 1) ) Increíbles ejemplos de este comportamiento nos recuerdan que la integridad de Turing acecha en todas partes, y es extremadamente difícil proteger el sistema.

Los lenguajes de programación demasiado potentes también pueden desencadenar ataques DoS desagradables. Fazzer afl encontró tal roff en OpenBSD que es capaz de generar un bucle infinito , abusando de algunas reglas de sustitución de cadenas.

Probablemente, estos ejemplos inesperados de sistemas completos de Turing se consideran mejor como un subconjunto de los lenguajes de programación esotéricos "descubiertos" o "encontrados". Por lo tanto, el FRACTRAN extraordinariamente minimalista no se considera 2 , así como el lenguaje especialmente ofuscado Malbolge (donde escribir un programa trivial tomará años), porque estos son YaP esotéricos especialmente diseñados. Además, el juego Life no está incluido en nuestro subconjunto, porque las preguntas sobre la integridad de Turing aparecieron inmediatamente después de su lanzamiento, y el reconocimiento de su Turing completo no fue una sorpresa. Y teniendo en cuenta la complejidad de las redes con enrutamiento y conmutación de paquetes, no es sorprendente que pueda construir un autómata celular o esquemas lógicos de programa en estas redes, y la planificación / validación de tickets no solo es una tarea NP difícil e incluso EXPSPACE, sino que es completamente insoluble (debido a reglas complejas de la aerolínea).

Muchas configuraciones, lenguajes especiales, herramientas o juegos complejos, como resultado, violan la regla del menor poder y "se vuelven completados accidentalmente" , como MediaWiki , plantillas sed o comandos repetidos regexp / find-replace en el editor. En general, cualquier forma de reemplazo de línea o plantilla, o compilación sobre la marcha con alta probabilidad es un sistema completo de Turing o cuando se repite, ya que a menudo admiten el cálculo lambda o la reescritura de términos de un idioma o etiqueta, por ejemplo, idiomas esotéricos " /// " o jue

XSLT , Buscaminas infinito , Fortaleza enana 3 , Starcraft, Minecraft , Ant , Transport Tycoon , plantillas C ++ y generalizaciones de Java , cálculos de ADN , etc. Todos estos son sistemas completos de Turing, y esto tampoco es sorprendente. Muchos juegos admiten scripts para simplificar el desarrollo y las modificaciones personalizadas. Por lo tanto, para hacer que el juego Turing-complete sea elemental: solo active la sintaxis para llamar a idiomas más conocidos como Perl.

La integridad de Turing puede ser simplemente una parte poco conocida del formato estándar. Probablemente, en nuestro tiempo, muchos no saben que TrueType y muchas fuentes son programas PostScript en máquinas apiladas, similares a los metadatos ELF y la información de depuración DWARF . O que algunos formatos de música van más allá de MIDI , admiten guiones y necesitan interpretación. Si conoce la integridad de las fuentes de Turing, entonces la integridad de los documentos de Turing de TeX no es sorprendente, lo que naturalmente causa muchas vulnerabilidades de seguridad serias e interesantes en las fuentes y los medios, como las explotaciones BLEND o Linux SNES y NES . En otros formatos como PDF, solo hay una cantidad terrible de vulnerabilidades 4 . Una vez más, logros sobresalientes como la creación de una pequeña máquina de Turing a partir de bloques de Lego o dominó 5 no se consideran, ya que sabemos desde hace tiempo cómo funcionan las computadoras mecánicas.

Por otro lado, una línea de investigación de seguridad informática llamada máquinas extrañas a menudo revela sistemas realmente completos y sorprendentes. Además, causan sorpresa en diferentes grados en diferentes personas: una parece inusual que no sorprende a otras.


Quizás los siguientes sistemas se completarán accidentalmente:

  • CSS sin clics
  • SVG: PostScript es TC por diseño, pero ¿qué pasa con el formato gráfico vectorial SVG más moderno, que está escrito en XML, es decir, en un lenguaje de documento que (generalmente) no está completo de Turing? Parece que en combinación con XSLT todavía puede ser así, pero no he encontrado ninguna evidencia o demostración de esto en el contexto habitual de un navegador web. El estándar SVG es excelente ya veces aterrador: una versión fallida del estándar SVG 1.2 intentó agregar la capacidad de abrir sockets de red en imágenes SVG.
  • Unicode : Nicholas Seriot sugiere que los algoritmos bidireccionales Unicode (diseñados para mostrar secuencias de comandos de derecha a izquierda, como el árabe o el hebreo) pueden ser lo suficientemente complejos como para admitir un sistema de etiquetas a través de reglas sensibles a mayúsculas y minúsculas (por ejemplo, turco)

Ver también



Referencias



App


¿Cuántas computadoras hay en tu computadora?


Algunos se estancan en disputas sobre autos extraños o sobre cuán "grande" se convertirá un agente de IA: se creará uno, dos, diez o millones. No importa, porque es solo una cuestión de organización. En realidad, las entradas y salidas del sistema son importantes: ¿qué tan eficiente es el sistema en su conjunto y qué recursos consume? A nadie le importa si Google funciona con 50 supercomputadoras, 50,000 mainframes, 5 millones de servidores, 50 millones de procesadores integrados / móviles, o una combinación de todo lo anterior . No importa que Google use una variedad de chips: desde "procesadores tensoriales" de fabricación propia hasta procesadores de silicio únicos (Intel los vende en chips para procesadores Xeon para varios clientes importantes), FPGA, GPU, CPU, hasta equipos más exóticos como computadoras cuánticas D-Wave . Solo es importante que siga siendo competitivo y pueda proporcionar servicios por una tarifa moderada. Al final, hoy en día una supercomputadora generalmente se parece a una gran cantidad de servidores en rack con una gran cantidad de GPU y conexiones InfiniBand inusualmente de alta velocidad. Es decir, la supercomputadora no es tan diferente del centro de datos, como podría pensar. Cualquiera de los equipos enumerados puede admitir numerosas máquinas extrañas, dependiendo de su dinámica interna y conectividad.

Del mismo modo, cualquier sistema de inteligencia artificial se puede implementar en forma de una red neuronal gigante o muchas redes neuronales separadas que funcionan de forma asincrónica, o como un conjunto heterogéneo de microservicios, o como una "sociedad de la mente" y así sucesivamente. Todo esto no es particularmente importante. Desde el punto de vista de la complejidad o los riesgos, no es tan importante cómo se organiza el sistema mientras funciona. El sistema se puede ver en muchos niveles, cada uno de los cuales es igualmente inválido en sí mismo, pero es útil para diferentes propósitos en el sistema general.

Aquí hay un ejemplo de una pregunta mal definida: ¿cuántas computadoras tiene en sus bolsillos y en su escritorio ahora? ¿Cuántas computadoras hay en tu "computadora"? Piensa solo uno? Echemos un vistazo más de cerca.

No se trata solo de la CPU: hoy en día, los transistores y los núcleos del procesador son tan baratos que ahora tiene sentido asignar núcleos separados para tareas en tiempo real, para mejorar el rendimiento, por seguridad, para evitar cargar el sistema operativo principal, por compatibilidad con la arquitectura antigua o paquete de software existente. Simplemente porque un DSP o kernel es más rápido de programar que crear un ASIC especializado, o porque es la solución más simple posible. Además, muchos de estos componentes pueden usarse como elementos computacionales, incluso si no están destinados o incluso ocultan esta funcionalidad.

Entonces

  • En un procesador Intel convencional, miles de millones de transistores realizan muchas tareas:

    • Cada uno de los núcleos del procesador principal 2-8 puede funcionar de forma independiente, encendiéndose y apagándose según sea necesario, tiene su propia caché (más grande que la RAM en la mayoría de las computadoras hasta hace poco), y debe considerarse como una computadora independiente.
    • La CPU en su conjunto se reprograma a través de un microcódigo, por ejemplo, para eliminar errores de diseño de chips y hace alarde de objetos cada vez más opacos, como Intel Management Engine (con JVM para programación ; Rouen, 2014 y SGX ) o el procesador de seguridad de plataforma (PSP) de AMD, o Android TEE Estos módulos de hardware, por regla general, son computadoras de pleno derecho, funcionan independientemente del host y pueden interferir con su funcionamiento.
    • Cualquier FPU puede convertirse en un sistema completo de Turing mediante la codificación en operaciones de coma flotante en el espíritu de FRACTRAN.
  • La MMU se puede programar en una máquina extraña de fallas de página, como se mencionó anteriormente.
  • Bloques DSP , chips personalizados. Probablemente, los ASIC para formatos de video como h.264 no serán sistemas completos (a pesar del soporte de deltas complejos y métodos de compresión que pueden permitir algo como los mosaicos Van). Pero el SoC móvil Apple A9 va mucho más allá del habitual procesador ARM de doble núcleo con una GPU integrada. Al igual que los chips de escritorio Intel o AMD, incluye un entorno seguro llamado Secure Enclave (núcleos de procesador asignados físicamente), pero también contiene un coprocesador para imágenes, un coprocesador para reconocimiento de voz (parcialmente para admitir Siri) y, aparentemente, varios otros núcleos. Estos ASIC a veces existen para tareas de IA y, aparentemente, se especializan en multiplicaciones matriciales para redes neuronales, y dado que las redes neuronales recurrentes se están completando, entonces ... entiendes. Motorola, Qualcomm y otras compañías también se apresuraron a expandir su SoC.
  • Placa base BIOS y / o chips de control de acceso a la red.

    • Mark Ermolov señala:

      "Es sorprendente la cantidad de núcleos de procesador heterogéneos integrados en Intel Silvermont Moorefield SoC (ANN): x86, ARC, LMT, 8051, Audio DSP, cada uno con su propio firmware y soporte para la interfaz JTAG

    Estos chips de control o depuración pueden "accidentalmente" permanecer activados en dispositivos después de la venta, como el ARM incorporado en la CPU Via C3 .
  • La GPU tiene varios cientos o miles de núcleos simples, cada uno de los cuales funciona muy bien con redes neuronales o realiza cálculos de propósito general (aunque más lento que un procesador).
  • Los controladores de cinta, disco duro, unidad flash y SSD generalmente se ejecutan en procesadores ARM para ejecutar utilidades integradas para tareas como ocultar sectores defectuosos del sistema operativo. Pueden ser pirateados. Pero los procesadores ARM se usan en la mayoría de las aplicaciones integradas, por lo que a ARM le encanta alardear de que "un teléfono inteligente moderno contiene de 8 a 14 procesadores ARM, uno de los cuales es un procesador de aplicaciones (con Android o iOS), y el otro es un procesador para la pila de banda de frecuencia (pila de banda base) " .
  • Los chips de red realizan un procesamiento independiente para DMA (gracias a funciones de independencia como Wake-on-LAN para el trabajo de arranque de red ).
  • teléfonos inteligentes: además de todos los bloques mencionados, también hay un procesador de banda base independiente que se ejecuta bajo su propio sistema operativo en tiempo real para procesar las comunicaciones con las torres celulares / GPS / etc. O incluso más de uno si usa virtualización como L4 . Ya se han detectado puertas traseras en los procesadores de banda base, además de otras vulnerabilidades.
  • Las tarjetas SIM para teléfonos inteligentes son mucho más que simples tarjetas de memoria con la grabación de sus datos de suscriptor. Estas son tarjetas inteligentes que pueden ejecutar independientemente aplicaciones de Java Card (probablemente también chips NFC). Es como una JVM en IME. Naturalmente, las tarjetas SIM pueden ser pirateadas y utilizadas para vigilancia, etc.
  • Los dispositivos conectados por USB o a la placa base pueden equiparse con sus propios procesadores. Por ejemplo, adaptadores WiFi, teclados, ratones, etc. Teóricamente, la mayoría de ellos están aislados de la interferencia directa con el host a través de DMA y IOMMU, pero el diablo está en los detalles ...
  • chips extraños al azar como el MacBook Touch con WatchOS .
  • ...

Por lo tanto, en un teléfono inteligente o computadora de escritorio normal, habrá de quince a varios miles de computadoras en el sentido de dispositivos completos. Cada uno de ellos puede programarse, tiene suficiente potencia para ejecutar muchos programas y puede ser utilizado por un atacante para monitorear, filtrar o atacar al resto del sistema.

No hay nada inusual en el contexto histórico, porque incluso los primeros mainframes generalmente incluían varias computadoras, donde la computadora principal realiza el procesamiento por lotes, y las computadoras auxiliares proporcionan operaciones de E / S de alta velocidad, que de lo contrario interferirían con la máquina principal con sus interrupciones.

En la práctica, además de la comunidad de seguridad de la información (dado que todas estas computadoras son inseguras y, por lo tanto, útiles para los creadores de virus y NSA), a todos los demás usuarios no les importa que, bajo el capó de nuestras computadoras, se encuentren sistemas increíblemente complejos que se consideran con mayor precisión como una colección heterogénea de cientos computadoras avergonzadas conectadas entre sí (no está claro, "una red es una computadora" o "una computadora es una red" ...?) El usuario percibe y usa esto como una sola computadora.



1. Un área activa de investigación es la creación de lenguajes y sistemas cuidadosamente diseñados y garantizados para que no se completen (por ejemplo, programación totalmente funcional ). ¿Por qué poner tanto esfuerzo en crear un lenguaje que muchos programas no pueden escribir? El hecho es que la integridad de Turing está estrechamente relacionada con el teorema de incompletitud de Gödel y el teorema de Rice. . TC, . , : , , , , , . , ( SQL, — . , , SQL , descenso de gradiente para modelos de aprendizaje automático , y algunas extensiones SQL lo hacen completo de todos modos, lo que le permite codificar un sistema de bucle , o modelDSL , o llamar a PL / SQL , etc.

Aquí hay algo de literatura sobre autos extraños:




2. Aunque las redes neuronales lineales explotan el modo de coma flotante con redondeo a cero para codificar el comportamiento potencialmente completo de Turing (para RNN), es invisible en el funcionamiento normal, que también es un comportamiento aleatorio de Turing completo y un buen ejemplo de un lenguaje seguro.

3. Dwarf Fortress proporciona un mecanismo de relojería, por lo que la integridad de Turing no es sorprendente. Pero el agua también se implementa como un simple autómata celular, por lo que hay aún más formas de lograr la integridad. Ahora, el wiki del juego menciona cuatro formas potenciales de crear puertas lógicas: líquidos, mecanismos de reloj, carros de minas y puertas lógicas de criaturas / animales con puertas y sensores de presión.

4. La especificación completa de PDF está excepcionalmente hinchada. Por ejemplo, en un simple visor de PDF que admite una buena cantidad de especificaciones de PDF como el navegador Google Chrome, puede jugar Breakout (porque PDF incluye su propio subconjunto extraño de JavaScript). El visor oficial de PDF de Adobe admite la funcionalidad de CAD hasta tridimensional.

5. Vea las puertas lógicas de dominó en Think Math y la demostración de un sumador de dominó de 4 bits .

Source: https://habr.com/ru/post/es429602/


All Articles