Cuestiones
ayuda
option
Mi Daypo

TEST BORRADO, QUIZÁS LE INTERESEcodigos de desarrollo seguro

COMENTARIOS ESTADÍSTICAS RÉCORDS
REALIZAR TEST
Título del test:
codigos de desarrollo seguro

Descripción:
test creado para fines de estudio

Autor:
AVATAR

Fecha de Creación:
07/01/2024

Categoría:
Informática

Número preguntas: 50
Comparte el test:
Facebook
Twitter
Whatsapp
Comparte el test:
Facebook
Twitter
Whatsapp
Últimos Comentarios
No hay ningún comentario sobre este test.
Temario:
Auditar estos trozos de códigos seleccione cual es el error y el remedio String delimiter; for (int i=0; i < args.length; i++) { if ( args[i].startsWith("--delimiter=") ) { delimiter = args[i].substring(12); } } ... for (int i = 0; i < dropSQL.length; i++) { try { String formatted = dropSQL[i]; if (delimiter!=null) formatted += delimiter; ... fileOutput.write( formatted + "\n" ); } Error de parámetro de linea de comandos e inyección sql Error de seguridad en la herramienta SchemaExport de Hibernate en Java debido a la falta de validación del parámetro de línea de comandos "--delimiter", que se utiliza para separar comandos SQL en scripts generados. La versión 2.1.9 de la herramienta permite la inyección de SQL a través de la línea de comandos. La solución propuesta es implementar una lista blanca para los valores de "Delimiter", asegurando que solo se acepten valores específicos y mitigando así la posibilidad de inyección de SQL. El código que proporcionaste es vulnerable a inyección de SQL debido a la falta de validación del parámetro de línea de comandos --delimiter. La solución propuesta de implementar una lista blanca para los valores de delimiter es apropiada para mitigar la posibilidad de inyección SQL.
status = request.getParameter("status"); if (status != null && status.length() > 0) { session.setAttribute("USER_STATUS", status); } hay un error de límite de confianza al aceptar un parámetro de solicitud HTTP llamado "status" y almacenarlo en el objeto de sesión HTTP sin realizar validación en el valor. Debido a que los datos almacenados en la sesión son generalmente considerados confiables, esto viola el límite de confianza. La solución propuesta es realizar una validación de "status" utilizando una técnica de caja blanca para garantizar la integridad y seguridad de los datos. dfdfd.
void* doAlloc(int sz) { return malloc(sz); /* Implicit conversion here: malloc() accepts an unsigned argument. */ } Tamaño de campos Numéricos : hay un problema de conversión implícita de un valor firmado a un valor sin firmar en el código. La función doAlloc() acepta un argumento firmado, pero malloc() lo trata como sin firmar. Esto puede llevar a que malloc() intente asignar una cantidad excesiva de memoria si doAlloc() recibe un argumento negativo. La solución implica cambiar el tipo del argumento de doAlloc a un tipo sin firmar, como size_t, para garantizar que siempre se pasen valores no negativos a malloc. ninguna de las anteriores .
String userName = ctx.getAuthenticatedUserName(); String itemName = request.getParameter("itemName"); String query = "SELECT * FROM items WHERE owner = '" + userName + "' AND itemname = '" + itemName + "'"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query); Inyeccion de Sql : El código ensambla la consulta SQL mediante la concatenación de cadenas, lo que lo hace vulnerable a un ataque de inyección SQL. El problema específico es que el valor de itemName no está validado ni se está utilizando correctamente en la construcción de la consulta SQL, lo que permite la posibilidad de manipulación maliciosa. ninguna.
String rName = request.getParameter("reportName"); File rFile = new File("/usr/local/apfr/reports/" + rName); rFile.delete(); Manipulación de rutas: El código utiliza la entrada de una solicitud HTTP para crear un nombre de archivo. El programador no ha considerado la posibilidad de que un atacante pueda proporcionar un nombre de archivo como ../../tomcat/conf/server.xml, lo que provoca que la aplicación elimine uno de sus propios archivos de configuración. Solución: utilizar las clases path y paths en lugar de concatenar cadenas para construir rutas ninguna .
String btype = request.getParameter("backuptype"); String cmd = new String("cmd.exe /K \"c:\\util\\rmanDB.bat " + btype + "&&c:\\utl\\cleanup.bat\"") Runtime.getRuntime().exec(cmd); Inyección de comandos en una aplicación web administrativa en Windows que permite a los usuarios iniciar copias de seguridad de una base de datos Oracle. El código no valida la entrada del usuario para el parámetro "backuptype", lo que podría permitir ataques maliciosos. La solución implica el uso seguro de ProcessBuilder para construir y ejecutar comandos, además de validar y sanitizar la entrada del usuario para evitar inyecciones de comandos. Es esencial asegurar que el valor de "backuptype" no contenga caracteres maliciosos. ninguna.
String val = request.getParameter("val"); try { int value = Integer.parseInt(val); } catch (NumberFormatException) { log.info("Failed to parse val = " + val); } Problema: Vulnerabilidad de falsificación de logs en el código debido a una entrada no validada desde una solicitud HTTP. Si un usuario proporciona la cadena "twenty-one", se registra un mensaje de error. Sin embargo, un atacante puede enviar una cadena manipulada, como "twenty-one%0a%0aINFO: +User+logged+out%3dbadguy", resultando en mensajes de error y un falso registro de desconexión de usuario. Solución: Implementar validación y saneamiento de la entrada del usuario antes de intentar analizarla como un entero. Esto garantiza la integridad de los registros y evita la inyección maliciosa de datos. falsificacion de logs:Existe una vulnerabilidad en el código que permite la falsificación de logs debido a una entrada no validada desde una solicitud HTTP. Al recibir una cadena manipulada, como "twenty-one%0a%0aINFO: +User+logged+out%3dbadguy", se generan mensajes de error y se registra falsamente una desconexión de usuario. Solución: Abordar la vulnerabilidad mediante la implementación de validación y saneamiento de la entrada del usuario antes de intentar analizarla como un entero. Esto asegura la integridad de los registros y previene la inyección maliciosa de datos.
int (*cmp)(char*,char*); int *p = (int*)malloc(sizeof(int)); *p = 1; cmp = (int (*)(char*,char*))p; cmp(“hola”,”adios”); // El programa realiza un crash Seguridad de tipos: asignación incorrecta de un puntero de función, la función cmp esta declarada como un puntero a una función que toma dos argumentos de tipo char* y devuelve un entero int Soluciona: asignar directamente a cmp sin realizar la conversión de tipo, ya que ambos son punteros de función ninguna.
#include <stdio.h> #include <unistd.h> #define BUFSIZER1 512 #define BUFSIZER2 ((BUFSIZER1/2) - 8) int main(int argc, char **argv) { char *buf1R1; char *buf2R1; char *buf2R2; char *buf3R2; buf1R1 = (char *) malloc(BUFSIZER1); buf2R1 = (char *) malloc(BUFSIZER1); free(buf2R1); /* libero el puntero*/ buf2R2 = (char *) malloc(BUFSIZER2); buf3R2 = (char *) malloc(BUFSIZER2); strncpy(buf2R1, argv[1], BUFSIZER1-1); /* lo vuelvo a utilizar*/ free(buf1R1); free(buf2R2); free(buf3R2); } Acceso a una variable después de liberarla (Dereferenc After Free) : se esta utilizando una variable despues de liberarla y se produce un desbordamiento de buffer Solución: poner free(buf2R1); /* libero el puntero*/ después de free(buf3R2); ninguna .
#include <stdlib.h> int main(int argc, char *argv[]){ int k=0; int *p=(int *)NULL; switch(k) { case 0: if (*p) k = *p; default: break; } return 0; } Uso de un puntero con valor NULL (null dereference): el error es el uso de un puntero con valor nulo produce un desbordamiento de buffer Solución: agregar una verificación antes de intentar acceder o desreferenciar el puntero, antes de la linea if (*p) hay que verificar si p no es nulo ninguna.
char var[128], val[15 * 1024], ..., boundary[128], buffer[15 * 1024]; ... for(;;) { ... // if the variable is followed by '; filename="name"' it is a file inChar = getchar(); if (inChar == ';') { ... // scan in the content type if present, but simply ignore it scanf(" Content-Type: %s ", buffer); desbordamiento del búfer causado por una llamada insegura a scanf: En este código, se asigna un búfer de 15 × 1,024 bytes, y un atacante puede aprovechar una llamada no acotada a scanf() para llenar el búfer con código malicioso antes de provocar un desbordamiento del búfer. Aunque el código ignora el valor en la explotación, se lee para avanzar en la entrada. La vulnerabilidad ha sido utilizada remotamente para obtener privilegios de root. La solución propuesta es cambiar la llamada scanf() a %15999s para limitar la entrada y prevenir el desbordamiento del búfer. ninguna.
char line[512]; gets(line); llamada insegura a gets(), similar a la aprovechada por el gusano Morris Solución: Reemplaza gets con fgets para evitar vulnerabilidades de desbordamiento de búfer. ninguna .
char A[8] = ""; unsigned short B = 03; strcpy(A, "excessive"); desbordamiento de buffer - funciones peligrosas Solución. Aumenta el tamaño de la matriz A o utiliza funciones seguras como strncpy para evitar desbordamientos de búfer. ninguna.
char *FixFilename(char *filename, int cd, int *ret) { ... char fn[128], user[128], *s; ... s = strrchr(filename,'/'); if(s) { strcpy(fn,s+1); Este código presenta un desbordamiento de búfer remoto debido a una llamada insegura a strcpy en la función FixFilename(). El parámetro de nombre de archivo, controlado por el usuario, puede tener hasta 8 KB, pero se copia en un búfer de solo 128 bytes, provocando el desbordamiento. La explotación remota de esta vulnerabilidad ha permitido obtener privilegios de root. La solución recomendada implica reemplazar strcpy con una función segura como strncpy y asegurarse de que la longitud de la cadena copiada no exceda el tamaño del búfer, en este caso, 128 bytes ninguna.
char speed[128]; ... sprintf(speed, "%s/%d", (cp = getenv("TERM")) ? cp : "", (def_rspeed > 0) ? def_rspeed : 9600); Código de la Versión 1.0 del demonio Telnet de Kerberos 5 que contiene un desbordamiento de búfer debido a que la longitud de la variable de entorno TERM nunca se valida. Solución: La solución sugerida podría ser cambiar el uso de sprintf a snprintf, que permite especificar el tamaño máximo del búfer para evitar desbordamientos. ninguna.
strcat(cmdbuf, "/v4rcp"); } else { strcat(cmdbuf, "/rcp"); } if (stat((char *)cmdbuf + offst, &s) >= 0) strcat(cmdbuf, cp); else strcpy(cmdbuf, copy); El código exhibe una vulnerabilidad de desbordamiento de búfer al utilizar incorrectamente funciones de manipulación de cadenas no acotadas como strcat() y strcpy(). Dependiendo de las longitudes de 'cp' y 'copy', ambas funciones pueden provocar un desbordamiento en el búfer 'cmdbuf'. Esta vulnerabilidad, ubicada en el manejo de comandos, ha sido públicamente explotada para ejecutar comandos no autorizados en sistemas comprometidos. La solución recomendada es emplear funciones seguras como strncat() y strncpy(), que permiten especificar la longitud máxima del destino para evitar desbordamientos. También se debe asegurar que el tamaño total del búfer sea suficiente y considerar el uso de funciones más seguras, como snprintf(). ninguna.
Vulnerable.c: #include <stdio.h> int main(void) { char texto[30]; scanf(“%29s”, texto); printf(texto); return 0; } Errores de formato de cadena (format strings) - Desbordamiento de Buffer: el atacante controla la cadena de formato Solución: controlar la cadena de formato de esta manera printf("%s", texto) ninguna.
while (fgets(buf, sizeof buf, f)) { lreply(200, buf); ... } void lreply(int n, char *fmt, ...) { char buf[BUFSIZ]; ... vsnprintf(buf, sizeof buf, fmt, ap); ... } Se identificó una clásica vulnerabilidad de formato de cadena en la versión 2.6.0 del servidor FTP wuftpd. La vulnerabilidad se encuentra en la función vsnprintf, donde se formatea la cadena en el búfer 'buf' de 'ireply'. Existe riesgo de desbordamiento de búfer si el tamaño del búfer no es suficiente para contener el resultado del formateo. La solución recomendada consiste en garantizar que el búfer utilizado por vsnprintf tenga un tamaño adecuado para prevenir desbordamientos, y se sugiere definir un tamaño suficientemente grande para el búfer 'buf' en la función lreply. ninguna.
unsigned int readamt; readamt = getstringsize(); if (readamt > 1024) return -1; readamt--; // don't allocate space for '\n' buf = malloc(readamt); Integers Overflows: El código presenta un riesgo de desbordamiento de enteros. Se trata de una función que asigna memoria para una cadena con un tamaño proporcionado por el usuario leído desde un archivo. Aunque verifica sensatamente que el tamaño no sea mayor que 1024 y decrementa el valor para excluir el carácter de nueva línea (\n), existe un problema potencial. Si la variable readamt se declara como no firmada y un atacante hace que getstringsize() devuelva 0, la llamada a malloc() se hará con un argumento de 4294967295 (el entero no firmado de 32 bits más grande), lo que podría provocar una falla por falta de memoria. La solución propuesta es asegurarse de que readamt sea mayor que 0 antes de llamar a malloc. Esto se implementa mediante una verificación adicional en el código para garantizar que readamt sea mayor que 0 y una verificación de la asignación de memoria con malloc para manejar posibles fallos. El código presenta un riesgo de desbordamiento de enteros al asignar memoria para una cadena con un tamaño proporcionado por el usuario. Aunque se verifica que el tamaño no sea mayor que 1024 y se excluye el carácter de nueva línea, hay un problema potencial si la variable readamt se declara como no firmada y un atacante hace que getstringsize() devuelva 0. En este caso, la llamada a malloc() se realizará con un argumento de 4294967295, lo que podría causar una falla por falta de memoria. La solución propuesta consiste en asegurarse de que readamt sea mayor que 0 antes de llamar a malloc, implementando una verificación adicional en el código para garantizar que readamt sea mayor que 0 y una verificación de la asignación de memoria con malloc para manejar posibles fallos.
int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2){ char buf[0xFF]; if((len1 + len2) > 0xFF) return -1; memcpy(buf, buf1, len1); memcpy(buf + len1, buf2, len2); // do stuff with buf return 0; } Integers Overflows: La función ConcatBuffers intenta concatenar dos buffers mediante el uso de las funciones memcpy. El problema radica en que la suma de las longitudes de los dos buffers (len1 + len2) se compara con un límite de 0xFF (255 bytes), lo que podría causar un desbordamiento de enteros si la suma es igual a 0xFF. Esto se debe a que la comparación "> 0xFF" excluye el caso en el que la suma es igual a 0xFF. Solución: La corrección consiste en cambiar la condición de la comparación de ">" a ">=" para asegurar que se manejen adecuadamente casos en los que la suma de las longitudes es igual a 0xFF, evitando así posibles desbordamientos. La condición corregida es ">= 0xFF". fdfdfd.
char path[PATH_MAX]; char buf[PATH_MAX]; if(S_ISLNK(st.st_mode)) { len = readlink(link, buf, sizeof(path)); buf[len] = '\0'; } strncpy(path, buf, len); Integers Overflows - Error de Of By One: El código presenta una llamada a strncpy() que podría provocar un error de truncamiento debido a la posible confusión sobre el comportamiento de readlink(). La solución propuesta implica utilizar el búfer buf en lugar de path y restar 1 al tamaño pasado a strncpy. Es crucial garantizar que la longitud (len) no sea negativa para evitar problemas potenciales. Por lo tanto, la línea podría modificarse como strncpy(buf, path, len - 1); para prevenir desbordamientos de búfer. dfdfdf.
char* processNext(char* strm) { char buf[512]; short len = *(short*) strm; strm += sizeof(len); if (len <= 512) { memcpy(buf, strm, len); process(buf); return strm + len; } else { return -1; } } Integers Overflows - Problemas con conversiones de tipo entre números enteros: Un error de desbordamiento de entero causado por una conversión de signado a no signado. Solución: cambiar la declaración del tipo de retorno y usar un puntero nulo (Null ) en lugar de -1 para indicar un error dfdfd.
char buf[10], cp_buf[10]; fgets(buf, 10, stdin); strcpy(cp_buf, buf); Errores y excepciones: : El código original tiene riesgos de desbordamiento de búfer y no maneja adecuadamente errores al leer la entrada con fgets. La solución propuesta implica verificar el valor de retorno de fgets para manejar errores y asegurarse de que la cadena cp_buf tenga un terminador nulo al final, mejorando la seguridad y la gestión de excepciones en el código. dfdfd.
char* getBlock(int fd) { char* buf = (char*) malloc(BLOCK_SIZE); if (!buf) { return NULL; } if (read(fd, buf, BLOCK_SIZE) != BLOCK_SIZE) { return NULL; } return buf; } Resource leaks - El código revisa errores al llamar a malloc() y read(), pero produce una fuga de memoria si la llamada a read() falla. Solución: liberar la memoria antes de salir de la función dffd.
String generateCouponCode(String couponBase) { Random ranGen = new Random(); ranGen.setSeed((new Date()).getTime()); return(couponBase + Gen.nextInt(400000000)); } Privacidad y Confidencialidad - numeros aleatorios en java generan un numero aleatorio con una funcion ranextlnt() que no es segura Solución: usar un método criptográfico como Secure Random dfdfd.
public class DbUtil { public static Connection getConnection() throws SQLException { return DriverManager.getConnection( "jdbc:mysql://ixne.com/rxsql", "chan", "0uigoT0"); } } Criptografía: El código muestra un método Java que realiza una llamada a getConnection() utilizando una contraseña codificada directamente en el código. Cualquier persona que tenga acceso al código fuente tiene acceso a la contraseña. Solución: Mantener las passwords fuera del código fuente. Cifrar las contraseñas con algoritmo seguro y almacenarlas fuera del código y cifrar las passwords con algoritmos criptográficos robustos y almacenarlas cifradas en un fichero de configuración fdfdd.
Chroot("/var/ftproot") FTP Server: el código se ejecuta como root Solución: llamar a chdir antes que a chroot y devolver privilegios fdfdf.
for (int i=1; i < argc; i++) { /* make sure that the user can read the file, then open it */ if (!access(argv[i], O_RDONLY)) { fd = open(argv[i], O_RDONLY); } print(fd); } TOCTOU en el acceso a un fichero o condiciones de carrera : haciendo uso de un depurador el atacante puede hacer una pausa al programa despues del tiempo 1 en la linea if (!access(argv[i], O_RDONLY)), el atacante entra en su tiempo (tiempo 2)y realiza un unlink sobre el fichero que el programa abriría en condiciones normales tras esto el atacante continua al tiempo 3 donde realiza un symlink apuntando a un fichero diferente (por ejemplo uno que contenga usuarios) Finalmente el atacante reaunuda la ejecucion del programa , entra al tiempo 4 y se ejecuta la linea fd = open(argv[i], O_RDONLY);, abre el fichero al que se está apuntando a traves de un symlinnk y la funcion print(fd) presentaria informacion sensible en pantalla Solución: eliminar de raiz esta vulnerabilidad suprimiendo la linea if (!access(argv[i], O_RDONLY)) y abrir directamente el fichero con la linea fd = open(argv[i], O_RDONLY); En un ataque TOCTOU, el atacante, al pausar el programa después de la línea "if (!access(argv[i], O_RDONLY))", elimina el archivo esperado. Luego, con un enlace simbólico, apunta a un archivo malicioso. Al reanudar el programa y ejecutar "fd = open(argv[i], O_RDONLY);", se abre el enlace simbólico, exponiendo información sensible en pantalla.
fd = open("/etc/passwd", O_RDWR); ... if (!process_ok(argv[1])) { perror(argv[1]); } int main(int argc, char* argv[]) { (void)close(2); execl("victim", "victim", "attacker:<pw>:0:1:Super-User-2:...", NULL); return 1; } descriptores de ficheros : Como parte de su actividad normal, el programa abre el archivo /etc/passwd en modo de lectura-escritura y posteriormente muestra condicionalmente su primer argumento en stderr usando perror(). el Código es vulnerable a un ataque a sus descriptores de archivo estándar. el segundo código es un Programa simple que aprovecha el programa vulnerable mostrado en el código anterior para obtener acceso de root Solución: Llamar a open() tres veces para asegurar que se hayan utilizado los primeros tres descriptores de archivo. dffdfd.
Señale la respuesta incorrecta Los controles de seguridad preventivos aportan eficiencia por cuanto reducen la necesidad de realizar intervenciones correctivas ante incidentes de seguridad Los controles de seguridad detectivos no son suficientes per se para garantizar niveles de seguridad Los controles de seguridad correctivos pueden ser auditados fácilmente mediante la utilización de pruebas sustantivas Los controles de seguridad preventivos están diseñados de forma específica para el control de amenazas o grupos de amenazas concretos.
Señalar la respuesta correcta. ¿Cuáles son las dimensiones más importantes de los controles? Confidencialidad, integridad y disponibilidad. Las anteriores y no repudio Las anteriores y trazabilidad Las que realmente sean importante para conseguir los objetivos de la compañía.
Señalar la respuesta correcta. En un Sistema de Gestión de Base de Datos, señale cuál de las siguientes prácticas es la menos adecuada para auditar los controles de seguridad implantados en este Sistemas: Identificar los usuarios existentes en el SGBD y los permisos de acceso de que dispone cada uno Analizar los logs generados por el SGBD Verificar la existencia y aplicación de un procedimiento de paso a explotación ordenada de las aplicaciones que se apoyan en el SGBD Realizar un Test de Intrusión a nivel de aplicación.
Señalar la respuesta correcta. En relación al Control General/Controles de Organización y Operación-Separación de Entornos, habitualmente: Los usuarios deben realizar Sign-off antes de su liberación y paso a Producción En el entorno de Testing solo se realizan pruebas de Caja Blanca porque en Desarrollo ya se han realizado de Caja Negra. Los casos de prueba planificados en el entorno de Testing solo se realizan pruebas integradas. Las pruebas realizadas en el entorno de Desarrollo deben contener datos reales.
Señalar la respuesta correcta. En relación a las metodologías de auditoría, podemos afirmar que: Realmente solo existe una y es basada en Riesgos o Risk Oriented Approach. Cada firma (empresa) de auditoría puede desarrollar la suya propia, siendo la más difundida la basada en riesgos EDR (ROA). La basada en cuestionarios o checklist es utilizada por auditores con experiencia pues se le envían por correo electrónico al cliente para que la complete Ninguna de las anteriores.
Señalar la respuesta correcta. Respecto a la lógica de validación de entradas: No tiene por qué comprobarse la longitud de entrada como parte de la validación frontal. La lógica de validación back-end siempre debería comprobar la longitud de la entrada contra un mínimo y máximo. Todas las anteriores. Si el programa tiene que validar un campo de entrada, cuanto más sepa la lógica de validación de los valores legales para ese campo, más rigurosa puede ser la validación.
Señalar la respuesta correcta. Normalmente se suele asignar un usuario general con conjunto de privilegios que le permitirá realizar todas las tareas, incluidas las no necesarias. Ejemplos de errores comunes son: Instalación de aplicaciones y servicios con el usuario de administrador. Aplicación de derechos normales Usuarios con derechos normales. Servicios y procesos con privilegios por tiempo definido.
Señalar la respuesta correcta. Los requerimientos no funcionales de seguridad deben especificar: Propiedades que el software debe exhibir. Nivel requerido de seguridad y salvaguardas de riesgo de las funciones de seguridad. Los controles y normas que rigen los procesos de desarrollo, implementación y operación del software. Todas las anteriores.
Las pruebas en las que se ejecuta el programa compilado con un agente dentro del mismo, al tiempo que se «alimentan» las interfaces externas de la muestra, son del tipo de: Inyección de fallos en binarios Análisis código binario. Análisis híbrido. Fuzz testing.
Las excepciones tienen dos versiones, la diferencia tiene que ver con si el compilador usará análisis estático para asegurar que la excepción es manejada: Valores de retorno. Controladas y no controladas. Comprobadas y no comprobadas Ningunas de las anteriores.
Señalar la respuesta incorrecta. La auditoría interna del Sistema de Gestión de Seguridad de la Información - SGSI la debe realizar: Solo puede hacerla el CIO (Chief Information Officer - Director de Informática) Solo puede hacerla el CISO (Chief Information Security Officer - Director de Seguridad). Un auditor o equipo auditor independiente y que no haya participado en la implantación del SGSI. Solo puede hacerla un hacker muy experimentado.
Señalar la respuesta correcta. Indique cuál de los controles siguientes es el más típico del ciclo de vida de desarrollo de software: Separación de entornos de producción y administración. Identificación de usuarios de la aplicación y permisos de acceso asociados a los mismos. Securización de los servidores de desarrollo. Prueba de la aplicación desarrollada frente a estándares de seguridad.
Señalar la respuesta incorrecta. Los objetivos de la auditoría del Esquema Nacional de Seguridad de España son: Emitir una opinión personal del cumplimiento del ENS de tal forma que permita a los responsables correspondientes tomar las medidas oportunas para subsanar las deficiencias identificadas. Posibilitar la obtención de la correspondiente Certificación de Conformidad Sustentar la confianza que merece el sistema auditado sobre el nivel de seguridad implantado. Calibrar la capacidad del sistema para garantizar la integridad, disponibilidad, autenticidad, confidencialidad y trazabilidad de los servicios prestados y la información tratada, almacenada o transmitida.
Señalar la respuesta incorrecta. Las medidas de seguridad que establece el Esquema Nacional de Seguridad de España se clasifican conforme a: Marco normativo Marco operacional. Marco organizativo Medidas de protección.
Señalar la respuesta incorrecta. Definición de activo: Algo que tiene relativo valor para la organización Componente o funcionalidad de un sistema de información susceptible de ser atacado deliberada o accidentalmente con consecuencias para la organización Conjunto de todos los bienes y derechos con valor monetario que son propiedad de una empresa, institución o individuo, y que se reflejan en su contabilidad Recursos del sistema de información o relacionados con este, necesarios para que la organización funcione correctamente y alcance los objetivos propuestos por su dirección.
Señalar la respuesta correcta. Durante una auditoría de seguridad de una organización, un auditor se encontró que no había procedimientos de seguridad documentados. Por tanto, el auditor debe: Crear el documento de procedimientos. Dar por terminada la auditoría. Llevar a cabo pruebas de cumplimiento. Identificar y evaluar las prácticas existentes.
Señalar la respuesta correcta. ¿Cuál no es una herramienta de auditoría? Entrevistas. Trazas y/o huellas. Cuestionarios. Exámenes.
Señalar la o las respuestas incorrectas. Respecto a la ingeniería de requisitos de seguridad: Requisitos de software seguro. Requisitos que afectan directamente a la probabilidad de que el software sea seguro Requisitos de software seguro. Incluye la especificación de funciones que implementan una política de seguridad, como control de acceso, autenticación, autorización, cifrado y gestión de claves. Estas funciones previenen la violación de las propiedades de seguridad del sistema o de la información que procesa, como el acceso no autorizado, modificación, denegación de servicio etc. Requisitos de software seguro. Incluye la especificación de funciones que implementan una política de seguridad como control del acceso autenticación autorización cifrado y gestión claves. Estas funciones previenen violacion propiedades seguridad sistema informacion procesa acceso no autorizado modificacion denegacion servicio etc Los requerimientos no funcionales securidad deben especificar: Los controles y normas que rigen los procesos desarrollo implementacion operacion del sofware.
Indicar la respuesta incorrecta. Un acercamiento a un prototipo de análisis y gestión de riesgo típico implica varias actividades principales que a menudo incluyen un número de actividades básicas: Probar el software si ya existe algún prototipo y discutir las posibles modificaciones o parches para corregir vulnerabilidad. Estudiar el código y otros componentes de software incluyendo el empleo de herramientas de análisis de código. Identificar vulnerabilidades posibles, aprovechando el uso de herramientas y documentación sobre vulnerabilidades comunes. Identificar las amenazas y las fuentes relevantes de ataque. Esta tarea se deriva fácilmente si se ha hecho previamente la obtención de datos del funcionamiento del software en la fase operación.
Señalar la respuesta incorrecta. Respecto a los patrones de ataque Ayudan a definir el comportamiento del sistema para prevenir o reaccionar ante un tipo específico de ataque probable. Especifican debilidades aprovechadas por los ataques, orientando qué técnicas o prácticas de seguridad de desarrollo evitan estas deficiencias. Proporcionan el contexto del software, de forma que permite diseñarlo correctamente Proporcionan ejemplos de ataques que aprovechan las vulnerabilidades de la arquitectura elegida.
FileInputStream fis; byte[] byteArray = new byte[1024]; for (Iterator i=users.iterator(); i.hasNext();) { String userName = (String) i.next(); String pFileName = PFILE_ROOT + "/" + userName; FileInputStream fis = new FileInputStream(pFileName); try { fis.read(byteArray); // the file is always 1k bytes processPFile(userName, byteArray); } finally { fis.close(); } } Return Values in Java: El programador asume que los archivos siempre tienen un tamaño exacto de 1 KB y, por lo tanto, ignora el valor de retorno de read(). Si un atacante puede crear un archivo más pequeño, el programa reutilizará el resto de los datos del archivo anterior, provocando que el código procese los datos de otro usuario como si esos datos pertenecieran al atacante. Solución : Utilizar el valor devuelto por fis.read(byteArray) para determinar cuántos bytes se leyeron y luego crear un nuevo array de bytes con esa cantidad es una solución adecuada. De esta manera, aseguras que solo se procesen los datos válidos leídos del archivo y evitas la reutilización de datos incorrectos. El problema abordado se relaciona con la falta de manejo adecuado de archivos en Java, donde el programador asume un tamaño fijo de 1 KB y no tiene en cuenta el valor de retorno de la función read(). Esto podría ser explotado por un atacante al crear archivos más pequeños, llevando a la reutilización de datos incorrectos. La solución propuesta sugiere utilizar el valor devuelto por fis.read(byteArray) para determinar cuántos bytes se leyeron, creando luego un nuevo array de bytes con esa cantidad. Esto garantiza que solo se procesen datos válidos del archivo, evitando la manipulación indebida de información por parte de un atacante.
Denunciar test Consentimiento Condiciones de uso