SlideShare a Scribd company logo
What Permissions Does Your
           Database User REALLY Need?
           Dan Cornell
           CTO, Denim Group
           @danielcornell




© Copyright 2012 Denim Group - All Rights Reserved
My Background
    • Dan Cornell, founder and CTO of
      Denim Group

    • Software developer by background
      (Java, .NET, etc)

    • OWASP San Antonio, Global
      Membership Committee




© Copyright 2012 Denim Group - All Rights Reserved   1
Who has deployed a web
 application to production
 attached to its database as
 the “sa” or “root” user?


© Copyright 2012 Denim Group - All Rights Reserved   2
LIARS!
© Copyright 2012 Denim Group - All Rights Reserved   3
The Weakest Link




© Copyright 2012 Denim Group - All Rights Reserved   4
Web Application Database User Permissions
 • Data = Value
 • Web Applications Are Front-Ends For Web
   Databases
 • Web Applications Are Full of SQL Injection
   Vulnerabilities

 • Therefore: Choosing You Web Database User
   Permissions Has a Large Potential Impact On
   Your Security Posture
© Copyright 2012 Denim Group - All Rights Reserved   5
Problems With Web Database Access Security
 • Nearly all applications use a single database user
   to access the database
         – Masks the true identity of the caller to the database
 • Too often this user is hyper-privileged
 • Why?
         –    Lazy configuration management for production environment
         –    DBA attitude of “one app – one schema – one user”
         –    “Too hard” to figure out what permissions are needed
         –    Schema ownership required by 3rd party code


© Copyright 2012 Denim Group - All Rights Reserved                       6
Result
 • Any SQL injection vulnerability exploit owns the entire
   database
         – Schema: Map it out
         – Data: INSERT, UPDATE, SELECT, DELETE
 • Whole “Confidentiality, Integrity and Availability” thing: out
   the window
 • This can even be automated:
         – sqlmap: http://sqlmap.sourceforge.net/
 • If that database user‟s privileges extend beyond the database
   supporting the vulnerable application…


© Copyright 2012 Denim Group - All Rights Reserved                  7
Test Environment
 • (Crappy) PHP Web Application: Crap-E-Commerce
 • Database Access With Full Permissions




© Copyright 2012 Denim Group - All Rights Reserved   8
Environment Setup Tips
 • If you want to symlink to the commerce/ examples on OS X
         – http://tlrobinson.net/blog/2008/06/mac-os-x-web-sharing-apache-and-symlinks/


 • Use „127.0.0.1‟ rather than „localhost‟ for the MySQL database host
         – http://stackoverflow.com/questions/3968013/cakephp-no-such-file-or-directory-
           trying-to-connect-via-unix-var-mysql-mysq




© Copyright 2012 Denim Group - All Rights Reserved                                         9
What Is Wrong With Our Target Application?
 • Process:
         – Scan with OWASP ZAProxy to find vulnerabilities:
           http://code.google.com/p/zaproxy/
         – Use sqlmap to see what we can find


 • Results:
         – Publicly-accessible SQL injections!




© Copyright 2012 Denim Group - All Rights Reserved            10
Sqlmap Results
 • Command
         – ./sqlmap.py -u http://localhost/~dcornell/commerce/order.php?order_id=1 --dump-all


 • Data retrieved:
         – All of it…




© Copyright 2012 Denim Group - All Rights Reserved                                              11
Actual Business Impact

 • From sqlmap: Lost all data in the database:
         – Usernames and passwords
         – Order history
         – Full credit card information


 • Additional possibilities: UPDATE, DELETE,
   INSERT

© Copyright 2012 Denim Group - All Rights Reserved   12
We Need To Make Some Progress




© Copyright 2012 Denim Group - All Rights Reserved   13
That Was With a Powerful Database User

       So what happens if we deploy the
        application with a less powerful
                     user?

        To do this we need to know what
        access a legitimate user needs…
© Copyright 2012 Denim Group - All Rights Reserved   14
What Privileges Does a Database User Need?
 • Ask the development team
         – Good luck with that
         – Do they even know given frameworks and abstraction layers like ORMs
         – Doesn‟t scale


 • Ask the DBA
         – Double good luck with that
         – Doesn‟t scale


 • Inspect the code
         – Ugh
         – Error prone
         – Doesn‟t scale

© Copyright 2012 Denim Group - All Rights Reserved                               15
Any Way To Automate This?
 • Interesting Article:
         – http://www.teamshatter.com/topics/general/team-shatter-exclusive/what-are-my-
           users%E2%80%99-effective-database-privileges/
         – See http://www.petefinnigan.com/tools.htm for more along these lines
 • Less than ideal
         – What assets can this user access?
                      versus
         – What assets does the user need to access?


 • Could be helpful determining possible impact of a breach




© Copyright 2012 Denim Group - All Rights Reserved                                         16
Other Permission Calculation Tools
 • .NET Permission Calculator Tool (Permcalc.exe)
         – http://msdn.microsoft.com/en-us/library/ms165077(v=vs.90).aspx


 • Stowaway (Android Permissions Calculator)
         – http://www.android-permissions.org/


 • Both of these tools appear to rely solely on static analysis
         – Makes sense from a coverage standpoint
         – Would be really hard for databases potentially accessed by multiple applications




© Copyright 2012 Denim Group - All Rights Reserved                                            17
Alternate Approach
 • Dynamically analyze traffic to the database server

 • Use that traffic as a “representative sample” of required database
   access

 • Create user permissions based on this

 • Why?
         – Static analysis is really hard to get exactly right – this relies on observed behavior




© Copyright 2012 Denim Group - All Rights Reserved                                                  18
sqlpermcalc
 • Tool that calculates the least-privilege database permissions required
   to execute a given set of SQL queries
         – Written in Python
         – https://github.com/denimgroup/sqlpermcalc


 • Helper tools:
         – Start and stop MySQL logging
         – Capture query log from a MySQL database


 • Relies on python-sqlparse for basic SQL parsing support
         – https://code.google.com/p/python-sqlparse/
         – Thanks Andi Albrecht! (http://andialbrecht.de/)


© Copyright 2012 Denim Group - All Rights Reserved                          19
An Aside: “Pythonic”
 • Definition of “pythonic”
         – “To be Pythonic is to use the Python constructs and data structures with clean,
           readable idioms”
         – http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0


 • At this point sqlpermcalc is more … “python-ish”
         – Enjoy 
         – Any Python gurus are more than welcome to help with cleanup…




© Copyright 2012 Denim Group - All Rights Reserved                                           20
Support Tools
 • Turn on MySQL logging with mysql_start_logging.sh
         – Not recommended for use in production because of potential performance impact
         – Also we‟re logging to MySQL tables rather than a log file – even worse


 • Retrieve MySQL log data with mysql_get_logfile.sh
         – Pulls queries from a given user into a local .sql file


 • Turn off MySQL logging with mysql_stop_logging.sh
         – Stops logging




© Copyright 2012 Denim Group - All Rights Reserved                                         21
Process
 •     Stop webserver
 •     Turn on MySQL logging
 •     Start webserver
 •     Exercise application
 •     Retrieve logs
 •     Turn off MySQL logging
 •     Analyze logs for permission usage




© Copyright 2012 Denim Group - All Rights Reserved   22
Calculating Permissions

 •     SELECT
 •     INSERT
 •     UPDATE
 •     DELETE


© Copyright 2012 Denim Group - All Rights Reserved   23
SELECT Permissions
 • Can control on a table-wide basis
 • Can control on a per-column basis for a table
 • WHERE clause will require additional SELECT permissions

 • Scenarios:
         –    SELECT * FROM MyTable
         –    SELECT col1, col2, col3 FROM MyTable
         –    SELECT * FROM MyTable WHERE col1 = 1 AND col2 = 2 OR col3 = „three‟
         –    SELECT col1, col2 FROM MyTable where col3 = „three‟




© Copyright 2012 Denim Group - All Rights Reserved                                  24
INSERT Permissions
 • Can control on a table-wide basis
 • Can control on a per-column basis for a table

 • Scenarios:
         – Full table: INSERT INTO MyTable VALUES (1, 2, „three‟)
         – Columns in table: INSERT INTO MyTable (col1, col2, col3) VALUES (1, 2, „three‟)




© Copyright 2012 Denim Group - All Rights Reserved                                           25
UPDATE Permissions
 • Can control on a table-wide basis
 • Can control on a per-column basis for a table
 • WHERE clause will require SELECT permissions as well

 • Scenarios:
         – UPDATE MyTable SET col1 = 1
         – UPDATE MyTable SET col2 = 2 WHERE col3 = „three‟




© Copyright 2012 Denim Group - All Rights Reserved            26
DELETE Permissions
 • Can only control on a table-wide basis
 • WHERE clause will require SELECT permissions as well

 • Scenarios:
         – DELETE FROM MyTable
         – DELETE FROM MyTable WHERE col1 = 1




© Copyright 2012 Denim Group - All Rights Reserved        27
A Note About Wildcards
 • DELETE always impacts all columns in a table
         – Hence it only has table-level permissions – not column-level
 • SELECT and INSERT sometimes impact all columns in a table
         – SELECT * FROM MyTable
         – INSERT INTO MyTable VALUES (1, 2, „three‟)


 • Currently we do not “know” the actual database schema
         – Therefore we do not know all of the actual column names
         – So instead we track „*‟ to represent “all columns”


 • This should not cause problems
         – What we see accessed in the queries should be what we need to access


© Copyright 2012 Denim Group - All Rights Reserved                                28
What Permissions Are Actually Needed?
 • INSERT
         – CommerceUser: email,first_name,last_name,password
         – CreditCard: CVV,expiration,number,type
         – OrderItem: order_id,price,product_id,product_name,quantity


 • SELECT
         –    CommerceUser: *
         –    Order: date,total,user_id
         –    OrderItem: price,product_id,product_name,quantity
         –    Product: *

© Copyright 2012 Denim Group - All Rights Reserved                      29
Given The Model We Can Generate GRANTs
 • For MySQL we need to know the user account name and
   host for access
 GRANT INSERT (email,first_name,last_name,password) ON
 sqlpermcalc_commerce.CommerceUser TO 'spc_publiclow'@'localhost';
 GRANT INSERT (CVV,expiration,number,type) ON sqlpermcalc_commerce.CreditCard
 TO 'spc_publiclow'@'localhost';
 GRANT INSERT (order_id,price,product_id,product_name,quantity) ON
 sqlpermcalc_commerce.OrderItem TO 'spc_publiclow'@'localhost';
 GRANT SELECT ON sqlpermcalc_commerce.CommerceUser TO
 'spc_publiclow'@'localhost';
 GRANT SELECT (date,total,user_id) ON sqlpermcalc_commerce.Order TO
 'spc_publiclow'@'localhost';
 GRANT SELECT (order_id,price,product_id,product_name,quantity) ON
 sqlpermcalc_commerce.OrderItem TO 'spc_publiclow'@'localhost';
 GRANT SELECT ON sqlpermcalc_commerce.Product TO 'spc_publiclow'@'localhost';

© Copyright 2012 Denim Group - All Rights Reserved                              30
Impact of Slimmed-Down Permissions?




© Copyright 2012 Denim Group - All Rights Reserved   31
Re-Run sqlmap
 • Can still recover a whole lot of data
         – But not the credit card data (or even the credit card primary key IDs)
         – So that is better. Kinda


 • But…
         – No UPDATE or DELETE access to any tables
         – Limited INSERT access


 • What Does That Get Us?
         – Can‟t INSERT into Products or modify Products
         – Automated SQL worms can‟t “infect” the site with malware via SQL injection
         – So that is definitely better


© Copyright 2012 Denim Group - All Rights Reserved                                      32
Other Uses
 • Insight into database usage
         – Do you have any idea what database assets your web application touches?
         – Even if you don‟t generate new user permissions, you can still use this to explore


 • Forensic review over time
         – Gather usage logs from production servers at intervals?
         – Why did this app suddenly start using additional permissions?


 • Compare multiple user roles or applications
         – What does each need to do?
         – How are the access needs different?




© Copyright 2012 Denim Group - All Rights Reserved                                              33
Calculating Permission for Multiple Scenarios
 • Hosting Multiple Applications Accessing the Same Database(s)
         –    Two applications (public and admin) share several databases
         –    Public site is read-only and heavily cached
         –    Admin site is read/write
         –    During series of attacks we had to manually calculate constrained permissions


 • Hosting Same Application In Different VMs
         – Cannot make code changes but need to harden infrastructure
         – Host different configuration files for database access
         – Example: Falling Rock Networks Armored Stack infrastructure
                 • http://www.fallingrocknetworks.com/armored-stack.html




© Copyright 2012 Denim Group - All Rights Reserved                                            34
Limits of This Approach
 • Assumes that assets touched during a test run are all that a legitimate
   user session will ever need
         – If we miss something we will see runtime errors
         – Likely needs re-calculation when code is changed
         – Comprehensive unit/regression test suite can help (Rugged DevOps!)


 • Many applications require a lot of access so the security benefit might
   not be as great as desired
         – In the example application: we still lost usernames/passwords




© Copyright 2012 Denim Group - All Rights Reserved                              35
Current sqlpermcalc Limitations
 • Only supports basic SQL functionality
         – SELECT, INSERT, UPDATE, DELETE


 • Parsing is still crudimentary
         – More advanced SELECT statements – JOINs, subqueries – are not yet supported
         – Precludes use for apps using common frameworks and tools


 • Only tested on MySQL
         – Every databases SQL dialect is a little different
         – Every database has different ways to grant/revoke privileges




© Copyright 2012 Denim Group - All Rights Reserved                                       36
Next Steps
 • Improve the SQL supported by the parser
         – Support all SQL queries generated by Hibernate for a non-trivial application
         – Look into adding support for stored procedures


 • Clean up code
         –    This is kind of “scripty” right now
         –    Allow others to use the capabilities
         –    Make it more Pythonic
         –    http://kennethreitz.com/repository-structure-and-python.html


 • Support for other databases
         – Pull MS SQL Server queries from the Profiler


© Copyright 2012 Denim Group - All Rights Reserved                                        37
Other Stuff To Look At
 • SE PostgreSQL: https://code.google.com/p/sepgsql/




© Copyright 2012 Denim Group - All Rights Reserved     38
Get The Code
 • sqlpermcalc on Github: https://github.com/denimgroup/sqlpermcalc
         – sqlpermcalc Python code
         – Example Crap-E-Commerce app
         – Support scripts for MySQL




© Copyright 2012 Denim Group - All Rights Reserved                    39
Conclusions and Questions

 Dan Cornell
 dan@denimgroup.com
 Twitter: @danielcornell

 www.denimgroup.com
 github.com/denimgroup/sqlpermcalc
 (210) 572-4400




© Copyright 2012 Denim Group - All Rights Reserved   40

More Related Content

PDF
Software Security for Project Managers: What Do You Need To Know?
PDF
Smart Phones Dumb Apps
PDF
Vulnerability Management In An Application Security World
PDF
Top Strategies to Capture Security Intelligence for Applications
PPTX
How iOS and Android Handle Security Webinar
PDF
Benchmarking Web Application Scanners for YOUR Organization
PDF
Vulnerability Management In An Application Security World: AppSecDC
PDF
The Permanent Campaign
Software Security for Project Managers: What Do You Need To Know?
Smart Phones Dumb Apps
Vulnerability Management In An Application Security World
Top Strategies to Capture Security Intelligence for Applications
How iOS and Android Handle Security Webinar
Benchmarking Web Application Scanners for YOUR Organization
Vulnerability Management In An Application Security World: AppSecDC
The Permanent Campaign

What's hot (20)

PDF
Software Security: Is OK Good Enough? OWASP AppSec USA 2011
PDF
The Magic of Symbiotic Security
PPTX
Building a Mobile Security Program
PDF
Monitoring Attack Surface to Secure DevOps Pipelines
PDF
The Need For Open Software Security Standards In A Mobile And Cloudy World
PDF
ThreadFix 2.2 Preview Webinar with Dan Cornell
PDF
Managing Your Application Security Program with the ThreadFix Ecosystem
PDF
Building Your Application Security Data Hub - OWASP AppSecUSA
PDF
SecDevOps: Development Tools for Security Pros
PDF
ThreadFix 2.4: Maximizing the Impact of Your Application Security Resources
PDF
Do You Have a Scanner or Do You Have a Scanning Program? (AppSecEU 2013)
PDF
The ThreadFix Ecosystem: Vendors, Volunteers, and Versions
PDF
ThreadFix 2.1 and Your Application Security Program
PDF
Social Networks and Security: What Your Teenager Likely Won't Tell You
PDF
Running a Software Security Program with Open Source Tools
PDF
Secure DevOps with ThreadFix 2.3
PDF
Running a Software Security Program with Open Source Tools (Course)
PDF
Using ThreadFix to Manage Application Vulnerabilities
PDF
Hybrid Analysis Mapping: Making Security and Development Tools Play Nice Toge...
PDF
The Self Healing Cloud: Protecting Applications and Infrastructure with Autom...
Software Security: Is OK Good Enough? OWASP AppSec USA 2011
The Magic of Symbiotic Security
Building a Mobile Security Program
Monitoring Attack Surface to Secure DevOps Pipelines
The Need For Open Software Security Standards In A Mobile And Cloudy World
ThreadFix 2.2 Preview Webinar with Dan Cornell
Managing Your Application Security Program with the ThreadFix Ecosystem
Building Your Application Security Data Hub - OWASP AppSecUSA
SecDevOps: Development Tools for Security Pros
ThreadFix 2.4: Maximizing the Impact of Your Application Security Resources
Do You Have a Scanner or Do You Have a Scanning Program? (AppSecEU 2013)
The ThreadFix Ecosystem: Vendors, Volunteers, and Versions
ThreadFix 2.1 and Your Application Security Program
Social Networks and Security: What Your Teenager Likely Won't Tell You
Running a Software Security Program with Open Source Tools
Secure DevOps with ThreadFix 2.3
Running a Software Security Program with Open Source Tools (Course)
Using ThreadFix to Manage Application Vulnerabilities
Hybrid Analysis Mapping: Making Security and Development Tools Play Nice Toge...
The Self Healing Cloud: Protecting Applications and Infrastructure with Autom...
Ad

Viewers also liked (14)

PPTX
Database security
PPTX
Mule access management - Managing Environments and Permissions
PPTX
Anypoint access management - Roles
PPTX
Presentation on Federated identity and Access Management
PDF
Présentation de l'offre IAM de LINAGORA LinID
PPTX
Enterprise & Web based Federated Identity Management & Data Access Controls
PDF
Les processus IAM
ODP
10 02 authentification PAM
PPTX
IAM Methods 2.0 Presentation Michael Nielsen Deloitte
PDF
Itil 2011 Mind Maps
PDF
Itil 2011 process map goldfish_fr_v1.0
PPT
The Gartner IAM Program Maturity Model
PPTX
Identity and Access Management Introduction
Database security
Mule access management - Managing Environments and Permissions
Anypoint access management - Roles
Presentation on Federated identity and Access Management
Présentation de l'offre IAM de LINAGORA LinID
Enterprise & Web based Federated Identity Management & Data Access Controls
Les processus IAM
10 02 authentification PAM
IAM Methods 2.0 Presentation Michael Nielsen Deloitte
Itil 2011 Mind Maps
Itil 2011 process map goldfish_fr_v1.0
The Gartner IAM Program Maturity Model
Identity and Access Management Introduction
Ad

Similar to What Permissions Does Your Database User REALLY Need? (20)

PPTX
Ved du, hvor dine data er - og hvem, der har adgang til dem? Ron Ben Natan, I...
PPTX
The Spy Who Loathed Me - An Intro to SQL Server Security
PPT
Lecture 9: Dynamic web application
PDF
Using PostgreSQL for Data Privacy
PPTX
Locking Down Your MySQL Database.pptx
PPTX
Database management system normalization
PDF
Safety LAMP: data security & agile languages
PPT
Fortress SQL Server
PPTX
PDF
Microsoft sql server_2017_and_azure_sql_database_permissions_infographic
PPT
Data base security
PPSX
Web application security
PPT
SQL: Permissions and Data Protection
PPTX
7 Database Mistakes YOU Are Making -- Linuxfest Northwest 2019
PPTX
Database modeling and security
PDF
Ibm informix security functionality overview
PDF
PostgreSQL and MySQL
PPT
Database security copy
PPTX
Unit 2 - Chapter 7 (Database Security).pptx
PDF
Think Like a Hacker - Database Attack Vectors
Ved du, hvor dine data er - og hvem, der har adgang til dem? Ron Ben Natan, I...
The Spy Who Loathed Me - An Intro to SQL Server Security
Lecture 9: Dynamic web application
Using PostgreSQL for Data Privacy
Locking Down Your MySQL Database.pptx
Database management system normalization
Safety LAMP: data security & agile languages
Fortress SQL Server
Microsoft sql server_2017_and_azure_sql_database_permissions_infographic
Data base security
Web application security
SQL: Permissions and Data Protection
7 Database Mistakes YOU Are Making -- Linuxfest Northwest 2019
Database modeling and security
Ibm informix security functionality overview
PostgreSQL and MySQL
Database security copy
Unit 2 - Chapter 7 (Database Security).pptx
Think Like a Hacker - Database Attack Vectors

More from Denim Group (20)

PDF
Long-term Impact of Log4J
PDF
Threat Modeling the CI/CD Pipeline to Improve Software Supply Chain Security ...
PDF
Threat Modeling the CI/CD Pipeline to Improve Software Supply Chain Security ...
PDF
Optimizing Security Velocity in Your DevSecOps Pipeline at Scale
PDF
Application Asset Management with ThreadFix
PDF
OWASP San Antonio Meeting 10/2/20
PDF
AppSec Fast and Slow: Your DevSecOps CI/CD Pipeline Isn’t an SSA Program
PDF
Using Collaboration to Make Application Vulnerability Management a Team Sport
PDF
Managing Penetration Testing Programs and Vulnerability Time to Live with Thr...
PDF
Security Champions: Pushing Security Expertise to the Edges of Your Organization
PDF
The As, Bs, and Four Cs of Testing Cloud-Native Applications
PDF
An Updated Take: Threat Modeling for IoT Systems
PPTX
Continuous Authority to Operate (ATO) with ThreadFix – Bringing Commercial In...
PDF
A New View of Your Application Security Program with Snyk and ThreadFix
PDF
Enabling Developers in Your Application Security Program With Coverity and Th...
PDF
AppSec in a World of Digital Transformation
PDF
The As, Bs, and Four Cs of Testing Cloud-Native Applications
PDF
Enabling Developers in Your Application Security Program With Coverity and Th...
PDF
AppSec in a World of Digital Transformation
PDF
Enumerating Enterprise Attack Surface
Long-term Impact of Log4J
Threat Modeling the CI/CD Pipeline to Improve Software Supply Chain Security ...
Threat Modeling the CI/CD Pipeline to Improve Software Supply Chain Security ...
Optimizing Security Velocity in Your DevSecOps Pipeline at Scale
Application Asset Management with ThreadFix
OWASP San Antonio Meeting 10/2/20
AppSec Fast and Slow: Your DevSecOps CI/CD Pipeline Isn’t an SSA Program
Using Collaboration to Make Application Vulnerability Management a Team Sport
Managing Penetration Testing Programs and Vulnerability Time to Live with Thr...
Security Champions: Pushing Security Expertise to the Edges of Your Organization
The As, Bs, and Four Cs of Testing Cloud-Native Applications
An Updated Take: Threat Modeling for IoT Systems
Continuous Authority to Operate (ATO) with ThreadFix – Bringing Commercial In...
A New View of Your Application Security Program with Snyk and ThreadFix
Enabling Developers in Your Application Security Program With Coverity and Th...
AppSec in a World of Digital Transformation
The As, Bs, and Four Cs of Testing Cloud-Native Applications
Enabling Developers in Your Application Security Program With Coverity and Th...
AppSec in a World of Digital Transformation
Enumerating Enterprise Attack Surface

Recently uploaded (20)

PDF
cuic standard and advanced reporting.pdf
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Machine learning based COVID-19 study performance prediction
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPT
Teaching material agriculture food technology
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
KodekX | Application Modernization Development
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Electronic commerce courselecture one. Pdf
PDF
Encapsulation theory and applications.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
cuic standard and advanced reporting.pdf
Spectroscopy.pptx food analysis technology
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Machine learning based COVID-19 study performance prediction
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Teaching material agriculture food technology
Understanding_Digital_Forensics_Presentation.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Digital-Transformation-Roadmap-for-Companies.pptx
20250228 LYD VKU AI Blended-Learning.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
KodekX | Application Modernization Development
Advanced methodologies resolving dimensionality complications for autism neur...
Electronic commerce courselecture one. Pdf
Encapsulation theory and applications.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Mobile App Security Testing_ A Comprehensive Guide.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation

What Permissions Does Your Database User REALLY Need?

  • 1. What Permissions Does Your Database User REALLY Need? Dan Cornell CTO, Denim Group @danielcornell © Copyright 2012 Denim Group - All Rights Reserved
  • 2. My Background • Dan Cornell, founder and CTO of Denim Group • Software developer by background (Java, .NET, etc) • OWASP San Antonio, Global Membership Committee © Copyright 2012 Denim Group - All Rights Reserved 1
  • 3. Who has deployed a web application to production attached to its database as the “sa” or “root” user? © Copyright 2012 Denim Group - All Rights Reserved 2
  • 4. LIARS! © Copyright 2012 Denim Group - All Rights Reserved 3
  • 5. The Weakest Link © Copyright 2012 Denim Group - All Rights Reserved 4
  • 6. Web Application Database User Permissions • Data = Value • Web Applications Are Front-Ends For Web Databases • Web Applications Are Full of SQL Injection Vulnerabilities • Therefore: Choosing You Web Database User Permissions Has a Large Potential Impact On Your Security Posture © Copyright 2012 Denim Group - All Rights Reserved 5
  • 7. Problems With Web Database Access Security • Nearly all applications use a single database user to access the database – Masks the true identity of the caller to the database • Too often this user is hyper-privileged • Why? – Lazy configuration management for production environment – DBA attitude of “one app – one schema – one user” – “Too hard” to figure out what permissions are needed – Schema ownership required by 3rd party code © Copyright 2012 Denim Group - All Rights Reserved 6
  • 8. Result • Any SQL injection vulnerability exploit owns the entire database – Schema: Map it out – Data: INSERT, UPDATE, SELECT, DELETE • Whole “Confidentiality, Integrity and Availability” thing: out the window • This can even be automated: – sqlmap: http://sqlmap.sourceforge.net/ • If that database user‟s privileges extend beyond the database supporting the vulnerable application… © Copyright 2012 Denim Group - All Rights Reserved 7
  • 9. Test Environment • (Crappy) PHP Web Application: Crap-E-Commerce • Database Access With Full Permissions © Copyright 2012 Denim Group - All Rights Reserved 8
  • 10. Environment Setup Tips • If you want to symlink to the commerce/ examples on OS X – http://tlrobinson.net/blog/2008/06/mac-os-x-web-sharing-apache-and-symlinks/ • Use „127.0.0.1‟ rather than „localhost‟ for the MySQL database host – http://stackoverflow.com/questions/3968013/cakephp-no-such-file-or-directory- trying-to-connect-via-unix-var-mysql-mysq © Copyright 2012 Denim Group - All Rights Reserved 9
  • 11. What Is Wrong With Our Target Application? • Process: – Scan with OWASP ZAProxy to find vulnerabilities: http://code.google.com/p/zaproxy/ – Use sqlmap to see what we can find • Results: – Publicly-accessible SQL injections! © Copyright 2012 Denim Group - All Rights Reserved 10
  • 12. Sqlmap Results • Command – ./sqlmap.py -u http://localhost/~dcornell/commerce/order.php?order_id=1 --dump-all • Data retrieved: – All of it… © Copyright 2012 Denim Group - All Rights Reserved 11
  • 13. Actual Business Impact • From sqlmap: Lost all data in the database: – Usernames and passwords – Order history – Full credit card information • Additional possibilities: UPDATE, DELETE, INSERT © Copyright 2012 Denim Group - All Rights Reserved 12
  • 14. We Need To Make Some Progress © Copyright 2012 Denim Group - All Rights Reserved 13
  • 15. That Was With a Powerful Database User So what happens if we deploy the application with a less powerful user? To do this we need to know what access a legitimate user needs… © Copyright 2012 Denim Group - All Rights Reserved 14
  • 16. What Privileges Does a Database User Need? • Ask the development team – Good luck with that – Do they even know given frameworks and abstraction layers like ORMs – Doesn‟t scale • Ask the DBA – Double good luck with that – Doesn‟t scale • Inspect the code – Ugh – Error prone – Doesn‟t scale © Copyright 2012 Denim Group - All Rights Reserved 15
  • 17. Any Way To Automate This? • Interesting Article: – http://www.teamshatter.com/topics/general/team-shatter-exclusive/what-are-my- users%E2%80%99-effective-database-privileges/ – See http://www.petefinnigan.com/tools.htm for more along these lines • Less than ideal – What assets can this user access? versus – What assets does the user need to access? • Could be helpful determining possible impact of a breach © Copyright 2012 Denim Group - All Rights Reserved 16
  • 18. Other Permission Calculation Tools • .NET Permission Calculator Tool (Permcalc.exe) – http://msdn.microsoft.com/en-us/library/ms165077(v=vs.90).aspx • Stowaway (Android Permissions Calculator) – http://www.android-permissions.org/ • Both of these tools appear to rely solely on static analysis – Makes sense from a coverage standpoint – Would be really hard for databases potentially accessed by multiple applications © Copyright 2012 Denim Group - All Rights Reserved 17
  • 19. Alternate Approach • Dynamically analyze traffic to the database server • Use that traffic as a “representative sample” of required database access • Create user permissions based on this • Why? – Static analysis is really hard to get exactly right – this relies on observed behavior © Copyright 2012 Denim Group - All Rights Reserved 18
  • 20. sqlpermcalc • Tool that calculates the least-privilege database permissions required to execute a given set of SQL queries – Written in Python – https://github.com/denimgroup/sqlpermcalc • Helper tools: – Start and stop MySQL logging – Capture query log from a MySQL database • Relies on python-sqlparse for basic SQL parsing support – https://code.google.com/p/python-sqlparse/ – Thanks Andi Albrecht! (http://andialbrecht.de/) © Copyright 2012 Denim Group - All Rights Reserved 19
  • 21. An Aside: “Pythonic” • Definition of “pythonic” – “To be Pythonic is to use the Python constructs and data structures with clean, readable idioms” – http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0 • At this point sqlpermcalc is more … “python-ish” – Enjoy  – Any Python gurus are more than welcome to help with cleanup… © Copyright 2012 Denim Group - All Rights Reserved 20
  • 22. Support Tools • Turn on MySQL logging with mysql_start_logging.sh – Not recommended for use in production because of potential performance impact – Also we‟re logging to MySQL tables rather than a log file – even worse • Retrieve MySQL log data with mysql_get_logfile.sh – Pulls queries from a given user into a local .sql file • Turn off MySQL logging with mysql_stop_logging.sh – Stops logging © Copyright 2012 Denim Group - All Rights Reserved 21
  • 23. Process • Stop webserver • Turn on MySQL logging • Start webserver • Exercise application • Retrieve logs • Turn off MySQL logging • Analyze logs for permission usage © Copyright 2012 Denim Group - All Rights Reserved 22
  • 24. Calculating Permissions • SELECT • INSERT • UPDATE • DELETE © Copyright 2012 Denim Group - All Rights Reserved 23
  • 25. SELECT Permissions • Can control on a table-wide basis • Can control on a per-column basis for a table • WHERE clause will require additional SELECT permissions • Scenarios: – SELECT * FROM MyTable – SELECT col1, col2, col3 FROM MyTable – SELECT * FROM MyTable WHERE col1 = 1 AND col2 = 2 OR col3 = „three‟ – SELECT col1, col2 FROM MyTable where col3 = „three‟ © Copyright 2012 Denim Group - All Rights Reserved 24
  • 26. INSERT Permissions • Can control on a table-wide basis • Can control on a per-column basis for a table • Scenarios: – Full table: INSERT INTO MyTable VALUES (1, 2, „three‟) – Columns in table: INSERT INTO MyTable (col1, col2, col3) VALUES (1, 2, „three‟) © Copyright 2012 Denim Group - All Rights Reserved 25
  • 27. UPDATE Permissions • Can control on a table-wide basis • Can control on a per-column basis for a table • WHERE clause will require SELECT permissions as well • Scenarios: – UPDATE MyTable SET col1 = 1 – UPDATE MyTable SET col2 = 2 WHERE col3 = „three‟ © Copyright 2012 Denim Group - All Rights Reserved 26
  • 28. DELETE Permissions • Can only control on a table-wide basis • WHERE clause will require SELECT permissions as well • Scenarios: – DELETE FROM MyTable – DELETE FROM MyTable WHERE col1 = 1 © Copyright 2012 Denim Group - All Rights Reserved 27
  • 29. A Note About Wildcards • DELETE always impacts all columns in a table – Hence it only has table-level permissions – not column-level • SELECT and INSERT sometimes impact all columns in a table – SELECT * FROM MyTable – INSERT INTO MyTable VALUES (1, 2, „three‟) • Currently we do not “know” the actual database schema – Therefore we do not know all of the actual column names – So instead we track „*‟ to represent “all columns” • This should not cause problems – What we see accessed in the queries should be what we need to access © Copyright 2012 Denim Group - All Rights Reserved 28
  • 30. What Permissions Are Actually Needed? • INSERT – CommerceUser: email,first_name,last_name,password – CreditCard: CVV,expiration,number,type – OrderItem: order_id,price,product_id,product_name,quantity • SELECT – CommerceUser: * – Order: date,total,user_id – OrderItem: price,product_id,product_name,quantity – Product: * © Copyright 2012 Denim Group - All Rights Reserved 29
  • 31. Given The Model We Can Generate GRANTs • For MySQL we need to know the user account name and host for access GRANT INSERT (email,first_name,last_name,password) ON sqlpermcalc_commerce.CommerceUser TO 'spc_publiclow'@'localhost'; GRANT INSERT (CVV,expiration,number,type) ON sqlpermcalc_commerce.CreditCard TO 'spc_publiclow'@'localhost'; GRANT INSERT (order_id,price,product_id,product_name,quantity) ON sqlpermcalc_commerce.OrderItem TO 'spc_publiclow'@'localhost'; GRANT SELECT ON sqlpermcalc_commerce.CommerceUser TO 'spc_publiclow'@'localhost'; GRANT SELECT (date,total,user_id) ON sqlpermcalc_commerce.Order TO 'spc_publiclow'@'localhost'; GRANT SELECT (order_id,price,product_id,product_name,quantity) ON sqlpermcalc_commerce.OrderItem TO 'spc_publiclow'@'localhost'; GRANT SELECT ON sqlpermcalc_commerce.Product TO 'spc_publiclow'@'localhost'; © Copyright 2012 Denim Group - All Rights Reserved 30
  • 32. Impact of Slimmed-Down Permissions? © Copyright 2012 Denim Group - All Rights Reserved 31
  • 33. Re-Run sqlmap • Can still recover a whole lot of data – But not the credit card data (or even the credit card primary key IDs) – So that is better. Kinda • But… – No UPDATE or DELETE access to any tables – Limited INSERT access • What Does That Get Us? – Can‟t INSERT into Products or modify Products – Automated SQL worms can‟t “infect” the site with malware via SQL injection – So that is definitely better © Copyright 2012 Denim Group - All Rights Reserved 32
  • 34. Other Uses • Insight into database usage – Do you have any idea what database assets your web application touches? – Even if you don‟t generate new user permissions, you can still use this to explore • Forensic review over time – Gather usage logs from production servers at intervals? – Why did this app suddenly start using additional permissions? • Compare multiple user roles or applications – What does each need to do? – How are the access needs different? © Copyright 2012 Denim Group - All Rights Reserved 33
  • 35. Calculating Permission for Multiple Scenarios • Hosting Multiple Applications Accessing the Same Database(s) – Two applications (public and admin) share several databases – Public site is read-only and heavily cached – Admin site is read/write – During series of attacks we had to manually calculate constrained permissions • Hosting Same Application In Different VMs – Cannot make code changes but need to harden infrastructure – Host different configuration files for database access – Example: Falling Rock Networks Armored Stack infrastructure • http://www.fallingrocknetworks.com/armored-stack.html © Copyright 2012 Denim Group - All Rights Reserved 34
  • 36. Limits of This Approach • Assumes that assets touched during a test run are all that a legitimate user session will ever need – If we miss something we will see runtime errors – Likely needs re-calculation when code is changed – Comprehensive unit/regression test suite can help (Rugged DevOps!) • Many applications require a lot of access so the security benefit might not be as great as desired – In the example application: we still lost usernames/passwords © Copyright 2012 Denim Group - All Rights Reserved 35
  • 37. Current sqlpermcalc Limitations • Only supports basic SQL functionality – SELECT, INSERT, UPDATE, DELETE • Parsing is still crudimentary – More advanced SELECT statements – JOINs, subqueries – are not yet supported – Precludes use for apps using common frameworks and tools • Only tested on MySQL – Every databases SQL dialect is a little different – Every database has different ways to grant/revoke privileges © Copyright 2012 Denim Group - All Rights Reserved 36
  • 38. Next Steps • Improve the SQL supported by the parser – Support all SQL queries generated by Hibernate for a non-trivial application – Look into adding support for stored procedures • Clean up code – This is kind of “scripty” right now – Allow others to use the capabilities – Make it more Pythonic – http://kennethreitz.com/repository-structure-and-python.html • Support for other databases – Pull MS SQL Server queries from the Profiler © Copyright 2012 Denim Group - All Rights Reserved 37
  • 39. Other Stuff To Look At • SE PostgreSQL: https://code.google.com/p/sepgsql/ © Copyright 2012 Denim Group - All Rights Reserved 38
  • 40. Get The Code • sqlpermcalc on Github: https://github.com/denimgroup/sqlpermcalc – sqlpermcalc Python code – Example Crap-E-Commerce app – Support scripts for MySQL © Copyright 2012 Denim Group - All Rights Reserved 39
  • 41. Conclusions and Questions Dan Cornell dan@denimgroup.com Twitter: @danielcornell www.denimgroup.com github.com/denimgroup/sqlpermcalc (210) 572-4400 © Copyright 2012 Denim Group - All Rights Reserved 40