MONGOLOL
Whoami
class PedroC:
def __init__(self):
self.name = ‘Pedro Candel’
self.email = ‘
[email protected]’
self.nickname = ‘@NN2ed_s4ur0n’
self.role = ‘Security Researcher’
self.interest = [ ‘Reversing’, ‘Malware’, ‘Offensive Security’ ]
self.member_of = [ ‘NavajaNegra’, ‘mlw.re’, ‘OWASP’ ]
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
General Concepts
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Introducción
• MongoDB es un sistema gestor de
base de datos orientado a
documentos del tipo NoSQL (Not
Only SQL) multiplataforma
• Desde 2009 inicialmente
desarrollado por 10gen
• Más de 9 millones de descargas
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Características generales
• No usan SQL ya que no son bases de
datos relacionales
• No se necesitan estructuras fijas
(tablas, columnas etc.)
• En general no soportan ACID
(Atomicity, Consistency, Isolation y
Durability)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Características generales
• Lo que guardamos en la base de
datos son documentos
• MongoDB últimamente está muy de
moda en el mundo del desarrollo
• Tod@s hacemos de sysadmins,
desarrolladores y “hackers”
• Es necesario conocer DevSecOps
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Características generales
• MongoDB guarda los documentos en
BSON (implementación binaria del
JSON)
• Los documentos se guardan en
colecciones, que podrían asemejarse
a las tablas que conocemos de los
sistemas relacionales
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Características generales
• La diferencia principal es que los
documentos no tienen porque tener
los mismos campos e incluso los
tipos de datos pueden ser
diferentes
• No existe un esquema definido
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Características generales
• En definitiva MongoDB es un sistema
mucho más flexible
• Como no hay restricciones, la lógica
principal para controlar la integridad
de los datos, recaerá en la aplicación
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Instalación de MongoDB
• Descargar de
https://www.mongodb.org/downloa
ds#production la última versión
(Current Stable Release: 3.2.1)
• Tip: This distribution does not
include SSL encryption
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Instalación de MongoDB
wget
https://fastdl.mongodb.org/osx
/mongodb-osx-x86_64-3.2.0.tgz
tar -zxvf mongodb-osx-x86_64-
3.2.0.tgz
cd mongodb-osx-x86_64-
3.2.0/bin
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Instalación de MongoDB
./mongod
MongoDB starting : pid=21757
port=27017 dbpath=/data/db 64-
bit host=MAWILIN
mkdir -p ./data/db
./mongod --dbpath ./data/db
waiting for connections on
port 27017
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Instalación de MongoDB
netstat –an | grep 27017
tcp4 0 0 *.27017 *.* LISTEN
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Instalación de MongoDB
• MongoDB no requiere de ningún
proceso de instalación
• Para ejecutar una instancia con los
valores por defecto, tampoco se
necesita configuración
• Todo reside con la ejecución del
binario del demonio
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Instalación de MongoDB
./mongod [--help]
./mongod --port 26116
Cliente:
./mongo
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Uso de MongoDB
• Operaciones de consulta
• Operaciones de actualización de
datos CRUD (Create, Read, Update,
Delete)
• Manejo de índices
• Consultas de agregación (Map-
Reduce y Aggregation Framework)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
• Alta disponibilidad con réplicas:
§ Servidor principal: el único que
acepta modificación o inserción de
datos. Mantiene un log
denominado oplog
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
§ Servidor(es) secundario(s): se
pueden usar para consultar datos,
pero nunca para hacer
modificaciones directamente
sobre ellos
§ Servidores con prioridad 0
§ Servidor oculto (hidden)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
§ Servidor retardado (delayed)
§ Árbitro
§ Oplog
• Consultas sobre la réplica:
db.getReplicationInfo()
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
• Podemos consultarlos con la consola
web incorporada de MondoDB
• Añadir 1000 al puerto por defecto
donde escucha
• Es necesario añadir –rest a mongod
para habilitar todas las funciones
para acceder por API REST
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
./mongod --dbpath ./data/db
–rest
http://localhost:28017/
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
• OpLog:
§ MongoDB es capaz de replicarse
entre servers de forma eficiente y
transparente
§ Estos se comunican entre si para
mantener los datos del conjunto
de réplicas siempre actualizados
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
use local
db.oplog.rs.find().pretty();
rs.status()
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
• Fragmentación (Sharding):
§ El sharding es una herramienta
muy útil para balancear la carga de
datos entre servidores
§ La elección de la clave por la que
se realizará el sharding (shard key)
es muy importante
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
§ En MongoDB, el tamaño de las
particiones no se mide en número
de documentos, si no en MB
§ Por defecto un shard tiene un
tamaño máximo de 64 MB,
aunque es algo que podemos
configurar
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
• GridFS:
§ Es una abstracción de un sistema
de ficheros para MongoDB
§ Empleado para guardar contenido
generado por los usuarios
§ Separación en chunks de 256 KB
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
§ Permite guardar documentos
mayores de 16 MB
§ No restringe las limitaciones de los
sistemas de ficheros
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Administración de MongoDB
§ Implementado con 2 colecciones
show collections;
fs.chunks
fs.files
system.indexes
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Disclaimer
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
No se trata de una vulnerabilidad,
simplemente se trata de una mala o
débil práctica de configuración [de
seguridad] cuando queda expuesta la IP
pública de un servidor sin filtrado y/o
protección permitiendo el acceso por
defecto sin autenticación
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Otros sistemas de Bases de Datos como
Redis, Memcached, ElasticSearch,
CouchDB, Riak, Cassandra, etc...
también se encuentran expuestos sin
autenticación o con credenciales por
defecto
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
• P.e. ElasticSearch ha permitido
"dynamic scripting" ejecutándo
código en el servidor por defecto
• Primera "feature" comunicada en
2012 por Roman Shtylman SERVER-
4216
• https://jira.mongodb.org/browse/SE
RVER-4216
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Searching
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Búsqueda de instancias
• Escaneo de rangos IPv4/IPv6 en
Internet: Caos!
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Búsqueda de instancias
•
Internet Mapping Project, Bell
Labs/Lumeta, 1998+
IPv4 Census 2003-2006
•
• EFF SSL Observatory 2014
•
• RIPE Atlas (slightly different)
• Critical.IO, 2012-2013
Internet Census 2012 (the botnet)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Búsqueda de instancias
• University of Michigan (scans.io)
• Shadowserver
• ErrataSec (R. Graham / masscan)
• ZMAP
• Rapid7, Project Sonar
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Búsqueda de instancias
• Shodan
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Global
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Distribución por Países
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Organizaciones (ISPs)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Versiones
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Dominios
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Sistema Operativo de servidor
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Data breach
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Otras investigaciones
• 30.000 instancias con
aproximadamente 600 TB (595,2 TB)
de datos expuestos (Datos en Julio
de 2015)
• Chris Vickery reportó reportó 25
millones de cuentas expuestas en
bases de datos sin seguridad
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Otras investigaciones
• Aproximadamente 13 millones de
cuentas asociadas a MacKeeper y
sus desarrolladores Kromtech
Alliance
• Hello Kitty (3,3 Millones de cuentas)
• Video Chat OkHello (2,6 Millones de
cuentas)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Otras investigaciones
• Online Gaming site Slingo (2,5
Millones de cuentas)
iFit (570.000 usuarios)
•
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Información expuesta
• Nombres
• Direcciones de correo electrónico
• Códigos postales
• Direcciones IP
• Usuarios
• Contraseñas
•
...
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Colecciones más usuales
•
local
• admin
• db
•
test
• config
• mydb
• …
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Resultados muy pobres
• GridFS (fs.chunks)
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Spain
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
España
Censored L
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
España
Censored L
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Golismeando datos
Censored L
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
EU
sh3llcon – Santander, 2016
@nn2ed_s4ur0n
MONGOLOL
Track My Droid
sh3llcon – Santander, 2
Comentarios de: mongoDB LOL (0)
No hay comentarios