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

An introduction to testing infrastructure

An introduction to testing infrastructure

Talk from #VelocityConf 2015 introducing testing infrastructure via simple unit tests to integrating with interactive tools, APIs and tools like serverspec, testinfra, BDD Security and more.

Gareth Rushgrove

October 28, 2015
Tweet

More Decks by Gareth Rushgrove

Other Decks in Technology

Transcript

  1. Replace a hand drawn map of your system with constant

    measurement of reality Gareth Rushgrove
  2. Gareth Rushgrove A project to catalogue sensible HTTP headers for

    ensuring security features are enabled in browsers
  3. Access Control Allow Origin Content Security Policy Cross Domain Meta

    Policy NoSniff Server Information Gareth Rushgrove - - - - -
  4. Black box testing is a method of software testing that

    examines the functionality of an application without peering into its internal structures or workings Gareth Rushgrove
  5. White box testing is a method of testing software that

    tests internal structures or workings of an application Gareth Rushgrove
  6. Discovered open port 22/tcp on 45.56.74.113 Completed Connect Scan at

    07:09, 3.31s elapsed (12 total ports) Nmap scan report for www.puppetlabs.com (45.56.74.113) Host is up (0.082s latency). rDNS record for 45.56.74.113: li924-113.members.linode.com PORT STATE SERVICE 20/tcp filtered ftp-data 21/tcp filtered ftp 22/tcp open ssh 23/tcp filtered telnet 25/tcp filtered smtp 80/tcp open http 110/tcp filtered pop3 443/tcp open https 512/tcp filtered exec 522/tcp filtered ulp 1080/tcp filtered socks 8080/tcp open http-proxy Standard nmap output requires manual analysis
  7. it 'has only a limited number of open ports' do

    expect(@open_ports.count).to eq(3) end it 'exposes a web server' do expect(@open_ports).to include('80/tcp') expect(@open_ports).to include('443/tcp') end it 'exposes an SSH server' do expect(@open_ports).to include('22/tcp') end it 'rejects email traffic' do expect(@closed_ports).to include('25/tcp') end Using a unit testing framework we can make explicit assertions
  8. www.puppetlabs.com from 192.168.1.10 has only a limited number of open

    ports (FAILED - 3) exposes a web server exposes an SSH server rejects accept email traffic (FAILED - 4) Anyone can run the tests and understand what is expected and what is currently broken
  9. (expect (every? ubuntu? (facts "operatingsystem"))) A one line test to

    check all machines are using the permitted Operating System
  10. (expect latest-on-all-clients? "openssh") A one line test to check we’re

    running the latest version of Open SSH everywhere
  11. Gareth Rushgrove Servpeek is a new tool in Go, which

    would allow for shippable binaries with assertions
  12. Gareth Rushgrove BDD Security is a cucumber-based testing tool aimed

    specifically at testing security features of systems
  13. An example test for checking for SQL injection vulnerabilities Scenario:

    The application should not contain SQL injection vulnerabilities Meta: @id scan_sql_injection @cwe-89 Given a scanner with all policies disabled And the SQL-Injection policy is enabled And the attack strength is set to High And the alert threshold is set to Low When the scanner is run And the XML report is written to the file sql_injection.xml Then no Medium or higher risk vulnerabilities should be present
  14. An example test for checking for XSS. Lots more build-in

    Scenario: The application should not contain XSS vulnerabilities Meta: @id scan_sql_injection @cwe-89 Given a scanner with all policies disabled And the Cross-Site-Scripting policy is enabled And the attack strength is set to High When the scanner is run Then no Medium or higher risk vulnerabilities should be present