SlideShare une entreprise Scribd logo
1  sur  90
Exploiting NoSQL Like
Never Before
HITB AMS 2014
About Me • Independent Security Researcher
• Member @ OpenSecurity
• Currently Pursuing My Bachelors Degree (Amal Jyothi College of
Engineering)
• Spoken @ a couple of Conferences
• Sleep @ Morning, Researches and Codes @ Night
• And I Live in India (Kerala)
India is Awesome Kerala is
Super Awesome 
Tea Gardens
Boat Rides
Boat Racing
Agenda
• More Emphasis Given on the Server-Client and Server Management
Consoles
• Pentesting Scenarios are given more importance.
• We will not deal with Memory Related Bugs or issues.
• Demos
INTRO TO NOSQL
2 Words “Super COOL”
Key Takeovers
Schema less
“ACID” (atomicity,
consistency,
isolation and
durability)
Not using the
relational model
Built for the 21st
century web
estates
Running well on
clusters
Open-source
Support
Mainly 4 types
Wide Column
Store / Column
Families
Hbase Cassandra
Document
Store
MongoDB CouchDB
Key Value /
Tuple Store
Riak Redis
Graph
Databases
Neo4J DEX
NoSQL Security
Why Developers Need to
Worry ?
Low on Security
Emphasizes on “Trusted Environment”
Weak Authentication Mechanisms or No security by Default.
Man in the Middle Widely
Open Source and API’s Widely Exposed.
API for PHP widely abused.
You Will Love this Part 
ABUSING API CALLS
No Proper Validation in API Calls
Developers Use them to Develop various Applications
PHP is easy to abuse for Mongo ,Couch, Cassandra.
MongoDB
Mongo Trivia
Written in: C++
Main point: Retains some friendly properties of
SQL. (Query, index)
Protocol: Custom, binary (BSON)
Mongod is the "Mongo Daemon” running on Port
27017 by Default
Web Interface Runs on 28017
Mongo is the Client  Mongod
Uses MongoDB Wire Protocol (TCP/IP Socket)
Data is Represented using JSON format
Mongo Architecture
Mongo Client Mongo Client
Mongo Server
Mongo Client
Attackers
Perspective
Mongo Client Mongo Client
Mongo Server
Mongo Client
Sniffing,Enumeration,JS Injection,DOS
JS Attack Surface
Issues
JavaScript Attacks mostly used against MongoDB
Vulnerabilities Keep Popping Up
• Run command RCE
Mongo Shell Functions Purely Based on JavaScript
Possible Chances to Overwrite Functions
Resource Exhaustion
Regex Matching ,plenty of JavaScript operations could be used
Some
Useful
Mongo
Commands
Create DB
• use dbname
Create Collection
• db.createCollection(“collection_name”)
Insert Data
• db.collection_name.insert({user_id:”25”,age:10})
Delete Data
• db.collection_name.remove({user_id:”25”})
Drop
• db.dropDatabase()
• db.collection_name.drop()
Version
• db.version()
Stats
• db.hostInfo ()
Useful Commands for us
db.killOp(opid)
db.listCommands()
db.loadServerScripts()
db.logout()
db.repairDatabase()
db.runCommand(cmdObj)
db.serverStatus()
db.shutdownServer()
db.stats()
db.version()
The list doesn’t end here more API calls @ Mongo References.
Mapping SQL Logical Commands to MongoDB
• and mapped to &&
• or to ||
• ‘=‘ to ‘==‘
Saving JavaScript
Post Exploitation Phase
• Allows the attacker to write JavaScript functions and save them
• Can use for further attacks when needed.
• db.system.js.save(
{
_id : “hitb2014ams" ,
value : function (x, y){ return x + y; }
}
);
• db.loadServerScripts()
Injecting JavaScript
Reference to DB in Mongo
• Mongo Functions get to refer the db object and its main functions
• An attacker who finds an Injection point could abuse this.
• Found in Versions 2.2 or less
• Mongo Patched for versions above.
Does JS Injection end here?
Timing Based Checks
• Application can be tested for time based attacks
• Mongo Shell Supports most of JavaScript functions
• function(){ return sleep(500);} would render the application response
delayed by 5sec.
• Module added to NoSQL framework while testing for JS Injection
attacks
THIS Pointer Reference
• Although mongo blocks reference to the db has ended
• Attacker could use this pointer to return objects and dumping as
always
Vulnerable APP DEMO
What if THIS is Blocked? Version to Rescue
• Version command by default binds to mongo instances defined
functions
• So if an admin blocks the “this” pointer
• function(){return this}
• Function(){return version} or function(){return version())
• Scenario useful when developer uses $where to evaluate js code.
Blocked
Vulnerable APP DEMO
Mongo With PHP
PHP converts parameter with brackets to arrays.
• Already addressed issue in previous researches
Lets Look at Some New vectors
• $exists
• $type
• $all
Vulnerable APP DEMO
Resource Exhaustion
Mongo on 32 bit environment is too easy for attackers (Max Size limit 2GB)
Use command creates arbitrary schemas on the fly
Attacker could run it continuously exhausting the disk space resource as well as
memory.
var i=1;while(1){use i=i+1;}
• An empty database takes up 192Mb
CouchDB
CouchDB Architecture
Couch Architecture
Backend
CouchDB
Couch FUTIL
Interface
Administrator
CouchDB
Attacker Perspective
Backend
CouchDB
Couch FUTIL
Interface
Administrator
Key Features
Written in: Erlang
CouchDB document is a JSON object
Schema-Free
Main point: DB consistency, ease of use
Protocol: HTTP/REST
Distributed database system
Runs on Default Port : 5984,Binds to loopback interface by default
Client uses REST API to communicate with the Backend
Futon Web Interface
Attack Surface
Admin Party = Game Over.
Auth Cookie Sniffable
Credentials Send over Unencrypted Channel
XSPA attacks in Replication (limited to port web server ports)
XSS,HTML Injection in Futon Interface
DOS (Versions on 1.5 and below),File Enumeration attacks
Vulnerabilities
XSS at the token interface
HTML injection can be used by attackers to lure the victim to other
sites.
XSPA Attack can be used in the replication to check whether port is
open or not
Blind File Name Enumeration possible within the Replication
Addressing Auth Cookie
Defaults to Expire within 10 min
Attacker gaining access would want to use these 10 min
Fruitfully
NoSQL Framework kicks in with automation session
grabbing and dumping necessary info.
PHP on Couch Driver
Uses Curl Library to send the requests to the API
Un validated PHP APPS could result in calling Arbitrary API Call Execution
Download PHP on Couch:
https://github.com/dready92/PHP-on-Couch/
Vulnerable APP DEMO
Redis
Redis Architecture
Key Features
• Key Value storage engine.
• Contains Redis Server and Client
• Driven By a Config File
• Documentation is Laugh in a Park
• Redis supports five data structures:
• strings, hashes, lists, sets and ordered sets.
Attacks Discussed
• Bruteforce Redis Passwords
• Denial of Service on the FLY.
• Command Killing
• Config Rewrite
• Arbitrary File Rewrite
• Blind File Enumeration (usefull in pentests)
Redis Version
• Redis Version 2.6
• No Support For Scripting.
• Redis Introduced version 2.8
• Added Ability for LUA Scripts
Did We Just Say Scripting ?
Welcome to Redis LUA Script Engine and
Basics
• Redis uses LUA to manage scripts
• LUA engine is properly sandboxed and offers enough security
• Global variables protection
• Scripts are Executed using eval (Available from Redis 2.6)
• Limited number of available of Available Libraries for Use
• base lib.
• table lib.
• string lib.
• math lib.
• debug lib.
• cjson lib.
• cmsgpack lib.
Key Points
• EVAL and EVALSHA are used to evaluate scripts using the Lua
interpreter built into Redis.
• SCRIPT KILL,LISTS,EXISTS
• Important NB: When a script is running no other functions can be
accessed or any operations can be performed
Sample Lua One Line DOS
• redis-cli eval "$(cat test.lua)" 0
• test.lua
Commands Disabled By an Attacker
• rename-command API Call Used
• Sample Command
• rename-command CONFIG l33tshit
• rename-command CONFIG "“
• Disables the command completely
Arbitrary File Rewrite
• CONFIG GET
• Gives the Current set of Configuration
• CONFIG SET
• Sets the configuration of the default command
• CONFIG SET dir /var/www
File Name Enumeration
• Restricted Environment
• Allows to use dofile (open file in lua scripting)
• Although file doesn’t open gives the file or directory exists or not
• eval "dofile('/var/www')" 0
• Directory Exists but cant open file
• eval "dofile('/var/wwws')" 0
• No such directory exists
Vulnerable APP DEMO
Cassandra
Key Takeaways
• Written in: Java
• Main point: Store huge datasets in "almost" SQL
• Protocol: CQL3 & Thrift
• CQL3 is very similar SQL, but with some limitations that come from
the scalability (most notably: no JOINs, no aggregate functions.)
• Runs on Port : 9160
Sad Facts ?
• No OR
• No UNION
• No subrequests
• Terms must be indexed
• Primary key can only be queried for
Security Issues
• Cassandra model › Keyspace (=database) › ColumnFamily > Data
• CQL injection on Web Apps
• Shell Commands can be useful to attacker(during privilege
escalation).
• SOURCE command
• Reads the contents of the file
• Database Enumeration and Dumping using NoSQL Exploitation
Framework
H-Base
Key Points
• Written in: Java
• Main point: Billions of rows X millions of columns
• Protocol: HTTP/REST (also Thrift)
• Port:6379,8080(Rest API)
• Emphasis on Trusted Environment
Security Issues
• By Default offers No Security
• Man in The Middle Attacks
• REST API exposed
• Database Scanning and Enumeration using NoSQL Exploitation
Framework
NoSQL DB’s Never End!!
More Research Needed
• Ne04j,Memcache,Riak are under scanners(Some Discussed
Vulnerabilities applies to those also)
• Support for Neo4j,Memcache and Riak soon to be added
• Memory Leaks and Overflows on the Rise
• An excellent address to Ne04j security issue was written recently
• Link:http://blog.scrt.ch/2014/05/09/neo4j-enter-the-graphdb/
Is Automation Needed?
Do We have a framework ?
NoSQL Exploitation Framework
Key Points
A framework of one of its Kind
Open Source, Written In Python
• I am not a hardcode coder(Bugs are prone )
Over 1200 lines of code 
Documented API’s
Code Download:nosqlproject.com
Key Features
• Support for Mongo,Couch,Redis-Base and Cassandra
• Support for:
• NoSQL Run Web Applications
• Tests for JavaScript Attacks
• Mongo DB $ Attacks
• Couch PHP Driver Attack Vectors
• Multithreaded Mass IP List Scanner
And the List Continues
• Database Cloning Feature
• Brute force & Dictionary attacks
• Post Exploitation Module Integrated
• Shodan IP List Grabber
• Sniffing DB credentials and cookies
• Added More Payload List
Future Updates
• Updated Cassandra and HBase attacks
• Resource Exhaustion
• Support for Riak,Memcache and Ne04j on its way.
• More Stable (Bug Less )
Bugs or Contribute 
• Official Mailing List: feedback@nosqlproject.com
• Contribute By pulling from GITHUB.
References
• http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
Thank You
Grab Me On
• Facebook : francis.alexander.33
• Twitter: @torque59
• Github: torque59
• LinkedIn:

Contenu connexe

Tendances

Secure360 - Extracting Password from Windows
Secure360 - Extracting Password from WindowsSecure360 - Extracting Password from Windows
Secure360 - Extracting Password from WindowsScott Sutherland
 
Understanding the Solr Security Framekwork: Presented by Anshum Gupta, IBM
Understanding the Solr Security Framekwork: Presented by Anshum Gupta, IBMUnderstanding the Solr Security Framekwork: Presented by Anshum Gupta, IBM
Understanding the Solr Security Framekwork: Presented by Anshum Gupta, IBMLucidworks
 
Attack All the Layers: What's Working during Pentests (OWASP NYC)
Attack All the Layers: What's Working during Pentests (OWASP NYC)Attack All the Layers: What's Working during Pentests (OWASP NYC)
Attack All the Layers: What's Working during Pentests (OWASP NYC)Scott Sutherland
 
Python & Cassandra - Best Friends
Python & Cassandra - Best FriendsPython & Cassandra - Best Friends
Python & Cassandra - Best FriendsJon Haddad
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundDirkjanMollema
 
10 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 2015
10 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 201510 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 2015
10 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 2015Scott Sutherland
 
Watch How The Giants Fall: Learning from Bug Bounty Results
Watch How The Giants Fall: Learning from Bug Bounty ResultsWatch How The Giants Fall: Learning from Bug Bounty Results
Watch How The Giants Fall: Learning from Bug Bounty Resultsjtmelton
 
Keeping your Kubernetes Cluster Secure
Keeping your Kubernetes Cluster SecureKeeping your Kubernetes Cluster Secure
Keeping your Kubernetes Cluster SecureGene Gotimer
 
SANS @Night Talk: SQL Injection Exploited
SANS @Night Talk: SQL Injection ExploitedSANS @Night Talk: SQL Injection Exploited
SANS @Night Talk: SQL Injection ExploitedMicah Hoffman
 
Software Development in the Age of Breaches
Software Development in the Age of BreachesSoftware Development in the Age of Breaches
Software Development in the Age of BreachesKarthik Bhat
 
Do you lose sleep at night?
Do you lose sleep at night?Do you lose sleep at night?
Do you lose sleep at night?Nathan Van Gheem
 
InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017Mandi Walls
 
Oracle Database 12c Attack Vectors
Oracle Database 12c Attack VectorsOracle Database 12c Attack Vectors
Oracle Database 12c Attack VectorsMartin Toshev
 
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...Christian Schneider
 
Mainframe Hacking - Derbycon 5.0
Mainframe Hacking - Derbycon 5.0Mainframe Hacking - Derbycon 5.0
Mainframe Hacking - Derbycon 5.0bigendiansmalls
 
2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation
2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation
2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial EmulationScott Sutherland
 

Tendances (20)

Secure360 - Extracting Password from Windows
Secure360 - Extracting Password from WindowsSecure360 - Extracting Password from Windows
Secure360 - Extracting Password from Windows
 
Understanding the Solr Security Framekwork: Presented by Anshum Gupta, IBM
Understanding the Solr Security Framekwork: Presented by Anshum Gupta, IBMUnderstanding the Solr Security Framekwork: Presented by Anshum Gupta, IBM
Understanding the Solr Security Framekwork: Presented by Anshum Gupta, IBM
 
Attack All the Layers: What's Working during Pentests (OWASP NYC)
Attack All the Layers: What's Working during Pentests (OWASP NYC)Attack All the Layers: What's Working during Pentests (OWASP NYC)
Attack All the Layers: What's Working during Pentests (OWASP NYC)
 
Injection flaw teaser
Injection flaw teaserInjection flaw teaser
Injection flaw teaser
 
Anatomy of a Cloud Hack
Anatomy of a Cloud HackAnatomy of a Cloud Hack
Anatomy of a Cloud Hack
 
Python & Cassandra - Best Friends
Python & Cassandra - Best FriendsPython & Cassandra - Best Friends
Python & Cassandra - Best Friends
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHound
 
10 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 2015
10 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 201510 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 2015
10 Deadly Sins of SQL Server Configuration - APPSEC CALIFORNIA 2015
 
JavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir Džaferović
JavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir DžaferovićJavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir Džaferović
JavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir Džaferović
 
Watch How The Giants Fall: Learning from Bug Bounty Results
Watch How The Giants Fall: Learning from Bug Bounty ResultsWatch How The Giants Fall: Learning from Bug Bounty Results
Watch How The Giants Fall: Learning from Bug Bounty Results
 
Keeping your Kubernetes Cluster Secure
Keeping your Kubernetes Cluster SecureKeeping your Kubernetes Cluster Secure
Keeping your Kubernetes Cluster Secure
 
SANS @Night Talk: SQL Injection Exploited
SANS @Night Talk: SQL Injection ExploitedSANS @Night Talk: SQL Injection Exploited
SANS @Night Talk: SQL Injection Exploited
 
Software Development in the Age of Breaches
Software Development in the Age of BreachesSoftware Development in the Age of Breaches
Software Development in the Age of Breaches
 
Do you lose sleep at night?
Do you lose sleep at night?Do you lose sleep at night?
Do you lose sleep at night?
 
InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017
 
Oracle Database 12c Attack Vectors
Oracle Database 12c Attack VectorsOracle Database 12c Attack Vectors
Oracle Database 12c Attack Vectors
 
Unsafe SSL webinar
Unsafe SSL webinarUnsafe SSL webinar
Unsafe SSL webinar
 
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
 
Mainframe Hacking - Derbycon 5.0
Mainframe Hacking - Derbycon 5.0Mainframe Hacking - Derbycon 5.0
Mainframe Hacking - Derbycon 5.0
 
2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation
2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation
2017 Q1 Arcticcon - Meet Up - Adventures in Adversarial Emulation
 

Similaire à Exploiting NoSQL Like Never Before

Experience sql server on l inux and docker
Experience sql server on l inux and dockerExperience sql server on l inux and docker
Experience sql server on l inux and dockerBob Ward
 
Brk2051 sql server on linux and docker
Brk2051 sql server on linux and dockerBrk2051 sql server on linux and docker
Brk2051 sql server on linux and dockerBob Ward
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development SecuritySam Bowne
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development SecurityCISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development SecuritySam Bowne
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development SecuritySam Bowne
 
Azure - Data Platform
Azure - Data PlatformAzure - Data Platform
Azure - Data Platformgiventocode
 
Bootcamp 2017 - SQL Server on Linux
Bootcamp 2017 - SQL Server on LinuxBootcamp 2017 - SQL Server on Linux
Bootcamp 2017 - SQL Server on LinuxMaximiliano Accotto
 
android sqlite
android sqliteandroid sqlite
android sqliteDeepa Rani
 
Nodejs - Should Ruby Developers Care?
Nodejs - Should Ruby Developers Care?Nodejs - Should Ruby Developers Care?
Nodejs - Should Ruby Developers Care?Felix Geisendörfer
 
Nordic infrastructure Conference 2017 - SQL Server on Linux Overview
Nordic infrastructure Conference 2017 - SQL Server on Linux OverviewNordic infrastructure Conference 2017 - SQL Server on Linux Overview
Nordic infrastructure Conference 2017 - SQL Server on Linux OverviewTravis Wright
 
Michael stack -the state of apache h base
Michael stack -the state of apache h baseMichael stack -the state of apache h base
Michael stack -the state of apache h basehdhappy001
 
Serverless Web Apps using API Gateway, Lambda and DynamoDB
Serverless Web Apps using API Gateway, Lambda and DynamoDBServerless Web Apps using API Gateway, Lambda and DynamoDB
Serverless Web Apps using API Gateway, Lambda and DynamoDBAmazon Web Services
 
Data Handning with Sqlite for Android
Data Handning with Sqlite for AndroidData Handning with Sqlite for Android
Data Handning with Sqlite for AndroidJakir Hossain
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 
Accesso ai dati con Azure Data Platform
Accesso ai dati con Azure Data PlatformAccesso ai dati con Azure Data Platform
Accesso ai dati con Azure Data PlatformLuca Di Fino
 
SQL Server vNext on Linux
SQL Server vNext on LinuxSQL Server vNext on Linux
SQL Server vNext on LinuxTravis Wright
 
Brk3288 sql server v.next with support on linux, windows and containers was...
Brk3288 sql server v.next with support on linux, windows and containers   was...Brk3288 sql server v.next with support on linux, windows and containers   was...
Brk3288 sql server v.next with support on linux, windows and containers was...Bob Ward
 

Similaire à Exploiting NoSQL Like Never Before (20)

Experience sql server on l inux and docker
Experience sql server on l inux and dockerExperience sql server on l inux and docker
Experience sql server on l inux and docker
 
Brk2051 sql server on linux and docker
Brk2051 sql server on linux and dockerBrk2051 sql server on linux and docker
Brk2051 sql server on linux and docker
 
Why ruby and rails
Why ruby and railsWhy ruby and rails
Why ruby and rails
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
 
SQL on linux
SQL on linuxSQL on linux
SQL on linux
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development SecurityCISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
 
Azure - Data Platform
Azure - Data PlatformAzure - Data Platform
Azure - Data Platform
 
Bootcamp 2017 - SQL Server on Linux
Bootcamp 2017 - SQL Server on LinuxBootcamp 2017 - SQL Server on Linux
Bootcamp 2017 - SQL Server on Linux
 
android sqlite
android sqliteandroid sqlite
android sqlite
 
Nodejs - Should Ruby Developers Care?
Nodejs - Should Ruby Developers Care?Nodejs - Should Ruby Developers Care?
Nodejs - Should Ruby Developers Care?
 
Nordic infrastructure Conference 2017 - SQL Server on Linux Overview
Nordic infrastructure Conference 2017 - SQL Server on Linux OverviewNordic infrastructure Conference 2017 - SQL Server on Linux Overview
Nordic infrastructure Conference 2017 - SQL Server on Linux Overview
 
Power of Azure Devops
Power of Azure DevopsPower of Azure Devops
Power of Azure Devops
 
Michael stack -the state of apache h base
Michael stack -the state of apache h baseMichael stack -the state of apache h base
Michael stack -the state of apache h base
 
Serverless Web Apps using API Gateway, Lambda and DynamoDB
Serverless Web Apps using API Gateway, Lambda and DynamoDBServerless Web Apps using API Gateway, Lambda and DynamoDB
Serverless Web Apps using API Gateway, Lambda and DynamoDB
 
Data Handning with Sqlite for Android
Data Handning with Sqlite for AndroidData Handning with Sqlite for Android
Data Handning with Sqlite for Android
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
Accesso ai dati con Azure Data Platform
Accesso ai dati con Azure Data PlatformAccesso ai dati con Azure Data Platform
Accesso ai dati con Azure Data Platform
 
SQL Server vNext on Linux
SQL Server vNext on LinuxSQL Server vNext on Linux
SQL Server vNext on Linux
 
Brk3288 sql server v.next with support on linux, windows and containers was...
Brk3288 sql server v.next with support on linux, windows and containers   was...Brk3288 sql server v.next with support on linux, windows and containers   was...
Brk3288 sql server v.next with support on linux, windows and containers was...
 

Dernier

Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Lucknow
 
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一Fs
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一Fs
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Excelmac1
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一Fs
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Paul Calvano
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 

Dernier (20)

young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
 
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 

Exploiting NoSQL Like Never Before

  • 1. Exploiting NoSQL Like Never Before HITB AMS 2014
  • 2. About Me • Independent Security Researcher • Member @ OpenSecurity • Currently Pursuing My Bachelors Degree (Amal Jyothi College of Engineering) • Spoken @ a couple of Conferences • Sleep @ Morning, Researches and Codes @ Night • And I Live in India (Kerala)
  • 3. India is Awesome Kerala is Super Awesome 
  • 7. Agenda • More Emphasis Given on the Server-Client and Server Management Consoles • Pentesting Scenarios are given more importance. • We will not deal with Memory Related Bugs or issues. • Demos
  • 10. Key Takeovers Schema less “ACID” (atomicity, consistency, isolation and durability) Not using the relational model Built for the 21st century web estates Running well on clusters Open-source Support
  • 11. Mainly 4 types Wide Column Store / Column Families Hbase Cassandra Document Store MongoDB CouchDB Key Value / Tuple Store Riak Redis Graph Databases Neo4J DEX
  • 12.
  • 14. Why Developers Need to Worry ?
  • 15. Low on Security Emphasizes on “Trusted Environment” Weak Authentication Mechanisms or No security by Default. Man in the Middle Widely Open Source and API’s Widely Exposed. API for PHP widely abused.
  • 16. You Will Love this Part 
  • 18. No Proper Validation in API Calls Developers Use them to Develop various Applications PHP is easy to abuse for Mongo ,Couch, Cassandra.
  • 20. Mongo Trivia Written in: C++ Main point: Retains some friendly properties of SQL. (Query, index) Protocol: Custom, binary (BSON) Mongod is the "Mongo Daemon” running on Port 27017 by Default Web Interface Runs on 28017 Mongo is the Client  Mongod Uses MongoDB Wire Protocol (TCP/IP Socket) Data is Represented using JSON format
  • 22. Mongo Client Mongo Client Mongo Server Mongo Client
  • 23. Attackers Perspective Mongo Client Mongo Client Mongo Server Mongo Client Sniffing,Enumeration,JS Injection,DOS
  • 25. Issues JavaScript Attacks mostly used against MongoDB Vulnerabilities Keep Popping Up • Run command RCE Mongo Shell Functions Purely Based on JavaScript Possible Chances to Overwrite Functions Resource Exhaustion Regex Matching ,plenty of JavaScript operations could be used
  • 26. Some Useful Mongo Commands Create DB • use dbname Create Collection • db.createCollection(“collection_name”) Insert Data • db.collection_name.insert({user_id:”25”,age:10}) Delete Data • db.collection_name.remove({user_id:”25”}) Drop • db.dropDatabase() • db.collection_name.drop() Version • db.version() Stats • db.hostInfo ()
  • 27. Useful Commands for us db.killOp(opid) db.listCommands() db.loadServerScripts() db.logout() db.repairDatabase()
  • 29. Mapping SQL Logical Commands to MongoDB • and mapped to && • or to || • ‘=‘ to ‘==‘
  • 31. Post Exploitation Phase • Allows the attacker to write JavaScript functions and save them • Can use for further attacks when needed. • db.system.js.save( { _id : “hitb2014ams" , value : function (x, y){ return x + y; } } ); • db.loadServerScripts()
  • 33. Reference to DB in Mongo • Mongo Functions get to refer the db object and its main functions • An attacker who finds an Injection point could abuse this. • Found in Versions 2.2 or less • Mongo Patched for versions above. Does JS Injection end here?
  • 34. Timing Based Checks • Application can be tested for time based attacks • Mongo Shell Supports most of JavaScript functions • function(){ return sleep(500);} would render the application response delayed by 5sec. • Module added to NoSQL framework while testing for JS Injection attacks
  • 35. THIS Pointer Reference • Although mongo blocks reference to the db has ended • Attacker could use this pointer to return objects and dumping as always
  • 37. What if THIS is Blocked? Version to Rescue • Version command by default binds to mongo instances defined functions • So if an admin blocks the “this” pointer • function(){return this} • Function(){return version} or function(){return version()) • Scenario useful when developer uses $where to evaluate js code. Blocked
  • 39. Mongo With PHP PHP converts parameter with brackets to arrays. • Already addressed issue in previous researches Lets Look at Some New vectors • $exists • $type • $all
  • 41. Resource Exhaustion Mongo on 32 bit environment is too easy for attackers (Max Size limit 2GB) Use command creates arbitrary schemas on the fly Attacker could run it continuously exhausting the disk space resource as well as memory. var i=1;while(1){use i=i+1;} • An empty database takes up 192Mb
  • 44.
  • 47. Key Features Written in: Erlang CouchDB document is a JSON object Schema-Free Main point: DB consistency, ease of use Protocol: HTTP/REST Distributed database system Runs on Default Port : 5984,Binds to loopback interface by default Client uses REST API to communicate with the Backend Futon Web Interface
  • 48. Attack Surface Admin Party = Game Over. Auth Cookie Sniffable Credentials Send over Unencrypted Channel XSPA attacks in Replication (limited to port web server ports) XSS,HTML Injection in Futon Interface DOS (Versions on 1.5 and below),File Enumeration attacks
  • 49. Vulnerabilities XSS at the token interface HTML injection can be used by attackers to lure the victim to other sites. XSPA Attack can be used in the replication to check whether port is open or not Blind File Name Enumeration possible within the Replication
  • 50. Addressing Auth Cookie Defaults to Expire within 10 min Attacker gaining access would want to use these 10 min Fruitfully NoSQL Framework kicks in with automation session grabbing and dumping necessary info.
  • 51. PHP on Couch Driver Uses Curl Library to send the requests to the API Un validated PHP APPS could result in calling Arbitrary API Call Execution Download PHP on Couch: https://github.com/dready92/PHP-on-Couch/
  • 52.
  • 53.
  • 55. Redis
  • 57.
  • 58. Key Features • Key Value storage engine. • Contains Redis Server and Client • Driven By a Config File • Documentation is Laugh in a Park • Redis supports five data structures: • strings, hashes, lists, sets and ordered sets.
  • 59. Attacks Discussed • Bruteforce Redis Passwords • Denial of Service on the FLY. • Command Killing • Config Rewrite • Arbitrary File Rewrite • Blind File Enumeration (usefull in pentests)
  • 60. Redis Version • Redis Version 2.6 • No Support For Scripting. • Redis Introduced version 2.8 • Added Ability for LUA Scripts
  • 61. Did We Just Say Scripting ?
  • 62. Welcome to Redis LUA Script Engine and Basics • Redis uses LUA to manage scripts • LUA engine is properly sandboxed and offers enough security • Global variables protection • Scripts are Executed using eval (Available from Redis 2.6)
  • 63. • Limited number of available of Available Libraries for Use • base lib. • table lib. • string lib. • math lib. • debug lib. • cjson lib. • cmsgpack lib.
  • 64. Key Points • EVAL and EVALSHA are used to evaluate scripts using the Lua interpreter built into Redis. • SCRIPT KILL,LISTS,EXISTS • Important NB: When a script is running no other functions can be accessed or any operations can be performed
  • 65. Sample Lua One Line DOS • redis-cli eval "$(cat test.lua)" 0 • test.lua
  • 66. Commands Disabled By an Attacker • rename-command API Call Used • Sample Command • rename-command CONFIG l33tshit • rename-command CONFIG "“ • Disables the command completely
  • 67. Arbitrary File Rewrite • CONFIG GET • Gives the Current set of Configuration • CONFIG SET • Sets the configuration of the default command • CONFIG SET dir /var/www
  • 68. File Name Enumeration • Restricted Environment • Allows to use dofile (open file in lua scripting) • Although file doesn’t open gives the file or directory exists or not • eval "dofile('/var/www')" 0 • Directory Exists but cant open file • eval "dofile('/var/wwws')" 0 • No such directory exists
  • 69.
  • 72. Key Takeaways • Written in: Java • Main point: Store huge datasets in "almost" SQL • Protocol: CQL3 & Thrift • CQL3 is very similar SQL, but with some limitations that come from the scalability (most notably: no JOINs, no aggregate functions.) • Runs on Port : 9160
  • 73. Sad Facts ? • No OR • No UNION • No subrequests • Terms must be indexed • Primary key can only be queried for
  • 74. Security Issues • Cassandra model › Keyspace (=database) › ColumnFamily > Data • CQL injection on Web Apps • Shell Commands can be useful to attacker(during privilege escalation). • SOURCE command • Reads the contents of the file • Database Enumeration and Dumping using NoSQL Exploitation Framework
  • 75.
  • 77. Key Points • Written in: Java • Main point: Billions of rows X millions of columns • Protocol: HTTP/REST (also Thrift) • Port:6379,8080(Rest API) • Emphasis on Trusted Environment
  • 78. Security Issues • By Default offers No Security • Man in The Middle Attacks • REST API exposed • Database Scanning and Enumeration using NoSQL Exploitation Framework
  • 79. NoSQL DB’s Never End!! More Research Needed • Ne04j,Memcache,Riak are under scanners(Some Discussed Vulnerabilities applies to those also) • Support for Neo4j,Memcache and Riak soon to be added • Memory Leaks and Overflows on the Rise • An excellent address to Ne04j security issue was written recently • Link:http://blog.scrt.ch/2014/05/09/neo4j-enter-the-graphdb/
  • 80. Is Automation Needed? Do We have a framework ?
  • 82. Key Points A framework of one of its Kind Open Source, Written In Python • I am not a hardcode coder(Bugs are prone ) Over 1200 lines of code  Documented API’s Code Download:nosqlproject.com
  • 83. Key Features • Support for Mongo,Couch,Redis-Base and Cassandra • Support for: • NoSQL Run Web Applications • Tests for JavaScript Attacks • Mongo DB $ Attacks • Couch PHP Driver Attack Vectors • Multithreaded Mass IP List Scanner
  • 84. And the List Continues • Database Cloning Feature • Brute force & Dictionary attacks • Post Exploitation Module Integrated • Shodan IP List Grabber • Sniffing DB credentials and cookies • Added More Payload List
  • 85. Future Updates • Updated Cassandra and HBase attacks • Resource Exhaustion • Support for Riak,Memcache and Ne04j on its way. • More Stable (Bug Less )
  • 86.
  • 87. Bugs or Contribute  • Official Mailing List: feedback@nosqlproject.com • Contribute By pulling from GITHUB.
  • 90. Grab Me On • Facebook : francis.alexander.33 • Twitter: @torque59 • Github: torque59 • LinkedIn:

Notes de l'éditeur

  1. Opensecurity a community of like minded people for security,organizes yearly conference’s on information and security.
  2. Schema less means No schema required: Data can be inserted in a NoSQL database without first defining a rigid database schema. As a corollary, the format of the data being inserted can be changed at any time, without application disruption. This provides immense application flexibility, which ultimately delivers substantial business flexibility.
  3. Low on Security Discuss various encryption issues
  4. MongoDB wire Protocol is a simple socket-based, request-response style protocol. Clients communicate with the database server through a regular TCP/IP socket.
  5. Since Mongo uses Javascript ,there has been lately a lot of abuse (it uses the V8 engine for version greater than 2.4 before used Spider Monkey) RCE for mongo 2.2 is already an metasploit module. Locked js environment but possibility to overwrite certain prototypes Resource exhaustion
  6. db.killOp(opid) kills the current operation in the db db.listCommands() lists all the db commands db.loadServerScripts() loads all the scripts in db.system.js run a database command. if cmdObj is a string, turns it into { cmdObj : 1 }
  7. Rather than writing several js functions needed Attacker can save harmful scripts and call eval to evaluate the scripts db.loadServerScripts() loads script from the system.js collectionn
  8. Db is database object in mongo shell
  9. $where evaluates a js code ,if it returns one then it then it returns true .
  10. Write new vectors exists, checks for whether document $exists Matches documents that have the specified field. $type Selects documents if a field is of the specified type.if char then return all documents with char $all Matches arrays that contain all elements specified in the query.
  11. XSPA attacks in Replication (limited to port web server ports) File enumeration
  12. Ports that have web i
  13. _all_dbs,_changes
  14. _design api call is used to fetch the documents And the _queryAndTest is used to give the request directly via Curl
  15. Documentation allows attackers to specifically target redis,
  16. Used to list available scripts,kill available scripts
  17. Consider a case scenario where we have an webapp running on apache server By rewriting the location to
  18. Php app is broken somewhat (I had a demo for it )