¿Qué es una inyección SQL?
Un ataque de inyección SQL es un ataque en el cual un código que ataca la base de datos es insertado en el sitio web. Es uno de los tipos más comunes de vulnerabilidades de seguridad de aplicaciones web. Así que es mejor estar preparado, o al menos informado. Las inyecciones SQL pueden tener un efecto inmediato (ataques de primer orden) o retardado (ataques de segundo orden).
En los ataques de primer orden, el atacante logra el efecto deseado inmediatamente. Un ataque de inyección SQL inserta código directamente en las variables de entrada que están concatenadas usando comandos SQL y luego ejecutando. Eso significa que sus datos u objetos son instantáneamente eliminados, o números de tarjeta de crédito y códigos de seguridad son enviados por correo electrónico al atacante. Escalofriante, ¿verdad?
En los ataques de segundo orden, el atacante inyecta un código en las cadenas que son almacenadas en tablas como metadatos. Estas cadenas son posteriormente concatenadas y ejecutadas. Usted puede no estar consciente del ataque por días o incluso semanas.
Nosotros no vamos a mostrarle cómo proteger su base de datos de inyecciones SQL. Nosotros le ayudaremos a encontrar qué ha pasado y cómo recuperar sus datos.
¿Cómo reconocer que usted ha estado bajo un ataque de inyección SQL?
En el caso de un ataque de segundo orden, la actividad sospechosa aún no es obvia. Todos los datos y objetos aún están en su base de datos, no hay problemas de desempeño, y ningún dueño de tarjeta de crédito se ha quejado aún. Pero incluso si hay algo malo con el desempeño de la base de datos o los datos en sí mismos, ¿cómo puede usted estar seguro de que el problema es causado por un atacante externo y no por un colega descuidado (lo cual no ayuda mucho)? ¿Cómo saber qué ha sido cambiado?
Y más importante – ¿cómo remediar el daño?
Nosotros no podemos arrebatar la información de la tarjeta de crédito del atacante, pero podemos ayudarle a recuperar los datos eliminados y recuperar los objetos a su estado original.
Para verificar si usted está bajo un ataque de inyección SQL, siga los pasos listados aquí: Checklist for suspicious activity on the SQL Server
¿Cómo recuperar datos eliminados o dañados?
ApexSQL Log es una herramienta de auditoría y recuperación para bases de datos SQL Server que lee registros de transacciones, copias de seguridad de registros de transacciones, registros de transacciones y copias de seguridad de bases de datos sueltos, y auditorías, revierte o reproduce cambios en datos y objetos que han afectado a la base de datos, incluyendo aquellos que han ocurrido antes de que el producto fuera instalado.
Para recuperar datos eliminados y actualizados y remover los datos nuevos insertados como resultado de una inyección SQL, use ApexSQL Log
- Inicie ApexSQL Log
- Conéctese a la base de datos
- Si usted tiene cualquier copia de seguridad de registro de transacciones y/o registros de transacciones sueltos antes de que la inyección SQL ocurriera, haga clic en la pestaña Transaction logs en el panel izquierdo del diálogo Project.
- Para añadir copias de seguridad de registros de transacciones haga clic en Add backups
- Para añadir registros de transacciones sueltos haga clic en Add detached
- Seleccione las copias de seguridad de registros de transacciones o los registros de transacciones sueltos necesarios y haga clic en Open
- Use la pestaña Filter y el filtro Time range para reducir la recuperación al tiempo cuando la inyección SQL ocurrió
- En la pestaña Operations filter, seleccione Data operations (DML) para auditar sólo los cambios – inserciones, actualizaciones y eliminaciones de datos. Des-seleccione Schema operations (DDL) y los cambios en objetos no serán auditados
- Si es posible, use los filtros Users, Operations y Applications para reducir los resultados
- Para incrementar el desempeño e igualdad de los datos de rastreo de la auditoría, añada copias de seguridad de la base de datos.
- Haga clic en Advanced y seleccione Database backups en el panel izquierdo
- Haga clic en Add file(s) y abra el/los archivo(s) de copia de seguridad
- Haga clic en Open
- Para crear el Undo script:
- Haga clic en Create undo script en la pestaña Home, en el grupo Actions para crear el Undo script para todas las transacciones mostradas en la cuadrícula
- Verifique las transacciones para las que desea crear el Undo script, haga clic derecho en la Cuadrícula Principal y haga clic en Create undo script en el menú contextual para crear el Undo script solamente para las transacciones seleccionadas
- Ejecute el script contra la base de datos
Después de que el Undo script es ejecutado, los cambios en los datos son retrotraídos y los datos originales están de nuevo en la base de datos.
¿Cómo recuperar datos borrados y truncados?
Para recuperar datos perdidos debido a sentencias DROP TABLE o TRUNCATE, use ApexSQL Recover. ApexSQL Recover es una herramienta que puede hacer minería en el registro de transacciones de la base de datos y recuperar datos eliminados, borrados y perdidos.
- Inicie ApexSQL Recover
- Como usted no sabe qué sentencia causó la pérdida de datos, use todas las opciones de Data recovery, una detrás de otra
- Si usted tiene copias de seguridad del registro de transacciones o registros de transacciones sueltos creados antes de la inyección SQL, haga clic en Several sources are available for the recovery para añadirlos. En el caso de que haya muchas transacciones en la base de datos después de que los datos se perdieran, la información acerca de los datos perdidos puede ya no existir en el registro de transacciones en línea. Añadiendo estas fuentes adicionales, usted proveerá la información necesaria acerca de las transacciones que removieron sus datos de su base de datos. Esta opción está disponible solamente para las opciones DELETE y DROP TABLE. Si las fuentes adicionales no están disponibles, seleccione No data source is available except for the database currently connected to y vaya al paso #4.
- Añada una secuencia de copias de seguridad de registros de transacciones que termine con el registro de transacciones en línea usando Add backup
- Añada los registros de transacciones sueltos usando Add detached
- Seleccione el tiempo cuando los datos fueron perdidos. Esto reducirá los resultados sólo a los registros que desea recuperar. Usted no quiere insertar los datos que ha borrado antes de la inyección SQL. SI no está seguro de cuándo fue esto, seleccione Date and time are unknown
- Seleccione la(s) tabla(s) de donde se perdieron los datos. Verifique la estructura de su base de datos para asegurarse si las tablas que desea recuperar tienen alguna relación. Asegúrese de que todas las tablas que dependen de las tablas que están siendo recuperadas son también seleccionadas, para evitar problemas con reinsertar datos dependientes
- Seleccione Save the recovery script to a file para crear un script T-SQL para rehacer, el cual insertará todos los registros recuperados. Usted puede revisar y modificar el script antes de ejecutarlo
Después de que el Undo script es ejecutado, los datos perdidos son insertados en la tabla.
Si usted sabe o piensa que su o sus base de datos han sido sujetos de un ataque de inyección SQL, actúe rápidamente con los diagnósticos y análisis apropiados, y si está confirmado, continúe rápidamente con una estrategia de recuperación de datos.
Traductor: Daniel Calbimonte
junio 12, 2015