RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

Posts Tagged ‘ MySQL ’

image

 

Las inyecciones  de código SQL (aquí pueden ver el TOP 10 – 2013 de OWASP) son una vulnerabilidad muy conocida, a pesar de eso no sorprende aun encontrarse con diversas páginas web que tengan esta vulnerabilidad. Lo que aun me sorprende es que me escriban correos pidiendo ayuda para realizar acciones de dudosa “legalidad” con la efímera y absurda esperanza que yo me juegue el pellejo por alguien que no conozco, por alguien que no me interesa y peor aún me juegue la cárcel por alguien que no tuvo las ganas de estudiar el ciclo de la universidad. Así que aquellos que están cursando la universidad con esfuerzo, aquellos que son bachilleres y los que ya son ingenieros, siéntanse orgullosos de su título que mucho esfuerzo ha costado.

Créanme que hay gente que me pide cambiar las notas, es decir, que hackee a la universidad y cambie un “09” por un “11” para que sean felices; les muestro sólo algunos ejemplos que mas recuerdo:

image

30

 

Oferta y demanda: la economía y el mercado se mueve

Ya saben, toda demanda tiene una oferta, gracias a este principio nuestra economía se mueve. Obviamente el mundo del hacking no es ajeno a esto, basta con buscar en Internet si alguien ofrece realizar “trabajitos” de hacking para cambiar nuestras calificaciones. Me llamó la atención una página web donde encontré una persona seria, que nos ofrecía un trabajo serio, garantizado, discreto y sobre todas las cosas “profesional”, porque eso es lo que necesitamos en este país, Perú, profesionales de alta calidad que cambien notas para obtener más profesionales de alta calidad. WTF!!!!

Como no soy especialista en temas de derecho, habrá que preguntarle a Erick (@coyotegris) de que tipo de delito estamos hablando y supongo que tanto el que realiza estos “trabajitos” como el que los solicita están cometiendo un delito.

 

image

 

Entonces…. ¿ se puede ser profesional sin haber estudiado?

De pronto si, obviamente de manera trucha, ilícita e ilegal. Es aquí donde me pregunté “¿Qué tantas instituciones educativas han sido hackeadas en el Perú?”, pues como sabrán nadie lleva un registro exacto de estas cosas y tampoco es que cada vez que alguien hackee a una universidad pues se promocione por internet diciendo que lo ha logrado, de hecho, a mi me han contratado universidades para realizarles un “Ethical Hacking” y las cosas que se pueden lograr, son alucinantes!!!

¿Entonces, no hay donde saberlo? pues… aquí nos puede ayudar “ZONE-H”, como ya sabrán cada vez que algún “super hacker” logra un defacement lo publica en esta página para crear un mirror de como quedó la página después de haber sido hackeada. Mayúscula fue mi sorpresa cuando encontré, 1444 páginas hackeadas que tienen el dominio EDU.PE. WTF!! hasta una página de la Universidad Nacional de San Marcos(UNMSM) se encuentra allí. Si no me creen miren aquí:

 

image

 

Parece ser que el ilícito negocio no es tan complicado como parece  – habiendo tantas páginas educativas que han sido hackeadas – , de pronto hasta el negocio les resulta bastante atractivo habiendo un mercado tan grande de estudiantes, ese es un motivo para que las universidades se preocupen por la seguridad de su información, además, siendo las universidades donde se forman profesionales en ingeniería creería que deberían dar el ejemplo de un buen desarrollo y seguro de sistemas de información, ¿no creen?

Ahora sí, las inyecciones sobre SQL SERVER

La idea de este post es mostrar las diferencias entre las inyecciones SQL sobre MySQL y sobre otro motor de base de datos, por ejemplo, SQL SERVER. Para poder entenderlo mejor les recomiendo haber visto antes estos posts:

Debido a que explicar las diferencias se puede hacer extenso, he decidido realizar un video tutorial con las principales particularidades de realizar inyecciones sobre Microsoft SQL Server. El video contiene las siguientes partes:

  1. Ejecución de funciones básicas sobre MSSQL para obtener información: usuario utilizado, base de datos actual, versión de la base de datos.
  2. Listado del total de bases de datos
  3. Listado de tablas de una base de datos específica
  4. Listado de registros de una tabla
  5. Concatenación  de “querys” y alteración de información a través de inyecciones (muy importante)

 

 

Finalmente, ¿ alguien podría realmente cambiar las notas de cursos en la universidad?

Como esa pregunta me seguía dando vueltas en la cabeza y sentía que no podía vivir con esa duda existencial, decidí probar en la página web de una universidad que no estaba en listado de “Zone-H” e identificar si son tan descuidados como para permitir inyecciones de código SQL. Obviamente no voy a decir que universidad he probado, sólo que es una universidad Nacional del Perú y que la manera que he probado es colocando la super-archi conocida comilla simple (‘) y una UNION para observar que comportamiento de la página web, no he ahondado más porque mi objetivo es sólo verificar que es vulnerable y no hackear la página, de hecho la he reportado con la esperanza de que solucionen el problema. Es importante mencionar que utiliza Microsoft SQL Server y que eventualmente se podrían modificar los registros, es decir, es muy probable que si se puedan cambiar las notas de la universidad y ser profesionales de dudosa reputación.

image

 

image

 

 

Conclusiones:

  1. Existe una demanda grande de “alumnos” que desean aprobar o modificar calificaciones estudiantiles muy grande y los centros de estudio deben preocuparse por la seguridad de la información para evitar incidentes de seguridad. Obviamente los que se publicitan por Internet es muy probable que sean estafadores.
  2. Es posible modificar información de manera remota a través de vulnerabilidades del tipo Microsoft SQL Server
  3. Existe un alto número de páginas web de centros educativos que han sido hackeados en el Perú, los registrados en ZONE-H suman 1444 páginas web hackeadas con el dominio .EDU.PE.
  4. Las buenas prácticas de desarrollo a través de APIs son la mejor solución para el desarrollo seguro de aplicaciones web. Revisen ESAPI del proyecto OWASP.
  5. Los controles a nivel de acceso a las bases de datos y tener logs de monitoreo sobre las bases de datos nos permiten identificar posibles fraudes realizados muchas veces por personal de confianza como los mismos DBA.

***************************************************************

Popularity: 32% [?]

Sin duda este año nos deja sin sabores que no son fáciles de asimilar, uno de ellos tuvo lugar en Abril de este 2009 y fue la inesperada compra de SUN por parte de Oracle. Son esas noticias que uno no espera leer un día común por la mañana cuando se revisan los feeds y que cuando lo lees debes de verificarlo en otro blog para ver si es cierto o solo es parte de una broma pesada.

Lo ciesakila_switchboardrto es que Oracle compro Sun y con ello Java, Solaris y MySQL que es la primera base de datos Open Source y el tercer sistema gestor de base de datos mas popular del mundo… nada mas y nada menos.
Aquí un breve pero muy breve resumen:

  • Inicios 2009 y desde antes: Había una guerra fría entre IBM y Oracle por adquirir Sun.
  • Abril 2009: Oracle da el golpe liquidador y Compra Sun.
  • Desde Abril 2009 hasta Diciembre 2009: Todos analizan el impacto que esto tendrá en el mercado y en especial sobre MySQL ya que este podría ser el mas afectado.
  • Diciembre 2009: Michael “Monty” Widenius (uno de los creadores de MySQL) hace un llamado para “Salvar a MySQL”, aquí el [POST] de su blog.
  • Diciembre 2009 y solo días después: Oracle da una conferencia pública comprometiéndose a mantener MySQL debido a que los usuarios de Oracle y MySQL son totalmente distintos. Aquí el [POST] con mas detalles.

Hace unos meses conversaba con un miembro del soporte de MySQL Enterprise que me estaba ayudando con un tema de licencias que ha adquirido la empresa donde trabajo y en donde administro MySQL Enterprise 5 y me comentaba que el futuro es totalmente incierto que no se sabe aun los cambios que Oracle impondrá sobre MySQL y especular sobre el futuro en estos mundos de TI puede convertirse en algo tan similar como jugar a la ruleta rusa y obviamente sobre lo que convenga a Oracle.

¿Que le conviene a Oracle?

En mi opinión, abandonar MySQL y desaparecerlo podría resultarle a Oracle un “tiro por la culata” porque podría ocasionar levantar otra competencia como PostGres, seria para PostGres la oportunidad que esperaba (imagínense todas las aplicaciones Web del mundo migrando a PostGres: WordPress, Joomla, Nuke, Typo, software de investigación, etc. etc.).
Otros piensan que Oracle jamás cometería semejante y tamaño error y que por el contrario que esta es la gran oportunidad de Oracle para liquidar a IBM en el mundo de software, ofreciendo 2 tipos de servicios: Uno propietario (bien caro por cierto) y uno Open Source, ambos totalmente integrales. Imagínense una plataforma con Solaris, Oracle (para aplicaciones empresariales) o MySQL Enterprise (para aplicaciones de investigación) y con programas desarrollados en JAVA y por otro lado podrías usar Open Solaris, MySQL Community y Aplicaciones Java, definitivamente un golpe duro para IBM y Microsoft.

Pero el tiempo solo el tiempo dirá que pasará (como dice mi padre y señores que vivieron “La Nueva Ola” con mucho furor), mientras esperamos las novedades para el 2010 les dejo un video muy gracioso y que vale la pena de ver. ¿Se imaginan a Hitler enterándose de la compra de Sun por parte de Oracle? y a todo esto…. ¿Ustedes que creen que hara Oracle con MySQL?

Popularity: 2% [?]

MySQL Enterprise Monitor

Noviembre 23, 2008 | 5 Comments | MySQL

sakila_switchboard

Si hay algo que me gusta de MySQL es su practicidad para hacer las cosas y "supuesta complejidad" para modificarlas, puede sonar contradictorio pero para ejemplo un botón; recuerdo que la primera vez que instale MySQL lo hice en Windows con la ayuda de AppServ, en ese entonces no sabia ni siquiera como lo había instalado lo único que sabia es que había una base de datos corriendo en mi computadora y que podía administrarla con ayuda de phpMyAdmin y todo eso en unos cuantos minutos (vaya practicidad!!).

Sin embargo al ahondar y sumergirme en este SGDB uno descubre que las cosas no son tan sencillas y hay que aprender a configurarla, backupearla (aun no existe este verbo?… pronto existira) y en general conocer su funcionamiento, tema en el que muchos no se atreven a entrar.

Pues MySQL cada vez nos hace mas fácil la vida a los que nos dedicamos a administrar los servidores, hoy les voy a presentara MySQL Enterprise Monitor.

MySQL Enterprise Monitor es una herramienta que se obtiene al adquirir la licencia de MySQL Enterprise Server (la versión pagada del MySQL Server sostenida por la comunidad y que es gratuita), el nombre describe lo que hace esta herramienta: nos proporciona un dashboard desde el cual podemos visualizar todas nuestras bases de datos, crear reglas de avisos, alertas alcorreo, eventos, gráficas estadísticas y monitorizar nuestras replicaciones (creo que no se me olvida nada).

He realizado un gráfico con ayuda de Visio ( y es que una imagen vale mas que mil palabras) que explica como es que funciona MySQL Enterprise Monitor:

enterprise-monitor-architecture

Instalación deMySQL Enterprise Monitor

Vamos a denominar "Servidor" al computador donde esta instalado el Enterprise Monitor y "Cliente" a los computadores que seran monitoreados.

Instalación del Servidor

1.- Dar permisos al binario:
shell> chmod +x mysqlmonitor-version-installer.bin

2.- Ejecutar el binario:
shell> ./mysqlmonitor-version-installer.bin

Cuando ejecutemos el binario nos solicitara la siguiente información:
—————————————————————————-
Welcome to the setup wizard for the MySQL Enterprise Monitor
—————————————————————————-
Please specify the directory where the MySQL Enterprise Monitor will be installed
Installation directory [/opt/mysql/enterprise/monitor]:
—————————————————————————-
Tomcat Server Options
Please specify the following parameters for the bundled Tomcat Server
Tomcat Server Port [18080]:
Tomcat Shutdown Port [18005]:
Tomcat SSL Port [18443]:
—————————————————————————-
Repository Configuration
Please specify the following parameters for the bundled MySQL server
Repository Username [service_manager]:
Password :
Re-enter :
Bundled MySQL Database Port [13306]:
—————————————————————————-

Lo único que podría causar confusión es el password solicitado para el repositorio, lo voy a explicar, lo que ocurre es que el Enterprise Monitor maneja su propia Base de Datos y nos esta creando un usuario llamado "service_manager" y nos pide colocar el password, si quisieramos acceder a la base de datos creada deberíamos ejecutar lo siguiente:

shell> ./mysql -u service_manager -p -P 13306 –socket=/opt/mysql/enterprise/monitor/mysql/tmp/mysql.sock

3.- Arrancar el servicio:
shell> /opt/mysql/enterprise/monitor/mysqlmonitorctl.sh start

4.- Configurar nuestro MySQL Monitor

Debemos ingresar a la URL: http://<ip_del_servidor>:18080/merlin/Auth.action e ingresar los datos solicitados:

El Administrator es el usuario que administrará el dashboard de MySQL Monitor.
El agente es usuario que se nos solicitará al momento de instalar el agente en los servidores a monitorear.

Instalación del Cliente

1.- Crear un usuario en MySQL con los siguientes privilegios globales:
GRANT SELECT, REPLICATION CLIENT, SHOW DATABASES, SUPER ON *.* TO ‘mysqluser’@’localhost’ IDENTIFIED BY ‘agent_password’;

2.- Instalar el agente de monitoreo:
shell> ./mysqlserviceagent-version-installer.bin

3.- Colocar los datos solicitados:
—————————————————————————-
Welcome to the MySQL Enterprise Service Agent Setup Wizard.
—————————————————————————-
Please specify the directory where MySQL Enterprise Service Agent will be installed
Installation directory [/opt/mysql/enterprise/agent]:
—————————————————————————-
Monitored Database Information
MySQL hostname or IP address [127.0.0.1]:
Validate MySQL hostname or IP address [Y/n]: Y
Hostname to display (optional) []: Fedora7
MySQL Port [3306]:
MySQL Username []: mysqluser
MySQL Password :
Re-enter :
—————————————————————————-
MySQL Enterprise Monitor Options
Hostname or IP address []: 192.168.1.12
Port [18080]:
Agent Username [agent]:
Agent Password :
Re-enter :

Los datos solicitados son:
- El usuario creado en MySQL que se encargará derecoger la información
- El usuario creado en el dashboard del Enterprise Monitor, en nuestro caso llamado "agent"

Después de haber configurado el agente, el dashboard del Enterprise Monitor detectará el servidor.

Aquí les dejó la imagen de mi Enterprise Monitor donde he agregado dos servidores.

EnterpriseDashboard

Popularity: 4% [?]

Este post es la continuacion del post  [ Tuning MySQL Server ], asi que recomiendo leer este antes de continuar con este post,  pero si eres de esos apuraditos no habra nada que te detenga.

Saber el funcionamiento interno de nuestro servidor, conocer los archivos a modificar, leer la documentacion sobre los parametros que debemos setear y sobre todo encontrar la forma de hacer un benchmarking, esto todo lo que esta atras de este post.

Hace algunas semanas me puse a "tunear" (yo tuneo, el tunea, vosotros tuneais) el servidor MySQL Enterprise Server que adquirio la empresa donde trabajo, pero luego me pregunte: "Como demuestro que mi tuning ha sido un exito y que he mejorado el performance de mi servidor de base de datos?"  (son dudas existenciales que no te dejan vivir), asi que me puse a buscar algo de informacion y al parecer muy pocas personas se habian hecho la misma pregunta que yo, no encontre ningun blog que hablara sobre como medir el rendimiento de MySQL, hasta que San Google me dio algunas herramientas que podia usar, asi que escogi la que me parecio la mejor opcion: mysql-bench.

Si ustedes han compilado las fuentes de MySQL pues ustedes ya cuentan con la carpeta sql-bench en donde estan los scripts a usar (la encontraran en algun lado pero depende de donde hayan hecho la instalacion del software), por otro lado si ustedes han instalado MySQL con rpm’s tendran que instalar tambien el rpm correspondiente, en Fedora el rpm se llama mysql-bench-5.0.45-6 (tambien hay un rpm para Suse, lo se porque tambien lo he probado).

Al instalar este rpm estan instalando unos scripts en perl que lo que hacen son consultas y medir el tiempo de respuesta de nuestro servidor MySQL (inserts, alters, select, etc etc), lo que les recomiendo es leer la documentacion que trae esta herramienta, la documentacion y los scripts se encuentran en /usr/share/sql-bench/.

Bueno iniciemos nuestras pruebas de performance, lo primero que debemos hacer es correr los scripts con el my.cnf que viene por defecto, el script que debemos correr es:

sql-bench]# perl run-all-tests –server=MySQL –user=’root’ –password=’password’

Nota: Lean todas las opciones que trae el scipt run-all-test (lo pueden hacer con run-all-test –help)

Cuando termine de correr el script arrojara un resumen del tiempo que demoro en ejecutar todos los scripts, el tiempo es medido en una unidad llamada wallclock (que mide tiempo de red, tiempo del procesador y de acceso al disco, tomemoslo como una medida nueva y propia de la herramienta) y desde luego hay que correr el script despues de haber modificado el archivo my.cnf con los nuevos parametros y de haber reiniciado MySQL.

En mi caso los resultados fueron:

RESULTADOS ANTES DE MODIFICAR MY.CNF

alter-table: Total time: 79 wallclock secs ( 0.01 usr  0.14 sys +  0.00 cusr  0.00 csys =  0.15 CPU)
ATIS: Total time: 26 wallclock secs ( 4.58 usr  2.67 sys +  0.00 cusr  0.00 csys =  7.25 CPU)
big-tables: Total time: 20 wallclock secs ( 0.79 usr  4.99 sys +  0.00 cusr  0.00 csys =  5.78 CPU)
connect: Total time: 262 wallclock secs ( 8.27 usr 81.05 sys +  0.00 cusr  0.00 csys = 89.32 CPU)
create: Total time: 289 wallclock secs ( 1.35 usr 11.48 sys +  0.00 cusr  0.00 csys = 12.83 CPU)
insert: Total time: 3032 wallclock secs (158.97 usr 456.75 sys +  0.00 cusr  0.00 csys = 615.72 CPU)
select: Total time: 478 wallclock secs (19.21 usr 43.93 sys +  0.00 cusr  0.00 csys = 63.14 CPU)
transactions: Test skipped because the database doesn’t support transactions
wisconsin: Total time: 23 wallclock secs ( 1.49 usr 11.02 sys +  0.00 cusr  0.00 csys = 12.51 CPU)

RESULTADOS DESPUES DE MODIFICAR MY.CNF

alter-table: Total time: 70 wallclock secs ( 0.01 usr  0.07 sys +  0.00 cusr  0.00 csys =  0.08 CPU)
ATIS: Total time: 11 wallclock secs ( 4.60 usr  1.82 sys +  0.00 cusr  0.00 csys =  6.42 CPU)
big-tables: Total time: 11 wallclock secs ( 0.86 usr  4.39 sys +  0.00 cusr  0.00 csys =  5.25 CPU)
connect: Total time: 224 wallclock secs ( 8.77 usr 41.84 sys +  0.00 cusr  0.00 csys = 50.61 CPU)
create: Failed (output/create-MySQL-Linux_2.6.23.14_i686)
insert: Total time: 2116 wallclock secs (159.04 usr 141.21 sys +  0.00 cusr  0.00 csys = 300.25 CPU)
select: Total time: 131 wallclock secs (15.36 usr 31.04 sys +  0.00 cusr  0.00 csys = 46.40 CPU)
transactions: Test skipped because the database doesn’t support transactions
wisconsin: Total time: 20 wallclock secs ( 1.46 usr  9.15 sys +  0.00 cusr  0.00 csys = 10.61 CPU)

Como veremos hay mucha diferencia entre los tiempos, ahora si lo ponemos en unas barritas con la ayuda de nuestro excel, se ve mas bonito:

benchmarking

Popularity: 2% [?]

Tuning MySQL Server

Noviembre 3, 2008 | 4 Comments | Linux, MySQL

sakila_switchboardInstalar MySQL Server y comenzarlo a usar es muy sencillo, puede ser tan sencillo como saber instalar un rpm, quizas usar yum o apt-get y funcionara sin ningun problema, pero acaso dejar las opciones por defecto es suficiente? se podrian sorprender de la cantidad de opciones que tiene este sistema gestor de base de datos.

Escuchar frases como: "MySQL es una base de dato para principiantes", "MySQL es solo para pruebas", "MySQL es solo para empresas medianas"; son frases que han quedado en el pasado (alla por el 2004 y estamos a puertas del 2010), hablar ahora de MySQL es hablar de un sistema gestor de base de datos serio, rapido, de uso en empresas grandes y en sistemas de produccion y sobre todo practico, que no tiene  nada que envidiar a otras bases de datos y que ademas no tiene porque ser gratis ya que cuenta con un soporte segun las necesidades de nuestra organizacion.

Bueno volvamos al tema, hacer un tuning de nuestro servidor MySQL no es muy complicado solo requiere tener los conocimientos de como funciona nuestro servidor MySQL, por cuestiones de tiempo no podre explicar todo asi que solo mostrare donde hacer los cambios basicos.

El archivo que debemos modificar es my.cnf (en Windows no recuerdo el nombre, pero usen Linux es mucho mejor jejejeje), por lo general el archivo esta en /etc/my.cnf y debemos modificarlo para mejorar el rendimiento de nuestro servidor, en Fedora el archivo no contiene casi nada y las variables inician con sus valores por defecto, en mi caso mi archivo my.cnf quedo de esta manera:

Noten que todas las varibles deben estar dentro de la etiqueta mysqld.

[mysqld]

port = 3306
socket = /var/lib/mysql/mysql.sock
skip-lockingkey_buffer = 16
M
max_allowed_packet = 1M
table_cache = 64net_buffer_length = 8Kmyisam_sort_buffer_size = 8M
bind-addres= 0.0.0.0

## Ubicacion del log de consultas que superen long-query-time###
log-slow-queries=/var/log/mysql-slow.log
## Maximo tiempo antes de que se almacene en mysql-slow.log ###
long_query_time=3
## Almacene consultas en mysql-slow.log que no tengan indices ##
log-queries-not-using-indexes
## Cache para para llaves, se recomienda que sea el 25% de la memoria fisica total###
key_buffer_size=1024M
## Mejora la cache para consultas que contengan ORDER BY ####
read_rnd_buffer_size=4M
## Mejora el rendimiento de consultas GROUP BY ###
sort_buffer_size=512K
## Aumenta el buffer de lectura ###

read_buffer_size=4M
## Aumenta el buffer para el insert ###

bulk_insert_buffer_size=16M
## Aumenta buffer para consultas JOIN ###

join_buffer_size=1M

## aumenta cache de los ilos por conexion ##
thread_cache_size=1M
query_cache_size=64M
##Maximo de 50 conexiones simultaneas####
max_connections=50
##Tiempo maximo de conexion sin enviar informacion (3600 segundos)###
wait_timeout=3600

Coloque una breve explicacion a algunas opciones pero no a todas, les recomiendo que lean el manual de MySQL para saber que funcion cumplen todas los parametros colocados.

Pero como saber que nuestro servidor MySQL ha mejorado su rendimiento? pues eso lo tratare en el siguiente post.

Seria interesante que comenten sobre el uso de MySQL, es decir si lo usan para servicios en produccion y que tipos de servicios. Saludos!

Popularity: 4% [?]