35C3 preroll music
Herald Angel: So… Yaniv Balmas is a
software engineer and he started tinkering
with Commodore's C64 when he was 8
years old.
He was kind of a teenage hacker of games as well.
And now he's in the security field and he
got interested in the fax machine
together with his friend Eyal Itkin, who
is also a security guy and malware researcher.
And together they're going to tell us
about the fax machines and What The Fax?!
Why still using people those machines?
And it's gonna be really interesting I think.
And the title is also
"Hacking your network likes it's 1980 again"
I'm really excited. Please give a warm
round of applause to those two guys.
applause
fax modem sounds
Yaniv: Thank you, thank you guys.
Hi, CCC!
You probably know this sound, right?
And now get to know us:
My name is Yaniv Balmas, I'm a security
researcher. I work at Check Point Research,
and with me here today is Eyal Itkin, also a
security researcher, also works at
Check Point Research, and let's begin
with talking a bit about the history of fax.
So I guess that not many of you know
that fax started,
it was first invented in 1846 by a scientist
called Alexander Bain.
Fun fact, this happened 20 years before
the invention of the light bulb.
And then it had some more advances to it,
this is the actual first thing that looked
like a fax machine, a standard fax machine.
And again, this thing was invented 20
years before the invention of the telephone.
So humanity was sending faxes before we
had light or talked over the phone.
And then there was some more
advancements like radio fax,
and an another important point in time is
1966, where a small unknown company
called Xerox invented – came out with the
first commercial fax machine.
This is the advertisement for it.
And in 1980 a strange organization
called ITU defined the core standards for fax.
Namely it's T.30, T.4, T.6, and those
standars are still the same standards
that we use today – basically, with just
minor changes to them.
So this was all in the past.
But what's happening today?
I mean today we have far better ways
to send electronic documents
from one to the other, right?
You know, let's compare fax to just, I dunno,
off the top of my head
just, you know, one method like, let's say, email.
And just to, you know, remind you.
We are comparing this… to this, okay?
So… let's look at some of the features here.
In terms of quality, in terms of accessibility,
I'm pretty sure that all of you here
have 24/7 access to emails. Not so sure
you're carrying around your fax machines with you.
In terms of reliability, well, when you
send a fax, you don't really know
if it got received or not. Yes, there is
this strange confirmation page,
but it doesn't really mean anything.
I mean, if there's no paper in the
receiving fax, you still get it. If the
dog ate it, you still get it.
There's absolutely no reliability in fax.
Regarding authenticity, well, we can argue
about emails, if it's authenticated or
not, it could be forged, of course.
But we do have public key cryptography
and stuff like that, that will help us
when talking about emails, while we don't have…
we don't have nothing when it comes to fax.
Absolutely no authenticity. So, if we're
looking at this table, one might think to
himself: Okay, so… Who the hell still
uses fax today? It's 2018.
I mean, it deserves a place in the museum
of great technologies and that's it.
So, nobody is using fax today, right?
Wrong.
Everybody are using fax today.
You see, fax is used to send these very
critical maritime maps to ships at open seas
90% of the japanese population uses fax –
according to Wikipedia at least.
And if you google any kind of combos like
"contact us" and "fax" or stuff like that,
you will come up with something like
300 million results. 300 million published
fax numbers in Google. And that's not
counting the unpublished numbers.
That's a huge amount of numbers. But it's
not all about numbers. It's not "how many
fax machines are out there?", but it's
also "Who is using fax?"
You see, if you're a small corporation, a
medium corporation, a huge corporation,
you have fax. Not necessarily anybody is
sending fax to this number, but there is a
fax machine sitting there waiting for a
fax to be received. If you're a bank,
you simply love faxes. This is
Bank of China, the biggest bank in the
world, and that's the fax number of it.
I think most importantly, if you're a
government organization… you…
laughter
… simply wake up in the morning and you
want to have more fax. This is
Donald Trump's fax number if anybody wants
to send him a fax. Go ahead.
That's it. It's not a secret, it's from
Google… We should send him something
by the way. And the thing is that, you know, those
banks and government institutions, they
don't only support fax, allow you to send
fax, the funny thing is that actually most
of the time, it's mandatory to send fax,
there is no other way. You can either
postal mail it, or fax it. They didn't
hear about anything else.
So we looked at this, state of affairs,
strange state of affairs,
and said to ourselves: "This looks
strange". I mean, it can't be true.
Humanity came so far and we're still using
these old technologies, so…
What The Fax?!
And we decided and try to do something
about it. And we started very long
research to try and find some security
vulnerabilities in fax. And before we do
that, you need to explain how fax looks
like today. You see, today fax doesn't
look like it looked 20 or 30 years ago.
Then, it was just standalone fax machines.
Right?
Today, fax is mostly old technology
embedded within newer technology.
So, we have fax to email services or email
to fax services, we have as I said before,
radio fax and fax over satellite and stuff
like that. I think most commonly, we have
this. These machines. All-in-one printers.
You buy them, they scan, they print.
And they fax. It actually comes with a
phone cable out of the box, so you can
connec… I guess most people connect it?
I also think that is the most common
faxing solution today. So we decided to
take a look at these machines.
These fax machines.
If you look at these boxes
from a security point of view you can
imagine them to be just black boxes.
And those black boxes have interfaces.
In one side of the box we have interfaces
like WiFi, bluetooth, ethernet, stuff like
that, these interfaces connect the printer
to the internal network, the external
network, basically it connects it to the
world. And on the other side of this box,
there's this little interface here that
connects this black box to somewhere
to the 1970s I would say.
Laughter
So that's pretty funny.
And if you remember, at the end of the day
these printers are basically nothing but
computers. They have CPUs, they have
memories, they have operating systems,
they are computers. Not standard ones,
but they are computers.
And we were thinking to ourselves, imagine
this scenario: There's an attacker sitting
somewhere in the world. All he has is
access to a phone line and his targets fax
number. What will happen if this attacker,
this guy, would be able to send a
malicious fax and with this malicious fax
he would be able to exploit the printer.
Then he has complete control over the
printer, right? If he does that, he could
then maybe pivot through any one of those
other interfaces, let's say the Ethernet
and jump from this printer to the rest of
the network, the internal network.
Effectively creating a bridge between the
external world and the internal network
through the phone line.
That's 1980s again!
So we thought this is a really cool attack
scenario and we decided to accept this
challenge and go for it. Try and actually
show this thing happening in reality.
We were really excited about this.
But then after we slept a bit and drank
a bit, sat down and talked about it, we
kind of found out that there is like a lot
of challenges, really hard challenges in
front of us and we're not really sure how
to deal with them. Let me name just a few
of them. One of the challenges is how do
we obtain the firmware. The code that this
printer runs. It's not like you have it
everywhere. And after we get it, how do we
analyze this firmware?
After we analyze it,
we need to understand what operating
system are those printers running.
And then we need to understand how to
debug a printer..
I never debugged a printer before..
I need to understand how to debug
a printer. And after we do all that,
we need to understand… How does fax even
work? We only know the beeping sounds like
most of us I think. And after we did all
that, we can start talking about where can
we find vulnerabilities inside this
big, big, big ecosystem.
And today, we'll try to take you through
these challenges, one-by-one and explain
how to do it until we'll be able to
actually do the scenario that we just
showed you. So, let's start with the first
challenge.
How do we obtain the firmware
for the printer?
So, meet our nice printer.
It's an HP inkjet printer,
an HP Officejet printer, we chose this
model, first of all we chose HP because
it has like – I think – 40% of the market
share so it's not that we dislike HP, we
really like them, but unfortunately for
them, they are just the biggest target out
there. And this specific model, well we
had a lot of reasons why we chose this
printer. But basically it's the cheapest
one.
Laughter
We bought it. We didn't have a lot of
budget. We bought it and we abused it for
a lot of time. And our goal was to break
fax, but before we do that, we had to
break the printer. I mean literally break
the printer. So yeah, that was the fun
part of the project, we broke it. And
inside the printer we find this thing:
The main PCB, the brains behind the
printer, and it looks like this.
Let's map the critical components of it:
So we have here: Flash ROM,
SPANSION some model,
and then we have some more memory here,
this might look like not a lot, because
the PCB has two sides to it of course,
and on the other side of it we have the
more interesting components, like USB,
WiFi, electricity, SRAM,
battery – probably for the memory but who
knows – and now we have two very
interesting components here. One of them
is the main CPU. It's a Marvell CPU, and
it's proprietarily manufactured for HP.
So we can't tell anything about it,
there's no available specs, nothing.
We can just find bits of information
here and there. And then we have the fax
modem. It's located here and it's a
CSP1040. What we need to understand now is
how do these two components operate and
what is the relationship between them?
If we do that, we're one step further.
So that's what we tried to do. And as I
said, the first challenge is to get the
firmware of this thing. And when we're
looking a bit closer into this PCB, we
find these 2 very interesting interfaces:
One of them is a serial debug, the other
is JTAG. If you're familiar with them, you
know that they give you debugging
capabilities, or at least memory read,
memory write, exactly what we need to get
the firmware. So we're smiling to
ourselves saying "Haha, this is going to
be really easy". But unfortunately it's
not. Because the JTAG is, of couse,
disabled completely. We can't do anything
with it. And the serial port, we managed
to connect to it. And we get this terminal
that for almost every instruction we type
gives us this error: "I don't understand".
Well, we don't understand either.
laughter
But it looks like this terminal is not
going to get us very far. So we dropped
this path and tried and look for other
ways to get the firmware and obviously one
of the most common ways is to try and grab
the firmware upgrade and after looking a
bit in the internet we find this jewel,
this FTP site by HP that contains
every firmware version for
every HP product
ever produced in the history
of HP and the Internet
and a lot of other stuff.
And it actually took us about, I think,
two weeks to find our firmware within
Laughter
… this mess of firmwares. But once we
did,
we had a firmware upgrade file.
Applause
Yes, thank you! It's still alive so you
can go there and look for some… there's a
lot of interesting stuff in there. And now
we've got ourselves a file. And this file
is the firmware upgrade file. It's not an
executable file, it's just a binary,
and now we kinda need to understand…
How do you even upgrade
a printer firmware?
I never did it i before. Anybody did it?
Anybody upgraded these firmwares? Lately?
Ah, good. Good for you. Good for you.
Anyway, the answer to this question is
surprisingly… funny, I would say.
You just print it.
Laughter
That's because, you see, a printer
receives a firmware upgrade just the same
way as it receives a normal print job.
That's the thing and it's actually pretty
nice and it's defined in a HP protocol,
it's called PCL XL Feature Reference
Protocol Class 2.1 Supplement. And if
you're still sane after reading this like
300 pages of insanity you understand that
this thing defines something called a
PJL – print job language. If you ever
scanned from a printer to the network you
see this port I think 9100, something like
that, open, that you send print jobs to,
and it's the same port that you send the
firmware upgrade to, and that's nice.
So when we look at the file, it actually
confirms this,
because it actually begins
with the words: PJL – Print job language.
So that's nice. So now we know it's a
print job language.
But unfortunately this document doesn't
document anything about the firmware
upgrade protocol, or anything,
because it's HP proprietary.
So unfortunately we had
to do it ourselves
and analyze this thing. Now I'm not going
to take you through the entire process of
unwrapping this firmware because frankly
it's quite boring. But I'll just tell you
that it's composed of several layers of
compression, one of them is called
NULL decoder, the other is called TIFF
decoder, and another one called Delta Raw
decoder. And the thing is that these
things do something like… If the previous
line was all blanks, and if this line is
also all blanks, just write one instead of
the line, so that gives you some kind of
compression, and it makes really a lot of
sense when you're talking about print jobs
because paper has a lot of spaces in it,
but when you're talking about binary files
it makes absolutely no sense to do it this
way. But still, it just works this way, so
after we understand that, we were able to
decode everything, decompress everything,
and we're talking to ourselves and
laughing, when you're
a hammer everything looks like a nail,
and when you're a printer,
everything looks like a print job.
Laughter
So that was nice. And now, after we did
that, we have a big file that hopefully
now is our firmware.
So how do we analyze it?
Looking at this thing right at the
beginning of the file, there's something
that really looks like a table. It doesn't
only really look like a table, it is
a table. We define it, it looks like this.
And what this table defines is a loading
address, section name and location in
binary. So what that means is that our big
file is actually split into several
sections. This table just defines those
sections. So now we are able to split this
big file into several smaller chunks and
inspect each chunk. The most important
chunk, the one that looks most promising
looks like it contains our firmware. So we
took a closer look into that and that's
what we saw: It actually looks like our
firmware. That's because you see: That's
one of the strings that we've seen here.
Laughter
Yeah! We all saw that before, right? It's
"Error: I don't understand". But it's not
completely "Error: I don't understand".
There's some missing bytes in here.
And actually those missing bytes are
pretty consistent throughout the entire
chunk. So although we know that we are
looking at the code, we can't actually
see the code until we have those missing
bytes filled. We need to understand: Why
are they there and what were they replaced
with? So let's try to analyze this thing
together, quickly, now. But first, let's
try to understand what is this thing.
We have a lot of things in mind, every one
seemed crazy, but I think the least crazy
option was that this is yet another form
of compression. A really bad one, again.
Because when we tried to compress this
thing with zlib, for example, we get like
80% better compression than it currently
is, and we know that the printer has zlib,
because we see zlib strings in there, so
why not use zlib? I don't know.
But still, we are left with a challenge.
So this is one snippet of the code that
you just saw,
so let's try to decompress this.
First of all, you need to understand this
thing is composed of two types of
characters, one are ASCII characters,
stuff that you can read, and some other
are stuff that you can't read, non-ASCII
characters. And those non-ASCII characters
are actually those missing bytes that we
have. So we need to understand what they
are, so let's take a closer look at them.
And if you stare at this thing long enough
you'll start seeing some kind of pattern.
I'll save you the trouble and just show you.
It's composed of these one single bytes,
and then those double bytes in there.
And if the distance between the single
bytes looks suspiciously patterned,
8 bytes, 9 bytes, 9 bytes, 8 bytes, over
and over again, so what does this mean,
where is the pattern here? If you look at
this from a different angle, maybe the
pattern will look a bit clearer. You see
that F7 and F7, they look the same.
The FF and FF, they look the same.
Something here looks really pattern-ish.
In order to understand this pattern, you
need to sharpen your binary view a bit,
and if you understand that FF is just
8 one bits, and if you do that
consistently for all of these chunks, you
will start seeing the pattern.
The pattern is that the zero bit always
falls within this two-byte hole.
It's consistent throughout the file. And
what this means is that the first byte is
just a bitmap describing the following
8 bytes after it. That's what it means.
And that's perfect because now we
understand what is this single bytes, but
we still don't understand, what are those
double bytes? And they were replaced with
something, but with what? So if you know
anything about compression, you know that
there's not a lot of options here really.
It could be either a forward or backward
pointer, it could be a dictionary of some
sort, or it could be a sliding window.
Now we can pretty easily confirm that
it's not a forward/backward pointer just
because we tried to follow the references
in the file, we see nothing that should be
there, same goes for dictionary. We can't
find anything that's consistent enough to
be a dictionary. So it leaves us only with
with the option of a sliding window.
Once we're equipped with this information,
we go to our favorite place, to Google.
And try to find some similar
implementations to this. Luckily for us,
in some very dark corner of the internet,
we find this wiki page. It defines
something called a Softdisk Library
Format. I won't ask if someone knows what
Softdisk is, because probably somebody
knows here, it's CCC after all. But inside
this thing it defines some kind of
compression algorithm that looks very
similar to ours. It looks actually really
really like ours. Actually, it's exactly
our compression algorithm. So yeah. That's
nice. And I think the funny thing here is
that this compression algorithm was used
in the past somewhere, and only there.
Can you guess where?
Waiting for response from the audience
Uh, yeah, somebody who didn't see chuckles
this presentation before?
Yeah! It was used in Commander Keen.
Softdisk is the company who produced
Commander Keen.
So the compression algorithm
from Commander Keen made its way,
somehow, into the entire HP line of
products.
Laughter
Applause
How? I don't know! You can check if there
was anybody who was fired from Softdisk
and hired in HP. Probably that would be my
guess. But we'll never know.
So now we understand exactly what is this
thing, and how does this compression work.
We have the missing data that we need. And
this data means that those two bytes are
actually composed of window location and
data length. And that's all we need, and
let me show you, like really quickly, how
this compression works. So we have an
input text, output text and sliding
window. We want to compress this string
over here, and let's try and do it.
So first byte is the bitmap, so we leave
it empty for now. Then, second byte, we
start with "A". So we place it both in the
output text and in the sliding window.
Then we go to "B", same thing. "C", same
thing. "D", again, and now we get to "A".
But "A" is already present in the sliding
window, so we don't need to write it in
the output text, we can just do
nothing and then go to "B", same thing,
it's just the following character in the
sliding window, and then when we get to
"E", we just write "00 02". That means
"Go to the sliding window at position 0,
and take the first two bytes". That's what
it means. Then we continue to "E", "F",
"G", after we did that, we input our
bitmap here, and now we know the bitmap
value and that's all there is to it.
That's the compression algorithm.
It's pretty easy
looking at it this way, right?
Looking at it in reverse is a bit more
difficult, but yes, now we can do that.
And now we completely open everything, and
yes, we have our firmware, you can read
everything. It's actual code. And now we
need to understand:
What does this code mean? And basically,
first of all, we need to understand what
architecture is this, what is the
operating system and so on and so on.
So it took us quite some time to do that.
But let me give you a brief explanation.
First of all, the operating system is
called ThreadX. It's a real-time operating
system. The CPU, the processor, is ARM9
big-endian, and then it has several
components to it, like stuff that's
related to system, some common libraries,
and tasks. Tasks are the equivalent of
processes in normal operating systems.
In the system stuff we have boot loaders
and some networking functionality and some
other stuff, Common Libraries we have a
lot of common libraries, and tasks, once
we're able to isolate them, we can
understand exactly the tasks, and once
we do that, we now know that all we need
to do is focus on these tasks, because
they're the tasks relevant
to fax protocols,
we can leave everything else aside.
It will make our work much more easy. We
want to start doing that. But,
just a second before we do that. Looking
at this, we see something that looks not
really… I don't know, it doesn't make
sense a lot. This thing is Spidermonkey.
Every HP printer contains a Spidermonkey
library. I don't know if you know what
Spidermonkey is, but basically it's the
JavaScript implementation by Mozilla.
It's used in Firefox for example. And we
were thinking to ourselves:
Why does a printer need to render
JavaScript? It makes no sense.
I mean yeah, it has a web server, but it's
not a web client. We couldn't think of
any situation in which a printer needs to
render JavaScript.
It looked really strange to us. So we
decided to try and see where this printer
is actually using JavaScript, so we went
back a bit and checked and we found that
JavaScript is used in a feature called
PAC – Proxy Auto Configuration.
It's pretty common, it's a good protocol.
It defines proxies when you're doing DHCP
or something like that. The thing is that
the top layer functionality of this entire
PAC functionality was written by HP.
And when we were looking at that, we see
all this functionality, and we see this
strange thing here. The printer once it
does this PAC functionality, it tries to
connect to this domain:
fakeurl1234.com. Just connect to it and
do nothing with it.
Some sort of sanity test I guess? I don't
really know why.
But the interesting thing here is: Do you
know who owns the domain fakeurl1234.com?
Laughter mixed with murmur
No, it's not HP.
Murmur & responses from the audience
Ehh, Check Point is kinda… eh…, yeah.
I own it.
Laughter
Applause
It just wasn't registered.
So, we registered it for 5 Dollars.
And now every HP printer is connecting to
my domain. Chuckling
Laughter
Applause
So, if anybody wants to buy the domain, I
have a very good price for you:
More than 5 dollars.
And now I'll hand it over
to Eyal to continue.
Eyal Itkin: Okay, thank you Yaniv.
After we've finished messing around with
Spidermonkey, it's time to focus back on
fax, so T.30.
T.30 – in its full name it's
ITU-T recommendation T.30 – is a standard
that defines the fax protocol. Actually
it's a very very long PDF, more than
300 pages. It defines all the phases and
messages we need in order to send and
receive a fax document. It was first
defined very long ago, 1985, and was last
updated more than a decade ago. So from
our perspective that's a very good idea,
because we want to find vulnerabilities in
an old and complicated protocol.
We're most probably going to find some.
After we read through the standard we
started to dynamically look at it, opened
it in IDA and look up on the T.30 task.
And you can see that the state machine is
quite huge as you can see here in IDA, and
actually that's a small state machine.
Because most of the code blocks you can
see over here contain additional state
machines inside them. Meaning that this is
going to be a very very huge and
complicated state machine to reverse.
And if that wasn't enough it turns out
that HP really likes to use
function pointers and global variables in
their code. Meaning that statically
reverse-engineering this huge task is
going to be very complicated. Although I
personally prefer to statically
reverse-engineer, this time we had to
choose a different tactic, we'll need to
dynamically reverse-engineer this thing
and for this we'll need to have a
debugger.
As Yaniv mentioned earlier, nobody knows
how can we debug a printer.
We already tried built-in JTAG and
serial port and that failed.
We then searched for a builtin GDB stub we
could use,
but I couldn't find any such stub.
At this point it's very important to
remember that even if we could control the
execution flow, no-one can put a debugger
without controlling the execution flow,
and we can't do anything, it's a black
box, I can send papers and that's it.
And even if I could control the execution
flow and load my debugger, the printer
uses a hardware watchdog. And this is an
external hardware mechanism that monitors
the main CPU and whenever the main CPU
enters an endless loop or it halts,
the watchdog reboots the entire printer.
This means that since essentially a
breakpoint halts the program,
whenever we hit a breakpoint,
the watchdog will kill us.
So we need to find a way around this
thing, the easiest way we could find out
was to split this enormous task into
chunks, if we could find any code
execution vulnerability, we could try to
execute code over the printer and load our
own debugger. And at this stage we had
luck, and we believe that luck is an
important part in every research project.
On the 19th of July, SENRIO published a
vulnerability called "Devil's Ivy".
Devil's Ivy is a remote code execution in
gSOAP and many embedded devices (and our
printer included) tend to implement a web
server for management and configuration,
and in our case this web server uses
gSOAP, and it even uses a vulnerable
version of gSOAP, so we now have our
vulnerability, and we'll need to exploit
it. For those of you not familiar with
Devil's Ivy, here is the code.
And here is the vulnerability itself.
Devil's Ivy is a signed integer underflow
vulnerability,
meaning that we'll need to send
enough data for the variable to go from
negative back to positive. And that means
we need to send roughly 2 Gigabytes of
data to the printer.
So HP really prides itself on the printing
speed of the printer,
but not on the network speed.
After many optimization rounds we managed
to reduce the exploit time to roughly
7 minutes. So you start the exploit, you
wait, and after 7 minutes you have
your exploit. And here our good luck
ended, because we had a side effect in our
exploit, and after two to ten minutes the
printer will crash. And this means we will
need to wait an additional 7 minutes,
we'll have 2 minutes to debug it,
and then it will crash again. So we
waited a lot of 7 minutes in our research.
Laughter
If you recall, we wanted a debugger so we
could dynamically reverse-engineer the
firmware. We wanted read memory and write
memory, and now we have a debugging
vulnerability, so we can load a debugger,
we need to execute this debugger, so
we'll need executing permissions
to load it.
The most important thing is that we need
to execute our debugger without crashing
the firmware. Because we want the debugger
to run and the firmware to debug and we
want them to blend inside the
virtual address space of the printer,
living happily together.
We couldn't find any debugger that achieve
this goal, so I did what my mother usually
tells me not to do, we actually wrote our
own debugger.
So this is Scout. Scout is an instruction
based debugger that supports Intel CPUs
and ARM CPUs, because we have an ARM
printer. As a prototype we had a Linux
kernel driver, and this time we're going
to use it its embedded mode.
In embedded mode we compile it to be fully
positioned in the unintelligible,
because we essentially throw it somewhere
inside the firmware and expect it to
execute. We pre-equip it with useful
addresses like:
memcpy, socket, bind, listen, we
find using IDA.
And whenever it tries to
call these functions it goes to its
own GAT, finds the address and
jumps to it.
After we compile it, we use it in our
exploit, we jump into this blob, and it
starts up a TCP server, we can now connect
to to send instructions to
read memory, to write memory,
and whatever we want.
You can find Scout in our GitHub, with the
examples for Linux kernel driver and
embedded mode. And we're actually using it
for some CVEs now,
so it's highly recommended.
Now that we reach this point in our talk,
we haven't yet described to you how a fax
actually works, so with Scout we
dynamically reverse-engineered the
firmware, and now we can actually
describe to you how a fax actually works.
In order to send a fax, we need a sending
machine, we need to send it to some modem,
the packets from the modem will be
processed in the CPU, and afterwards, the
data is going to be processed and probably
printed. Let's see how it starts. We start
with network interaction,
probing and ranging, equalizer and echo
cancelling, more training,
and you actually need to be quite familiar
with these steps,
because they sound like this:
repetitive fax modem sounds
With these beeps, we actually created an
HDLC tunnel. Through this tunnel, we're
going to send our T.30 messages, to
the CPU. In T.30 you have phase A,
in which we send the caller ID, which is
a string. In phase B you negotiate the
capabilities, so I send my capabilities
and receive the printer's capabilities.
Phase C is the important step because here
we actually send our fax data,
line after line, and page after page.
And in phase D, we finish. I send an ACK,
I receive an ACK, and that's it.
Let us now see how a normal black/white
fax document is going to be sent through
the protocol. So we have our document,
it's going to be sent over the HDLC tunnel
using T.30 messages, over phase C, and the
receive document is actually the body of a
TIFF file compressed in G.3 or G.4
compressions. From our perspective, that's
partial good news, because there are
many vulnerabilities when parsing TIFF
headers, and we only control the data
of the file. The headers themselves are
going to be constructed by the printer
itself, using messages from phase A
and phase D.
So, we partially control a TIFF file and
after it's done and ready, the file
is going to be printed. Like every good
protocol – and here it becomes very
interesting – T.30 many extensions.
Can you guess what interesting extensions
there are in the protocol?
There's a security extension, but no-one
uses it, the other extension…
is..
Color Extension!
Actually you can send colorful faxes and
they really use it in hospitals
for some reason
Let's see how colorful fax works.
We send a document through
the HDLC tunnel,
over phase C, and the received document is
actually a JPEG file. This time we control
the header and the data of the file, and
we can do whatever we want to it,
and send it for printing.
Now that we know how a fax
actually works,
where should we look for
vulnerabilities in it?
Well, we have complicated state machines,
withstand strings, there are
several file layers, but the most
convenient layer is the applicative one,
and most importantly, JPEG, because we
control the entire file.
If we look at a JPEG file, it mainly
consists of markers, we have a
start marker, application marker with
length and data, more markers with length
and data, and so and and so on.
If we zoom in on one such marker, we can
see that in this marker we have a
compression table, a 4x4 compression
matrix for the exact document we send, we
have a header, length field, 4x4 matrix,
and the data itself.
If you zoom in a bit deeper, we can see
that here we get a matrix, we sum up all
of the values. This matrix should be
rather sparse, with zeroes, ones,
and twos. The accumulated value is going
to be our length field,
in this case 6 bytes, and 6 bytes are
going to be copied from the data to
a local, small, stack buffer.
Like this.
So if you consider vulnerabilities, at
this point we were like "What The Fax?!"
because that doesn't make sense. We
control the entire header. If you put huge
values in our matrix, like so, we have a
4 kilobyte length field copied into
a stack buffer of 256 bytes, effectively
having a stack-based buffer overflow in
our printer.
It's a trivial stack buffer overflow, we
have no byte constraints, we can use
whatever we want, null bytes, non-ASCII
bytes, whatever we want. And 4 kilobytes
user-controlled data, that's more than enough
to exploit. At this point we had to bypass
several operating system security
mitigations… Nah, not exactly.
Laughter
It's an …, fixed address spaces, no
canaries, it's the eighties, it's really
simple. We've got the CVEs from HP,
9.10 critical, you should really patch
your printers now. And here you can see
the response we have seen from HP after
we've worked with them to patch these
vulnerabilities,
which is a good time for our demo!
Yaniv Balmas: Unfortunately we couldn't
really live-demo, so we just filmed
something for you. So, this is our
attacker machine, all you need to do is
run this script, it's connected to a modem
that we bought for like 10 dollars
from Amazon. We're sending our malicious
fax to this printer, and… yeah.
Incoming call… from who?
Wait just a second.
Eyal Itkin: Faxes are slow.
Yaniv Balmas: Yeah, they are.
Yaniv Balmas: So, from an evil attacker of
course, we forged this easily. And now,
the printer is receiving the fax, and
processing it, and now it's obviously a
colorful fax, and now we have full control
over the printer, so it's ours.
But that's not enough! Because we want to
show that we can propagate to another
computer, so our malicious fax, contained
EternalBlue in it, so once any computer is
connected to the network, the fax now will
recognize it, and will try to exploit it,
and here you go!
Laughter & Applause
So yeah, we made it after all.
It was a long way.
Some conclusions we have to tell you:
First, PSTN seems to still be
a valid attack surface in 2018. Fax can
be used as a gateway to internal networks,
and old and outdated protocols… probably
not so good for you, try not to use them
if you can. What can you do to defend
yourself against this catastrophy?
A lot of things. First of all, you can
patch your printers, as Eyal said,
this link will just tell you if your
printer is vulnerable, by the way, every
HP Inkjet (or HP Officejet) printer is
vulnerable to this thing, it's the biggest
line of printers from HP, over – I think –
200 or …
Eyal Itkin: 300
Yaniv Balmas: … 300 models are vulnerable
to this thing, so really go and update!
Another thing I could tell you is:
If you don't need fax, don't use it.
Also, if you do need to use fax after all,
try and make sure your printer is
segregated from the rest of the network,
so even if somebody takes over the
printer, he will just be confined to the
printers, and won't be able to take over
your entire network. These are really good
suggestions, all of them, but really,
the best suggestion
I have to give you today is:
Please!
Stop using fax!
Laughter
Applause
Thank you, thank you!
And, just one second before we finish,
this was a long way, a long journey.
We had some very good friends that helped
us a lot along the way,
physically, mentally, technically,
so we must mention them.
These are the guys here. Some of them are
in the crowd, so they deserve come claps.
applause
One special guy that helped us is
Yannay Livneh, he also deserves this, and…
… that's it basically, guys!
So if you want to follow more of our work,
you can find us here. Follow us.
Thank you very much!
Applause
Herald Angel: Thank you very much.
We have 5 minutes for Q&A.
So please line up at the microphones.
If you want to leave now,
please do it to your right side, so this
side. From the stage it's the left side,
but for you it's the right side.
So please line up at the microphones.
I think I can see microphone 4 already,
so we'll start with microphone 4.
Question: First, thank you for this talk.
It's scary to see that these can be
exploited today. You talked about
email-to-fax or fax-to-email services,
and I wondered: Is it possible that there
are vulnerabilities in those as well?
I know Fritz!Box routers allow
fax-to-email, could you attack those,
possibly?
Yaniv Balmas: So basically, those services
use T.30 as well. We didn't look at them,
frankly. We had so much work to do with
the printer, that we didn't look at any
other printers, or any other services.
I can't say for sure, but if you're
looking for vulnerabilities, I would
recommend to go look there as well.
Herald Angel: Great, microphone number 5
please.
Question: What can you disclose about the
data that's hitting your URL?
Yaniv Balmas: The…? Uh!
Question: What can you disclose about the
machines that are knocking on your URL,
the fakeurl1234.
Yaniv Balmas: There are a lot of HP printers
out there.
Laughter
That's all I can disclose. Sorry.
Herald Angel: We have one question from
the Signal Angel, please.
Signal Angel: Did you try to activate JTAG
by upgrading to a modified firmware?
Eyal Itkin: We tried to use the JTAG, we
think it's disabled from the factory
lines, it was too much work. So we decided
to use Devil's Ivy, it's a good
vulnerability. Once we have Devil's Ivy
and we can use Scout, Scout is more than
enough for debugging.
Essentially, after we used the JPEG
vulnerability and we loaded up Scout,
Scout survived for weeks on a printer
without any crash.
So that's more than enough.
Herald Angel: Great, we'll go with
microphone number 2 please.
Question: Yes, thank you for the nice
talk, and I think you're completely right
you can have many problems with legacy
protocols, the only thing I do not really
get was the part how you then can
automatically successfully attack your
laptop on the network. My point would be:
My laptop is as secured as I'm going to
the internet cafe or something else, so
you would not be able – with your HP
printer – to start the calculator on my
Linux or even on my Windows.
Yaniv Balmas: Your laptop might be secure,
I'm sure it is, but many others are not.
We tried to show it using the EternalBlue
exploit, as you know, WannaCry, stuff like
that. This thing created a lot of…
– and there were patches out there –
…and still it was… So… we're not here to
attack anyone. We're just saying that
theoretically, if somebody wants to get
into the network and he has a
vulnerability that you have may have not
patched or secured, fax would be a bad
idea to have.
Question: But it was nothing which was
part of the printer…
Herald Angel: Sorry, unfortunately we do
not have more time for Q&A, so thank you
again very much.
Yaniv Balmas: Thank you!
Applause
Music
subtitles created by c3subtitles.de
in the year 2019. Join, and help us!