Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura de Computadores
Debido a que los registros de la CPU tienen solo un espacio de memoria limitado, la
memoria es aumentada por la memoria del sistema y dispositivos de
almacenamiento secundarios como el disco duro discos, discos de video digital
(DVD), discos compactos (CD) y llaves / llaveros USB. La memoria del sistema
también se conoce comúnmente como memoria de acceso aleatorio (RAM). La
RAM es el componente principal con el que se comunica la CPU. Entrada/ Los
dispositivos de salida son utilizados por el sistema informático para interactuar con
dispositivos externos. interfaces. Algunos ejemplos comunes de dispositivos de
entrada incluye teclado, mouse, etc. y algunos ejemplos comunes de dispositivos de
salida incluyen el monitor, impresoras, etc. La comunicación entre cada uno de
estos componentes se realiza a través de una puerta de enlace canal que se llama
Bus.
La CPU, en su nivel más básico de operación, procesa datos basados en binarios
códigos definidos internamente por el fabricante del chip del procesador. Estás
códigos de instrucción se componen de varios códigos operativos denominados
Opcodes. Los códigos de operación le dicen a la CPU qué funciones puede realizar.
Para que un programa de software ejecute, lee códigos de instrucción y datos que
se almacenan en el sistema informático memoria y realiza la operación deseada en
los datos. Lo primero que debe suceder es que la instrucción y los datos se carguen
en el sistema memoria desde un dispositivo de entrada o un dispositivo de
almacenamiento secundario. Una vez que esto sucede, la CPU realiza las
siguientes cuatro funciones para cada instrucción:
Idiomas compilados
Idiomas interpretados
Idiomas híbridos
Se recomienda que visite los respectivos sitios web del OWASP Lista de los 10
principales y la lista de los 25 principales de CWE / SANS, ya que se espera que un
CSSLP sea familiarizado con los problemas de programación que pueden provocar
infracciones de seguridad y cómo abordarlos.
Las vulnerabilidades y riesgos de seguridad de software más comunes se tratan en
la siguiente sección. Cada vulnerabilidad o riesgo se describe primero en cuanto a lo
que es y cómo ocurre, seguido de una discusión de los controles de seguridad que
pueden ser implementados para mitigarlo.
Desbordamiento de búfer
■ desbordamiento de pila
■ desbordamiento del montón
Desbordamiento de pila
Desbordamiento de montón
Defectos de inyección
■ inyección SQL
■ Inyección de comandos del sistema operativo
■ Inyección de LDAP y
■ inyección XML
Inyección SQL
Funciona con el mismo principio que los otros ataques de inyección donde el
comando la cadena se genera dinámicamente utilizando la entrada proporcionada
por el usuario cuando el software permite la ejecución de comandos de nivel del
sistema operativo (SO) utilizando la entrada de usuario proporcionada sin
desinfección o validación, se dice que es susceptible a la inyección de OS comando.
Esto podría ser seriamente devastador para el negocio si el principio de privilegio
mínimo no está diseñado en el medio ambiente que está siendo comprometido. Los
dos tipos principales de inyección de comandos del sistema operativo son como
sigue:
■ El software acepta argumentos del usuario para ejecutar una sola comando de
programa fijo. En tales casos, la inyección está contenida solo al comando que se le
permite ejecutar y el atacante puede cambiar la entrada pero no el comando en sí
aquí el error de programación es que el programador asume que la entrada
proporcionados por los usuarios para ser parte de los argumentos en el comando
para se ejecutará será confiable según lo previsto y no malicioso.
■ El software acepta argumentos del usuario que especifica qué comando del
programa que les gustaría que ejecute el sistema. Esto es mucho más grave que el
caso anterior, porque ahora el atacante puede encadenar varios comandos y causar
un daño grave al sistema ejecutando sus propios comandos compatibles con el
sistema. Aquí, el error de programación es que el programador asume que el
comando en sí no será accesible para usuarios que no sean de confianza.
http://www.mycompany.com/sensitive/cgi-bin/userData.pl?doc=%20%3B%20/bin/ls
%20-l
Inyección XML
■ Inyección XPATH
■ Inyección de XQuery
En la inyección XPATH, la expresión XPath que se utiliza para recuperar datos del
almacén de datos XML no está validado o desinfectado antes de su procesamiento
y construcción dinámicamente utilizando la entrada proporcionada por el usuario.
Por tanto, la estructura de la consulta ser controlado por el usuario, y un atacante
puede aprovechar esta debilidad mediante la inyección de expresiones XML mal
formadas, lo que permite al atacante realizar operaciones malintencionadas como
modificar y controlar el flujo lógico, recuperar datos no autorizados y / o eludir los
controles de autenticación. XQuery
La inyección funciona de la misma manera que una inyección XPath, excepto que
XQuery (no XPath) expresión que se utiliza para recuperar datos del almacén de
datos XML es no validado o desinfectado antes del procesamiento y construido
dinámicamente con el usuario entrada suministrada.
<clientes>
<cliente>
<usuario_nombre> andrew </usuario_nombre>
<accountnum> 1234987655551379 </accountnum>
<pin> 2358 </pin>
<homepage> / home / astrout </homepage>
</cliente>
<cliente>
<nombre_usuario> dave </nombre_usuario>
<accountnum> 9865124576149436 </accountnum>
<pin> 7523 </pin>
Las consecuencias de los defectos de inyección son variadas y graves los más
comunes incluyen:
■ Considere que todas las entradas no son confiables y valide todas las entradas
del usuario. Desinfecte y filtre la entrada usando una lista blanca de caracteres
permitidos y sus formas no canónicas. Mientras usa una lista negra de Los
caracteres no permitidos pueden ser útiles para detectar posibles ataques o
determinando insumos mal formados, confiando únicamente en listas negras puede
resultar insuficiente ya que el atacante puede probar variaciones y representación
alternativa de la forma de lista negra la validación debe ser realizado tanto en el lado
del cliente como en el servidor o al menos en el del lado del servidor para que los
atacantes no puedan simplemente eludir el lado del cliente verificaciones de
validación y aún realizar ataques de inyección. Entrada del usuario debe ser
validado para el tipo de datos, rango, longitud, formato, valores y representaciones
canónicas. Palabras clave SQL como UNION, SELECT, INSERT, UPDATE,
DELETE, DROP, etc.debe ser filtrado además de caracteres como comillas simples
(‘) o SQL comentarios (-) basados en el contexto. La validación de entrada debe ser
una de las primeras líneas de defensa en una estrategia de defensa en profundidad
para prevenir o mitigar los ataques de inyección, ya que reduce significativamente
la superficie de ataque.
Los defectos de inyección y Cross Site Scripting (XSS) se pueden considerar como
dos debilidades explotables con mayor frecuencia que prevalecen en el software
actual. Algunos expertos se refieren a estos dos defectos como un "golpe 1-2" como
lo muestra el OWASP y Clasificación CWE.
XSS es el ataque de seguridad de aplicaciones web más frecuente en la actualidad.
Una red se dice que la aplicación es susceptible a la vulnerabilidad XSS cuando el
usuario proporcionó la entrada se envía de vuelta al cliente del navegador sin ser
validada correctamente y su contenido escapó. Un atacante proporcionará un script
(de ahí la parte del guión) en lugar de un valor legítimo y ese guión si no se escapó
antes de ser enviado para el cliente, se ejecuta. Cualquier fuente de entrada puede
ser el vector de ataque y el los agentes de amenazas incluyen a cualquier persona
que tenga acceso a suministrar información. Revisión de código y las pruebas se
pueden utilizar para detectar vulnerabilidades XSS en el software.
■ No persistente o reflejado
■ Persistente o almacenado
■ Basado en DOM
Como su nombre lo indica, los XSS no persistentes o reflejados son ataques en los
que el guión de entrada proporcionado por el usuario que se inyecta (también
denominado carga útil) no almacenados pero simplemente incluidos en la respuesta
del servidor web, ya sea en el resultados de una búsqueda o un mensaje de error.
Hay dos formas principales en las que el atacante puede inyectar su guión
malicioso. Uno es que proporcionan la entrada script directamente en su aplicación
web. La otra forma es que pueden enviar un enlace con el guión incrustado y oculto
en él. Cuando un usuario hace clic en el enlace, el script inyectado aprovecha el
servidor web vulnerable que refleja el guión de vuelta al navegador del usuario
donde se ejecuta.
Los controles contra ataques XSS incluyen las siguientes estrategias defensivas y
implementaciones:
■ Un firewall de capa de aplicación puede ser útil contra ataques XSS pero hay que
reconocer que aunque esto puede no ser preventivo en naturaleza, es útil cuando el
código no se puede arreglar (como en el caso de un componente de terceros).
Tras la carga de la página, esta página lee el valor de la clave del nombre de
usuario de la cadena de consulta y muestra información sobre el usuario cuyo
nombre fue pasado y lo muestra en la pantalla. También expone las opciones del
menú administrativo si el valor isAdmin es 1. En nuestro ejemplo, la información
sobre "reuben" será mostrada en la pantalla. También vemos que Reuben no es un
administrador como está indicado por el valor de la clave isAdmin. Sin la
autenticación adecuada y controles de autorización, un atacante puede cambiar el
valor de la clave de nombre de usuario de "reuben" a "jessica" y ver información
sobre Jessica. Además por manipular el valor de la clave isAdmin de 0 a 1, un no
administrador puede obtener acceso a la funcionalidad administrativa cuando la
aplicación web sea susceptible de un defecto de referencia de objeto directo
inseguro.
■ Utilice una referencia de objeto indirecta mediante un índice del valor o un mapa
de referencia para que se represente la manipulación directa de parámetros inútil a
menos que el atacante también sepa cómo se asigna el parámetro a la
funcionalidad interna.
■ No exponga objetos internos directamente a través de URL o parámetros de
formulario al usuario final.
■ Enmascarar o proteger criptográficamente (cifrar / hash) expuestos parámetros,
especialmente pares clave-valor de cadenas de consulta.
■ Valide la entrada (cambio en el valor del objeto / parámetro) para garantizar que el
cambio está permitido según la lista blanca.
■ Realizar controles de acceso múltiple y verificaciones de autorización cada vez
que se cambia un parámetro, de acuerdo con el principio de mediación completa. Si
se debe utilizar una referencia de objeto directa, es importante asegurarse de que el
usuario esté autorizado antes de usarlo.
■ Utilice RBAC para hacer cumplir los roles en los límites apropiados y reducir
superficie de ataque al mapear roles con los datos y la funcionalidad. Esto protegerá
contra los atacantes que intentan atacar a los usuarios con un rol diferente
(autorización vertical) pero no contra los usuarios que tienen el mismo rol
(autorización horizontal)
■ Asegurarse de que exista un RBAC basado en el contexto y el contenido.
■ Almacenamiento local
■ Configuración del navegador
■ caché
■ Copias de seguridad, registros y archivos de configuración
■ Comentarios en código
■ Secretos codificados en código
■ Excepciones no controladas y mensajes de error
■ Almacenes de datos de backend
Dado que se puede acceder fácilmente a los datos almacenados en el lado del
cliente y modificado usando scripts (por ejemplo, Javascript, VBScript, etc.), el
almacenamiento local también representa una amenaza para la seguridad. Además,
las aplicaciones móviles suelen almacenar datos (incluidos los datos sensibles) en
el dispositivo cliente y son susceptibles a ataques de inyección del lado del cliente.
■ Suplantación de identidad
■ Pharming
■ Vishing
■ SMSishing
Phishing, que es un método para engañar a los usuarios para que envíen sus
información personal utilizando medios electrónicos como correos electrónicos
engañosos y sitios web, va en aumento. Se cree que el término "phishing" tiene sus
raíces en el uso de señuelos electrónicos sofisticados para pescar información
personal de la víctima (financiera, de inicio de sesión y contraseñas, etc.). Esta
forma de ingeniería social electrónica está tan desenfrenada en la actualidad
informática empresarial de la que incluso las grandes organizaciones han caído.
Aunque estos señuelos electrónicos sofisticados generalmente se dirigen a usuarios
en masa, también pueden apuntar a un solo individuo y cuando este es el caso, se
conoce comúnmente como "spear phishing". Con la sofisticación de tales ataques
engañosos para revelar información, los atacantes han llegado con una variante de
phishing, llamada Pharming.
Con la telefonía de voz sobre IP (VoIP) en aumento, los ataques de phishing tienen
una nueva variante llamada Vishing. Vishing se compone de dos palabras, "Voz" y
"phishing" y es la actividad criminal fraudulenta en la que un atacante roba
información confidencial utilizando ingeniería social engañosa técnicas en redes
VoIP.
Las páginas web que brindan funcionalidad administrativa son los principales
objetivos para tales ataques de fuerza bruta, pero cualquier función o página puede
ser explotada si no está protegido adecuadamente. Por tanto, es imperativo verificar
la protección (controles de autenticación y autorización) de todas y cada una de las
funciones y URL pero esto puede ser una tarea desalentadora, cuando se realiza
manualmente, especialmente si la aplicación es compleja y compuesta de muchas
funciones y páginas. El diseño Los principios de mediación completa y los
mecanismos menos comunes deben ser diseñados en la aplicación.
Control de acceso basado en roles (RBAC) de funciones y URL que niega el acceso
por defecto, además de requerir concesiones explícitas a usuarios y roles,
proporciona cierto grado de mitigación contra comprobaciones de nivel de función
faltantes y falta de restringir los ataques de acceso a URL. Cuando las
comprobaciones de control de acceso se implementan utilizando ajustes de
configuración o en el código, es mejor no codificar estas verificaciones dentro del
código de la aplicación y utilizar un control de acceso basado en derechos
mecanismo para que estos controles pueden actualizarse y auditarse de una
manera relativamente fácil.
En CSRF, un atacante enmascara (falsifica) una solicitud HTTP maliciosa como uno
legítimo y engaña a la víctima para que presente esa solicitud. Porque la mayoría de
los navegadores incluyen automáticamente solicitudes HTTP, es decir, las
credenciales (cookies de sesión de usuario, información de autenticación básica,
direcciones IP de origen, credenciales de dominio de Windows) asociado con el
sitio, si el usuario ya autenticado, el ataque logrará realizar lo que el ataque diseñó
solicitud para hacer. Estas solicitudes falsificadas se pueden enviar mediante
enlaces de correo electrónico, etiquetas de imagen de cero bytes (imágenes cuya
altura y ancho son de 0 píxeles cada una de modo que la imagen es invisible para el
ojo humano), almacenada en un iFrames (CSRF almacenado),URL susceptibles a
Clickjacking (donde la URL es secuestrada y al hacer clic en una URL que parece
inocua y legítima en realidad da como resultado hacer clic en el URL maliciosa que
se oculta debajo) y redirecciones XSS. Formas que invocan la función de cambio de
estado son los principales objetivos de CSRF. CSRF también es conocido por varios
otros nombres, incluidos XSRF, Session riding attack, sea surf attack, enlace hostil,
ataque de automatización y falsificación de referencias entre sitios. El ataque el flujo
en un ataque CSRF es el siguiente:
Las siguientes son algunas estrategias defensivas que los usuarios pueden emplear
para prevenir y mitigar los ataques CSRF:
Las siguientes son algunas estrategias defensivas que pueden ser empleadas por
desarrolladores para prevenir y mitigar los ataques CSRF:
Los ataques contra el software también son frecuentes cuando los datos se
intercambian en archivos. En esta sección, cubriremos algunos de los ataques más
comunes que involucran archivos estos ataques incluyen:
Cuando la ubicación de las partes más pequeñas del programa está definida por el
usuario y puede ser influenciado por un usuario final, un atacante puede apuntar a
ubicaciones con archivos remotos y peligrosos y explotar el software.
Cuando descarga código (o archivos) sin verificar si el código está alterado, puede
provocar violaciones de seguridad muy graves y repercusiones. Un atacante puede
modifique el código antes de descargarlo. Incluso ubicaciones (sitios) que contienen
archivos que usted confía y descarga puede ser atacado y suplantado mediante la
suplantación de DNS o envenenamiento de caché, redirigiendo a los usuarios a las
ubicaciones de los atacantes. Esto es particularmente importante cuando las
actualizaciones de software se publican utilizando archivos de ubicaciones de
confianza, la descarga de código y archivos sin verificaciones de integridad puede
provocar la descarga de archivos que han sido alterados maliciosamente por un
atacante.
Condición de carrera
Para que ocurran las condiciones de carrera, las siguientes tres propiedades deben
ser cumplidas.
1. Propiedad de concurrencia
2. Propiedad de objeto compartido y
3. Cambiar propiedad estatal
Ataques de tiempo
En los ataques de tiempo, el atacante mide cuánto tiempo dura cada operación
computacional y utiliza esa información del canal lateral para descubrir otra
información sobre la composición interna del sistema. Un subconjunto de este
ataque de sincronización busca retrasos mensajes de error que es una técnica
empleada en ataques de inyección SQL ciega.
En los ataques de análisis de poder, el atacante mide los distintos grados de poder
consumo del hardware durante el cómputo de operaciones por
Por ejemplo, la clave RSA se puede decodificar utilizando el análisis de los picos de
potencia,
que representan momentos en que los algoritmos usan multiplicaciones o no.
Ataques TEMPEST
Los ataques de análisis diferencial de fallas tienen como objetivo descubrir secretos
del sistema mediante inyectar intencionalmente fallas en la operación computacional
y determinar cómo responde el sistema a las fallas. Esta es una forma de prueba
fuzz (cubierta en el capítulo de pruebas de software seguro) y también se puede
utilizar para indicar la fuerza de los controles de validación de entrada establecidos.
Como su nombre indica, los ataques de observación distante son un ataque de surf
de hombro, donde el atacante observa y descubre información de un sistema
directamente desde una distancia. Observando a través de un telescopio o usando
una imagen reflejada fuera del ojo, los anteojos, el monitor u otros dispositivos
reflectantes de alguien son algunos ejemplos bien conocidos de ataques de
observación a distancia.
Validación de entrada
Las expresiones regulares (RegEx) se pueden utilizar para validar la entrada. Una
lista de los patrones RegEx comunes se proporcionan en el capítulo Pruebas de
software seguras. Este proceso de verificación se puede lograr mediante técnicas
de filtración.
El filtrado de la entrada del usuario se puede lograr utilizando una lista blanca o una
lista negra. Una lista blanca es una lista de caracteres, comandos buenos y no
maliciosos permitidos o patrones de datos permitidos. Por ejemplo, la aplicación
solo permitirá "@" Y ".com" en el campo de correo electrónico. Los elementos de
una lista blanca se conocen y suelen ser considerados de naturaleza no maliciosa.
Por otro lado, una lista negra es una lista de caracteres, comandos o patrones de
datos no permitidos que se consideran maliciosos. Los ejemplos incluyen comillas
simples (‘), comentario SQL (- -) o un patrón como (1 = 1).
¿Dónde validar?
¿Qué Validar?
La desinfección
Eliminando los caracteres potencialmente dañinos como "<", ">", "(", ")", "" ","; "
y "/", la entrada del atacante se convierte en script de prueba de la sonda
scriptalertXSS que no se ejecuta.
"O 1 = 1 -
Al reemplazar la comilla simple (‘) por una comilla doble (‘ ’), el la entrada del
atacante termina convirtiéndose
"O 1 = 1 -
lo que provocará un error de sintaxis SQL. Un ejemplo de literalización es el
siguiente:
Manejo de errores
API seguras
Gestión de la memoria
Punteros colgantes
Los punteros colgantes son aquellos punteros que no apuntan a un objeto válido del
tipo apropiado en la memoria. Estos ocurren cuando el objeto que el puntero la
referencia original se eliminó o se desasigna sin el valor del puntero siendo
modificado. Esto también se conoce comúnmente como una pérdida de memoria y
el objeto de memoria anterior se vuelve inalcanzable mientras todavía ocupa
memoria superior espacio. Los punteros colgantes hacen referencia a la ubicación
de la memoria de los memoria y cuando esa ubicación de memoria desasignada se
carga con alguna otros datos, resultados impredecibles que incluyen inestabilidades
del sistema, segmentación y potencialmente pueden ocurrir fallas de protección
general. Además, si un atacante puede aprovechar el puntero que cuelga, pueden
producirse ataques de desbordamiento graves. Los punteros colgantes difieren de
los punteros salvajes en el sentido de que los punteros salvajes se utilizan antes de
ser inicializados, pero se sabe que producen resultados similares resultados
erráticos, impredecibles y peligrosos como punteros colgantes.
Recolección de basura
Tipo de seguridad
Acciones de seguridad
Los permisos que se otorgan son evaluados por el tiempo de ejecución cuando se
carga el código en la memoria. Las tres categorías de acciones de seguridad que se
pueden realizar son solicitud, demandas y anulaciones. Las solicitudes se utilizan
para informar al tiempo de ejecución sobre los permisos que necesita el código para
que se ejecute. No se puede utilizar para influir en el tiempo de ejecución para
otorgar al código más permisos de los que debería ser concedido. Las demandas se
utilizan en el código para hacer valer los permisos y ayudar a proteger los recursos
de las personas que llaman. Las anulaciones se utilizan en el código para anular el
comportamiento de seguridad predeterminado.
Gestión de excepciones
Las excepciones son inevitables cuando se trata de software. Si bien los errores
pueden ser un resultado de la ignorancia del usuario o avería del software, las
excepciones son problemas de software que no se manejan explícitamente cuando
el software se comporta de forma no intencionada o manera poco confiable. Un
ejemplo de error de usuario es que el usuario escribe incorrectamente a su usuario
ID al intentar iniciar sesión. Ahora, si el software esperaba que el ID de usuario fuera
suministrado en un formato numérico y el usuario escribió en caracteres alfabéticos
en ese campo, las operaciones del software darán como resultado una excepción de
conversión de tipo de datos. Si esta excepción no se maneja explícitamente,
resultaría en informar al usuario de esta excepción y, en muchos casos, divulga toda
la pila de excepciones. Esto puede resultar en la divulgación de información que
potencialmente revele los detalles arquitectónicos y, en algunos casos, incluso el
valor de los datos. La figura 4.18 revela cómo una excepción no manejada revela
mucha información confidencial, incluida la composición interna del software.
Maneje todas las excepciones preferiblemente con un enfoque común.
Gestión de sesiones
Solo porque alguien está autenticado y autorizado para acceder a los recursos del
sistema no significa que los controles de seguridad puedan ser laxos después de
una sesión autenticada está establecida, porque una sesión puede ser secuestrada.
Ataques de secuestro de sesiones suceden cuando un atacante se hace pasar por
la identidad de un usuario válido e interviene ellos mismos en el medio de una
sesión existente, enrutando información desde el usuario al sistema y del sistema al
usuario a través de ellos. Esto puede llevar a la divulgación de información
(amenaza de confidencialidad), alteración (amenaza de integridad) o una
denegación de servicio (amenaza de disponibilidad). También se conoce como
ataque man-in-themiddle (MITM). La gestión de sesiones es un concepto de
seguridad que tiene como objetivo para mitigar el secuestro de sesiones o los
ataques MITM. Requiere que la sesión sea única por la emisión de tokens de sesión
únicos y también requiere que el usuario la actividad se rastrea para que alguien
que esté intentando secuestrar una sesión válida se le impide hacerlo. Controles a
implementar en código para administrar sesiones se tratan en la sección
autenticación rota y administración de sesiones en este capítulo.
Inicio seguro
Criptografía
Un adecuado control de acceso y auditoría significa que tanto para internos como
para usuarios, el acceso a las claves y datos criptográficos
■ concedido explícitamente
■ controlados y monitoreados mediante auditorías y revisiones periódicas.
■ no frustrado inadvertidamente por debilidades como inseguridad
configuraciones de permisos.
■ contextualmente apropiado y protegido, independientemente de si el cifrado es
unidireccional o bidireccional. Contexto de cifrado unidireccional implica que solo el
usuario o destinatario necesita tener acceso al clave, como en el caso de PKI. El
contexto de cifrado bidireccional implica que el cifrado se puede realizar
automáticamente en nombre del usuario, pero la clave debe estar disponible para
que el texto sin formato pueda ser recuperado automáticamente por ese usuario.
Concurrencia
Anteriormente aprendimos que para que ocurran las condiciones de carrera, debería
haber varios subprocesos que operan simultáneamente contra un objeto
compartido, y cada subproceso intenta cambiar el estado de ese objeto compartido.
Simultaneidad (simultánea operaciones) es una propiedad principal en los ataques
TOC / TOU.
Una ventana de carrera se define como la ventana de oportunidad cuando dos hilos
compiten entre sí tratando de alterar el mismo objeto. El primer paso para evitar
condiciones de carrera es identificar ventanas de carrera. Codifica incorrectamente
segmentos de código que acceden a objetos sin un flujo de control adecuado
pueden resultar en ventanas de carrera. Tras la identificación de las ventanas de
carrera, es importante arreglarlas en código o diseño lógico para mitigar las
condiciones de carrera. Además de abordar ventanas de carrera, las operaciones
atómicas también pueden ayudar a prevenir ataques de condición de carrera.
Las operaciones atómicas significan que todo el proceso se completa con un solo
flujo de control y que subprocesos concurrentes o flujo de control contra el mismo el
objeto no está permitido. Las operaciones de un solo hilo son un medio para
garantizar que las operaciones se realizan de forma secuencial y no simultánea. Sin
embargo, tal diseño tiene un costo de rendimiento y debe ser considerado
cuidadosamente sopesando los beneficios de la seguridad sobre el rendimiento.
Tokenización
Sandboxing
Anti-manipulación
Ofuscación
Análisis de código
El análisis de código es el proceso de inspeccionar el código en busca de calidad y
debilidades que se pueden explotar. Se logra principalmente por dos medios;
estático y dinámico.
El análisis de código estático implica la inspección del código sin ejecutar el código
(o programa de software). Este análisis se puede realizar manualmente mediante lo
llamada revisión de código o de forma automatizada utilizando herramientas.
Cualquier código, independientemente de si se trata de código fuente, código byte o
código objeto, se puede analizar. Herramientas que se utilizan para realizar análisis
de código fuente estático se denominan comúnmente analizadores de código fuente
y herramientas que se utilizan para analizar el código de bytes intermedio se
conocen como escáneres de códigos de bytes. Las herramientas utilizadas para
analizar el código objeto de forma estática son denominadas analizadores binarios o
escáneres de códigos binarios. Analizadores de código fuente utilizar
predominantemente la coincidencia de patrones con una lista conocida de sintaxis
de vulnerabilidad y análisis de modelo / flujo de datos contra conjuntos de datos
conocidos para detectar vulnerabilidades. Los escáneres de código binario
funcionan bien como analizadores de código fuente estáticos, pero utilizan
desensamblaje, antes de la matriz de patrones y el análisis de datos contra códigos
ejecutables. La principal ventaja que tiene un analizador de código binario sobre el
código estático analizadores es que puede detectar vulnerabilidades e ineficiencias
de código que han introducido por el compilador, ya que está inspeccionando el
código objeto compilado, después del proceso de compilación. También tiene la
capacidad de buscar bibliotecas que están vinculadas durante el proceso de
compilación.
Los beneficios de realizar análisis de código estático son que los errores y las
vulnerabilidades se pueden detectar temprano y abordar antes de la implementación
del software. Hoy en día, la funcionalidad de análisis de código estático se
proporciona como parte del propio entorno de desarrollo integrado (IDE). Esto ayuda
en la detección de errores de seguridad en las primeras etapas del ciclo de vida,
durante la fase de desarrollo en sí mismo, además de proporcionar
retroalimentación inmediata al personal de desarrollo que aprende a partir de los
comentarios y las horas extraordinarias, desarrolle un código más seguro. Además
estático el análisis de código no requiere la necesidad de un entorno de producción
simulado y se puede realizar en el entorno de desarrollo o prueba. Esperando un
alto grado de seguridad del software simplemente utilizando herramientas de
análisis de código estático debe abordarse con precaución ya que existe la
posibilidad de un alto grado de falsas positivos y falsos negativos observados en la
mayoría de las herramientas. Estas herramientas deben usarse como ayuda para el
analista de seguridad, para que puedan centrarse en secciones de código inseguras
y abordar los errores de seguridad de forma más eficaz.
Cuando se lleva a cabo una revisión de código por razones de seguridad, el código
debe ser inspeccionado como mínimo para lo siguiente:
■ Código inseguro
■ Código ineficiente
El código inseguro es un código que tiene debilidades explotables. Inseguro común
las implementaciones de código incluyen:
Defectos de inyección
Compruebe el código que hace posibles los ataques por inyección. Los ejemplos
incluyen la falta de validación de entrada o la construcción dinámica de consultas
que aceptan datos proporcionados por el usuario sin la validación o desinfección
adecuadas. La revisión del código debe verificarse para asegurarse de que se haya
implementado la validación de entrada adecuada.
Mecanismos de no repudio
Ataques de suplantación
Errores y excepciones
Manejo la revisión del código debe verificar para asegurarse de que los errores
cuando se informan no revelen más información de la necesaria y que el software
falla de forma segura cuando ocurren errores. Se debe implementar código para
manejar excepciones. El cheque para la presencia de bloques try-catch-finalmente
también debe verificar para asegurarse de que los objetos creados en código se
destruyen en los bloques finalmente.
Fuerza criptográfica
El código debe revisarse para asegurarse de que las API obsoletas y prohibidas no
sean usado. También se deben eliminar las funciones no utilizadas en el código.
Comprobaciones explícitas de cómo se deben realizar huevos de Pascua y
campanas y silbidos en código. Una buena manera de determinar si se requiere el
código es utilizar la matriz de trazabilidad de requisitos.
Código reversible
Código privilegiado
Ganchos de mantenimiento
Bombas lógicas
Las bombas lógicas son problemas graves de seguridad del código, ya que se
pueden colocar en el código y pasar desapercibido si no se realiza una revisión del
código. Basado en la lógica (tal como condición o tiempo), se puede activar una
bomba lógica para que se active alguna operación malintencionada y no
intencionada cuando se cumple esa lógica. Bombas lógicas son implantados por
una persona con información privilegiada que tiene acceso al código fuente.
Descontento se sabe que los empleados que se sienten ofendidos por sus
empleadores implantan bombas lógicas en su código como medio de venganza
contra sus empleadores. Una bomba lógica no sólo causa la destrucción de datos,
sino que también puede interrumpir o provocar que el negocio se detenga por
completo. También se han utilizado para estafas de extorsión, donde el editor del
código amenaza al suscriptor con que activarán la bomba lógica en código a menos
que el suscriptor esté de acuerdo con los términos del editor. Cuando el código de
software no es desarrollado y controlado directamente por usted, como en el caso
de un subcontratista o tercero, revisión de código para determinar bombas lógicas
se vuelve extremadamente crítico. También es importante tener en cuenta que para
desactivar una prueba software después de un cierto período de tiempo (la
condición), que se comunicó por adelantado, no se considera una bomba lógica
porque no es maliciosa y funciona según lo previsto.
La revisión del código también debe identificar el código que es ineficiente ya que
puede tener un impacto directo en la seguridad del software. Haciendo un impropio
la llamada al sistema y las construcciones de bucle infinito son algunos ejemplos de
código ineficiente que puede conducir al compromiso del sistema, pérdidas de
memoria, agotamiento de recursos y denegación de servicio, lo que afecta la
confidencialidad, integridad y disponibilidad básicas principios de seguridad del
software. Específicamente, el código debe revisarse para eliminar
las siguientes ineficiencias:
Complejidad ciclomática
El código fuente escrito por el programador debe convertirse en una forma que la
máquina pueda entender. Este proceso de conversión es genéricamente
denominado proceso de construcción. La integridad del entorno de construcción
donde el código fuente se convierte en código objeto es importante. La integridad
del el entorno de construcción se puede asegurar mediante:
Los empaquetadores se utilizan para crear software de modo que el software pueda
instalado sin errores. Se aseguran de que todas las dependencias y recursos que
son necesarios para que el software se ejecute son parte de la compilación del
software. El rojo Hat Package Manager (RPM) y Microsoft Installer (MSI) son
ejemplos de envasadores. Cuando se empaqueta el software, es importante
asegurarse de que no se introducen vulnerabilidades.