ruby on rails penetration testing
Post on 23-Jun-2015
1.258 Views
Preview:
DESCRIPTION
TRANSCRIPT
Ruby on Rails
Building and Breaking Rails App
http://www.3SLabs.com
• Released to the world as ‘extracted’ from BaseCamp (37Signals) by @dhh during July 2004.
• Merged with Merb Project during December 2008 and Rails 3.0 was released.
• Two supported branch of development currently:– Rails 3.x– Rails 4.x
Acceptance of RoR
.. and LOT more
Building Web Applications using Ruby on Rails
RoR Application Structure
Image Source: http://blog.ifuturz.com/ruby-on-rails/ruby-on-rails-mvc-learn-with-fun.html
Building a RoR App
1. Ruby & Ruby Gem Installation2. Generate RoR Project3. Design ERD4. Generate Scaffolds5. Define Relationships6. Create Database Schema7. Start Application Server
RoR: Web Blog Example
Our Blog is a web application where one or more Users can self-register and sign-in using their registered credentials.
Upon sign-in each User should be able to publish Blog Post that is visible to any user or visitor of the portal.
Any User or Visitor of the portal should optionally Comment on any Blog Post.
RoR: Web Blog ERD
Step1: Generate Project
Step2: Generate Scaffolds
Step3: Setup Database Schema
Step4: Launch App Server
http://m.xkcd.org/844/
Now write some code or customize the views..
After some love of Bootstrap3
Learning Ruby on Rails
• Ruby on Rails Official Guide– http://guides.rubyonrails.org/
• Agile Web Development with Rails– http://pragprog.com/book/rails4/agile-web-development-with-rails
• Ruby on Rails Podcasts– http://podcast.rubyonrails.org/
• Rails Code School– https://www.codeschool.com/courses/rails-for-zombies-redux
• Rails Cast– http://railscasts.com/
Breaking Ruby on Rails Applications
Image (Karate) by Nicholas Riggle from The Noun Project CC By 2.0
Penetration Testing Rails App
• Black/Gray Box Approach– Conventional Testing– Fingerprinting Rails Framework– Rails specific Vulnerability Testing– Rails specific Weakness Testing
• White Box Approach– Automated Scan for known Vulnerabilities
• Brakeman– Attack Surface enumeration through Routes– Authentication & Authorization Testing– Common Rails information disclosures (secret_token.rb)– Model Attributes Security– Custom/Unconventional SQL Queries Audit– Responsive View Audit
Fingerprinting Rails Applications
• No generic and definitive technique!– It’s a cat & mouse game really.
• Heuristics– Session Identifier– Asset Pipeline– [ … ]
Fingerprinting Rails Application
Not so easy for an application served with a reverse proxy which is almost always the case in production.
Fingerprinting Rails Application
Leveraging the assets pipeline which is enabled by default from Rails 3.1
Automated Testing: Brakeman
http://brakemanscanner.org/
Need source code access !
Automated Testing: grep(1)
eval
instance_eval class_eval
DRb.start_server
find_by_sql
system exec
popen
You will be surprised to see how effective this is !
/`(.*)`/
Attack Surface: Routes
Attack Surface: Routes
• Default Routing– <Resource> is handled by app/controllers/<resources>_controller.rb– CRUD on Resource
Session Security
• A whole set of attacks are possible on Session Management functionality of any Web Application.– Session Hijack, Session Fixation, Session Id Prediction, Session Data
Tampering, Leveraging Session Data for RCE etc.
• Rails provide inbuilt Session Management– The session object is available to application developer as
a Hash/Map to store arbitrary data.– The session object is serialized and stored in
corresponding session storage as per configuration.– Signed cookie is used for session storage by default.
Session Security
http://robertheaton.com/2013/07/22/how-to-hack-a-rails-app-using-its-secret-token/
Not a Good idea !
Session Security: Best Practices
Enforce SSL in order to avoid sniffing of session id
Re-generate session after authentication to avoid session fixation
Store session in database instead of Cookie which is default
Cookie based Session Store are susceptible to Replay Attacks
Authentication
• Multiple Popular Authentication Plugin– Devise– RESTful Authentication– […]
• Devise– Auto-generated Registration, Confirmation, Login,
Forgot Password etc.– Controller filter for enforcing authentication.
Testing Authentication
• Generic Issues– Weak Session Management– Weak Authentication Enforcement– Weak Password Encryption
• Plugin/Gem Specific– Devise Vulnerabilities– Lack of Authentication Enforcement– Timing Attacks– Information Gathering through default message
Are all controllers protected by Authentication System?
Authorization
• Not provided by default in the framework.– Encourages RESTful design.• Easy to implement RBAC on Resources
– Multiple Gem/Plugin available
Example usage of CanCan for Authorizationhttps://github.com/ryanb/cancan
Testing Authorization
• Authorization Plugin or Custom Coded?• Every functionality is RESTful?• Query scoping in Controller
Rails CSRF Protection
CSRF Token generation and checking is enforced by default.
• Application must use Rails Form Tag Helps to generate forms rather than HTML directly.
• HTTP GET is not protected !
Killing Rails CSRF Protection
http://blog.codeclimate.com/blog/2013/03/27/rails-insecure-defaults/
Rails Model Security
• The Business Logic Layer– Database Abstraction through ORM– Entity Relationship Definition– Business Logic
• Common Security Issues– Attribute Mass Assignment
• Mitigated by default in newer version of Rails
– Custom (insecure) SQL Queries– Business Logic Vulnerabilities
Rails Model: Attribute Mass Assignment
The Model
The Controller
The Malicious Input
Rails Model: SQL Queries
Model Scope
Chained Query Interface (ActiveRelation)
Parameterized Qury
Rails Model: Insecure SQL Queries
The application developer should ensure that the Query Interface understand the difference between Query and Data.
Rails Model: SQL Injection Vectors
• ActiveRecord does not escape parameters for certain options:
Source: http://rails-sqli.org/
View Rendering
• Dynamic parameters are encoded by default unless explicitly marked as safe.
• There are scope for Reflected XSS– Strings marked explicitly with html_safe method.– Textile/Markdown Injection– Insecure used of content_tag
Secure Headers
• Rails 3.x is vulnerable to Clickjacking & UI Redressing Type of attacks in default configuration.– Easy Mitigation• gem ‘secureheaders’ in Gemfile
– https://github.com/twitter/secureheaders
Rails: Framework Vulnerabilities
http://www.cvedetails.com/vulnerability-list/vendor_id-12043/product_id-22568/Rubyonrails-Ruby-On-Rails.html
References
• Ruby on Rails Security Guide– http://guides.rubyonrails.org/security.html
• Brakeman Scanner– http://brakemanscanner.org/
• Rails SQLi Examples– http://rails-sqli.org/
• OWASP Cheatsheet for RoR– https://www.owasp.org/index.php/Ruby_on_Rails_Cheatsheet
• Ruby Security Configuration– http://blog.codeclimate.com/blog/2013/03/27/rails-insecure-defaults/
• Ruby Mechanize– http://mechanize.rubyforge.org/
• Ruby Nokogiri– http://nokogiri.org/
• The Noun Project– http://thenounproject.com/
top related