Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
HTML5: Atak i obrona
HTML5: Atak i obrona
Loading in …3
×
1 of 75

I'm in your browser, pwning your stuff

3

Share

Download to read offline

Security B-Sides Polska, 2012
https://github.com/koto/xsschef/
http://blog.kotowicz.net

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

I'm in your browser, pwning your stuff

  1. 1. I’m in your browser, pwning your stuff! Atakowanie poprzez rozszerzenia Google Chrome Krzysztof Kotowicz
  2. 2. /whoami • IT security consultant @ SecuRing • Web security research (BlackHat, BruCON, Confidence, ...) • blog.kotowicz.net • @kkotowicz
  3. 3. Plan • Po co atakować (poprzez) rozszerzenia Google Chrome? • Jak to robić? • Nie da się prościej?
  4. 4. Po co?
  5. 5. http://flic.kr/p/6xQTMD
  6. 6. http://www.flickr.com/photos/hans905/4124897248/in/photostream/
  7. 7. Same origin policy • XSS - wykonanie kodu w ramach origin ofiary “><script>alert(document.cookie)</script> • CSRF - wykonanie u ofiary akcji żądaniem z origin atakującego x = new XMLHttpRequest() x.open(“POST”, “//victim.pl”) x.send(“delete_account&id=1”)
  8. 8. http://www.flickr.com/photos/dimi15/707990005/in/photostream/ Text
  9. 9. SOP bypass • //superevr.com/blog/2012/top-level- universal-xss/ • //blog.detectify.com/post/32947196572/ universal-xss-in-opera • Rzadkie, ograniczone zastosowanie • Polegają na błędach w przeglądarkach
  10. 10. http://flic.kr/p/aqEx5Y
  11. 11. http://www.flickr.com/photos/iloveblue/3302032125/in/photostream/
  12. 12. Rozszerzenia Chrome • Aplikacje HTML5 • html, javascript, css • Spakowane do pliku .crx • podpisany zip • Instalacja poprzez Chrome Web Store • lub manualnie
  13. 13. Rozszerzenia Chrome • Uprawnienia określone w pliku manifest.json • Dostęp do wielu ważnych API • chrome.tabs • chrome.bookmarks • chrome.history • chrome.cookies • NPAPI plugins
  14. 14. Rozszerzenia Chrome • Rozszerzenia to aplikacje HTML • Te same klasy podatności • w tym XSS
  15. 15. Rozszerzenia Chrome • XSS w rozszerzeniu może oznaczać • UXSS • dostęp do historii URL • dostęp r/w do cookies • dostęp do plików • wykonanie dowolnego kodu
  16. 16. Jak?
  17. 17. DOM
  18. 18. DOM js.js
  19. 19. DOM js.js content script.js
  20. 20. content script.js (), yId tB (), en ent em m L tEl Ele M ge ate rHT cre inne DOM js.js
  21. 21. view.html content script.js (), yId tB (), en ent em m L tEl Ele M ge ate rHT cre inne DOM js.js
  22. 22. background.js view.html content script.js (), yId tB (), en ent em m L tEl Ele M ge ate rHT cre inne DOM js.js
  23. 23. DOM view.html ge ate rHT tEl Ele M cre inne em m L background.js js.js en ent tB (), yId (), content script.js API cookies, history, tabs, plugins, ...
  24. 24. DOM view.html ge ate rHT tEl Ele M cre inne em m L background.js js.js en ent tB (), yId (), chrome.* content script.js API cookies, history, tabs, plugins, ...
  25. 25. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  26. 26. DOM view.html js.js background.js content script.js API
  27. 27. DOM view.html js.js background.js content script.js API
  28. 28. DOM view.html js.js background.js content script.js API
  29. 29. DOM view.html js.js background.js content script.js API
  30. 30. chrome.tabs.executeScript DOM view.html js.js background.js content script.js API
  31. 31. Podatności
  32. 32. XSS w content script • content script otrzymuje dane • z view • z DOM • umieszcza je bez escape’owania w DOM
  33. 33. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  34. 34. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  35. 35. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  36. 36. XSS w content script • Skutki: • dostęp do DOM • nieograniczony XHR DEMO - zzzap-it chrome.tabs.executeScript(null, { code: "(" + funcLaunchZzzapIt.toString() + ")('" + tab.url.replace("'","'") + "', '" + tab.title.replace("'","'") + "', 'open')" });
  37. 37. XSS w view • content-script bierze dane z DOM strony • wysyła je do view • view wyświetla je bez escape’owania
  38. 38. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  39. 39. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  40. 40. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API cookies, history, tabs, plugins, ...
  41. 41. XSS w view • Skutki • możliwość persystencji w tle • dostęp do chrome.* API (limitowany uprawnieniami) DEMO - Slick RSS: feed finder <link rel="alternate" type="application/rss+xml" title="hello <img src=x onerror='payload'>" href="/rss.rss">
  42. 42. Podatności w NPAPI • Zawartość ze strony trafia do view • View przekazuje ją do pluginu NPAPI • Wywołanie podatności w pluginie
  43. 43. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API NPAPI
  44. 44. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API NPAPI
  45. 45. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API NPAPI
  46. 46. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API NPAPI
  47. 47. Podatności w NPAPI • Przykład: cr-gpg 0.7.8 string cmd = "c:windowssystem32cmd.exe /c "; cmd.append(gpgFileLocation); cmd.append("-e --armor"); cmd.append(" --trust-model=always"); for (unsigned int i = 0; i < peopleToSendTo.size(); i++) { cmd.append(" -r"); cmd.append(peopleToSendTo.at(i)); }
  48. 48. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  49. 49. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  50. 50. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  51. 51. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  52. 52. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  53. 53. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  54. 54. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  55. 55. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  56. 56. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  57. 57. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  58. 58. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  59. 59. DOM view.html ge ate rHT tEl Ele M cre inne em m L n. background.js js.js en ent tB (), n sio yId te est (), e .ex qu om dRe c hr sen chrome.* content script.js API gpg.exe cmd.exe NPAPI
  60. 60. Prościej?
  61. 61. • alert(1) - i co dalej? • Potrzebne narzędzie do automatyzacji • Jak BeEF, ale do eksploitacji rozszerzeń Chrome http://www.flickr.com/photos/josephwuorigami/3165180003/
  62. 62. Eksploitacja • Monitorowanie tabów • Wykonanie JS na każdym tabie • Wyciąganie HTML • Odczyt/zapis cookies • Manipulacja historią • Ustawienia proxy
  63. 63. Uruchamianie serwera $ php -v PHP 5.3.12 (cli) (built: Jun 7 2012 22:49:42) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans $ php server.php 2>command.log XSS ChEF server by Krzysztof Kotowicz - kkotowicz at gmail dot com Usage: php server.php [port=8080] [host=127.0.0.1] Communication is logged to stderr, use php server.php [port] 2>log.txt 2012-07-22 12:40:06 [info] Server created 2012-07-22 12:40:06 ChEF server is listening on 127.0.0.1:8080 2012-07-22 12:40:06 [info] [client 127.0.0.1:60431] Connected 2012-07-22 12:40:06 [info] [client 127.0.0.1:60431] Performing handshake 2012-07-22 12:40:06 [info] [client 127.0.0.1:60431] Handshake sent 2012-07-22 12:40:06 New hook c3590977550 from 127.0.0.1 ...
  64. 64. Hook code
  65. 65. Konsola
  66. 66. Wybór sesji
  67. 67. Payloady
  68. 68. Screenshoty
  69. 69. Pytania? • https://github.com/koto/xsschef • krzysztof@kotowicz.net • @kkotowicz

×