SlideShare a Scribd company logo
The OWASP Foundation
http://www.owasp.org
Copyright © The OWASP Foundation
Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
Workshop:
Automating
OWASP ZAP
Simon Bennetts
OWASP ZAP Project Lead
Mozilla Cloud Security Team
psiinon@gmail.com
DevSecCon
London 2016
The Workshop Plan
• Who is this for?
• What are we trying to solve?
• What can you get out of this?
• Introduction to ZAP
• Where to start
• Where to go from there
2
Who is this for?
• Developers
• QA
• Operations
• Security
• Consultants
• (Managers)
• Whoever is involved in automation ;)
3
What are we trying to solve?
• Find security issues as early as possible
• Integration into the devops pipeline
• Finding all of the possible vulnerabilities
• Putting pentesters out of a job :P
4
What are we not trying to solve?
What can you get out of this?
• A way to quickly evaluate your apps
• Options for more thorough scanning
• An introduction to the ZAP API
• A chance to try things out with me
5
6
ZAP Introduction
• An easy to use webapp pentest tool
• Completely free and open source
• OWASP Flagship project
• Ideal for beginners
• But also used by professionals
• Ideal for devs, esp. for automated security tests
• Included in all major security distributions
• ToolsWatch.org Top Security Tool of 2015
• Not a silver bullet!
7
ZAP Features
• Swing based UI for desktop mode
• Comprehensive REST(ish) API for daemon mode
• Plugin architecture (add-ons)
• Online ‘marketplace’ (all free:)
• Release, beta and alpha quality add-ons
• Traditional and ajax spiders
• Passive and active scanning
• Highly configurable, eg scan policies
• Highly scriptable
Some ZAP use cases
• Point and shoot – the Quick Start tab
• Proxying via ZAP, and then scanning
• Manual pentesting
• Automated security regression tests
• Debugging
• Part of a larger security program
8
ZAP Install Options
• Windows .exe
• Linux .tar.gz
• Mac OS .dmg
• Docker Images
• owasp/zap2docker-stable
• owasp/zap2docker-weekly
• Distros like Kali
9
Where to start?
• The Baseline scan
• Completely safe
• Runs quickly (1-2 minutes?)
• Can be easily integrated into CI/CD
• Easy to get started – just required the target:
docker pull owasp/zap2docker-weekly
docker run -t owasp/zap2docker-weekly zap-baseline.py
-t https://www.example.com
• Very configurable if needed
10
Baseline scan
• Uses docker (the only dependency)
• Time limited spider of target (default 1 min)
• Just passive scanning
• By default warns on all issues
• Can change to ignore, info or fail
• Can include any ZAP cmdline option
• Can ignore any url regex for any rule
11
Baseline scan - issues
• All release and beta passive scan rules, eg
• Missing / incorrect security headers
• Cookie problems
• Information / error disclosure
• Missing CSRF tokens
•...
• Can optionally include alpha pscan rules
12
13
Baseline
Demo
Baseline scan – usage
14
Usage: zap-baseline.py -t <target> [options]
-t target target URL including the protocol, eg
Options:
-c config_file config file to use to INFO, IGNORE or
-u config_url URL of config file to use to INFO, IG
-g gen_file generate default config file (all rul
-m mins the number of minutes to spider for (
-r report_html file to write the full ZAP HTML repor
-w report_md file to write the full ZAP Wiki (Mark
-x report_xml file to write the full ZAP XML report
-a include the alpha passive scan rules
-d show debug messages
-i default rules not in the config file
-j use the Ajax spider in addition to th
-l level minimum level to show: PASS, IGNORE,
-s short output format - dont show PASSe
-z zap_options ZAP command line options e.g. -z "-co
Baseline scan – output
15
./zap-baseline.py -t https://www.example.com
3 URLs
PASS: Cookie No HttpOnly Flag [10010]
PASS: Cookie Without Secure Flag [10011]
PASS: Password Autocomplete in Browser [10012]
<snip>
WARN: Incomplete or No Cache-control and Pragma HTTP Header
https://www.example.com
WARN: Web Browser XSS Protection Not Enabled [10016] x 3
https://www.example.com
https://www.example.com/robots.txt
https://www.example.com/sitemap.xml
WARN: X-Frame-Options Header Not Set [10020] x 1
https://www.example.com
WARN: X-Content-Type-Options Header Missing [10021] x 1
https://www.example.com
FAIL: 0 WARN: 4 INFO: 0 IGNORE: 0 PASS: 22
Baseline scan – in CircleCI
• https://github.com/Securing-
DevOps/invoicer/blob/master/circle.yml#L39-L44
16
# pull down the Zap baseline scanner
- docker pull owasp/zap2docker-weekly
# Run zap against the invoicer
- docker run ${DOCKER_REPO}/${CIRCLE_PROJECT_REPONAME} &
- docker run -t owasp/zap2docker-weekly zap-baseline.py
-t http://172.17.0.2:8080/
Baseline scan – conf file
• Use -g option to generate, -c or -u to use
17
# zap-baseline rule configuration file
# Change WARN to IGNORE to ignore rule or FAIL to fail if
# Only the rule identifiers are used - the names are just
# You can add your own messages to each rule by appending
10010 WARN(Cookie No HttpOnly Flag)
10011 WARN(Cookie Without Secure Flag)
10012 WARN(Password Autocomplete in Browser)
10015 WARN(Incomplete or No Cache-control and Pragma HTTP
10016 WARN(Web Browser XSS Protection Not Enabled)
10017 WARN(Cross-Domain JavaScript Source File Inclusion)
10019 WARN(Content-Type Header Missing)
10020 WARN(X-Frame-Options Header Scanner)
10021 WARN(X-Content-Type-Options Header Missing)
10023 WARN(Information Disclosure - Debug Error Messages)
10024 WARN(Information Disclosure - Sensitive Information
Where next?
• Mass Baseline scan
• Provides a simple dashboard
• Shows the detailed results
• Shows the per service history
18
Mass Baseline scan
• Part of the community-scripts repo:
zaproxy/community-scripts/api/mass-baseline
19
Full Scans
• Packaged options:
• Cmdline quick scan
• Jenkins plugin
• Sdlc-integration scripts
• Daemon mode + API
• (ZAP as a Service – in development)
20
Cmdline Quick Scan
21
./zap.sh -cmd -quickurl 
http://example.com/ -quickprogress
• Spidering
• Active scanning
• [====================] 100%
• Attack complete
• <?xml version="1.0"?><OWASPZAPReport
version="2.5.0" generated="Tue, 4 Oct
2016 09:31:53">
• <site name="http://example.com" ...
Jenkins plugin
• Maintained by 3rd
party
• Requires full ZAP install
• Supports authentication
• Supports scan policies
• Not as flexible as driving the API
22
Sdlc integration scripts
• Part of the community-scripts repo:
zaproxy/community-scripts/api/sdlc-integration
• Spidering, passive and active scanning
• Supports authentication
• Supports JIRA integration
• Linux only, requires some file editing
23
Useful cmdline options
• Turn off db recovery (speeds things up)
-config database.recoverylog=false
• Update all add-ons
-addonupdate
• Install a non default add-on
-addoninstall addonname
• Setting the API key
-config api.key=j8WdOEq8dhwWE24VGDsreP
• Disable API key in a safe environment
-config api.disablekey=true
24
Using the ZAP API
• Intro to the API
• Exploring
• Scanning
• Reporting
• Authenticating
• Tuning
25
Intro to the API
• RESTish – ok, only uses GET requests
http(s)://zap/<format>/<component>/
<operation>/<op name>[/?<params>]
• Maps closely to the UI / code
• Theres a v basic web UI for it
• And clients in various langs:
Java, Python, Node JS, .Net, PHP, Go …
• Clients are generated from the code
26
API Pro Tip
1. Experiment with the Desktop UI
2. Export configs from the UI (contexts, scan
policies..)
3. Then reproduce using the API UI
4. Finally convert to a script
27
28
API
Demo
Intro – Python API
• Install from pypi:
pip install python-owasp-zap-v2.4
• In your script:
from zapv2 import ZAPv2
zap = ZAPv2()
zap = ZAPv2(proxies={
'http': 'http://localhost:8080',
'https': 'http://localhost:8090'})
29
h
from zapv2 import ZAPv2
zap = ZAPv2()
zap = ZAPv2(proxies={
'http': 'http://localhost:8080',
'https': 'http://localhost:8080'})
• zap.urlopen(target)
• pip install python-owasp-zap-v2.4
Exploring
• Proxy Regression / Unit tests
• Traditional Spider (crawler)
• Ajax Spider (browsers)
• Spider SOAP definition (via alpha add-on)
• Import ModSecurity2 logs (via alpha add-on)
30
31
Spider
API
Demo
Exploring – Trad Spider
32
h
zap.spider.scan(target)
• time.sleep(5)
• while int(zap.spider.status()) < 100:
• print ('Spider progress %: ' +
zap.spider.status())
• time.sleep(5)
• print ('Spider completed')
Exploring – Ajax Spider
33
h
zap.ajaxSpider.scan(target)
• time.sleep(5)
• while zap.ajaxSpider == 'running':
• print ('Ajax Spider # results: ' +
zap.ajaxSpider.number_of_results())
• time.sleep(5)
• print ('Ajax Spider completed')
Scanning – Passive Scan
34
while int(zap.pscan.records_to_scan())
> 0:
• print ('Pscan records : ' +
zap.pscan.records_to_scan())
• time.sleep(5)
• print ('Pscan completed')
h
• Passive scanning happens automatically
when proxying
• To tell when its finished:
Scanning – Active Scan
35
h
zap.ascan.scan(target)
• time.sleep(5)
• while int(zap.ascan.status()) < 100:
• print ('Ascan progress %: ' +
zap.ascan.status())
• time.sleep(5)
• print ('Ascan completed')
Reporting – HTML + XML
36
h
# HTML Report
• with open ('report.html', 'w') as f:
f.write(zap.core.htmlreport())
# XML Report
• with open ('report.xml', 'w') as f:
f.write(zap.core.xmlreport())
Reporting – all alert data
37
h
# Use paging for lots of alerts
• offset = 0; page = 100
• alerts = zap.core.alerts('', offset, page)
• while len(alerts) > 0:
• for alert in alerts:
• # Do whatever you want with alert
• offset += page
• alerts = zap.core.alerts('', offset,
page)
And dont forget...
38
h
# Your work here is done...
• zap.core.shutdown()
Any questions about the
API?
39
h
Authenticating
• Authentication can be hard :(
• Simple form based auth should be ok
• Authentication scripts should be able to
handle anything
• But if you have complex SSO or equiv you
may want a simpler option in your test env
• Pro Top: use the UI to set authentication up!
40
41
Auth
API
Demo
Tuning - speed
• Spider time limits
• Data driven content
• Technology
• Active scan
• Scan rules
• Input vectors
• Attack strength
42
Tuning - feedback
• Active scan stats
• Response stats
• Authentication stats (alpha add-on)
• Statsd support
43
Tuning - accuracy
• Attack thresholds
• Rule configuration (post 2.5.0)
– Forms that dont need CSRF tokens
– Increase timing attacks from 5 seconds
44
Need help?
• Getting Started Guide
• Desktop Help (also online)
• Wiki – FAQ, Docs, Videos …
• ZAP User Group
• irc.mozilla.org #websectools
45
Workshop Summary
• Use the baseline scan for a quick security
overview
• Use the mass baseline to create a dashboard
• Use full ZAP scans for more depth
• Configure ZAP to authenticate for even better
results
• If you need help, just ask!
46
Now go forth and
automate ZAP :)
http://www.owasp.org/index.php/ZAP

More Related Content

What's hot (20)

PDF
N Different Strategies to Automate OWASP ZAP - OWASP APPSec BUCHAREST - Oct 1...
gmaran23
 
PPT
Automating security test using Selenium and OWASP ZAP - Practical DevSecOps
Mohammed A. Imran
 
PDF
2021 ZAP Automation in CI/CD
Simon Bennetts
 
ODP
OWASP 2014 AppSec EU ZAP Advanced Features
Simon Bennetts
 
PDF
2020 ADDO Spring Break OWASP ZAP Automation
Simon Bennetts
 
ODP
2014 ZAP Workshop 2: Contexts and Fuzzing
Simon Bennetts
 
ODP
JavaOne 2014 Security Testing for Developers using OWASP ZAP
Simon Bennetts
 
PDF
DAST в CI/CD, Ольга Свиридова
Mail.ru Group
 
ODP
OWASP 2013 APPSEC USA Talk - OWASP ZAP
Simon Bennetts
 
ODP
2017 DevSecCon ZAP Scripting Workshop
Simon Bennetts
 
PPTX
Syntribos API Security Test Automation
Matthew Valdes
 
PDF
N Different Strategies to Automate OWASP ZAP - Cybersecurity WithTheBest - Oc...
gmaran23
 
PDF
Java-Jersey 到 Python-Flask 服務不中斷重構之旅
Max Lai
 
ODP
OWASP Zed Attack Proxy Demonstration - OWASP Bangalore Nov 22 2014
gmaran23
 
ODP
2014 ZAP Workshop 1: Getting Started
Simon Bennetts
 
ODP
BSides Manchester 2014 ZAP Advanced Features
Simon Bennetts
 
PDF
Using the Zed Attack Proxy as a Web App testing tool
David Sweigert
 
PDF
Security Checkpoints in Agile SDLC
Rahul Raghavan
 
ODP
OWASP 2013 APPSEC USA ZAP Hackathon
Simon Bennetts
 
ODP
OWASP 2012 AppSec Dublin ZAP Intro
Simon Bennetts
 
N Different Strategies to Automate OWASP ZAP - OWASP APPSec BUCHAREST - Oct 1...
gmaran23
 
Automating security test using Selenium and OWASP ZAP - Practical DevSecOps
Mohammed A. Imran
 
2021 ZAP Automation in CI/CD
Simon Bennetts
 
OWASP 2014 AppSec EU ZAP Advanced Features
Simon Bennetts
 
2020 ADDO Spring Break OWASP ZAP Automation
Simon Bennetts
 
2014 ZAP Workshop 2: Contexts and Fuzzing
Simon Bennetts
 
JavaOne 2014 Security Testing for Developers using OWASP ZAP
Simon Bennetts
 
DAST в CI/CD, Ольга Свиридова
Mail.ru Group
 
OWASP 2013 APPSEC USA Talk - OWASP ZAP
Simon Bennetts
 
2017 DevSecCon ZAP Scripting Workshop
Simon Bennetts
 
Syntribos API Security Test Automation
Matthew Valdes
 
N Different Strategies to Automate OWASP ZAP - Cybersecurity WithTheBest - Oc...
gmaran23
 
Java-Jersey 到 Python-Flask 服務不中斷重構之旅
Max Lai
 
OWASP Zed Attack Proxy Demonstration - OWASP Bangalore Nov 22 2014
gmaran23
 
2014 ZAP Workshop 1: Getting Started
Simon Bennetts
 
BSides Manchester 2014 ZAP Advanced Features
Simon Bennetts
 
Using the Zed Attack Proxy as a Web App testing tool
David Sweigert
 
Security Checkpoints in Agile SDLC
Rahul Raghavan
 
OWASP 2013 APPSEC USA ZAP Hackathon
Simon Bennetts
 
OWASP 2012 AppSec Dublin ZAP Intro
Simon Bennetts
 

Viewers also liked (20)

PPTX
Alfredo Reino - Monitoring aws and azure
DevSecCon
 
PDF
DevSecCon Asia 2017 Pishu Mahtani: Adversarial Modelling
DevSecCon
 
PDF
Renato Rodrigues - Security in the wild
DevSecCon
 
PPTX
Colin Domoney -
DevSecCon
 
PPTX
Matt carroll - "Security patching system packages is fun" said no-one ever
DevSecCon
 
PDF
DevSecCon Asia 2017 Ante Gulam: Integrating crowdsourced security into agile ...
DevSecCon
 
PDF
Detection, Response and the Azazel Rootkit
Threat Stack
 
PPTX
Stephen Sadowski - Securely automating infrastructure in the cloud
DevSecCon
 
PPTX
Aws vs. azure key parameters for decision making
Aspire Systems
 
PPTX
A tale of two clouds
Andrew Siemer
 
PDF
Henrique Dantas - API fuzzing using Swagger
DevSecCon
 
PDF
URBNext Intern
Shuwei Huang
 
PPTX
10秒でわかる!介護施設で働く看護師のメリット (1)
看護師 イキイキ
 
PDF
DevSecCon Asia 2017 Sergiu Bodiu: From resilient to antifragile
DevSecCon
 
PDF
鞏固天龍國
Shuwei Huang
 
PDF
We never have social design
Shuwei Huang
 
PPTX
SQL Server on Google Cloud Platform
Lynn Langit
 
PDF
Cloud Big Data Architectures
Lynn Langit
 
PDF
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
DevSecCon
 
Alfredo Reino - Monitoring aws and azure
DevSecCon
 
DevSecCon Asia 2017 Pishu Mahtani: Adversarial Modelling
DevSecCon
 
Renato Rodrigues - Security in the wild
DevSecCon
 
Colin Domoney -
DevSecCon
 
Matt carroll - "Security patching system packages is fun" said no-one ever
DevSecCon
 
DevSecCon Asia 2017 Ante Gulam: Integrating crowdsourced security into agile ...
DevSecCon
 
Detection, Response and the Azazel Rootkit
Threat Stack
 
Stephen Sadowski - Securely automating infrastructure in the cloud
DevSecCon
 
Aws vs. azure key parameters for decision making
Aspire Systems
 
A tale of two clouds
Andrew Siemer
 
Henrique Dantas - API fuzzing using Swagger
DevSecCon
 
URBNext Intern
Shuwei Huang
 
10秒でわかる!介護施設で働く看護師のメリット (1)
看護師 イキイキ
 
DevSecCon Asia 2017 Sergiu Bodiu: From resilient to antifragile
DevSecCon
 
鞏固天龍國
Shuwei Huang
 
We never have social design
Shuwei Huang
 
SQL Server on Google Cloud Platform
Lynn Langit
 
Cloud Big Data Architectures
Lynn Langit
 
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
DevSecCon
 
Ad

Similar to Simon Bennetts - Automating ZAP (20)

PDF
we45 DEFCON Workshop - Building AppSec Automation with Python
Abhay Bhargav
 
PDF
Security DevOps - Staying secure in agile projects // OWASP AppSecEU 2015 - A...
Christian Schneider
 
PPTX
DC612 Day - Hands on Penetration Testing 101
dc612
 
PPTX
OWASP ZAP Workshop for QA Testers
Javan Rasokat
 
PDF
DAST in CI/CD pipelines using Selenium & OWASP ZAP
srini0x00
 
PPTX
Threat hunting on the wire
InfoSec Addicts
 
ODP
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
gmaran23
 
ODP
OWASP 2013 EU Tour Amsterdam ZAP Intro
Simon Bennetts
 
PPTX
The basics of hacking and penetration testing 이제 시작이야 해킹과 침투 테스트 kenneth.s.kwon
Kenneth Kwon
 
PDF
Large-scaled Deploy Over 100 Servers in 3 Minutes
Hiroshi SHIBATA
 
PDF
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Christian Schneider
 
PPTX
introduction to node.js
orkaplan
 
PDF
Security DevOps: Wie Sie in agilen Projekten trotzdem sicher bleiben // JAX 2015
Christian Schneider
 
PPTX
Fastlane
Warren Lin
 
PDF
Sensu and Sensibility - Puppetconf 2014
Tomas Doran
 
PPTX
Nodejs Security
Jason Ross
 
PDF
Racing The Web - Hackfest 2016
Aaron Hnatiw
 
PDF
Boris Stoyanov - Troubleshooting the Virtual Router - Run and Get Diagnostics
ShapeBlue
 
PPT
Logstash
琛琳 饶
 
PDF
Using Nagios to monitor your WO systems
WO Community
 
we45 DEFCON Workshop - Building AppSec Automation with Python
Abhay Bhargav
 
Security DevOps - Staying secure in agile projects // OWASP AppSecEU 2015 - A...
Christian Schneider
 
DC612 Day - Hands on Penetration Testing 101
dc612
 
OWASP ZAP Workshop for QA Testers
Javan Rasokat
 
DAST in CI/CD pipelines using Selenium & OWASP ZAP
srini0x00
 
Threat hunting on the wire
InfoSec Addicts
 
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
gmaran23
 
OWASP 2013 EU Tour Amsterdam ZAP Intro
Simon Bennetts
 
The basics of hacking and penetration testing 이제 시작이야 해킹과 침투 테스트 kenneth.s.kwon
Kenneth Kwon
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Hiroshi SHIBATA
 
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Christian Schneider
 
introduction to node.js
orkaplan
 
Security DevOps: Wie Sie in agilen Projekten trotzdem sicher bleiben // JAX 2015
Christian Schneider
 
Fastlane
Warren Lin
 
Sensu and Sensibility - Puppetconf 2014
Tomas Doran
 
Nodejs Security
Jason Ross
 
Racing The Web - Hackfest 2016
Aaron Hnatiw
 
Boris Stoyanov - Troubleshooting the Virtual Router - Run and Get Diagnostics
ShapeBlue
 
Logstash
琛琳 饶
 
Using Nagios to monitor your WO systems
WO Community
 
Ad

More from DevSecCon (20)

PDF
DevSecCon London 2019: Workshop: Cloud Agnostic Security Testing with Scout S...
DevSecCon
 
PDF
DevSecCon London 2019: Are Open Source Developers Security’s New Front Line?
DevSecCon
 
PDF
DevSecCon London 2019: How to Secure OpenShift Environments and What Happens ...
DevSecCon
 
PDF
DevSecCon London 2019: A Kernel of Truth: Intrusion Detection and Attestation...
DevSecCon
 
PPTX
DevSecCon Seattle 2019: Containerizing IT Security Knowledge
DevSecCon
 
PPTX
DevSecCon Seattle 2019: Decentralized Authorization - Implementing Fine Grain...
DevSecCon
 
PPTX
DevSecCon Seattle 2019: Liquid Software as the real solution for the Sec in D...
DevSecCon
 
PPTX
DevSecCon Seattle 2019: Fully Automated production deployments with HIPAA/HIT...
DevSecCon
 
PDF
DevSecCon Singapore 2019: Four years of reflection: How (not) to secure Web A...
DevSecCon
 
PPTX
DevSecCon Singapore 2019: crypto jacking: An evolving threat for cloud contai...
DevSecCon
 
PDF
DevSecCon Singapore 2019: Can "dev", "sec" and "ops" really coexist in the wi...
DevSecCon
 
PDF
DevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon
 
PDF
DevSecCon Singapore 2019: Embracing Security - A changing DevOps landscape
DevSecCon
 
PDF
DevSecCon Singapore 2019: Web Services aren’t as secure as we think
DevSecCon
 
PDF
DevSecCon Singapore 2019: An attacker's view of Serverless and GraphQL apps S...
DevSecCon
 
PDF
DevSecCon Singapore 2019: The journey of digital transformation through DevSe...
DevSecCon
 
PDF
DevSecCon Singapore 2019: Preventative Security for Kubernetes
DevSecCon
 
PPTX
DevSecCon London 2018: Is your supply chain your achille's heel
DevSecCon
 
PPTX
DevSecCon London 2018: Get rid of these TLS certificates
DevSecCon
 
PDF
DevSecCon London 2018: Open DevSecOps
DevSecCon
 
DevSecCon London 2019: Workshop: Cloud Agnostic Security Testing with Scout S...
DevSecCon
 
DevSecCon London 2019: Are Open Source Developers Security’s New Front Line?
DevSecCon
 
DevSecCon London 2019: How to Secure OpenShift Environments and What Happens ...
DevSecCon
 
DevSecCon London 2019: A Kernel of Truth: Intrusion Detection and Attestation...
DevSecCon
 
DevSecCon Seattle 2019: Containerizing IT Security Knowledge
DevSecCon
 
DevSecCon Seattle 2019: Decentralized Authorization - Implementing Fine Grain...
DevSecCon
 
DevSecCon Seattle 2019: Liquid Software as the real solution for the Sec in D...
DevSecCon
 
DevSecCon Seattle 2019: Fully Automated production deployments with HIPAA/HIT...
DevSecCon
 
DevSecCon Singapore 2019: Four years of reflection: How (not) to secure Web A...
DevSecCon
 
DevSecCon Singapore 2019: crypto jacking: An evolving threat for cloud contai...
DevSecCon
 
DevSecCon Singapore 2019: Can "dev", "sec" and "ops" really coexist in the wi...
DevSecCon
 
DevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon
 
DevSecCon Singapore 2019: Embracing Security - A changing DevOps landscape
DevSecCon
 
DevSecCon Singapore 2019: Web Services aren’t as secure as we think
DevSecCon
 
DevSecCon Singapore 2019: An attacker's view of Serverless and GraphQL apps S...
DevSecCon
 
DevSecCon Singapore 2019: The journey of digital transformation through DevSe...
DevSecCon
 
DevSecCon Singapore 2019: Preventative Security for Kubernetes
DevSecCon
 
DevSecCon London 2018: Is your supply chain your achille's heel
DevSecCon
 
DevSecCon London 2018: Get rid of these TLS certificates
DevSecCon
 
DevSecCon London 2018: Open DevSecOps
DevSecCon
 

Recently uploaded (20)

PPTX
A Mother's Love - Helen Steiner Rice.pptx
AlbertoTierra
 
PPTX
Speech Act, types of Speech Act in Pragmatics
gracehananatalias
 
PDF
Cloud Computing Service Availability.pdf
chakrirocky1
 
PPTX
Sample pitch deck: know what to keep in your pitch deck (for competitions only)
Ujjwaal G
 
PPTX
AI presentation for everyone in every fields
dodinhkhai1
 
PPT
Wireless Communications Course lecture1.ppt
abdullahyaqot2015
 
PDF
Generalization predition MOOCs - Conference presentation - eMOOCs 2025
pmmorenom01
 
PDF
From 0 to Gemini: a Workshop created by GDG Firenze
gdgflorence
 
PPTX
2025-07-13 Abraham 07 (shared slides).pptx
Dale Wells
 
PPTX
A brief History of counseling in Social Work.pptx
Josaya Injesi
 
PPTX
some leadership theories MBA management.pptx
rkseo19
 
PPTX
Blended Family Future, the Mayflower and You
UCG NWA
 
PDF
CHALLENGIES FACING THEOLOGICAL EDUCATION IN NIGERIA: STRATEGIES FOR IMPROVEMENT
PREVAILERS THEOLOGICAL SCHOOL FCT ABUJA
 
PDF
Leveraging the Power of Jira Dashboard.pdf
siddharthshukla742740
 
PPTX
BARRIERS TO EFFECTIVE COMMUNICATION.pptx
shraddham25
 
PDF
Mining RACE Newsletter 10 - first half of 2025
Mining RACE
 
PPTX
Food_and_Drink_Bahasa_Inggris_Kelas_5.pptx
debbystevani36
 
PDF
FINAL ZAKROS - UNESCO SITE CANDICACY - PRESENTATION - September 2024
StavrosKefalas1
 
PPTX
Presentationexpressions You are student leader and have just come from a stud...
BENSTARBEATZ
 
PDF
Medical Technology Corporation: Supply Chain Strategy
daretruong
 
A Mother's Love - Helen Steiner Rice.pptx
AlbertoTierra
 
Speech Act, types of Speech Act in Pragmatics
gracehananatalias
 
Cloud Computing Service Availability.pdf
chakrirocky1
 
Sample pitch deck: know what to keep in your pitch deck (for competitions only)
Ujjwaal G
 
AI presentation for everyone in every fields
dodinhkhai1
 
Wireless Communications Course lecture1.ppt
abdullahyaqot2015
 
Generalization predition MOOCs - Conference presentation - eMOOCs 2025
pmmorenom01
 
From 0 to Gemini: a Workshop created by GDG Firenze
gdgflorence
 
2025-07-13 Abraham 07 (shared slides).pptx
Dale Wells
 
A brief History of counseling in Social Work.pptx
Josaya Injesi
 
some leadership theories MBA management.pptx
rkseo19
 
Blended Family Future, the Mayflower and You
UCG NWA
 
CHALLENGIES FACING THEOLOGICAL EDUCATION IN NIGERIA: STRATEGIES FOR IMPROVEMENT
PREVAILERS THEOLOGICAL SCHOOL FCT ABUJA
 
Leveraging the Power of Jira Dashboard.pdf
siddharthshukla742740
 
BARRIERS TO EFFECTIVE COMMUNICATION.pptx
shraddham25
 
Mining RACE Newsletter 10 - first half of 2025
Mining RACE
 
Food_and_Drink_Bahasa_Inggris_Kelas_5.pptx
debbystevani36
 
FINAL ZAKROS - UNESCO SITE CANDICACY - PRESENTATION - September 2024
StavrosKefalas1
 
Presentationexpressions You are student leader and have just come from a stud...
BENSTARBEATZ
 
Medical Technology Corporation: Supply Chain Strategy
daretruong
 

Simon Bennetts - Automating ZAP

  • 1. The OWASP Foundation http://www.owasp.org Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. Workshop: Automating OWASP ZAP Simon Bennetts OWASP ZAP Project Lead Mozilla Cloud Security Team [email protected] DevSecCon London 2016
  • 2. The Workshop Plan • Who is this for? • What are we trying to solve? • What can you get out of this? • Introduction to ZAP • Where to start • Where to go from there 2
  • 3. Who is this for? • Developers • QA • Operations • Security • Consultants • (Managers) • Whoever is involved in automation ;) 3
  • 4. What are we trying to solve? • Find security issues as early as possible • Integration into the devops pipeline • Finding all of the possible vulnerabilities • Putting pentesters out of a job :P 4 What are we not trying to solve?
  • 5. What can you get out of this? • A way to quickly evaluate your apps • Options for more thorough scanning • An introduction to the ZAP API • A chance to try things out with me 5
  • 6. 6 ZAP Introduction • An easy to use webapp pentest tool • Completely free and open source • OWASP Flagship project • Ideal for beginners • But also used by professionals • Ideal for devs, esp. for automated security tests • Included in all major security distributions • ToolsWatch.org Top Security Tool of 2015 • Not a silver bullet!
  • 7. 7 ZAP Features • Swing based UI for desktop mode • Comprehensive REST(ish) API for daemon mode • Plugin architecture (add-ons) • Online ‘marketplace’ (all free:) • Release, beta and alpha quality add-ons • Traditional and ajax spiders • Passive and active scanning • Highly configurable, eg scan policies • Highly scriptable
  • 8. Some ZAP use cases • Point and shoot – the Quick Start tab • Proxying via ZAP, and then scanning • Manual pentesting • Automated security regression tests • Debugging • Part of a larger security program 8
  • 9. ZAP Install Options • Windows .exe • Linux .tar.gz • Mac OS .dmg • Docker Images • owasp/zap2docker-stable • owasp/zap2docker-weekly • Distros like Kali 9
  • 10. Where to start? • The Baseline scan • Completely safe • Runs quickly (1-2 minutes?) • Can be easily integrated into CI/CD • Easy to get started – just required the target: docker pull owasp/zap2docker-weekly docker run -t owasp/zap2docker-weekly zap-baseline.py -t https://www.example.com • Very configurable if needed 10
  • 11. Baseline scan • Uses docker (the only dependency) • Time limited spider of target (default 1 min) • Just passive scanning • By default warns on all issues • Can change to ignore, info or fail • Can include any ZAP cmdline option • Can ignore any url regex for any rule 11
  • 12. Baseline scan - issues • All release and beta passive scan rules, eg • Missing / incorrect security headers • Cookie problems • Information / error disclosure • Missing CSRF tokens •... • Can optionally include alpha pscan rules 12
  • 14. Baseline scan – usage 14 Usage: zap-baseline.py -t <target> [options] -t target target URL including the protocol, eg Options: -c config_file config file to use to INFO, IGNORE or -u config_url URL of config file to use to INFO, IG -g gen_file generate default config file (all rul -m mins the number of minutes to spider for ( -r report_html file to write the full ZAP HTML repor -w report_md file to write the full ZAP Wiki (Mark -x report_xml file to write the full ZAP XML report -a include the alpha passive scan rules -d show debug messages -i default rules not in the config file -j use the Ajax spider in addition to th -l level minimum level to show: PASS, IGNORE, -s short output format - dont show PASSe -z zap_options ZAP command line options e.g. -z "-co
  • 15. Baseline scan – output 15 ./zap-baseline.py -t https://www.example.com 3 URLs PASS: Cookie No HttpOnly Flag [10010] PASS: Cookie Without Secure Flag [10011] PASS: Password Autocomplete in Browser [10012] <snip> WARN: Incomplete or No Cache-control and Pragma HTTP Header https://www.example.com WARN: Web Browser XSS Protection Not Enabled [10016] x 3 https://www.example.com https://www.example.com/robots.txt https://www.example.com/sitemap.xml WARN: X-Frame-Options Header Not Set [10020] x 1 https://www.example.com WARN: X-Content-Type-Options Header Missing [10021] x 1 https://www.example.com FAIL: 0 WARN: 4 INFO: 0 IGNORE: 0 PASS: 22
  • 16. Baseline scan – in CircleCI • https://github.com/Securing- DevOps/invoicer/blob/master/circle.yml#L39-L44 16 # pull down the Zap baseline scanner - docker pull owasp/zap2docker-weekly # Run zap against the invoicer - docker run ${DOCKER_REPO}/${CIRCLE_PROJECT_REPONAME} & - docker run -t owasp/zap2docker-weekly zap-baseline.py -t http://172.17.0.2:8080/
  • 17. Baseline scan – conf file • Use -g option to generate, -c or -u to use 17 # zap-baseline rule configuration file # Change WARN to IGNORE to ignore rule or FAIL to fail if # Only the rule identifiers are used - the names are just # You can add your own messages to each rule by appending 10010 WARN(Cookie No HttpOnly Flag) 10011 WARN(Cookie Without Secure Flag) 10012 WARN(Password Autocomplete in Browser) 10015 WARN(Incomplete or No Cache-control and Pragma HTTP 10016 WARN(Web Browser XSS Protection Not Enabled) 10017 WARN(Cross-Domain JavaScript Source File Inclusion) 10019 WARN(Content-Type Header Missing) 10020 WARN(X-Frame-Options Header Scanner) 10021 WARN(X-Content-Type-Options Header Missing) 10023 WARN(Information Disclosure - Debug Error Messages) 10024 WARN(Information Disclosure - Sensitive Information
  • 18. Where next? • Mass Baseline scan • Provides a simple dashboard • Shows the detailed results • Shows the per service history 18
  • 19. Mass Baseline scan • Part of the community-scripts repo: zaproxy/community-scripts/api/mass-baseline 19
  • 20. Full Scans • Packaged options: • Cmdline quick scan • Jenkins plugin • Sdlc-integration scripts • Daemon mode + API • (ZAP as a Service – in development) 20
  • 21. Cmdline Quick Scan 21 ./zap.sh -cmd -quickurl http://example.com/ -quickprogress • Spidering • Active scanning • [====================] 100% • Attack complete • <?xml version="1.0"?><OWASPZAPReport version="2.5.0" generated="Tue, 4 Oct 2016 09:31:53"> • <site name="http://example.com" ...
  • 22. Jenkins plugin • Maintained by 3rd party • Requires full ZAP install • Supports authentication • Supports scan policies • Not as flexible as driving the API 22
  • 23. Sdlc integration scripts • Part of the community-scripts repo: zaproxy/community-scripts/api/sdlc-integration • Spidering, passive and active scanning • Supports authentication • Supports JIRA integration • Linux only, requires some file editing 23
  • 24. Useful cmdline options • Turn off db recovery (speeds things up) -config database.recoverylog=false • Update all add-ons -addonupdate • Install a non default add-on -addoninstall addonname • Setting the API key -config api.key=j8WdOEq8dhwWE24VGDsreP • Disable API key in a safe environment -config api.disablekey=true 24
  • 25. Using the ZAP API • Intro to the API • Exploring • Scanning • Reporting • Authenticating • Tuning 25
  • 26. Intro to the API • RESTish – ok, only uses GET requests http(s)://zap/<format>/<component>/ <operation>/<op name>[/?<params>] • Maps closely to the UI / code • Theres a v basic web UI for it • And clients in various langs: Java, Python, Node JS, .Net, PHP, Go … • Clients are generated from the code 26
  • 27. API Pro Tip 1. Experiment with the Desktop UI 2. Export configs from the UI (contexts, scan policies..) 3. Then reproduce using the API UI 4. Finally convert to a script 27
  • 29. Intro – Python API • Install from pypi: pip install python-owasp-zap-v2.4 • In your script: from zapv2 import ZAPv2 zap = ZAPv2() zap = ZAPv2(proxies={ 'http': 'http://localhost:8080', 'https': 'http://localhost:8090'}) 29 h from zapv2 import ZAPv2 zap = ZAPv2() zap = ZAPv2(proxies={ 'http': 'http://localhost:8080', 'https': 'http://localhost:8080'}) • zap.urlopen(target) • pip install python-owasp-zap-v2.4
  • 30. Exploring • Proxy Regression / Unit tests • Traditional Spider (crawler) • Ajax Spider (browsers) • Spider SOAP definition (via alpha add-on) • Import ModSecurity2 logs (via alpha add-on) 30
  • 32. Exploring – Trad Spider 32 h zap.spider.scan(target) • time.sleep(5) • while int(zap.spider.status()) < 100: • print ('Spider progress %: ' + zap.spider.status()) • time.sleep(5) • print ('Spider completed')
  • 33. Exploring – Ajax Spider 33 h zap.ajaxSpider.scan(target) • time.sleep(5) • while zap.ajaxSpider == 'running': • print ('Ajax Spider # results: ' + zap.ajaxSpider.number_of_results()) • time.sleep(5) • print ('Ajax Spider completed')
  • 34. Scanning – Passive Scan 34 while int(zap.pscan.records_to_scan()) > 0: • print ('Pscan records : ' + zap.pscan.records_to_scan()) • time.sleep(5) • print ('Pscan completed') h • Passive scanning happens automatically when proxying • To tell when its finished:
  • 35. Scanning – Active Scan 35 h zap.ascan.scan(target) • time.sleep(5) • while int(zap.ascan.status()) < 100: • print ('Ascan progress %: ' + zap.ascan.status()) • time.sleep(5) • print ('Ascan completed')
  • 36. Reporting – HTML + XML 36 h # HTML Report • with open ('report.html', 'w') as f: f.write(zap.core.htmlreport()) # XML Report • with open ('report.xml', 'w') as f: f.write(zap.core.xmlreport())
  • 37. Reporting – all alert data 37 h # Use paging for lots of alerts • offset = 0; page = 100 • alerts = zap.core.alerts('', offset, page) • while len(alerts) > 0: • for alert in alerts: • # Do whatever you want with alert • offset += page • alerts = zap.core.alerts('', offset, page)
  • 38. And dont forget... 38 h # Your work here is done... • zap.core.shutdown()
  • 39. Any questions about the API? 39 h
  • 40. Authenticating • Authentication can be hard :( • Simple form based auth should be ok • Authentication scripts should be able to handle anything • But if you have complex SSO or equiv you may want a simpler option in your test env • Pro Top: use the UI to set authentication up! 40
  • 42. Tuning - speed • Spider time limits • Data driven content • Technology • Active scan • Scan rules • Input vectors • Attack strength 42
  • 43. Tuning - feedback • Active scan stats • Response stats • Authentication stats (alpha add-on) • Statsd support 43
  • 44. Tuning - accuracy • Attack thresholds • Rule configuration (post 2.5.0) – Forms that dont need CSRF tokens – Increase timing attacks from 5 seconds 44
  • 45. Need help? • Getting Started Guide • Desktop Help (also online) • Wiki – FAQ, Docs, Videos … • ZAP User Group • irc.mozilla.org #websectools 45
  • 46. Workshop Summary • Use the baseline scan for a quick security overview • Use the mass baseline to create a dashboard • Use full ZAP scans for more depth • Configure ZAP to authenticate for even better results • If you need help, just ask! 46
  • 47. Now go forth and automate ZAP :) http://www.owasp.org/index.php/ZAP