Archive for December, 2008

Auditoría de caja negra sobre Oracle TNS Listener.

|

TNS Listener (Transparent Network Substrate, Sustrato de red transparente) es el nombre por el que se conocen las instancias de BBDD Oracle en una red.
En este post haremos una breve introducción sobre los primeros pasos a dar en una auditoría de caja negra sobre estas instancias.
Lo primero es detectarlas, el puerto habitual es el 1522, no obstante y dependiendo del sistema pueden existir multitud de instancias de BBDD.
Para detectarlas lo más sencillo es utilizar Nmap con las opciones -sV, tal como vemos a continuación:

PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd
111/tcp open rpcbind
1414/tcp open ibm-mqseries IBM WebSphere MQ Listener
1532/tcp open oracle-tns Oracle TNS Listener
1535/tcp open oracle-tns Oracle TNS Listener

7100/tcp open unknown
9423/tcp open unknown

El en ejemplo podemos apreciar un par de instancias (puertos 1532 y 1535).
La idea a continuación es sacar la versión del TNS Listener para buscar vulnerabilidades asociadas, identificar el SID (dentificador interno que utilizará Oracle para referenciar a la base de datos), comprobar el control de accesos, y en caso de que exista intentar sacar cuentas por defecto.

Versión del TNS Listener.
Tenemos varias herramientas para realizar esto. Particularmente me gusta mucho el ora-ver, del toolkit OAK (Oracle Assesment Kit). Funciona sobre Windows.
veamos un ejemplo de uso:

C:\Documents and Settings\dmedianero\Escritorio\Tools\Oracle Assesment Kit>ora-ver.exe -l servidor_oracle 1523

Packet: 1
Size: 343
Type: TNS_DATA
Data Flags: 00
Type: Unknown

0000 01 57 00 00 06 00 00 00 00 00 54 4E 53 4C 53 4E .W……..TNSLSN
0010 52 20 66 6F 72 20 4C 69 6E 75 78 3A 20 56 65 72 R for Linux: Ver
0020 73 69 6F 6E 20 39 2E 32 2E 30 2E 35 2E 30 20 2D sion 9.2.0.5.0 -
0030 20 50 72 6F 64 75 63 74 69 6F 6E 0A 09 54 4E 53 Production..TNS
0040 20 66 6F 72 20 4C 69 6E 75 78 3A 20 56 65 72 73 for Linux: Vers
0050 69 6F 6E 20 39 2E 32 2E 30 2E 35 2E 30 20 2D 20 ion 9.2.0.5.0 -
0060 50 72 6F 64 75 63 74 69 6F 6E 0A 09 4F 72 61 63 Production..Orac
0070 6C 65 20 42 65 71 75 65 61 74 68 20 4E 54 20 50 le Bequeath NT P
0080 72 6F 74 6F 63 6F 6C 20 41 64 61 70 74 65 72 20 rotocol Adapter
0090 66 6F 72 20 4C 69 6E 75 78 3A 20 56 65 72 73 69 for Linux: Versi
00A0 6F 6E 20 39 2E 32 2E 30 2E 35 2E 30 20 2D 20 50 on 9.2.0.5.0 - P
00B0 72 6F 64 75 63 74 69 6F 6E 0A 09 55 6E 69 78 20 roduction..Unix
00C0 44 6F 6D 61 69 6E 20 53 6F 63 6B 65 74 20 49 50 Domain Socket IP
00D0 43 20 4E 54 20 50 72 6F 74 6F 63 6F 6C 20 41 64 C NT Protocol Ad
00E0 61 70 74 6F 72 20 66 6F 72 20 4C 69 6E 75 78 3A aptor for Linux:
00F0 20 56 65 72 73 69 6F 6E 20 39 2E 32 2E 30 2E 35 Version 9.2.0.5
0100 2E 30 20 2D 20 50 72 6F 64 75 63 74 69 6F 6E 0A .0 - Production.
0110 09 54 43 50 2F 49 50 20 4E 54 20 50 72 6F 74 6F .TCP/IP NT Proto
0120 63 6F 6C 20 41 64 61 70 74 65 72 20 66 6F 72 20 col Adapter for
0130 4C 69 6E 75 78 3A 20 56 65 72 73 69 6F 6E 20 39 Linux: Version 9
0140 2E 32 2E 30 2E 35 2E 30 20 2D 20 50 72 6F 64 75 .2.0.5.0 - Produ
0150 63 74 69 6F 6E 2C 2C ction,,

Como podemos apreciar tenemos la versión 9.2.0.5.0. El siguiente paso sería buscar vulnerabilidades conocidas sobre dicha versión. En este caso tenemos una importante CVE-2005-0298.
Ya tenemos una linea de explotación.

Consiguiendo SID, Username y password.

El siguiente paso es obtener el SID y el username. Para ello el OAK nos proporciona binarios que se encargan de realizar búsquedas por diccionario, el ora-getsid:


C:\Documents and Settings\dmedianero\Escritorio\Tools\Oracle Assesment Kit>ora-getsid.exe

Oracle Assessment Kit [OAK]
Guess a SID

ora-getsid host port sidlistfile [suffix]

David Litchfield
(david@databasesecurity.com)
10th February 2007

Para enumerar usuarios hay que tener primero el SID de la base de datos. Esto puede dar muchos quebraderos de cabeza si el SID no se encuentra en nuestro diccionario.
Hay un script en perl que nos permite de manera simple extraer el SID. Se llama tnscmd.pl.
Veamos un ejemplo de enumeración mediante tnscmd.pl:

C:\Documents and Settings\dmedianero\Escritorio\Tools>perl tnscmd.pl -p 1532 -h servidor_oracle

sending (CONNECT_DATA=(COMMAND=ping)) to servidor_oracle:1532
writing 87 bytes
reading
.P……”..D(DESCRIPTION=(TMP=)(VSNNUM=153093376)(ERR=0)(ALIAS=LISTENER_BBDD_EMPLEADOS))

De lo que deducimos que el SID es BBDD_EMPLEADOS.
Lo siguiente es enumerar usuarios, para ello tenemos utilizamos el OAK con su binario ora-userenum:

C:\Documents and Settings\dmedianero\Escritorio\Tools\Oracle Assesment Kit>ora-userenum.exe

Oracle Assessment Kit [OAK]
Enumerate usernames

ora-userenum host port sid userlistfile

David Litchfield
(david@databasesecurity.com)
10th February 2007

La aplicación trae algunos diccionarios, no obstante hay muchos disponibles en la red.
Es más que recomendable probar con los usuarios por defecto de ORACLE.

Otra herramienta muy útil para realizar ataques por diccionario contra contraseñas es la herramienta orabrute.
Lo que más me gusta de esta herramienta es que trae un gran diccionario de contraseñas (5MB).

Quiero destacar que hay varias herramientas públicas disponibles, he utilizado fundamentalmente OAK porque es la que más me gusta, pero tenemos algunas como orabf, sidguess, checkpwd, etc.
Hay varias herramientas comerciales al respecto como NGSSquirreL y AppDetectivePro for Oracle.

Para profundizar el tema dejo algunos enlaces interesantes:

Database Security. Sitio web sobre seguridad centrado en BBDD, hay herramientas y documentación muy interesante.
Red Database Security. El sitio por excelencia sobre seguridad en Oracle. En él podemos encontrar abundante documentación, Exploits, un blog de gran calidad y mucho más.

Ademas recomiendo un par de libros más que interesantes:
Oracle-Hackers-Handbook-Hacking-Defending
Practical-Oracle-Security-Unauthorized-Relational

EDITADO 10/12/2008:

Acabo de descubrir una herramienta que tiene varias opciones de enumeración sobre TNS Listener, se llama AppSentry Listener Scecurity Check Tool y permite obtener SID’s, configuraciones por defecto, etc. Funciona sobre Windows, tiene una interfaz de usuario muy facil de usar y es freeware.