Upgrade to Pro — share decks privately, control downloads, hide ads and more …

No todo es DNS: enumeración de software en tiem...

alertot
October 26, 2017

No todo es DNS: enumeración de software en tiempos modernos

alertot

October 26, 2017
Tweet

More Decks by alertot

Other Decks in Programming

Transcript

  1. Whois • CEO alertot (SUP18) • Founder spect.cl ★ Web

    Security Workshop, UTFSM (2013) ★ Pinguinux’s member
  2. Agenda 1. Enumeration techniques 2. Software’s enumeration state of the

    art 3. detectem, the project 4. Long-term challenges
  3. Detectem - Goals • Reliable version extraction • Avoid false

    positives as much as possible • Work on sites with intensive use of Javascript • Have Test Driven Development as rule
  4. Detectem - Features • Passive detection with a browser (Splash)

    • Works on the list of requests/responses (HAR) • Javascript support through Splash • Based on a plugin system • Command-line executable & Web service
  5. Detectem - Plugin system • Idea taken from WhatWeb •

    Provide enough flexibility for corner cases • Plugins contain metadata • Plugins contain matchers, indicators and hints
  6. Detectem - Matchers • Unit in charge of version extraction

    • Could be simple regular expressions or functions • Adapt to the context to avoid false positives • Main strongness in the framework
  7. How it looks - URL matcher class JqueryPlugin(Plugin): name =

    'jquery' homepage = 'https://jquery.com/' matchers = [ {'url': ‘/jquery-(?P<version>[0-9\.]+)\.js'}, ]
  8. How it looks - Body matcher class JqueryPlugin(Plugin): name =

    'jquery' homepage = 'https://jquery.com/' matchers = [ {'body': '/\*\! jQuery v(?P<version>[0-9\.]+)'}, ]
  9. How it looks - Header matcher class Apache(Plugin): name =

    'apache' homepage = 'http://httpd.apache.org/' matchers = [{ 'header': ( 'Server', 'Apache/(?P<version>[0-9\.]+)' ) }]
  10. How it looks - XPath matcher class GhostPlugin(Plugin): name =

    'ghost' homepage = 'https://www.ghost.org/' matchers = [{ ‘xpath': ( meta_generator('Ghost'), '(?P<version>[0-9\.]+)' ) }]
  11. How it works - DOM matcher > d3 <- {version:

    "3.5.17", ascending: ƒ, ...} > d3.version <- "3.5.17"
  12. How it looks - DOM matcher class D3JSPlugin(Plugin): name =

    'd3.js' homepage = 'https://d3js.org' js_matchers = [{ 'check': 'window.d3', 'version': 'window.d3.version' }]
  13. detectem - Indicator look class NewsShowProGk5Plugin(Plugin): name = 'news-show-pro-gk5' homepage

    = 'https://gavick.com/news-show-pro' indicators = [ {'body': '\* @package News Show Pro GK5\n'}, ]
  14. detectem - Hint mission A software is hinted in presence

    of a software directly related to it.
  15. Challenges - Web is Wild • Multiple versions in the

    same page • Version pollution • There’s no standard software
  16. Long-term challenges • Increase number of supported softwares • Improvement

    from NLP/ML/AI • Add concurrency • Improve performance at scale
  17. Challenges - Some news • Migrate Wappalyzer DB • Add

    bundle splitting feature • Add DOM hash matcher • Tests with Chrome headless