PAW

Lic. en Sistemas de Información

PAW

Lic. en Sistemas de Información

Speaker:

Tomás DELVECHIO

tdelvechio@unlu.edu.ar

Desarrollo Seguro

Desarrollo Seguro

Estrategias, Librerias, Estandares

Algunos tips. Disciplina en sí misma.

Conceptos

Origen de las vulnerabilidades

Objetivo del atacante

¿Que hacer?

Documentación de Plataforma o Lenguaje

Reutilización

  • Frameworks
  • Librerías
  • Plugines
  • Software Libre

¿Que hacer?

Buenas Prácticas

Mejora indirecta

Calidad general del producto

Mejora Legibilidad (fácil de corregir)

Mantenible / Modificable

CÓDIGO COMPLEJO = DIFICL CORREGIR

Consejos

Validar Entradas


              filter_var(45, FILTER_VALIDATE_INT); # true
              filter_var('bob@example.com', FILTER_VALIDATE_EMAIL); # true
              filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED); # false
          

Consejos

Sanitizar Salidas


              $a = 'joe@example.org';
              $b = 'bogus - at - example dot org';
              $c = '(bogus@example.org)';

              filter_var($a, FILTER_SANITIZE_EMAIL); # 'joe@example.org'
              filter_var($b, FILTER_SANITIZE_EMAIL); # false
              filter_var($c, FILTER_SANITIZE_EMAIL); # 'bogus@example.org'
          

Consejos

Contexto o Entorno

  • Dentro del proyecto, referencias relativas (usar __DIR__)
  • Si un archivo, directorio o path debe existir para que funcione, hacer el control (funciones como file_exists())
  • Si los permisos son importantes, tambien chequearlos.
  • Todo lo que es dependiente de mi sistema, chequearlo al principio (variables de entorno, conexión a la base)
  • En mi Maquina funciona

Consejos

Ejecutar Comandos Externos


            exec($command);
            system($command);
            # Lo siguiente definitivamente NO
            $command = $_POST['command']; 
            exec($command);
          

¿Como crear un archivo cuyo nombre sea parte de la entrada del usuario?

Consejos

Sentencias Preparadas


              $sentencia = $pdo->prepare("INSERT INTO CLIENT (name, age) VALUES (:name, :age)");
              $sentencia->bindParam(':name', $nombre);
              $sentencia->bindParam(':age', $edad);

              $nombre = 'Jerry Smith';
              $edad = 40;
              $sentencia->execute();

              $nombre = 'Beth Smith';
              $edad = 38;
              $sentencia->execute();
          

Buffer Overflow

Esto pasa mas en C, los lenguajes de alto nivel lo controlan pero pueden tener bugs.

Ojo al usar extensiones de terceros en bajo nivel (se puede ejecutar código C en PHP, Python)

Consejos

Excepciones

Es tedioso pero capturar la mayor cantidad posible

Premisa: Todo el Software esta Roto


              try {
                  echo awesome_function(5) . "\n";
                  echo awesome_function(0) . "\n";
              } catch (AnException $e) {
                  // alguna accion
              } catch (AnotherException $e) {
                  // otra accion
              } catch (Exception $e) {
                  // accion cuando no se que fallo
              }
          

¿Que se muestra al usuario?

Consejos

Excepciones

¿Que se muestra al usuario?

Ocultar errores no los ARREGLA

Logging

Loguear es un tema [mas complejo de lo que parece](https://www.youtube.com/watch?v=wUXamWPhtpE)

  • Loguear las excepciones
  • Loguear valores no esperados
  • Usar bien los niveles de log
  • El log es lo que debe mirar el dev/sysadmin

Datos "Importantes"

Restricciones Legales, Eticas

Encriptar datos importantes

No es necesario almacenar todo

¿Cual es la diferencia entre Encriptar vs Hash?

Code Review

¿Bugs de Terceros?

¿Bugs Propios?

¿Open Source garantiza seguridad?

Análisis Estatico de Código

Conclusiones

Código de alta calidad

Guías Relevantes

Estandares de Seguridad

Referencias Bibliográficas

Mitnick, K. D., & Simon, W. L. (2011). The art of deception: Controlling the human element of security. John Wiley & Sons.

Tori, C. (2008). Hacking ético.

Viega, J., & McGraw, G. R. (2001). Building secure software: how to avoid security problems the right way. Pearson Education.