Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web Cryptography

Web Cryptography

Web Cryptography

jmortegac

May 10, 2015
Tweet

More Decks by jmortegac

Other Decks in Programming

Transcript

  1. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  2. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  3. Browser storage • Falta de funciones de criptografía que sean

    compatibles en todos los navegadores • Hay mucha tendencia a utilizar el localStorage del navegador y un posible atacante podría utilizar esta información para extraer el contenido que se va guardando
  4. Protocolo HTTPS • La comunicación va cifrada, pero si sufrimos

    un ataque MITM y con las herramientas adecuadas(sniffers tipo wireshark),se puede llegar a ver los datos. •SSLStrip • Esta herramienta permite convertir el tráfico HTTPS en HTTP
  5. Estado actual SSL •En realidad si usas SSL no sería

    necesario cifrar los datos, pero si sufres un ataque MITM los datos quedan expuestos a un posible atacante. •Sería recomendable añadir una capa más de seguridad con alguna librería de crypto en javascript.
  6. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  7. Algoritmos •MD5, SHA-1,SHA-256,SHA-512 (Funciones hash) Comprobar la integridad de ficheros

    Firma de documentos •AES [Criptografía de clave privada][WPA2] •RSA-4096 [Criptografía de clave pública] •RC4(Usado en SSL)
  8. AES •Algoritmo de clave secreta compartida •Simétrica •Misma clave para

    cifrar y desencriptar •Tamaños de clave 128,192,256 bits
  9. AES •message = the unencrypted, readable data we care about.

    •cipherText = the message after encryption, the data the adversary gets to see. •Key = the secret required to encrypt and decrypt the message •Encryption: ciphertext = f(key, message) •Decryption: cleartext = f(key, cipherText)
  10. AES en JavaScript <script> var key = CryptoJS.enc.Hex.parse('01010101'); // clave

    var iv = Random();// Vector de inicialización var aesEncryptor = CryptoJS.AES.createEncryptor(key, { iv: iv }); var ciphertext = aesEncryptor.process("Message"); var aesDecryptor = CryptoJS.AES.createDecryptor(key, { iv: iv }); var plaintext = aesDecryptor.process(ciphertext); </script>
  11. RSA • Algoritmo de clave publica / privada •Asimétrica •

    Se encripta con la clave publica y se desencripta con la clave privada
  12. RSA en JavaScript <script> var KeySize=512; var RSAkey = CryptoJS.generateRSAKey(“PassPhrase”,

    KeySize); var PublicKey = CryptoJS.publicKeyString(RSAkey); var PrivateKey = CryptoJS.privateKeyString(RSAkey); var Encryption = CryptoJS.encrypt(“Message”, PublicKey); var Decryption = CryptoJS.decrypt(Encryption.cipherText, PrivateKey); </script>
  13. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  14. WebCrypto API http://www.w3.org/TR/WebCryptoAPI •Esta especificación describe un API para realizar

    operaciones criptográficas. •Funciones hash •Algoritmos de clave pública y privada •Generación de firmas y verificación de datos •Cifrado y descifrado de mensajes
  15. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  16. Librerías (independientes del Web Crypto API) • crypto-js • Stanford

    Javascript Crypto Library • JavaScript Cryptography Toolkit • jsSHA • Gibberish-AES • jsAES • http://openpgpjs.org • pidCrypt
  17. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  18. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/bin_utils.js function aesEncryptSync (bytes, keyBytes, ivBytes) { var

    len = bytes.byteLength || bytes.length; bytes = addPadding(bytes); var encryptedWords = CryptoJS.AES.encrypt(bytesToWords(bytes), bytesToWords(keyBytes), { iv: bytesToWords(ivBytes), padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.IGE }).ciphertext; var encryptedBytes = bytesFromWords(encryptedWords); // console.log(dT(), 'AES encrypt finish'); return encryptedBytes; }
  19. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/bin_utils.js function aesDecryptSync (encryptedBytes, keyBytes, ivBytes) { //

    console.log(dT(), 'AES decrypt start', encryptedBytes.length); var decryptedWords = CryptoJS.AES.decrypt({ciphertext: bytesToWords(encryptedBytes)}, bytesToWords(keyBytes), { iv: bytesToWords(ivBytes), padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.IGE }); var bytes = bytesFromWords(decryptedWords); // console.log(dT(), 'AES decrypt finish'); return bytes; }
  20. INDEX • Introducción a la seguridad en aplicaciones web •

    Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  21. OWASP •Organización que trata de mejorar la seguridad de las

    aplicaciones web •Incluye una lista de las 10 vulnerabilidades más críticas
  22. OWASP Top 10 Risks Vulnerabilidades • 1. SQL Injection •

    2. Broken auth and session management • 3. Cross-site scripting(XSS) • 4. Insecure direct object references • 5. Security misconfiguration • 6. Sensitive data exposure • 7. Missing function level access control • 8. Cross-site request forgery(CSRF) • 9. Using vulnerable components • 10. Unvalidated redirects and forwards
  23. SQL injection • Inyectar parámetros en la cadena que realiza

    la consulta. • Permitir a un atacante ejecutar código de forma arbitraria en el servidor. •Solución : Prepared statements $stmt = $mysqli->prepare( 'UPDATE users SET email = ? where id = 123'); $stmt->bind_param('s',$email);
  24. Cross Site Scripting(XSS) •Inyectar código malicioso mediante javascript •Solución :

    Validar entradas mediante expresiones regulares •Validar que no estén modificando las cabeceras de la peticiones •Emplear frameworks que permitan el filtrado y la validación de los datos de entrada
  25. Cross Site Request Forgery(CSRF) •Recoger credenciales del usuario que se

    envían por GET •Secuestrar cookies para utilizar una sesión con fines maliciosos •Emplear POST para enviar las peticiones y cifrar los datos más sensibles(login) •Emplear tokens de autenticación
  26. Resources • https://www.owasp.org/index.php/Guide_to_Cryptography • http://www.w3.org/TR/WebCryptoAPI • Symmetric Cryptography in Javascript

    • http://bitwiseshiftleft.github.io/sjcl/acsac.pdf • http://seclab.stanford.edu • http://www.w3.org/2001/tag/doc/web-https-2015-01-22 • https://docs.google.com/spreadsheets/d/14oTKnccypDRiesz GLV7GbZXcIai0qLYOwgk_ELIj5A0/pubhtml