¿Cuánta experiencia en seguridad necesita un programador general de aplicaciones para desarrollar software éticamente? [cerrado]

8

Tengo curiosidad por esto. Vi este hilo:

¿Por qué no deberíamos hacer rodar el nuestro?

y esta respuesta:

enlace

que contenía este comentario, que tenía el segundo número más alto de votos y que no puede ignorarse simplemente:

  

"El mayor problema que observo entre los programadores principiantes es que no toman en serio los riesgos de seguridad. Si menciono qué tipo de debilidades tiene algún sistema, la respuesta común es poner los ojos en blanco ... Los ataques son reales y Ocurre, y si ni siquiera puede aplicar la seguridad adecuada en la escuela, ¿cómo se supone que su aplicación saldrá cuando está disponible para cientos de clientes?: / La única forma de convencerlos es, por lo general, proporcionar ejemplos y, lo mejor de todo, una demostración en vivo. Entonces, si tiene ejemplos ... ¡Creo que sería una buena adición! "

Esto me hace preguntarme, entonces. El contexto de esta discusión fue sobre el software o algoritmos criptográficos "propios" y por qué, en general, es una mala idea debido a las numerosas vulnerabilidades de seguridad que se pueden crear sin la experiencia adecuada (y parece que Sea un aire fuerte que esto no solo se aplica a la creación de sus propios cifrados per se, sino también de implementando cifrados, codificados en su propio código) que pueden hacer que el producto sea considerable. Menos seguro de lo que debería ser, o anuncia ser. Y la preocupación es, por supuesto, eminentemente razonable. Más aún, la cantidad de experiencia requerida es aparentemente bastante grande; de acuerdo con una historia que escuché sobre esto hace mucho, mucho tiempo, alguien dijo una vez (¿creo que fue Bruce Schneier?) Que no (se aproximarían) "confiarían en nada" Crypto escrito por cualquier persona que no haya "ganado sus huesos" primero al pasar mucho tiempo rompiendo códigos ".

El problema, sin embargo, es que si bien entiendo esto en relación con el software cryptographic , el comentario anterior plantea un punto que sugiere que esto conlleva implicaciones que son enormemente más generales En este sentido, los problemas de seguridad se aplican al software all y, por lo tanto, el desarrollador del software any debe tener en cuenta la seguridad sin importar lo que sea, incluso si no explícitamente criptográficos o no estamos escribiendo explícitamente partes criptográficas (por ejemplo, considere la frecuencia con la que un exploit de búfer aparece en varios softwares de uso general como navegadores web y algún cracker lo golpea para hacer daño, especialmente Robo de información y / o dinero. Parece que, intuitivamente, hay una obligación básica de ética por parte de cualquier desarrollador de software que va a liberar un código que será utilizado por el público en general, para asegúrese de que cumpla con algún estándar de seguridad "razonable", incluso si no es específicamente un código de "seguridad" . Si un código de liberación que uno sabe puede ser inseguro, entonces uno está actuando de una manera que, de nuevo, muy razonablemente , podría interpretarse como que contiene negligencia no ética.

Y eso es lo que me preocupa. Porque, en última instancia, ya que no puede simplemente "pre-fabricar" todo el software de (como entonces, ¿cuál sería el punto de desarrollo de cualquier software? tendrá que rodar al menos ALGUNA VIGENCIA de seguridad) incorporando el código por tu cuenta . Tienes que tirar tu propio , te guste o no, y eso significa que se necesita experiencia . Entonces, la pregunta es: si seguimos el dictamen de no "rodar el propio" en la medida en que se aplica a específicamente el código relacionado con la seguridad, como el cifrado, PERO tenemos que rodar nuestro propio código como parte del desarrollo de la aplicación TODOS , entonces, ¿cuánta experiencia en seguridad necesitamos como programadores de aplicaciones generales para cumplir con ese límite ético intuitivo? Parece que la cantidad debe ser "más que cero" pero (¡con suerte!) "Menos que la de un experto en seguridad informática" del calibre que desarrolla los algoritmos de cifrado reales (como AES, etc.) que se convierten en estándares mundiales. Pero, ¿cuál es esa cantidad y a qué extremo de ese espectro está más cerca, y qué se necesita exactamente para aprenderla?

    
pregunta The_Sympathizer 03.12.2018 - 08:02
fuente

4 respuestas

0

Esa es una pregunta interesante. Al principio, como desarrolladores de software creamos un código (lo que significa, aplicaciones) para un propósito comercial específico. Por lo tanto, un buen programador debería poder sumergirse en dominios de negocios y transformar los requisitos funcionales en código de trabajo.

Pero el software es complejo y hay docenas de requisitos técnicos / no funcionales que un desarrollador debe conocer, por ejemplo, rendimiento, estabilidad, interfaz de usuario, seguridad, etc.

Creo que no es posible ser un "experto" en todos los dominios técnicos. Pero, y creo que ese es el punto, si usted o su empresa quieren crear software "profesional", debería haber al menos un experto para cada dominio técnico. Hablando de seguridad, debe haber al menos un ingeniero de seguridad que pueda hacer revisiones de código, pruebas de penetración internas, etc. Al hacer tales cosas en colaboración con el desarrollador real que escribió el código, debería haber algún tipo de transferencia de conocimiento entre el experto y el "novato". De esa manera, cada desarrollador debe obtener un conocimiento básico a lo largo del tiempo.

Los desafíos para la empresa son a) sensibilizar a todos los desarrolladores para estos temas para que no "pongan los ojos en blanco" y b) establezcan un proceso de desarrollo de software / ciclo de vida donde se incluyan estos temas.

    
respondido por el Alex 03.12.2018 - 10:55
fuente
0

En mi opinión, en teoría, los desarrolladores deberían al menos conocer los conceptos básicos de la seguridad de la información, de modo que al menos puedan evitar los errores más obvios y tener una base de conocimientos en la que puedan basarse. En la práctica, esto significa que, por ejemplo, un desarrollador web debe saber qué es XSS, y que se puede evitar con el saneamiento de salida. No necesitan ser expertos en XSS y conocer de memoria cada truco en la "Hoja de trucos de XSS". Solo necesitan entender que es un problema, por qué es un problema y en qué consiste la solución.

Como resultado de saber qué es XSS:

  • Los desarrolladores pueden al menos buscar información sobre XSS, leer, preguntar, obtener más información;
  • Cometerán errores, pero es menos probable que construyan algo tan insólitamente inseguro como para que no se pueda arreglar sin una reescritura completa; Los errores de seguridad se solucionarán más fácilmente;
  • Pueden entender de qué habla un investigador de seguridad cuando se informa de un problema; Pueden decidir aprender más o pedir ayuda;

Sin un conocimiento básico sobre la seguridad de la información, los puntos anteriores no serían posibles. Por supuesto, los principiantes no saben nada y aprenderán lo básico a lo largo del tiempo, a menudo de otros desarrolladores, también en línea (participando en comunidades, uniéndose a proyectos de código abierto, etc.).

Pero no estoy seguro de qué tiene que ver la "ética" con esto. Podría pensar que la construcción de software que es indignamente inseguro debería considerarse no ético, pero ¿puede decir que la ignorancia es éticamente errónea? No estoy seguro. Construir software muy inseguro es definitivamente poco profesional sin embargo. Por otro lado, si lo piensas bien, una gran cantidad de software viene con una licencia en la que dicen que se proporciona "tal como está", sin garantía alguna. Lol!

    
respondido por el reed 04.12.2018 - 01:30
fuente
-1

Comencemos con el problema de la ética y señalemos que siempre estará sujeto a opiniones y no puede ser absoluto por definición (según la mayoría de los filósofos). Sin embargo, creo que es una pregunta muy interesante y trataré de aclararla un poco.

Supuesto: conocimiento y ética

Lo que creo que es un punto de vista interesante, es que tener experiencia no te convierte en un programador "ético". Tomemos por ejemplo el escándalo de las emisiones de Volkswagen. Al parecer, los programadores eran bastante hábiles para hacer software seguro. Tan hábil de hecho, que lograron engañar al software de otros para asegurarse de que sus autos pasaran por algunas pruebas. La mayoría de las personas encontrarían esto poco ético.

Hacer daño a propósito

Sé de programadores que tienen que insertar código incluso cuando saben que contiene errores de seguridad. Lo informaron a los gerentes pero obtuvieron el estilo Dilbert "el cliente no paga por eso". Aquí, en mi opinión, el gerente tiene la culpa. Saben que están presionando código inseguro, pero simplemente no les importa, y el programador está haciendo su trabajo. Sin embargo, es un debate interesante: ¿Qué pasa con el escándalo de emisiones de Volkswagen? ¿Puedes culpar a los programadores?

El modelo de amenaza

Entonces, ¿qué sucede si un niño escribe un sitio web para su floristería y tiene una vulnerabilidad de secuencias de comandos entre sitios? Es muy importante tener en cuenta que el tipo de aplicación importa. Si está escribiendo un software de control para una planta de energía, necesita un mayor nivel de experiencia en seguridad que un niño que escribe un formulario PHP para su tienda local.

El campo

Un desarrollador web que crea aplicaciones con ciertos requisitos, como tener un backend seguro, necesita saber vectores de ataque básicos, conocidos, como la inyección SQL. Sin embargo, también se puede ver como una falla del 'sistema educativo', que en este caso es la información dispersa en Internet, por no mencionar esta propiedad como un requisito. Es bueno ver que muchos idiomas y marcos ahora tienen una sección de "seguridad" en su manual.

Equipos y honestidad

Como usted mencionó; Nadie sabe todas estas cosas. Es por eso que la mayoría de los proyectos requieren equipos de personas para desarrollar software. Hay un arquitecto, un probador, un grupo de desarrolladores, etc. Los diseñadores de la aplicación deben asegurarse de que los requisitos de seguridad sean claros. Si puedes usar una biblioteca TLS básica sería genial. Si se necesita un conocimiento más específico, el equipo debe poder determinar si el conocimiento está o no está disponible en el equipo. En mi opinión, sería ético del desarrollador admitir que no sabe cómo implementar ciertas cosas de forma segura. El administrador del proyecto puede entonces comprometerse a que un tercero o un experto en seguridad lo revisen.

El punto

El desarrollador debe admitir que no sabe cómo implementar algo de acuerdo con algún estándar de seguridad. Aquí es donde creo que la ética contra el conocimiento entra. Él necesita saber y no sabe . Él o ella simplemente necesita saber algo como "enrollar tu propio cripto es un dolor en el culo". "Si tuviera que crear una cosa así, necesitaríamos que un experto en seguridad viniera y lo comprobara". Pero luego terminas con más preguntas: ¿Cómo puedes saber lo que no sabes? ¿Quién dice que el experto en seguridad sabe lo suficiente para que tengamos un nivel de seguridad "ético"?

Esto no es una pregunta con una respuesta absoluta.

    
respondido por el Graa 04.12.2018 - 00:41
fuente
-2

Cero: necesitan 0 conocimientos de seguridad para desarrollarse éticamente.

La seguridad no es un trabajo de los desarrolladores: crear un widget para la empresa dentro de un plazo y dentro del presupuesto es. Si tienen conocimiento de seguridad, eso es una ventaja para cualquier empleador pero el conocimiento esperado en esa área es cero, ese no es su trabajo. Las bases de datos, los marcos, los patrones de diseño son su pan y mantequilla, no se puede saber todo.

Necesitan conocimientos de dominio sobre lo que están creando, por lo que si están creando un control para la autenticación, deben comprender la autenticación o tener acceso a un recurso que sí lo hace. Esto es muy parecido a si un desarrollador está construyendo en un dispositivo móvil o usando Framework X - necesitan entenderlo para usarlo correctamente.

Nuestro trabajo es ayudarles con lo que producen, si podemos educar y aumentar su conocimiento de nuestro dominio, excelente. No, no todos los equipos tendrán un recurso de seguridad, pero tampoco tendrán un recurso de red o un recurso de base de datos.

Éticamente no necesitan ningún conocimiento de seguridad.

    
respondido por el McMatty 03.12.2018 - 21:08
fuente

Lea otras preguntas en las etiquetas