Queramos o no, cuando buscamos vulnerabilidades conocidas en bases de datos de CVEs públicas estamos filtrando información sensible como los productos de software y plataformas que tenemos y/o estamos auditando. Llamarme paranoico pero cuando vi una herramienta que se bajaba las bases de datos de vulnerabilidades y permitía hacer búsquedas locales más rápidas y limitando las peticiones sensibles hacia Internet no dudé en probarla.
Se trata de cve-search, una herramienta para importar CVE (Common Vulnerabilities and Exposures) y CPE (Common Platform Enumeration) a una base de datos MongoDB para facilitar las búsquedas y el tratamiento de CVEs.
cve-search incluye un backend para almacenar vulnerabilidades e información relacionada, un interfaz web intuitivo para buscar y administrar vulnerabilidades, una serie de herramientas para realizar peticiones al sistema y un API web como interfaz.
cve-search lo utilizan ya muchas organizaciones incluyendo los servicios incluyendo el CIRCL (Computer Incident Response Center Luxembourg).
Bases de datos y recopilaciones
La base de datos MongoDB llamada cvedb tiene 11 recopilatorios:
Primero clonamos el repositorio e instalamos las dependencias de Python:
A continuación instalamos MongoDB y configuramos el servicio:
Inicializando la base de datos
Indexación
Interfaz web
Puedes buscar en la base de datos con search.py:
Si quieres buscar todas las vulnerabilidades de WebEx y sólo mostrar las referencias oficiales del fabricante:
También es posible volcar un json para un ID CVE específico:
O puedes usar un bot XMPP:
Volcar los dos últimos CVEs en formato RSS o ATOM:
O mezclarlo con expresiones regulares y comandos. Como por ej.
Sacar los CPEs de un fichero XML de salida de nmap:
U obtener el número de vulnerabilidades con CVSS mayor que 6:
Ya véis la flexibilidad y el juego que da esta herramienta. Podéis encontrar más información y funcionalidades en su Github:
https://github.com/cve-search/cve-search
Se trata de cve-search, una herramienta para importar CVE (Common Vulnerabilities and Exposures) y CPE (Common Platform Enumeration) a una base de datos MongoDB para facilitar las búsquedas y el tratamiento de CVEs.
cve-search incluye un backend para almacenar vulnerabilidades e información relacionada, un interfaz web intuitivo para buscar y administrar vulnerabilidades, una serie de herramientas para realizar peticiones al sistema y un API web como interfaz.
cve-search lo utilizan ya muchas organizaciones incluyendo los servicios incluyendo el CIRCL (Computer Incident Response Center Luxembourg).
Bases de datos y recopilaciones
La base de datos MongoDB llamada cvedb tiene 11 recopilatorios:
- cves (Common Vulnerabilities and Exposure items) - fuente NVD NIST
- cpe (Common Platform Enumeration items) - fuente NVD NIST
- vendor (Official Vendor Statements on CVE Vulnerabilities) - fuente NVD NIST
- cwe (Common Weakness Enumeration items) - fuente NVD NIST
- capec (Common Attack Pattern Enumeration and Classification) - fuente NVD NIST
- ranking (reglas de ranking por grupo) - local cve-search
- d2sec (referencias de exploiting de D2 Elliot Web Exploitation Framework) - fuente d2sec.com
- vFeed (referencias cruzadas con ids CVE (e.g. OVAL, OpenVAS, ...)) - fuente vFeed - proprietary feed - MITRE Reference Key/Maps preferible
- ms - (Microsoft Bulletin (Security Vulnerabilities and Bulletin)) - fuente Microsoft
- exploitdb (Offensive Security - Exploit Database) - fuente offensive security
- info (metadatos de cada recopilatorio como última modificación) - local cve-search
- El caché cpe (Common Platform Enumeration) - fuente MongoDB cvedb collection cpe
- La base de datos de notificaciones - fuente cve-search
- La base de datis de referencias CVInterfaz web
E es una bd de referencias cruzadas de CVE ids contra IDs de fabricantes - source NVD NIST/MITRE
Primero clonamos el repositorio e instalamos las dependencias de Python:
https://github.com/cve-search/cve-search.git
sudo apt-get install python3-pip
sudo pip3 install -r requirements.txt
A continuación instalamos MongoDB y configuramos el servicio:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.3 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb
vi /etc/systemd/system/mongod.service
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
sudo service mongobd start
Inicializando la base de datos
./sbin/db_mgmt.py -p
Importing CVEs for year 2002
Importing CVEs for year 2003
Importing CVEs for year 2004
Importing CVEs for year 2005
Importing CVEs for year 2006
Importing CVEs for year 2007
Importing CVEs for year 2008
Importing CVEs for year 2009
Importing CVEs for year 2010
Importing CVEs for year 2011
Importing CVEs for year 2012
Importing CVEs for year 2013
Importing CVEs for year 2014
Importing CVEs for year 2015
Importing CVEs for year 2016
./sbin/db_mgmt_cpe_dictionary.py
Preparing [##################################################] 115175/115175
./sbin/db_updater.py -c
INFO:root:Starting cves
Preparing [##################################################] 241/241
INFO:root:cves has 79360 elements (18 update)
INFO:root:Starting cpe
Preparing [##################################################] 115175/115175
INFO:root:cpe has 115102 elements (55151 update)
INFO:root:Starting vfeed
Traceback (most recent call last):
File "/home/vmotos/Vicente/tools/cve-search/sbin/db_mgmt_vfeed.py", line 46, in <module>
t.extract('vfeed.db', path=tmppath)
File "/usr/lib/python3.5/tarfile.py", line 2027, in extract
tarinfo = self.getmember(member)
File "/usr/lib/python3.5/tarfile.py", line 1736, in getmember
tarinfo = self._getmember(name)
File "/usr/lib/python3.5/tarfile.py", line 2317, in _getmember
members = self.getmembers()
File "/usr/lib/python3.5/tarfile.py", line 1747, in getmembers
self._load() # all members, we first have to
File "/usr/lib/python3.5/tarfile.py", line 2340, in _load
tarinfo = self.next()
File "/usr/lib/python3.5/tarfile.py", line 2271, in next
self.fileobj.seek(self.offset - 1)
File "/usr/lib/python3.5/gzip.py", line 366, in seek
return self._buffer.seek(offset, whence)
File "/usr/lib/python3.5/_compression.py", line 143, in seek
data = self.read(min(io.DEFAULT_BUFFER_SIZE, offset))
File "/usr/lib/python3.5/gzip.py", line 480, in read
raise EOFError("Compressed file ended before the "
EOFError: Compressed file ended before the end-of-stream marker was reached
INFO:root:vfeed has 0 elements (0 update)
INFO:root:Starting vendor
Cannot open url https://nvd.nist.gov/download/vendorstatements.xml.gz. Bad URL or not connected to the internet?
INFO:root:vendor has 0 elements (0 update)
INFO:root:Starting cwe
Preparing [##################################################] 719/719
INFO:root:cwe has 719 elements (719 update)
INFO:root:Starting capec
Preparing [##################################################] 463/463
INFO:root:capec has 463 elements (463 update)
INFO:root:Starting redis-cache-cpe
Redis server not running on localhost:6379
INFO:root:redis-cache-cpe updated
INFO:root:Starting d2sec
{'url': 'http://www.d2sec.com/exploits/lionwiki_3.0.3_lfi.html', 'id': 'CVE-2009-3534', 'name': 'LionWiki 3.0.3 LFI'}
.....
Preparing [##################################################] 304/304
INFO:root:d2sec has 265 elements (265 update)
INFO:root:Starting ms
INFO:root:ms has 815 elements (815 update)
INFO:root:Starting redis-nist-ref
Redis server not running on localhost:6379
INFO:root:redis-nist-ref has 0 elements (0 update)
INFO:root:Starting exploitdb
Indexación
./sbin/db_fulltext.py
Interfaz web
pip install Flask-PyMongo
cd ./web
python3 ./index.py
UsoPuedes buscar en la base de datos con search.py:
./bin/search.py -p cisco:ios:12.4
./bin/search.py -p cisco:ios:12.4 -o json
./bin/search.py -f nagios -n
./bin/search.py -p microsoft:windows_7 -o html
Si quieres buscar todas las vulnerabilidades de WebEx y sólo mostrar las referencias oficiales del fabricante:
./bin/search.py -p webex: -o csv -v "cisco"
También es posible volcar un json para un ID CVE específico:
./bin/search.py -c CVE-2010-3333
O puedes usar un bot XMPP:
./bin/search_xmpp.py -j mybot@jabber.org -p strongpassword
Volcar los dos últimos CVEs en formato RSS o ATOM:
./bin/dump_last.py -f atom -l 2
O mezclarlo con expresiones regulares y comandos. Como por ej.
Sacar los CPEs de un fichero XML de salida de nmap:
rgrep -Eio ".*? " escaneo.xml --color | awk -F'>' '{print $2}' | cut -d '<' -f1 | sort -u
U obtener el número de vulnerabilidades con CVSS mayor que 6:
./bin/search.py -p cisco | grep "CVSS" | cut -d ":" -f 2 | sort | cut -d "." -f1 | egrep "10|[6-9]" | grep -v "0|1||2||3||4||5" | wc -l
Ya véis la flexibilidad y el juego que da esta herramienta. Podéis encontrar más información y funcionalidades en su Github:
https://github.com/cve-search/cve-search
Ya lo probe!!! esta muy bueno, sobre todo para tener un ambiente controlado.
ResponderEliminarMe gusto!!!
Saludos y gracias por el aporte
me alegra que te haya gustado como a mí. La verdad es que la veo una herramienta bastante útil que, además de darte un plus de privacidad, te permite cierta flexibilidad a la hora de integrarlo con tus propias herramientas.
EliminarUn saludo!
Hola, ¿alguien sabe cómo instalarlo en Ubuntu 20.04? Soy nuevo en Linux.
ResponderEliminar