Cómo escribir código seguro de Python. Comidas Kushal Das

Aquí está la versión original en inglés de esta entrevista.

Este año, la compañía de oradores Moscow Python Conf ++ recogió lo que se necesita (es decir, cómo, recogió - recogió el Comité del Programa ). Pero, ¿quién está interesado en estudiar los logros? Es mucho más interesante lo que piensa el orador sobre los problemas que nos preocupan. Para averiguarlo, obtenga información privilegiada o el consejo de un desarrollador más experimentado, y necesita comunicarse en conferencias. Pero aproveché la situación y tomé una breve entrevista de nuestro orador Kushal Das.

Una característica distintiva de los discursos de Kushal es que publica regularmente formas "secretas" de romper el código de Python y, por el contrario, muestra cómo escribir código para que la NSA no pueda descifrarlo. En nuestra conferencia comíle dirá cómo desarrollar e implementar de forma segura el código Python, por lo que le pregunté acerca de la seguridad.



- Comí, cuéntanos un poco sobre ti y sobre tu trabajo con Python y similares.

Kushal Das: Vivo en India, ahora trabajo como tecnólogo de interés público en la organización estadounidense sin fines de lucro Freedom of the Press Foundation, donde ayudo a apoyar el proyecto SecureDrop. SecureDrop es una plataforma de información de código abierto. El idioma principal aquí es Python.

Además, participo en otros proyectos de código abierto, incluido el lenguaje Python. Soy uno de los desarrolladores de CPython Core y miembro de la Junta Directiva de Python Software Foundation.

He estado trabajando con Python desde 2005, y casi toda mi carrera ha estado relacionada con este lenguaje, así como con Linux. Estas son dos áreas principales de mis intereses. También soy miembro del equipo principal de Tor Project. Como muchos ya saben, Tor ayuda a mantener su privacidad en línea.

- Tor es un proyecto excelente, es utilizado por desarrolladores de todo el mundo para obtener acceso a API y documentación bloqueada, por ejemplo, debido a las leyes locales. Su presentación se basará en la seguridad, así que tengo algunas preguntas.

En primer lugar, existe la opinión de que para un desarrollador ordinario sin capacitación especial, la seguridad en sí misma es demasiado complicada. Se cree que nosotros, como industria, deberíamos proporcionar herramientas y un ecosistema para que el software que creamos sea seguro de forma predeterminada.

¿Qué crees que es aún mejor: educar a las personas de seguridad o proporcionarles algunas herramientas?

Me comí Das: creo que los dos. De hecho, la seguridad es un tema complejo. Sin embargo, si un programador novato realiza una capacitación básica o trabaja en equipo, aprende a evitar los problemas más comunes.

Muy a menudo, los errores de seguridad reales, como la piratería, la fuga de datos o el robo de datos, surgen debido a una configuración incorrecta, falta de actualizaciones o código incorrecto, a veces hooligan.

Creo que la mayoría de los errores básicos pueden evitarse si capacitamos tanto a principiantes como a "veteranos" de la industria. Además, algunas cosas que son inaccesibles para el ojo humano se pueden revelar con la ayuda de nuevas herramientas, nueva automatización, nuevos procesos.

Un ejemplo muy simple son las comprobaciones de dependencia que ahora tiene GitHub. Si una aplicación Python contiene errores o usa alguna versión anterior de un módulo independiente, y hay una cierta vulnerabilidad descrita en CVE, GitHub puede decirle como desarrollador: “¡Hola! ¡Se requiere una actualización aquí! ” - y el bot intentará hacer PR automáticamente para actualizar el módulo.

Por lo tanto, el entrenamiento y las herramientas se combinan mejor, pero personalmente, preferiría tanto entrenamiento como sea posible. Son las personas las que ingresan datos y cometen errores. La tecnología no puede solucionar todos esos errores.

- Sí, lamentablemente lo es. El desarrollo de software moderno depende en gran medida de repositorios abiertos, como el índice de paquete Python, node.js, npm, etc. En el nivel actual de desarrollo, esto generalmente ocurre cuando se instala pip o se agrega poesía.

En su opinión, ¿qué tan altos son los riesgos de seguridad para un desarrollador de back-end Python regular en una empresa mediana si usa solo estas herramientas? ¿Son aceptables tales riesgos, o los desarrolladores deberían considerar vulnerabilidades triviales?

Kushal Das: Esta es una pregunta realmente importante, porque en todos los repositorios que admitimos, donde puede descargar módulos para diferentes idiomas, tratamos de hacer que este proceso sea simple y accesible para los desarrolladores.

Para Python, por ejemplo, hay una lista de correo de seguridad de Python que le alerta sobre problemas con los últimos módulos cargados para Python. Hay casos de los llamados typosquatting, cuando el nombre del paquete es similar a un paquete muy conocido, y los desarrolladores usan el incorrecto sin darse cuenta. En el lado de Python, PyPI se encarga de esas cosas.

Además, al instalar cualquier paquete usando pip, realmente puede verificarlo y asegurarse de que esto sea lo que necesita, así como verificar la seguridad de la descarga. Por ejemplo, hay PEP 458, que le aconseja proteger las descargas con la firma de paquetes PyPI.

El trabajo de desarrollo de instrumentos de seguridad aún está en curso. Recomendaría que los desarrolladores que comienzan a trabajar con cualquier módulo nuevo sin firmar averigüen quién es el autor, cuántas personas están involucradas en el desarrollo, dónde están alojados, qué proyectos grandes se usan, qué hay en el código fuente, si hay quejas sobre problemas o errores, etc.

Esto es solo de 15 a 30 minutos de búsqueda, pero ofrecen muchas ventajas. Si ninguna persona en el mundo, excepto el autor, usa este paquete, quizás no debería usarlo. Si este módulo en particular se usa en otros paquetes o software, lo más probable es que sea más seguro para su código.

— , , - , , , .

, , node.js npm, npm install something.

NPM verifica la seguridad de los datos y muestra resultados. Por ejemplo, muestra el mensaje: “Entre los paquetes que acaba de instalar, hay dos con un alto riesgo de seguridad y diez con un riesgo promedio. Puede ejecutar los siguientes comandos para corregirlos o actualizarlos, o negarse a instalarlos ". Esto es similar a las herramientas integradas. ¿Qué opina de tales soluciones, y puede esperar algo similar para PyPI?

Comido Das: nunca usé NPM, excepto tal vez una o dos veces en mi vida cuando necesitaba probar algo. Por lo tanto, no puedo comentar directamente qué tan bueno es esto, pero parece ser sobre darle al desarrollador una interfaz de usuario más intuitiva.

En general, todo esto es parte de la historia sobre la interacción del usuario, cuando la tarea de los desarrolladores y diseñadores es identificar la mejor manera de presentar los datos, dado que realmente son vistos por el desarrollador final, el tercero que instalará todas estas herramientas y módulos. Porque cuando hay demasiada información, generalmente hacemos clic o la omitimos sin leerla. La verdad está en algún lado.

En cuanto a los planes futuros de desarrollo de Python y pip, no puedo comentarlos; son desconocidos para mí. Sin embargo, creo, o más bien, espero que alguien ya haya enviado una solicitud para una función similar para que los autores de pepitas puedan tenerla en cuenta en sus planes. Ahora el equipo de soporte es un poco más grande que antes: unas siete personas con derecho a aceptar compromisos.

- Gracias, espero que con el tiempo, la gente piense más sobre la seguridad y cree más controles en nuestro ecosistema. Hablemos un poco sobre su próxima actuación en Moscow Python Conf ++. Se basa en la seguridad y el empaquetado de la dependencia incorporada.

No vamos a echar a perder aquí, pero desde el punto de vista de un experto en seguridad, desde su punto de vista, ¿qué más deben tener en cuenta los desarrolladores al verificar la seguridad de la aplicación?

Ya hemos discutido cómo asegurar el manejo de la dependencia y los paquetes. ¿Qué más necesita verificar el desarrollador ordinario? ¿Que debería buscar?

Me comí Das: creo que uno de los puntos principales debería ser la actualización. Asegúrese de que al menos tenga orden con esto, y de que todo lo que dependa esté actualizado, incluido el sistema operativo, ya sea Linux, Mac, Windows o incluso iOS. Alternativamente, asegúrese de modelar al menos los procesos para comprender qué más podría salir mal.

El problema para los principiantes (y esto me ha sucedido a mí) en la mayoría de los casos es que confiamos ciegamente en los comentarios de los usuarios. Debe confiar menos en el hecho de que la entrada es correcta y que esto no causará ningún otro problema. Todo debe ser revisado nuevamente.

Además, si abrió algo, asegúrese de no olvidar cerrarlo.. Imagine una puerta ordinaria: cuando entramos en la oficina, verificamos si olvidamos cerrar la puerta detrás de nosotros. También en la programación, cuando abrimos archivos, tomas de corriente u otra cosa, o accedemos a algo, debe asegurarse después de completar que todo esté limpio y cerrado.

Desde el punto de vista de la programación, creo que estos son dos puntos principales que muchas personas olvidan.

- Sí, hay muchas cosas que la gente olvida y ahora, creo, la última pregunta. Según su experiencia personal, ¿qué tipo de errores de seguridad cometen con mayor frecuencia los desarrolladores de back-end de nivel medio de Python? ¿Entrada del usuario? Adicciones? ¿Embalaje seguro de la aplicación? ¿Qué es más común?

Eaten Das: Los problemas que vi se debieron principalmente a una entrada incorrecta.

En 2011, estaba desarrollando una herramienta para el proyecto Fedora y olvidé limpiar mis archivos temporales. En este caso en particular, estos fueron vertederos, y su ausencia en el nuevo entorno causó problemas imprevistos para la infraestructura: se cayó debido a mi código, por decirlo suavemente, mal.

Esta es una continuación del mismo tema, cuando necesita asegurarse de que el código se "limpia" si crea o abre algo. Entonces fue una lección seria para mí. Cuando piensas: “¡Sí, lo hice! ¡Todo funciona en mi computadora portátil! ", No es un hecho que funcione en un lanzamiento o producción real.

Por alguna razón, a menudo pensamos que el entorno será idéntico al nuestro local, pero nunca sucede. Incluso las grandes empresas a menudo son difíciles de determinar el entorno real del lado del cliente. Es importante tener eso en cuenta.

Y además -haz más comentarios sobre tu código , escribe documentación. Este consejo no es solo para principiantes, sino también para desarrolladores experimentados. Si no ha examinado el código durante varios meses o varios años, puede ser muy difícil entender por qué una vez escribió algo.

Kushal Das se presentará en Moscow Python Conf ++ . Nos vimos obligados a posponer una gran conferencia fuera de línea para el otoño, pero el 27 de marzo celebramos una mini conferencia en línea, cuyos materiales pronto compartiremos, nos mantendremos en contacto.

All Articles