Web cryptography

75
Web Cryptography José Manuel Ortega Candel | @jmortegac

Transcript of Web cryptography

Page 1: Web cryptography

Web Cryptography

José Manuel Ortega Candel | @jmortegac

Page 2: Web cryptography

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

Page 3: Web cryptography

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

Page 4: Web cryptography

Introducción

•Autenticación / Integridad

•Autorización / Identificación

•Encryption / Confidencialidad

Page 5: Web cryptography

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

Page 6: Web cryptography

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

Page 7: Web cryptography

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.

Page 8: Web cryptography

Demo localStorage https://github.com/jmortega/jsday.git

Page 9: Web cryptography

Demo localStorage https://github.com/jmortega/jsday.git

Page 10: Web cryptography

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

Page 11: Web cryptography

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)

Page 12: Web cryptography

AES

•Algoritmo de clave secreta compartida

•Simétrica •Misma clave para cifrar y desencriptar

•Tamaños de clave 128,192,256 bits

Page 13: Web cryptography

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)

Page 14: Web cryptography

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>

Page 16: Web cryptography

AES en JavaScript http://cryptojs.altervista.org/secretkey.html

Page 17: Web cryptography

RSA

• Algoritmo de clave publica / privada

•Asimétrica • Se encripta con la clave publica y se desencripta con la clave

privada

Page 18: Web cryptography

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>

Page 19: Web cryptography

RSA en JavaScript http://cryptojs.altervista.org/publickey/rsa_st_stanford.html

Page 20: Web cryptography

Cryptico https://github.com/wwwtyro/cryptico

Page 23: Web cryptography

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

Page 24: Web cryptography

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

Page 25: Web cryptography

Soporte en navegadores http://caniuse.com/#feat=cryptography

Page 26: Web cryptography

Soporte en navegadores https://sites.google.com/a/chromium.org/dev/blink/webcrypto

Page 29: Web cryptography

Chrome support WebCrypto API https://sites.google.com/a/chromium.org/dev/blink/webcrypto

Page 31: Web cryptography

Examples WebCrypto API RSA Public/Private Key

Page 32: Web cryptography

Examples WebCrypto API Sign/Verify

Page 33: Web cryptography

Examples WebCrypto API Sign/Verify

Page 34: Web cryptography

Examples WebCrypto API Encrypt / Decrypt

Page 35: Web cryptography

Examples WebCrypto API Encrypt / Decrypt

Page 36: Web cryptography

Examples WebCrypto API Encrypt / Decrypt

Page 37: Web cryptography

Examples WebCrypto API

Page 39: Web cryptography

PoliCrypt http://polycrypt.net https://github.com/polycrypt/polycrypt

Implementación de WebCrypto API

Page 40: Web cryptography

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

Page 42: Web cryptography

SJCL http://crypto.stanford.edu/sjcl •http://bitwiseshiftleft.github.io/sjcl/

•http://bitwiseshiftleft.github.io/sjcl/browserTest • Soporte AES

•Key 128, 192 or 256 bits

Page 43: Web cryptography

SJCL demo http://bitwiseshiftleft.github.io/sjcl/demo

Page 45: Web cryptography

Crypto-JS

Page 47: Web cryptography

Crypto-js demo http://jsfiddle.net/Z583W

Page 48: Web cryptography

NodeJs Crypto http://nodejs.org/api/crypto.html

•require('crypto')

•Requiere instalar

OPENSSL en el servidor

Page 49: Web cryptography

NodeJs Crypto http://nodejs.org/api/crypto.html

Page 50: Web cryptography

JavaScript and Web Cryptography https://jswebcrypto.azurewebsites.net/demo.html

Page 51: Web cryptography

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

Page 53: Web cryptography

OpenPGP.js http://openpgpjs.org

Page 54: Web cryptography

JavaScript Cryptography tools Plugin para chrome

Page 55: Web cryptography

Crypto Tools http://iblogbox.com/devtools/crypto

Page 56: Web cryptography

DuckDugGo Cryptography hacks

Page 57: Web cryptography

DuckDugGo Cryptography hacks

Page 60: Web cryptography

Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/crypto_worker.js

Page 61: Web cryptography

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; }

Page 62: Web cryptography

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; }

Page 64: Web cryptography

Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/mtproto.js

Page 65: Web cryptography

Telegram https://telegram.org/blog/cryptocontest

Page 66: Web cryptography

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

Page 67: Web cryptography

OWASP

•Organización que trata de mejorar la seguridad de las aplicaciones web

•Incluye una lista de las 10 vulnerabilidades más críticas

Page 68: Web cryptography

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

Page 69: Web cryptography

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);

Page 70: Web cryptography

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

Page 71: Web cryptography

Anti-XSS https://noscript.net •Extensión para firefox

para evitar ataques XSS

Page 72: Web cryptography

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

Page 73: Web cryptography

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/14oTKnccypDRieszGLV7GbZXcIai0qLYOwgk_ELIj5A0/pubhtml

Page 74: Web cryptography

Coursera https://www.coursera.org/course/crypto

Page 75: Web cryptography

Thank you! José Manuel Ortega Candel | @jmortegac