C ++ de programación: 10 consejos anti-hackers
Como programador de C ++, tiene que aprender las cosas que debe hacer en su código C ++ para evitar la escritura de programas que son vulnerables a los piratas informáticos. Hay también se describen las funciones que se pueden activar si el sistema operativo compatible con ellas, como Address Space Layout aleatorización (ASLR) y Data Execution Prevention (DEP).
Conteúdo
- Don # 8242-t hacer suposiciones acerca de la entrada del usuario
- Maneje fallas con gracia
- Mantenga un registro del programa
- Siga un buen proceso de desarrollo
- Implementar un buen control de versiones
- Autenticar a los usuarios de forma segura
- Administrar sesiones remotas
- Ofuscar su código
- Firme su código con un certificado digital
- Utilice cifrado seguro cuando sea necesario
Don # 8242-t hacer suposiciones acerca de la entrada del usuario
Programador # 8242-s visión de túnel está bien durante la fase de desarrollo de la primera. En algún momento, sin embargo, el programador (o, mejor aún, algún otro programador que no tenía nada que ver con el desarrollo del código) tiene que sentarse y olvidarse del problema inmediato. Ella tiene que preguntarse a sí misma, " Cómo va este programa reaccionar a la entrada ilegal "?
Estas son algunas de las reglas para el control de entrada:
No hacer suposiciones acerca de la longitud de la entrada.
Don # 8242-t aceptar más entrada que tiene espacio en sus buffers de longitud fija (o tampones de tamaño variable utilizados).
Compruebe el rango de cada valor numérico para asegurarse de que tiene sentido.
Revise y filtrar los caracteres especiales que pueden ser utilizados por un hacker para inyectar código.
Don # 8242-t pase la entrada bruta en otro servicio, como por ejemplo un servidor de base de datos.
Y llevar a cabo todos los mismos controles de los valores devueltos de servicios remotos. El hacker puede no estar en el lado de entrada, puede estar en el lado de respuesta.
Maneje Fallas con Gracia
Su programa debe responder razonablemente a las fallas que se producen dentro del programa. Por ejemplo, si su llamada a una función de la biblioteca devuelve un nullptr, el programa debe detectar esto y hacer algo razonable.
Razonable aquí se entiende bastante abundantemente. El programa no necesita para olfatear alrededor para averiguar exactamente por qué la función didn # 8242-t devolver una dirección razonable. Podría ser que la solicitud era para demasiada memoria debido a la entrada irrazonable. O podría ser que el constructor ha detectado algún tipo de entrada ilegal.
Doesn # 8242-t importa. El punto es que el programa debe restaurar su estado lo mejor que puede y preparado para el siguiente bit de entrada sin que se caiga o estructuras corruptas de datos existentes, como el montón.
Mantenga un registro del programa
Crear y mantener registros de tiempo de ejecución que permiten a alguien para reconstruir lo que sucedió en el caso de un fallo de seguridad. (En realidad, esto es tan cierto en el caso de cualquier tipo de fallo.) Por ejemplo, es probable que desee iniciar sesión cada vez que alguien firma dentro o fuera de su sistema.
Usted # 8242-ll definitivamente quiere saber que fue registrado en su sistema cuando ocurrió un evento de seguridad - este es el grupo que # 8242-s con mayor riesgo de una pérdida de seguridad y que son más sospechoso en la búsqueda de culpables. Además, usted # 8242-ll desea registrar cualquier error del sistema que incluiría la mayoría de excepciones.
Un programa de producción del mundo real contiene un gran número de llamadas que se ven algo como lo siguiente:
log (DEBUG, "Usuario% s entró contraseña legal", suser) -
Esto es solo un ejemplo. Cada programa tendrá algún tipo de función de registro. Si es o no # 8242-S llama en realidad log () es inmaterial.
Siga un buen proceso de desarrollo
Cada programa debe seguir un bien pensado, proceso de desarrollo formal. Este proceso debe incluir al menos los siguientes pasos:
Recoger y requisitos de documentación, incluidos los requisitos de seguridad.
Design Review.
Se adhieren a un estándar de codificación.
Someterse a prueba de unidad.
Llevar a cabo pruebas formales de aceptación que se basan en los requisitos originales.
Además, los exámenes por homólogos deben llevarse a cabo en los puntos clave para verificar que los requisitos, diseño, código y procedimientos de prueba son de alta calidad y cumplen con los estándares de la compañía.
Implementar un buen control de versiones
El control de versiones es una cosa extraña. Es # 8242-s natural no que preocuparse por la versión 1.1 cuando # 8242-re bajo presión para obtener la versión 1.0 de la puerta y en los usuarios de espera # 8242- manos extendidas. Sin embargo, el control de versiones es un tema importante que debe ser abordado antes de tiempo porque debe ser incorporado en el programa # 8242-s diseño inicial y no agregada más tarde.
Un aspecto casi trivial de control de versiones es saber qué versión del programa de un usuario está utilizando. Cuando un usuario llama y dice, " Lo hace cuando hago clic en eso, " la mesa de ayuda que realmente necesita saber la versión del programa, el usuario está utilizando. Él podría estar describiendo un problema en su versión que ya # 8242-s ha corregido en la versión actual.
Autenticar a los usuarios de forma segura
La autenticación de usuarios debe ser sencillo: el usuario proporciona un nombre de cuenta y una contraseña, y el programa se ve el nombre de la cuenta en una mesa y se comparan las contraseñas. Si las contraseñas coinciden, el usuario es autenticado. Pero cuando se trata de antihacking, nada es tan simple.
En primer lugar, nunca almacene las contraseñas a sí mismos en la base de datos. Esto se llama almacenándolos en el claro y se considera muy mala forma. Es # 8242-s demasiado fácil para un hacker para conseguir sus manos en el archivo de contraseñas. En su lugar, guardar de un seguro de transformación de la contraseña.
Administrar sesiones remotas
Usted puede hacer ciertas suposiciones cuando de su aplicación se ejecuta en un solo equipo. Por un lado, una vez que el usuario se ha autenticado a sí mismo, usted don # 8242-t necesidad de preocuparse por lo que se transformó en una persona diferente. Las aplicaciones que se comunican con un servidor remoto pueden # 8242-t hacer este supuesto - un hacker que se escucha en la línea se puede esperar hasta que el usuario se autentica a sí mismo y luego secuestrar la sesión.
¿Qué puede hacer el programador de seguridad de mente para evitar esta situación? Usted don # 8242-t quiero preguntar repetidamente al usuario por su contraseña sólo para asegurarse de que la conexión hasn sido secuestrado # 8242-t. La solución alternativa es establecer y administrar un sesión. Esto se hace por tener el servidor envía la aplicación remota una cookie de sesión una vez que el usuario se ha autenticado con éxito a sí mismo.
Ofuscar su código
Ofuscación Código es el acto de hacer el ejecutable tan difícil para un hacker de entender como sea posible.
La lógica es simple. La más fácil es para un hacker para entender cómo funciona el código, más fácil será para el hacker que averiguar vulnerabilidades.
El paso más fácil que usted puede tomar es asegurarse de que usted sólo ha de distribuir una versión de lanzamiento de su programa que no incluye información de depuración símbolo. Cuando se crea el archivo de proyecto, asegúrese de seleccionar que tanto una depuración y una versión de lanzamiento deben ser creados.
Nunca, jamás, distribuir versiones de su aplicación con información de símbolos incluidos.
Firme su código con un certificado digital
Código de firmar las obras mediante la generación de un hash seguro del código ejecutable y combinándolo con un certificado expedido por una autoridad de certificación válida. El proceso funciona así: La compañía de crear el programa deben primero registrarse con una de las autoridades de certificación.
Una vez que la entidad emisora de certificados está convencido de que mi empresa es una entidad de software válida, emite un certificado. Este es un número largo que cualquiera puede utilizar para verificar que el titular de este certificado es la famosa Mi Empresa de San Antonio.
Utilice cifrado seguro cuando sea necesario
Como cualquier buen advertencia, esta advertencia tiene varias partes. En primer lugar, " El uso de cifrado siempre que sea necesario ". Esto tiende a traer a la mente pensamientos de comunicar información de la cuenta bancaria a través de Internet, pero usted debe pensar más general que eso.
Los datos que # 8242-s está comunicando, ya sea a través de Internet oa través de un rango más pequeño, que se conoce generalmente como Los datos en movimiento. Datos en Movimiento debe ser encriptado si no sería de ninguna utilidad para un hacker.
Los datos almacenados en el disco que se conoce como Los datos en reposo. Estos datos también debe ser encriptada si hay una posibilidad de que el disco está perdido, robado o copiado. Las empresas cifran rutinariamente los discos duros de sus computadoras portátiles de la compañía en caso de un ordenador portátil es robado en el escáner de seguridad en el aeropuerto o dejado en un taxi en alguna parte.
Dispositivos de almacenamiento portátiles pequeños como memorias USB son especialmente susceptibles a perderse - datos sobre estos dispositivos deben ser encriptados.