36C3 preroll music
Herald: So, have you ever wondered how to
almost perfectly fake an email? Then you
might be actually in the right talk here.
We have our next speaker. Andrew, who is
currently working for the National CERT of
Latvia as a security researcher. And he's
going to talk about e-mail counterfeiting
and strategies for modern anti-spoofing.
Stage is yours.
Applause
Andrew: So. Greetings. I'm Andrew and I
work for Latvian National CERT. One of our
current goals is improving the state of
email security in our country and which we
mostly do through raising awareness about
this issue and communicating best
practices. And of course we are not the
only organization that is doing that.
There are many more CERTs in other
countries and there are various
nongovernmental organizations that are
doing the same. And commercial entities.
However, so far, frankly speaking, our
collective progress has been quite
underwhelming. So for example, here is the
one stat which is the usage of one
specific technology, DMARC, which as you
will learn in this talk, is quite
important and I hope that everyone will
start using it. So on the left. There are
twenty thousand domains across all the
world which are important domains for
important organizations that truly should
know better. And on the right side we see
the top 50, top 500 EU retailer domains
and across both of these groups two thirds
haven't even configured DMARC yet. And out
of those that have configured majority
hasn't enabled strict policy yet. So if
there is just one key takeaway from this
talk, I hope that it will be that everyone
should start using DMARC. It is important
to use it even for domains that are not
supposed to send email. So, one
explanation for these low adoption rates,
I think, is that, there are seemingly too
many competing technologies. This is the
contents for my talk. And I really tried
to do my best to trim it down. But as you
can see, there are three abbreviations, well and
SMTP and out of this, SPF, DKIM and DMARC
actually two are i don't even remember the
whole name for them. But still, they are
all important. And of course, this problem
that there are too many buzzwords, too
many technologies, and it's not clear
which one which ones we should use, it's
not specific to email. And we have this
across the industry and, ah, security
industry, i think by now we have found at
least one way to solve it. And it is
penetration testing. So when the
penetration test has been run properly and
the results have been published, then we
can start talking. We can shift the
conversation from talking about whether
your organization prefers technology A or
technology B we can instead start talking
about the questions that really matter,
such like: Is it possible for someone for
some third party to spoof your
organization's e-mails and to send such
e-mails to your, for example, customers or
your partners or to media organizations in
such a way that they will think that the
emails really came from within your
organization? So that's why penetration
testers are the key audience for this
talk. However, I hope that any blue
teamers in the audience also will find
this talking interesting. I'm sure that
you already know all the basics about the
email and about these technologies, but
looking at the problem from the different
side from attacker's perspective sometimes
can really put things into perspective. It
can help for you understand what you
should focus on when protecting your
environment. And finally, the SMTP
protocol. The technology that runs
underneath our e-mail conversations is
actually relatively easy to understand.
And so. And also the lessons learned from
all of this journey from SMTP, how it
became and how it's possible to spoof it
and all the technologies that are trying
to prevent spoofing. I think it's a
interesting case study and it should be
interesting to follow even for people who
are new to e-mail. Um, finally. Threat
landscape. So email security is quite a
wide topic. And so today I will only focus
on one small part of it, which is
successful spoofing of e-mails. Tampering
attacks. And I know that many, penetration
testers already, incorporate some part of
phishing or spear phishing, emulation
into their engagements and. But as far as
I know, they mostly do it from the, social
engineering perspective using such tools
as a social engineering toolkit, for
example. And it's, uh, I don't want to
argue, though, that it's important to do
that and to demonstrate to the customer
that what risks are in regards with social
engineering. However, I think you're doing
a disservice to the customer if that's the
only thing that you are testing from the
email perspective, because from the
customers, from managers perspective that
are reading your reports, if they only
mention social engineering attacks, then
the logical conclusion is, that the best
way to mitigate these threats is by
educating your personnel, especially those
that are least technical, as you will see
in this talk. There are quite a lot of
attacks and many organizations are
susceptible to them, which are much better
than that. And no amount of user education
will help here because we can't expect
users to check headers, for example,
manually. So we actually need to improve
our e-mail infrastructure. No way around
it. And finally, before we move on to
actual technical stuff, there's a little
secret, which I think might help people
that are not working in the email industry
understand why we have such problems and
is that, for email admins historically,
um, they value availability of their
system and reliable reliability much more
than security. And that's because that's
not an ideological decision. It's a very
pragmatic one. So, for example, if you are
an e-mail an email admin in an
organization and some of your customers
stop receiving invoices, your management
will find you and will inform you about it
and will ask you a really nicely to fix it
as soon as possible, even if it's not your
fault, if it might happen that the problem
is on the other side of the email. Not on
your server. And the for example, if,
other example, if you, if some of your,
some of your employees can't receive
e-mail soon enough, for example, to
restore the password or to verify the
email or to use multi factor
authentication token and they can't log
into some important systems again, they
will find you on though you will need to
solve that. But if your system is has some
security vulnerabilities, if it's assessed
susceptible to spoofing attacks and so on,
then not users, no management will
normally notice it. You might not not
notice it, but you are. You have this
vulnerability. So that's why obviously
penetration testers are important. Okay.
Now we can finally start talking about the
technical stuff. So and we will start with
the short introduction to SMTP protocol.
SMTP is the protocol that underlies all
email communications and it's actually
pretty easy to follow. So here's a data
flow of what's happening when one person
sends e-mail to another person. For
example Alice is sending to Bob and
they're using different they are working
for different companies. They use
different domains. So what's happening
here is that both of them would say use
email clients such as Outlook or
Thunderbird. And Alice is sending email.
It's going through this protocol SMTP to
Alice's mail server. But important to note
is that this is an outgoing e-mail server.
Usually organizations will have two types
of servers, one for incoming transactions
and one for outgoing and for smaller
organizations it might be one server, but
again, it's important for penetration
tester to think of this as different
systems because they will have even if
it's physically one machine, it will have
different configuration for outgoing mail
and for incoming mail. So as a penetration
tester you need to check both of them.
Okay. Now, when Alice's server tries to
send email to Bob's server, there is sort
of a problem in that the server needs to
somehow automatically find what is the
other server to send the email and it is
done through this blue box MX which is DNS
specific DNS record type MX. So that's
something that is maintained by Bob's
organization. So Bob's organization, if
they want to receive e-mail, they create
this DNS record. And I say that. Okay. If
you want to send e-mail to us, please use
this particular server. So it should point
to Bob's server. And Alice's outgoing
server knowing Bob's incoming server
address can communicate to that. And then
later, Bob, will receive its e-mail. So
the part that we as penetration testers
will be trying to breach is actually
between Alice's server and between Bob
Server. And then we need to think about
the second example, which is the opposite
way. And you might think that it's a
pointless example because we are just
basically changing the direction of
traffic. But the important part here is
for us as penetration testers to
understand that our client only controls
part of this transaction. If our client,
let's say, for the rest of this
presentation is Alice or Alice's
organization, then in the second example
when we are sending mail from Bob to
Alice, then we'll be sending emails only.
Basically, part of this transaction will
go through Alice's servers. In the first
example, if we were sending email from
Alice to Bob, it wouldn't be so. So if
it's a bit confusing, that's okay. We will
return to that a bit later. And finally,
there is a third example which looks
similar, but not quite. And that's if
Alice is communicating. Alice is our
customer. And if she is communicating with
her coworkers, which are using the same
organization, same e-mail server, same
domain. In that example, again, there will
be to at least logically two email
servers, outgoing server and incoming
server. But both of them will belong to
our customer. So right now, if you are not
familiar with e-mail, you can. It's
just interesting to try to think which of
these scenarios, three scenarios, which of
them are easier to protect? And a bit
later we will see how it's actually
happening. Okay. And then we need to look
at what actually is being sent, when email
is being sent. So again, it's using SMTP
protocol and it's really nice protocol you
can. As you can see, it's just text. So
it's plain text protocol and it's very
easy to play around because you can just
open telnet connection to the right server
and you can try writing down the commands
just with your hands. So you can try
mangling something or modifying or trying
different, different, different types and
see in real time how it was going on. So
on the left side we see here two parts
which are defined by SMTP. So first of
all, there comes SMTP envelope, which
basically you connect the server, say
hello, then you say what. Specify the
sender of email and recipient. "mail from"
is sender. Recipient is Bob, for example.
And then the second part starts with data
and ends with quit. And that's the part
which is called Content/Message. So just
if you want to play around with it, a bit
more, this is defined by a different
standard, which is not that important for
penetration testers but if you want to
look into details and it might be
important. And this internal message,
which is called either Content or SMTP
message, it again, it contains two parts.
One is headers and another is body. And I
think some people might not be familiar
with email, but probably everyone is
familiar in this audience with HTTP and
this looks quite, quite the same. So easy
to understand. But the interesting part
here is that you might have noticed that
we have Alice's and Bob's addresses twice.
Right. For example, Alice's is specified
on the second line "mail from". And then
we have the same address. alice @ her
organization in "From" header. The red
ones are the headers. And the same goes
for Bob. So why is that? Well, it comes
down to how we see e-mail. I as a normal
regular person who has used email in
past quite a lot, i usually see them as
described on the left side, which is a
sort of postcard. So on a postcard there
is someone who has sent it. The sender.
There is the recipient. That's usually me.
I'm receiving. And then there's some
message. So at least that's how I
perceived it before I learned a bit more
about it. But email admins and the
standard bodies, they see this situation
as the one which is shown on the right,
which is. There is an envelope and inside
the envelope then there is this message or
a postcard maybe. So you have two
addresses in this scenario. You specified
the address from and to whom you are
sending the envelope, which is the part
that post office, for example, will look.
But post office won't look generally
inside your envelope and inside the
envelope there is another message, and
that is the internal message is actually
meant for a recipient. So actually, you
could do even more and you could even put
the whole envelope with the message of the
postcard inside another envelope. And this
sounds crazy to me as a regular person,
but actually e-mail allows that. And in
the RFC the standard document, there are
some examples why that would be necessary.
Why why such why such things are allowed.
But but they are confusing. And so as a
result, it is the here in this first
example, we see that we generally we are
specifying the same address twice. But as
a penetration tester the question that
we should be asking is: So is that
required, actually? Is that always true or
is it just like a wishful thinking? And
it's actually wishful thinking. So
standards specifically do not say that you
should be specifying the same address for
recipient or for "From" from the sender on
the envelope and inside a message. So you
could actually tweak them and send
different, different stuff. So, actually,
there are much more headers than what I
showed. The ones I showed I think are just
the ones that we all have experience
because even if you are just using e-mail,
that's usually the stuff that you see or
see the date, you see the subject, you see
who has who sent you something and to whom
it was sent. Usually yourself. And there
might be, of course, more recipients. Oh,
yeah. And the question then another
question is: Which one is actually, if we
have specified for some reason by accident
or especially if we have specified
different addresses in this envelope in
the message which one the user will see
the recipient, it's actually the header.
So inside that the message is the one
which is intended for the user. OK. So and
as I was saying, there are actually
standards allow a bit more headers. And
actually 3 headers "From", "Sender",
"Reply to" which are semantically really
close and in the standard it's actually
explains when you should be using which
one. And the funny thing for me is that,
for example "From" header, which is
usually the one with that we see it might
contain . By reading the RFC you will see
that you shouldn't have more than one such
header, but the header itself might
contain multiple addresses. Personally,
I've never received an email which would
come from different people, but that's
allowed. But the important thing to
understand here again is the backwards
compatibility that I mentioned before. So
even though standards explain how you
should use the each header and that you
shouldn't have more than one of each of
these headers in practice actually can
send malformed email. You could send email
with multiple headers, the same header
"From" header multiple times, or you could
send header which does not contain "From"
but contain "Sender" according to RFC
that's incorrect. But in practice it will
work. Most organizations, most e-mail
service will try their best to pass your
completely malformed email because they
really are concerned about lowering the
support costs. So if something does not
work, then you will come to them. So it is
better to make that everything is working
most of the time. Of course, for
penetration testers that means that you
can play around with this because there
are different implementations and it's
exactly which header, for example, if you
have two headers, will be shown or will be
used for some algorithm. It depends on the
particular implementation. So because
there are so many implementations, they
are interconnected in different ways. You
could and you should as a penetration
tester try various things, for example,
add the same header multiple times. OK.
Now that we have covered these basics,
let's actually look into how you would try
to spoof an e-mail, for example. Yeah. And
here we are again, we are coming back to
this diagram that we have seen before. And
for example, in the first example about
Alice is sending email to Bob. Let's say
we are, Chuck. So we are a third party. We
are penetration tester licensed, we have
an arrangement that we are allowed to do
this and we are trying to send spoofed
e-mail to Bob. And in this example, we are
trying to spoof Alice's message. So our
intention is that Bob wants Bob receives
email. It should look to them, to the Bob,
that email was sent by Alice. So risk for
this. Okay. I will not cover the risk. I
think you can imagine that. So, for
example, you could do fake news is one of
the problems that we have seen in Latvia.
It's one this was used against government
bodies. And when someone sent a fake news
e-mail to other people, organizations and
so on, and were trying to impersonate some
some government person. And of course, you
could could imagine yourself how it's not
a good thing if you if it's possible. But
the interesting thing here is that even
though Chuck is doing attack, it depends
on your perspective. It might look like
attack on Alice or on Bob. But in this
case, email won't go through Alice's
systems. As you can see, Chuck is sending
e-mail directly to Bob's incoming
server. Now, there is a second type of
attack that will be looked at. If we are
sending e-mail in other direction from Bob
to Alice. And our customer is Alice. So we
are testing Alice's server. And in this
case, we are trying, again we are Chuck.
We are sending e-mail. In this case,
e-mail will go through Alice's systems. So
interesting question is, which is easier
to protect. It might seem that since in
the second example, e-mail is actually
going through Alice's systems, that means
that Alice has more power to do something,
to do some additional checks and balances
and so on. But actually, as you will see
in the future, it's easier to protect the
first example. So even though our customer
is Alice, we're trying to protect Alice,
but it's easier to protect in practice
this example where someone is selling,
sending e-mail, trying to impersonate
Alice. Okay. Oh, yeah. That there is the
third example, which is if Alice is
communicating with her colleagues inside
the same organization. Again, we are Chuck
in this case. Again, we will only send the
e-mail to Alice's incoming server. Not to
outgoing server. Right. So important thing
to note. And again, in principle, this
third example is the easiest to notice,
because Alice's organization presumably
knows that her e-mails always should come
from this particular outgoing server.
Right. Like if we are sending e-mail from
Alice's colleague, then incoming server in
principle should have all the power, even
without any standards and stuff like that.
But in practice, sometimes actually quite
often there will be a specific whitelist
for Alice's own organization. So some
checks won't happen if incoming server for
Alice is receiving email, which is coming
from, again, Alice. And by the way,
there's this example. We've seen that for
the past few years. I think it's not
specific to Latvia. So here, for example,
is Canada and others,if you can see. This
are these emails which are fake like
ransomware stuff. Basically, they are
telling you that they have hacked your
computer or your email. In this case, and
they have arranged all sorts of financial
activity or have some blackmailing you.
And please send them the money. Your
money. I mean, your money in bitcoins to
their address. So, these e-mails.
Interesting part about these e-mails is,
that they are usually in order to prove to
you that they have access to your e-mail
account. They are sending e-mail from your
address to your address. So and for many
people, that works. So they see that
someone has hacked their account,
obviously, because they've received e-mail
from themselves. So as you will see a bit
later, it's actually easy to spoof such
e-mails if there haven't been any
protections, haven't been put in place. So
the important thing, I hope that now no
one in this audience is falling for such
scam. But if you have some friends or
colleagues that have contacted you and
told you about such e-mails that they have
received. But one of the things besides
checking the passwords is starting using
more effective authentification on is a
just maybe you could tell them that they
should contact their email administrators
or IT team and ask them about anti
spoofing protection, because obviously if
they are able to receive such e-mail and
it's not filtered, something is wrong.
Okay, and now let's see a spoofed SMTP
conversation, so that's example similar to
previous one. But in this now we are
actually Chuck. So this is sent by Chuck
to Bob, but we are pretending to be Alice.
The question is, can you see the
difference how this is different from from
the previous one? And it's hard to see the
difference because there is none
difference. That is the same conversation.
So the point here is that SMTP protocol by
itself it actually it doesn't have any
protection. So, yeah, you could just for
example, if you are that guy that is
sending the fake ransom letters, you can
just write down this text and just dump it
to telnet and it will work for many
organizations. Not for all. And of course,
the email admins know this stuff, know
that SMTP is not very reliable in this
regard. That's easy to spoof and so on.
And there have been many attempts to add
some protection, just like ad hoc way. So
no standards just to ransom, add some
additional filters and stuff into your own
mail. And some of these protections
actually break RFC. If you read it, but
who cares? Like RFC is not a sacred text
or it's. I absolutely approve this, for
example. So yeah, go on. But the problem
is that there is not enough information.
So if you think back here, if we are Bob
and we are trying to protect our systems.
So we are Bob, some system administrator
probably or Bob is a sys admin and we are
trying to add some additional rules and
stuff, then what actually can we do? So
one example that I listed here is doing
this SMTP callback, and that means that we
are just the when we receive e-mail from
Alice, we actually check does that email
exist at all? Because many spammers, what
they will do, they will just send e-mail
from non existing emails and it will work
by if you are just running raw SMTP
server. So SMTP callback is basically you
are when you are receiving email from, for
example. Alice, you are trying. You are
running, spawning a separate process which
will try to connect back to Alice, etc.
And it will try to send email her. If a
server says that. Yeah, that's okay. Such
email exists and so on. You are not like,
you actually stop the conversation. You
don't continue with sending email, but
then your system can automatically find
that actually this e-mail really exists.
So another way to do this is through
checking this "Hello". And this is the
first line and the first line, it's,
normally it should tell you the hostname
of the server that is sending email.
Interesting part. So according to RFC
again, you shouldn't check it that you
shouldn't verify. And if it doesn't, if
it's a random thing, you should accept
email still. But what many servers will do
is they will try to verify that. First of
all, this hostname, which you are telling
that you have this hostname. First of all,
that it really points to the same IP
address and then they do the opposite. So
they will take IP address and try to run a
reverse DNS PTR query and they will try to
find whether that IP address really
responds to this hostname. So again, as a
penetration testers we should be aware of
these protections, ad hoc protections,
because they are if you don't know about
them, you will try running something and
it won't work for you. But they are easy
if you are aware of them and if you have
to identify that this organization uses
them. They are easy to bypass so that they
don't offer good protection. They are
meant to protect from mass abuse from
spam. OK, so SMTP, as we've seen, by
itself does not do does not offer any
protection. So which additions to the
protocol actually can we use to protect
ourselves? One of such protocols is SPF.
And what SPF does is it's trying to be
like mirror MX system. MX system is the
one which basically Alice can use to
Alice's server can use to automatically
find the server that belongs to Bob and
its incoming server. So. SPF is the
opposite of that. So that's an idea is
here to run the system automatically on
the Bob's incoming server. And now when
Bob receives the e-mail, they can run
again DNS query and they can find what IP
addresses actually should belong to
Alice's outgoing server. Right. So it's I
think it's easy to understand it's
actually a meaningful way. It sounds
meaningful addition. And the one field
that is checked in this example is this
envelope sender. OK. And here's an example
of minimal SPF syntax and the as we can
see. I think it's easy to understand, even
if you don't know the syntax is it lists
IP address, which is IP, should be IP
address of outgoing server, legitimate
outgoing server. And then it says this
"-all" which again, is easy to understand.
In this case, it means that that's the
only one. So if you receive a message,
message comes from this IP address. That's
cool. I accept it. If it's something else,
then just drop it. And there are multiple
ways to specify the IP address. You could
just specify the IP address. You could
specify IP subnet, you could specify DNS
hostname. So it's just for admin. So
basically for a penetration test, it
doesn't do much different, for admins it's
just easier to maintain these systems. And
then there are these qualifiers,
qualifiers. This is what's something which
you put before the methods. For example,
here in this example, IPv4 before doesn't
have any qualifier. There's no plus or
minus or something. That's because plus is
assumed by default. So by default,
everything that is listed in SPF record
will should the match some legitimate SMTP
server, outgoing server. However. There
are other options you could use minus
which is fail. And that means if something
matches this record, for example, minus
all is the one which is the most often
used, it means if it matches this one, so
that's usually the last one, then please
drop the mail. It's not real. It's it's
fake mail. And then there's this third
option, which is softfail, and that's
meant for testing period. So when you are
just starting to implement SPF, there
might be some. So the problem is that you
might forget, for example, to add some
SMTP servers. So because you haven't done
it before, maybe you think you have only
one SMTP actually outgoing server. But in
fact, you have multiple of them or
multiple ways to send e-mail. So in that
case, if you were to start set that SPF
record with "fail" strong policy, then
your users won't be able to send the
message anymore. So that's why testing is
good. However. Here are some other
examples, a bit more complicated. One of
them is was include. So instead of
defining the policy yourself because
you're using third party, for example,
Google in this example, and then you will
just include whatever Google has
published. And the interesting thing is
this usage of SPF. If we just if we just
look at the amount of domains that have
defined some sort of policy, that the
number looks pretty okay. I guess that's
for example for most popular domains
that's around 70 percent. But the problem
is that the majority of them are either
poorly configured or they just use the
softfail option. And what softfail
practically does is nothing. You still can
even if there is policy with softfail, you
can in most cases you can spoof your email
and it will still go because the recipient
side will think that it's just in the
testing mode. You shouldn't drop e-mail
automatically. Yeah. So. Actually, the
percentage isn't that great. However, the
most important thing for us as penetration
testers is to understand. So what do we do
when we see this SPF. That means that now
we can't spoof mail and. No, it does not.
That it's game over for us. We can do some
stuff. So first of all, is this softfail
that I mentioned. And that's basically you
have some rules, rules, rules, and then in
the end, you are putting typically just
this softfail at all. So if we as a
penetration testers will try spoofing from
some unknown IP address that hasn't been
listed in the previous rules. Then do
nothing. Do nothing. I mean, don't drop
email. That is good for us, right? That
means that we can actually spoof just in
the same old way and it will mostly go. So
the one great one note here is that some
systems are you are not using just this
binary classification, whether something
is good or bad, but they are trying to run
some scoring. And then it might be that
even if you have this soft fail, they
won't automatically drop your e-mail, but
maybe they will add some like suspicious
level to it. But important thing is that
it's not automatically a game over.
Another thing is this include. So include
is it very convenient when you are using
third parties. But the problem is that
it's not what it sounds to some people, at
least even in the standard, it mentions
that it was a poorly chosen name. And the
reason for that is that it's not a macro.
So to understand what's happening when
this included, you shouldn't just copy
paste everything from inside recursively
to the top level. It's not how it works.
It will try running all the checks inside
this include. But then if it fails, it
won't automatically drop the message. It
will go to the one level top and it will
try running the other rules. So the
problem with that is that two cases that
are the most common is that either if you
just forget to add this minus all to , or
your system administrator who has
forgotten to do that. In that case, even
if they include has minus all, it won't
work because I mean, it would because when
the recipient will be checking it minus
all inside include does not mean the same
as it does on the top level. And the
second would be if they have added all but
did softfail all. And some admins might
think that. But that's okay because I'm
including GMail and GMail has this hard
fail. Doesn't work that way. And then one,
which actually is I think maybe the most
common case, is that something often you
actually see this type of SPF records, but
there is lots of stuff inside there is IP
addresses. There are these A records,
there is a MX. There is a pointer.
Basically, everything that the admins
could think of and the reason is that the
most commonly, they are just not sure how
it works. They're not sure what they
should put inside. So, for example, one
thing that the point that out is if there
is a MX record inside the SPF, most
commonly most organizations, unless they
are very small and just have one server,
they will have different servers,
different IP addresses for outgoing mail
and for incoming mail. That means there is
no practical for this organization,here is
no practical reason to include MX into SPF
because no, no mail should go out through
their incoming mail server. And another
case might be that the admins understand
how it works, but it's really, truly their
architecture is really messy and they are
sending emails from many, many different
points, which is good for penetration
testers. That means that they are not well
organized. OK. And then there's another
flaw, which is that granularity isn't very
well suited. So the only thing you can.
There are multiple this record types. But
all they do basically are resolve the IP
address. But the as you can imagine, in
many cases, IP is not linked just to mail
server. So on one IP, there might be mail
server and web server or database or
something else. And that means that as a
penetration tester, you can exploit this
something else. Not mail server itself,
because mailserver usually is pretty like
low key. There's not many vulnerabilities
there. You just patch them and that's it.
But those other systems, for example, web,
it's easy to exploit. In most cases. So
then you can elevate like in some sort
elevate privileges by gaining access
through some other server on that IP
address or IP range. You can start sending
mails. They will pass all SPF filters. OK.
So one example is shared hosting, which is
the very common case and the problem with
shared hosting is that. In this case.
Okay. You have IP address of SMTP server.
Maybe that's server only used for sending
mails. But the server itself works not
just for you. It works for many domains,
maybe hundreds of thousand domains. That
means as an attacker, again, you can
exploit at least one of them, or for
shared hosting you can just buy. You can
become a customer of that shared hosting.
You don't even need to exploit anything.
And then you can potentially start sending
email, which will look good as far as SPF
is concerned, just like their own. So. And
the another one is this checking wrong
identifier. And this is probably the
worst, worst problem with SPF. It is that,
as I mentioned before, the one there are
at least two identifiers. Typically
envelope sender, the outer one, which
lists the sender, and then there is
internal one, which is usually "from"
header. But out of those two SPF only
checks, if SPF is the only technology that
you are using, SPF only checks the first
one: envelope sender. And as I mentioned,
in most cases, actual users that will
receive the mail, they won't see envelope
senders. They will see this and this other
one "from" for example, or one of the
other headers they mention. So this
behavior is fixed actually by DMARC, which
is the technology that I mentioned. But
the majority of SPF installations, domains
that are using SPF do not have DMARC, so
they are not protected by this. So even if
their SPF is completely great for
attacker, it means that you only need to,
what you need to do to pass SPF is a to
set envelope sender to something else. For
example, your own controlled address,
which will pass all SPF checks. But then
inside the "from" you can show the header
that will match this organization that you
want to pretend to be. Okay. So then there
is another technology which is supposed to
fix this and it's DKIM. As we have seen,
SPF is not enough. So DKIM. Sorry, the
wrong letters, Domainkeys identified mail.
That's the DKIM and you don't need to
remember the long name, just the short
name. And what it does, basically, it uses
cryptography, which is nice, right? It's
math. It's hard to break for attackers.
And what it does is it signs every mail so
every mail that is going out through the
DKIM enabled server will get signature,
which you can, as a recipient, you can
cryptographically verify. So as you can
see, how it looks is actually pretty hard
to see because it's not meant to be
processed by humans. It's cryptography.
It's meant to be processed by computers.
But the important part here is basically
the yellow stuff is this cryptographic
signature. But the green part is what's
called domain identifier. And the red part
is what's called. I don't remember how
it's called laughs. But basically it's
idea is that you can have multiple keys
for your organization, for example, your
organization might be sending mails from
your original SMTP server, then you might
have a backup one or you might have might
be sending some messages from Google or
some marketing campaign and so on. And
then each of them might have different
"red", this parameter. The problem is and
then the recipient will need to run DNS
query, which is the second example using
this combination of green and red one. And
then they will get the public key and they
can use this public key to verify the
signature. So it's sounds really nice. The
problem here is no, another problem yet.
So how to use it? I think it's easy if you
understand the public cryptography. So on
the sender side, you need to first
generate public and private keypairr. Then
you publish the public part in the DNS.
Then you use private key to sign each
message. Now recipient does sort of the
opposite. They once they receive the
email, they figure out from this red and
green part they figured out the correct
DNS record to run, run it, get the public
key and then compare whether this public
key corresponds to the signature. So it
sounds really nice, right? What's the
problem? So customers. Selectors, that's
the name. So the problem with that is that
the selectors there might be multiple
selectors as a DKIM when you are doing
configuration, you can select as many of
this custom selectors as you want, and the
recipient doesn't know whether you
actually should have used a selector and
what selector you should have used. So the
problem is that while, if we are talking
just about the vanilla DKIM, modifying
existing signature is hard for penetration
tester or for an attacker. But it's easy
to just remove it because if you have
removed DKIM at all the header, the
recipient doesn't know that it should have
been there because in order to check, they
need to. So here, for example, in order to
check the signature, I need to know this
green part. This domain identifier and the
selector which are part of this header.
Right. So that's a huge problem. And that
means that. Yeah. That means that we can
actually while we can't spoof DKIM itself,
we can just trim DKIM, send the message
without it. And if the DKIM was the only
thing which protected this system, it will
work. So it might not get the green
checkmark or whatever, but it will get to
the recipient. So. And another thing is
this domain selector. Why do we even need
to set that? Because the best practice, of
course, is that you have envelope sender
equal to "from" header equal to this DKIM
domain selector. Right. So if you are if I
am sending from Alice, then all three
should be Alice.org or whatever. The
problem is that it's not mentioned in RFC
that that should be the case. So what
exactly happens when it is not that way?
For example, on the right side there is
some real domain which was using Gmail,
Google Apps, Google suite, and in that case
the default by default Google suite will
sign all messages. But if you do not do
your own configuration, it will sign them
with domain it controls, which is this
"gappssmtp". And what it means is that
although technically something has been
signed with DKIM, it wasn't signed in the
way that you can trace back to your
organisation. It's something completely
else. What exactly recipient should do in
that case? Should they just ignore it?
Should they reject the message or
something? So the correct way would be not
to reject it, but just consider it not
valid, at least not not a valid DKIM, but
it actually depends. So some validators
will just see any DKIM, will validate it
and will say that's cool that matches RFC.
So but now the interesting part. Modifying
DKIM, which I don't have time for. But the
idea is that in some cases this is not
always but sometimes you actually can
modify. The easiest part to modify in the
messages are headers because DKIM, since
it's placed in headers itself, it does not
automatically sign old headers. There's
like a chicken and egg problem. So by
default it only signs one or two headers
and you can specify more headers that need
to be signed, but it doesn't happen
automatically. So the easy part for
attacker is to add another header. If
that's somehow helps you in your like
plan, then that's easy to do. You just add
another header. An interesting part is,
although the RFC, as I mentioned before,
mentions that some headers such as
"subject" or "from" should only be present
in one copy. Actually you could add more
than one for example "from" header, and
what happens in that case is pretty
interesting. DKIM will match if you have
told to DKIM that "from" header should be,
for example, signed, then it will match
and sign first "from" header from the
bottom. But quite a lot of software in our
software email clients will actually only
display to the user first from the other
side, from the up side. So what it means
is that the attacker can mangle or
overwrite headers by just adding new
headers to the top. And the this actually
problem is mentioned in the DKIM RFC and
the protection that they propose is this
code Over-Signing or you can go and read
the RFC. But not everyone is doing that
actually. And however, that only goes to
the headers. So sometimes that is good.
Sometimes that's not good. Modifying
message body is actually much harder to
do. Basically the naiv way do it through
cryptography, which we don't want to do.
And another way is through this one
parameter, which is body length, and
that's actually like questionable
functionality that DKIM has. Sometimes you
can specify that the hash like. For
signing purposes, we shouldn't consider
the whole body, but only first something
bytes. So that's actually useful in some
cases regarding was a mailing list, but
for the most part that's not useful. And
in practice, most email software does not
do this. If it does, then it is
susceptible to potentially to this
overwriting body as well. You could add
another mime type and then then modify
headers to show that different mime type
and it will pass DKIM. So in this case, it
actually will show, for example, the green
button or whatever, because DKIM, it will
be valid. So now there's the third
technology, which is called DMARC. And
again, there is the full name, which is
long, but in this case actually it means
something. There are two key words:
reporting and conformance. Reporting is
the one which most admins are familiar
with because that's how DMARC I think
often is being sold to them. Reporting
means that when you have some problems in
this case, you actually get get to tell
other side what to do in that case. So
basically you tell them to send you
reports either once per day or every time
and so on. So for penetration testers,
it's not that useful. Potentially we could
use that to understand what sort of
configuration is running on the other
side. But the currently this functionality
actually is not that widely implemented.
However, the other part conformance, it's
actually really, really, really powerful.
What it does, that it corrects these major
flaws that I mentioned in SPF and DKIM. So
first of all, DKIM had this massive
problem that if you just strip down the
header, then the recipient has no way of
knowing whether you whether there was
should have been DKIM in first place. If
you are using DKIM alongside with DMARC
that fixes the problem, because DMARC
specifies just that you have DMARC itself.
It means that you're automatically at
least one of the SPF or DKIM should pass.
So automatically DKIM is like measure
problem solved. The other thing that
changes is, it changes the semantics for
SPF. Now, SPF, if you have both SPF and
DMARC, it means that SPF should be checked
against "from" header. And as I mentioned,
that was the major flaw with SPF, because
if you're using SPF itself, even, it is
the hard to fail mode and so on, it means
that attackers can modify "from" headers
still and the recipient won't know any
better. So a minimal example of DMARC is
really, really small. And I think it's
easy to understand. You have just a DMARC
reject. You need to like find out the
right place to specify. But it's easy and
all you have to do is create this one DNS
record. And the benefit for that is even
if you don't have DKIM and DMARC, if you
have created. Sorry if you don't have SPF
and DKIM, but you have created DMARC,
effectively what it means is that this
domain should not send any mail because
for recipient to consider a mail valid at
least SPF or DKIM should be valid as well.
If they are not, then they can't be valid.
So in fact what it means is that most
domains out there should consider enabling
DMARC. That's just the right thing to do.
OK. So there are more tags. So in the
wild, these DMARC records might be much
longer, but it's not of much use to
penetration testers. So important part
here is again, this is this policy which
can be three values "none", "quarantine"
and "reject". And if it is "quarantine",
that means if the, if there is a failure,
the message should go to the spam folder.
If it's "reject", it should be rejected
outright. And if it's "none", it means
it's in investing mode. So and this is the
picture that I showed in before, which
shows that actually even though DMARC is
really like the best technology out of
these three, it's not really widely used,
unfortunately for defenders. Quite a nice
fact for all penetration testers out
there. That means that you can, in fact
spoof most of the mails out there. Okay.
So how do we work around it? Sorry. So.
What happens if actually someone has
implemented DMARC? Does that mean that now
penetration testers can't do anything? You
don't don't even need to do any research?
No, it doesn't. So in practice, if someone
has implemented both DKIM and DMARC, but
not SPF, so they have only two of them.
That's a really cool combination. DKIM is
pretty powerful and the major flaw that it
had DMARC solves. So this combination is
really cool in theory. In practice, the
problem is that in order to protect your
own mails, the recipient side should
validate both DKIM and DMARC and
unfortunately, quite a lot of software
still does not do that. One such software
is Microsoft Exchange. And even if you are
not running Microsoft Exchange, chances
are good that some of the partners that
you are communicating with are running
Microsoft Exchange, and by default it
doesn't have any functionality to parse
DKIM. So in fact, most systems still need
to enable SPF just for practical purposes,
which is good for penetration testers
because if SPF and DMARC as enabled by
default together, then again that fixes
one of the major problems with SPF, but
does not automatically fix other problems
because there's not enough granularity and
the potential for misconfiguration. So.
And the interesting fact is that DMARC
only requires that one of the other
technologies SPF or DKIM is passed in
order to consider email valid. There is no
way in DMARC, even though there are many
others like selectors. There is no way to
specify that both of them should be valid
or that DKIM should be preferred to SPF.
In practice, what it means is that for
most systems that enable all three of
them, which is a good practical solution
from penetration tester side we can just
ignore DKIM outright and just focus on SPF
because the SPF is the weakest link in
this situation. Okay. So just a minute for
recap. I'm not sure if I have any more
time. Not many time I have. Okay. So
sorry. Yeah. So one really important note
is, when you are testing the systems,
consider both scenarios. So don't focus
just on send. If you are, for example,
testing Alice. Alice is the organisation
that is your customer. Don't just focus on
testing emails sent impersonating Alice,
but also as the other side. Because in
this here you can see that it's easy to
implement for example, SPF and DMARC
because for both of them only you only
need DNS configuration. Just one record
per each. However actually testing them
like well validating them properly is
harder. For the first you need the
software support, you need to configure it
correctly as well. So in practice it might
be that many of organisations that have
enabled DMARC or SPF on the DNS side for
outgoing mails, they are not actually
properly validating it. Yeah. Okay. Sorry,
I don't have time for that. So probably.
That's it. Sorry. Maybe some questions.
applause
Herald: Thanks, Andrew, for this nice
talk. Sure. We have time for a couple of
questions. So there I already see one
person, microphone number two.
M2: Hey, thanks a lot. Do you know some
good tools to monitor DMARC reports that I
get sent by my recipients?
A: Yeah. So this is a really good
question. We as a CERT, we are really
suggesting everyone to enable this tool,
but unfortunately, as far as I know, all
the tools that are popular on the
Internet, they are collecting some data on
you. So they are using it for marketing
purposes, do they are not very good for
privacy, if you are concerned about that.
So you need to implement something
yourself or you need to look at some,
start some open source project maybe.
Herald: OK. Microphone number one, please.
M1: Thank you for the good talk. Me
myself, I would consider myself an mail
administrator. I sometimes get advised to
shorten your SPF record because if it's
too long, it gets dropped anyway. For
that, I sometimes get advised to drop the
PTR record. But in your talk, you say the
PTR record is useful for reverse DNS
checking, which I find very useful as
well. How are you about shortening your
SPF and how are you about the PTR record
in general?
A: Well, it really depends on your
particular use case. So it might be the
case that some organizations really need
this longer SPF and there's not no way
around that you could do. What you could
do is include this, include use includes
because they won't be they are not macros,
so they won't get expanded. They do not
like your record doesn't become longer if
you include and use many includes. But the
problem, which I would suggest to you is
actually reconsider whether it's a really
whether you really need that many records
if it's still long, because they're a very
common problem, is that unless you are
Google or something like that, you don't
really need that long SPF. It's probably
some problem with some. Yeah. So it's
probably an error for most organizations.
Herald: OK. Well, very. Just briefly.
Number 1
M1: On the PTI rocker record. I heard that
it's dropped. Not dropped from the
standards, but it's not in the standards.
A: It is in the standard. No. PTR record
by itself is if it's really your use case.
I don't I'm not aware that it will be
automatically dropped somewhere. Shouldn't
be a problem.
Herald: We have a couple of more
questions here. So number six in the very,
very back.
M6: Thank you for your talk. That's not
directly related, but even it should be
related. If mail server accepts because
DKIM, DKARC and SPF, everything is fine,
but especially Google for a lot of
organizations, the mail is delivered but
classified as spam. It means on the inbox
of the recipient, it is not displayed.
Have you a solution to solve this problem
against Google?
A: Yeah. OK. So I have like different
opinions about that because one thing
which actually enables which we actually
should be doing. Thank you Google. Is
that they are so strict because that's the
only reason that we even have this high
percentage of even improperly configured
SPF. The only reason there are 70 percent
websites are using SPF is because that
they need to communicate with Google. And
Google won't accept your mail if it
doesn't have even SPF on the baseline. So.
I actually I enjoy it as a job that I do.
I've. I would prefer that Google does what
it does. But I understand the real admins
which have this problem. Google has the
tool. You probably know about it. Where
you can check what it considers about your
domain. So you need to consider this
problem on a case by case basis. Quite
often what happens is that even though you
have this DKIM, DMARC and so on, it's not
configured correctly. So that's what the
talk was about. So you have it. You
probably think that you have configured it
correctly, but there are some errors.
Herald: Okay, let's give priority to the
Internet.
Signal Angel: We have one question from
the Internet. Well, attempting to verify
and address how to handle no reply email
addresses.
A: No reply, I'm sorry. Can you read it
again, please?
Signal Angel: When attempting to verify an
address, how to handle noreply Email
addresses.
A: Maybe it was about the noreply header ?
Or not existing IP addresses ?
Signal Angel: How to handle email. No
reply email adresses.
A: I will try to get an answer to how I
understand it. So what often happens is
that what often happens is that the email
will be sent from nonexisting addresses.
So maybe that's what the question was. For
example, there is "no reply", and it's not
the problem itself. No reply. The problem
is that it's not an real address. There is
no such address. Right. And so I don't
have an answer for that because according
to RFC, you should you should still accept
it. Practically, as I said, lots of mail
systems already are dropping this
addresses if you're sending from not
existing unless you are Google or
something large, so you have been put into
whitelist. You just won't be able to do
that. You won't be able to send email from
non-existing address. So if that's your
situation, create the address, make it
like a remove all the email that comes
there, but create the real address so that
your acceptable. If you are on the other
side. So you are receiving this email. It
depends on this particular use case. So
just check what's going on. If you can
contact them, contact them. If you can't
contact them, then you should decide what
is the risk, if you are dropping these
addresses, are they important for you? So
according to RFC you should receive and
process this addresses.
Herald: Okay. Microphone number four,
please.
M4: Hey, thank you for this talk. Do you
know about effort to solve problems with
big email senders like online booksellers,
which are very great because they don't
seem to have their own SPF records, for
example, in in control.
A: Yeah. So in many cases you can just
contact them. So it's just the question
that they haven't thought about it. Or
maybe no one told them what to do or maybe
they don't know how to do better. Right.
So that's one of the parts that we as a
CERT we are doing. If you have some some
this problem with some large company in
particular country, I would suggest to
contact CERT. Even if it's not a
government organization, for example, in
Latvia, if that will be a latvian company.
We would do the triage. We would try to
try to talk to them, explain to them why
they need to change and so on. So that's
maybe one option for you. But the
practices that if something looks to you
as a third party, as a wrong
configuration, that is one I couldn't
mention in this talk. If something isn't
perfectly secure, it doesn't mean that
it's wrong. There might be actually
business case why it should be this way.
Right. Because, for example, if it's a
large I don't know, Amazon and some for
something like that. And if they have
tested and they know that when they enable
very strict configuration, some percentage
of their emails just doesn't come. Not
because of their problem, because of
someone else's problem. Right. But then
there is actually a real business case
that they they are not. It would be stupid
for them to enable this, you know, to
strict configuration, knowing that it will
damage their business. That makes sense,
right?
Herald: Okay. We are unfortunately running
out of time for those who are on the
microphones. please just line up with the
speaker next to the desk. He's gonna talk
to you. Perfectly sure. And.
applause
36C3 postroll
Subtitles created by c3subtitles.de
in the year 2020. Join, and help us!