Using Guided Missiles in Drive­bys
                    Automatic browser 
                    fingerprinting and 
        ...
Browser Autopwn
●   Auxiliary module for the Metasploit Framework
●   Fingerprints a client
●   Determines what exploits m...
Outline
●   Intro
●   Cluster bombs
●   Guided missiles
    ●   Fingerprinting and targeting
●   Stealth
●   Demos
●   Com...
# whoami
    ●   James Lee
    ●   egypt 
    ●   Co­Founder, Teardrop Security
    ●   Developer, Metasploit Project




4
My Involvement in MSF
●   Started submitting patches and bug reports in 
    2007
●   HD gave me commit access in April 20...
The Metasploit Framework
    ●   Created by HD Moore in 2003
        ●   ncurses based game
        ●   Later became a rea...
I <3 MSF
●   Modular payloads and encoders
●   Many protocols already implemented
●   Many non­exploit tools
●   All kinds...
Why Clientsides
    ●   Karmetasploit 
    ●   Any other tool that gets you in the middle
    ●   Users are weakest link, ...
Client Exploits in MSF
    ●   Extensive HTTP support
        ●   Heapspray in two lines of code
        ●   Sotirov's .NE...
Simple Exploit
content = “<html><body>
<object id='obj' classid='...'></object><script>
#{js_heap_spray}
sprayHeap(#{paylo...
Or Arbitrarily Complex
 ●   ani_loadimage_chunksize is 581 lines of code
 ●   As of June 28, MSF has 85 browser exploit 
 ...
Problem
Solution
Cluster Bomb Approach
 ●   Is it IE?  Send all the IE sploits
 ●   Is it FF?  Send all the FF sploits
 ●   Originally expl...
Problem
Solution
Guided Missile Approach
 ●   Better client and OS fingerprinting
     ●   less likely to crash or hang the browser
 ●   On...
Fingerprinting the Client
●    User Agent
     ●   Easy to spoof
     ●   Easy to change in a 
         proxy
     ●   A t...
Fingerprinting the Client
●    Various JS objects only exist in one browser
     ●   window.opera, Array.every
●    Some o...
Internet Explorer
●    Parser bugs, conditional comments
     ●   Reliable, but not precise
●    ScriptEngine*Version()
  ...
Opera
●    window.opera.version()
     ●   Includes minor version, e.g. “9.61”




21
Hybrid Approach for FF
●    Existence of 
     document.getElementsByClassName
     means Firefox 3.0
●    If User Agent s...
Safari
●    Still in progress
●    Existence of window.console
     ●   If Firebug is installed on FF, shows up there, too...
Fingerprinting the OS
●    User Agent
●    Could use something like p0f
●    From the server side, that's about it




24
Internet Explorer
●    Again, ScriptEngine*Version()
●    Almost unique across all combinations of client 
     and OS, in...
Opera
●    Each build has a unique opera.buildNumber()
●    Gives platform, but nothing else




26
Firefox
●    navigator.platform and friends are affected by 
     the User Agent string
●    navigator.oscpu isn't
     ● ...
Others
●    Really all we're left with is the User Agent
●    That's okay, most don't lie
     ●   And those that do are l...
Future Fingerprinting
●    QuickTime
●    Adobe
●    Less well­known third party stuff




29
ActiveX
●    “new ActiveXObject()” works if you have 
     the class name
●    Otherwise, IE doesn't seem to have a generi...
Solution
●    typeof(obj.method)
     ●   'undefined' if the object failed to initialize
     ●   'unknown' or possibly a ...
Target Acquired
What is it Vulnerable to?
●    Coarse determination server­side
     ●   JavaScript builds fingerprint, sends it back to t...
Select a Missile
●   Sort by reliability
●   Exploits contain 
    their own JS tests
Problem
Solution




36
Obfuscation
●    Randomize identifiers
●    Build strings from other things
●    JSON / AJAX
●    Obfuscation is not crypt...
Encryption
●    Put a key in the URL
     ●   Not available in the stand­alone script
●    Simple XOR is enough to beat AV...
Demonstrations




39
And we're back...
●    I hope that worked
●    Now how do YOU make exploits work within 
     this framework?




40
Writing Exploits
●    Add autopwn_info() to top of exploit class
●    :ua_name is an array of browsers this exploit 
     ...
Example: mozilla_navigatorjava
    include Msf::Exploit::Remote::BrowserAutopwn
    autopwn_info({
        :ua_name    => ...
Example: ms06_067_keyframe

    include Msf::Exploit::Remote::BrowserAutopwn
    autopwn_info({
        :ua_name    => Htt...
Example: winzip_fileview

    include Msf::Exploit::Remote::BrowserAutopwn
    autopwn_info({
        :ua_name    => HttpC...
Browser Autopwn Summary
●    Reliable Target Acquisition
●    Smart Missile Selection
●    Stealthy from an AV perspective...
Commercial Comparison
●    Mpack
●    Firepack
●    Neosploit
●    Luckysploit




46
Mpack, Firepack
●    Hard to acquire
●    Old exploits
●    Detection is only server­side
●    Hard to change or update ex...
Neosploit
●    Compiled ELFs run as CGI
●    Unless you get the source or do some RE, you 
     won't really know what it ...
Luckysploit
●    Real crypto (RSA, RC4)
●    Even harder to acquire




49
Browser Autopwn
●    Easy to write new exploits or take out old ones
●    Free (three­clause BSD license)
●    Easy to get...
Future
●    More flexible payload selection
●    Stop when you get a shell
     ●   Maybe impossible in presence of NAT/pr...
Download it
●    svn co http://metasploit.com/svn/framework3/trunk 
●    Submit patches to msfdev@metasploit.com




52
Thanks
●   hdm, valsmith, 
    tebo, mc, cg, Dean 
    de Beer, pragmatk
●   Everybody who 
    helped with testing
●   Wh...
Upcoming SlideShare
Loading in …5
×

Using Guided Missiles in Drive-bys: Automatic Browser Fingerprinting and Exploitation with the Metasploit Framework's Browser Autopwn

2,430 views

Published on

Presented at Defcon 17

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,430
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
49
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Using Guided Missiles in Drive-bys: Automatic Browser Fingerprinting and Exploitation with the Metasploit Framework's Browser Autopwn

  1. 1. Using Guided Missiles in Drive­bys    Automatic browser  fingerprinting and  exploitation with the  Metasploit Framework:     Browser Autopwn James Lee
  2. 2. Browser Autopwn ● Auxiliary module for the Metasploit Framework ● Fingerprints a client ● Determines what exploits might work ● Used to suck ● Now it doesn't 2
  3. 3. Outline ● Intro ● Cluster bombs ● Guided missiles ● Fingerprinting and targeting ● Stealth ● Demos ● Commercial comparison 3
  4. 4. # whoami ● James Lee ● egypt  ● Co­Founder, Teardrop Security ● Developer, Metasploit Project 4
  5. 5. My Involvement in MSF ● Started submitting patches and bug reports in  2007 ● HD gave me commit access in April 2008 ● Broke the repo April 2008 5
  6. 6. The Metasploit Framework ● Created by HD Moore in 2003 ● ncurses based game ● Later became a real exploit framework in perl ● Rewritten in ruby in 2005 ● Which is way better than python ● Extensible framework for writing exploits 6
  7. 7. I <3 MSF ● Modular payloads and encoders ● Many protocols already implemented ● Many non­exploit tools ● All kinds of exploits ● Traditional server­side ● Client­sides 7
  8. 8. Why Clientsides ● Karmetasploit  ● Any other tool that gets you in the middle ● Users are weakest link, blah, blah, blah ● See Chris Gates 8
  9. 9. Client Exploits in MSF ● Extensive HTTP support ● Heapspray in two lines of code ● Sotirov's .NET DLL, heap feng shui ● Wide range of protocol­level IDS evasion ● Simple exploit in ~10 lines of code 9
  10. 10. Simple Exploit content = “<html><body> <object id='obj' classid='...'></object><script> #{js_heap_spray} sprayHeap(#{payload.encoded}, #{target.ret}, 0x4000); obj.VulnMethod(#{[target.ret].pack(“V”)*1000}); </script></body></html>“ send_response(client, content) 10
  11. 11. Or Arbitrarily Complex ● ani_loadimage_chunksize is 581 lines of code ● As of June 28, MSF has 85 browser exploit  modules 11
  12. 12. Problem
  13. 13. Solution
  14. 14. Cluster Bomb Approach ● Is it IE?  Send all the IE sploits ● Is it FF?  Send all the FF sploits ● Originally exploits were ad­hoc ● Pain in the ass when new sploits come out 14
  15. 15. Problem
  16. 16. Solution
  17. 17. Guided Missile Approach ● Better client and OS fingerprinting ● less likely to crash or hang the browser ● Only send exploits likely to succeed ● Browser is IE7? Don't send IE6 sploits, etc. 17
  18. 18. Fingerprinting the Client ● User Agent ● Easy to spoof ● Easy to change in a  proxy ● A tiny bit harder to  change in JS 18
  19. 19. Fingerprinting the Client ● Various JS objects only exist in one browser ● window.opera, Array.every ● Some only exist in certain versions ● window.createPopup, Array.every, window.Iterator ● Rendering differences and parser bugs ● IE's conditional comments 19
  20. 20. Internet Explorer ● Parser bugs, conditional comments ● Reliable, but not precise ● ScriptEngine*Version() ● Almost unique across all combinations of client and  OS ● Brought to my attention by Jerome Athias 20
  21. 21. Opera ● window.opera.version() ● Includes minor version, e.g. “9.61” 21
  22. 22. Hybrid Approach for FF ● Existence of  document.getElementsByClassName means Firefox 3.0 ● If User Agent says IE6, go with FF 3.0 ● If UA says FF 3.0.8, it's probably not lying, so  use the more specific value 22
  23. 23. Safari ● Still in progress ● Existence of window.console ● If Firebug is installed on FF, shows up there, too ● Availability of window.onmousewheel ● Defaults to null, so have to check typeof 23
  24. 24. Fingerprinting the OS ● User Agent ● Could use something like p0f ● From the server side, that's about it 24
  25. 25. Internet Explorer ● Again, ScriptEngine*Version() ● Almost unique across all combinations of client  and OS, including service pack 25
  26. 26. Opera ● Each build has a unique opera.buildNumber() ● Gives platform, but nothing else 26
  27. 27. Firefox ● navigator.platform and friends are affected by  the User Agent string ● navigator.oscpu isn't ● “Linux i686” ● “Windows NT 6.0” 27
  28. 28. Others ● Really all we're left with is the User Agent ● That's okay, most don't lie ● And those that do are likely to be patched anyway ● Generic, works everywhere when UA is not  spoofed 28
  29. 29. Future Fingerprinting ● QuickTime ● Adobe ● Less well­known third party stuff 29
  30. 30. ActiveX ● “new ActiveXObject()” works if you have  the class name ● Otherwise, IE doesn't seem to have a generic  way to tell if an ActiveX object got created  ● document.write(“<object ...>”) ● document.createElement(“object”) 30
  31. 31. Solution ● typeof(obj.method) ● 'undefined' if the object failed to initialize ● 'unknown' or possibly a real type if it worked 31
  32. 32. Target Acquired
  33. 33. What is it Vulnerable to? ● Coarse determination server­side ● JavaScript builds fingerprint, sends it back to the  server ● Server sends sploits that match the browser and  OS, possibly version ● Fine determination client­side ● navigator.javaEnabled exists, try  mozilla_navigatorjava 33
  34. 34. Select a Missile ● Sort by reliability ● Exploits contain  their own JS tests
  35. 35. Problem
  36. 36. Solution 36
  37. 37. Obfuscation ● Randomize identifiers ● Build strings from other things ● JSON / AJAX ● Obfuscation is not crypto 37
  38. 38. Encryption ● Put a key in the URL ● Not available in the stand­alone script ● Simple XOR is enough to beat AV and NIDS ● If they figure it out, it's easy to make the crypto  stronger 38
  39. 39. Demonstrations 39
  40. 40. And we're back... ● I hope that worked ● Now how do YOU make exploits work within  this framework? 40
  41. 41. Writing Exploits ● Add autopwn_info() to top of exploit class ● :ua_name is an array of browsers this exploit  will work against ● :vuln_test is some javascript to test for the  vulnerability (unless it's ActiveX) ● Usually comes directly from the exploit anyway 41
  42. 42. Example: mozilla_navigatorjava     include Msf::Exploit::Remote::BrowserAutopwn     autopwn_info({         :ua_name    => HttpClients::FF,         :javascript => true,         :rank       => NormalRanking,#reliable memory corruption         :vuln_test  => %Q|             if (  window.navigator.javaEnabled &&  window.navigator.javaEnabled() ){                 is_vuln = true;             }             |,     }) 42
  43. 43. Example: ms06_067_keyframe     include Msf::Exploit::Remote::BrowserAutopwn     autopwn_info({         :ua_name    => HttpClients::IE,         :javascript => true,         :os_name    => OperatingSystems::WINDOWS,         :vuln_test  => 'KeyFrame',         :classid    => 'DirectAnimation.PathControl',         :rank       => NormalRanking #reliable memory corruption     }) 43
  44. 44. Example: winzip_fileview     include Msf::Exploit::Remote::BrowserAutopwn     autopwn_info({         :ua_name    => HttpClients::IE,         :javascript => true,         :os_name    => OperatingSystems::WINDOWS,         :vuln_test  => 'CreateFolderFromName',         :classid    => '{A09AE68F­B14D­43ED­B713­BA413F034904}',         :rank       => NormalRanking #reliable memory corruption     }) 44
  45. 45. Browser Autopwn Summary ● Reliable Target Acquisition ● Smart Missile Selection ● Stealthy from an AV perspective ● Easy to extend ● Detection results stored in a database 45
  46. 46. Commercial Comparison ● Mpack ● Firepack ● Neosploit ● Luckysploit 46
  47. 47. Mpack, Firepack ● Hard to acquire ● Old exploits ● Detection is only server­side ● Hard to change or update exploits ● Obfuscation + XOR 47
  48. 48. Neosploit ● Compiled ELFs run as CGI ● Unless you get the source or do some RE, you  won't really know what it does 48
  49. 49. Luckysploit ● Real crypto (RSA, RC4) ● Even harder to acquire 49
  50. 50. Browser Autopwn ● Easy to write new exploits or take out old ones ● Free (three­clause BSD license) ● Easy to get (http://metasploit.com) ● Not written in PHP  ● OS and client detection is client­side, more  reliable in presence of spoofed or borked UA 50
  51. 51. Future ● More flexible payload selection ● Stop when you get a shell ● Maybe impossible in presence of NAT/proxies ● Easier­to­use JS obfuscation ● UAProf for mobile devices ● Integration with MetaPhish 51
  52. 52. Download it ● svn co http://metasploit.com/svn/framework3/trunk  ● Submit patches to msfdev@metasploit.com 52
  53. 53. Thanks ● hdm, valsmith,  tebo, mc, cg, Dean  de Beer, pragmatk ● Everybody who  helped with testing ● Whoever created  ActiveX

×