it-swarm-es.com

Preocupaciones y gotcha con desarrollo de estándares de programación segura.

Recientemente he asumido la responsabilidad de desarrollar un conjunto de directrices de programación seguras. Mi intención es proporcionar, utilizando la Guía de desarrollo de OWASP como base, varios niveles de requisitos que corresponden a nuestros niveles de clasificación de información confidenciales.

¿Qué tipo de problemas debo esperar ver a medida que se desarrollan las normas y qué ha encontrado, después del hecho, en realidad no funcionó?

6
Scott Pack

Algunos temas que encontré desarrollando la guía de programación segura de un equipo recientemente:

  • ¿Cómo se realizarán o alentarán las directrices? ¿Quién será responsable de garantizar que los productos desarrollados de acuerdo con sus pautas? Debe asegurarse de que esta persona pueda:
    • vea si las guías están siendo adheridas. Esto significa que deben analizar las revisiones de código y los resultados de las pruebas. Y que significa que las revisiones y las pruebas del código deben existir y realizar :).
    • "Tirar una excepción" en el proceso de desarrollo. Necesitan la autoridad para decir que no, esta compilación no es segura, no puede salir.
    • inspire al equipo a tomar la seguridad en serio. Suena como una gestión molesta: habla de habla, porque es, pero no quiere que sus desarrolladores realicen la seguridad de la seguridad (no menos importante porque luego se convierten en empleados descontentos, y duplicas sus dolores de cabeza). Esto es particularmente importante si el "propietario" de la seguridad de la aplicación es un forastero para el equipo de desarrollo, por ejemplo. Si tiene un equipo de seguridad transversal que se ensaya a los proyectos DEV.
  • Relacionado con lo anterior, ¿cómo se verá la administración que se está tomando en serio la seguridad? Si no lo son, entonces es una pista social que los empleados tampoco necesitan. ¿Cuáles son las recompensas por comprometerse con los estándares?
  • ¿Qué comentarios obtendrán sobre cómo funcionan las directrices? Realmente quieres entender: [.____]
    • ¿Qué vulnerabilidades se descubrieron durante la liberación?
    • Qué vulnerabilidades permanecieron en el producto, y por qué
    • El bit duro: ¿a qué hora se gastó haciendo cosas que significaban que se adhieren a las directrices, pero no afectaron la seguridad del producto lo suficiente para justificar su costo? La cantidad medible más cercana que he encontrado es "¿Estamos pasando tiempo para mitigar las cosas que no están en el modelo de amenaza?", Aunque pasar mucho tiempo en los elementos de bajo riesgo en comparación con los riesgos más altos es otra bandera roja.
  • ¿Cómo se actuará tales comentarios? ¿Pueden los desarrolladores hacer cambios en sí mismos si encuentran un problema, o tiene que ser escalado?
6
user185

La respuesta de @ Graham es muy buena, algunos puntos adicionales a considerar:

  • Necesitará un conjunto diferente de directrices para cada lenguaje de programación/tecnología/plataforma. Las pautas de codificación de C++, tienen mucho en común con las directrices .NET, pero aún más no en común.
  • Preferiblemente, deben adaptarse a sus proyectos de contexto/necesidades/tecnología/etc. (por ejemplo, todo es cliente/servidor en la intranet autenticada por 2 factores, vs TODO es solo Internet anónimo de Internet ...)
  • Deben ser detallados y prescriptivos lo suficientemente prescriptivos para proporcionar una guía clara, pero por el otro no deben sentirse tan específicos.
  • Las muestras de código son una necesidad.
  • Deje en claro qué artículos son obligatorios, que se recomiendan, pero opcional, y que son solo una de sus opciones. (Utilizando el estándar MUST/SHOULD/MAY generalmente funciona bien aquí).
  • Relacionado con uno de los puntos de @ Graham, necesita comprar programador, que debe hacerse (como la mayoría de las cosas políticas) delicadamente. P.ej. Proporcione una versión "borrador", para los administradores de devadores/leads del equipo/etc. para revisar, y brinde comentarios específicos, la aplicabilidad de WRT a "sus situaciones especiales" (¡no es de todos?). También de esta manera, en realidad, puede descubrir tecnologías adicionales en uso, que no sabía (por ejemplo, MVC o AOP, o ...)
  • ¡Capacitación! No solo toque un archivo grueso en sus escritorios, pase por encima de los requisitos con los desarrolladores y explique qué significa, y por qué necesitan cada uno. (Esta es una buena idea en general, por supuesto, pero también ayuda con el punto anterior de la compra).
  • Si tiene un SDLC sólido, haga que esto sea una parte de ella. Si los equipos están trabajando "ágiles", haz que esta una historia de usuario. Sin embargo, están trabajando, debe cruzar el mensaje, que este es un entregable. Y es un requerido.
  • Si usted No ¡Tener un SDLC, haga uno ahora! y hacer que las directrices de codificación sean parte de eso.
  • "Several levels of requirements" - No tengo demasiados de estos. Tenderán a ser atrapados al seleccionar la correcta, y/o discutir con usted acerca de cuál es lo que realmente necesitan (ya que uno es menos trabajo que el otro), y/o "discutir" qué nivel debe ser requerido cada artículo por ... Creo que 2 (a lo sumo 3) debería funcionar, por ejemplo, "Alta seguridad" y "Seguridad básica". Sin embargo, usted va, asegúrese de que esté súper claro a qué nivel caen.
  • Haz espacio para excepciones: i.e. Autorice un proyecto específico para obtener un pase de ciertos artículos, según las circunstancias (y los controles de compensación). Preferiblemente temporal. Pero bien documentado.
  • Manténgalo actualizado, revise de vez en cuando, con comentarios de desarrolladores y métricas, tenga una nueva versión para satisfacer cualquier tecnología nueva que usen, etc.
4
AviD