2012-08-22 55 views
8

Tengo un requisito en el que necesito ingresar Id de seguridad desde el token de RSA durante la autenticación de inicio de sesión y luego comenzar a ejecutar la prueba de automatización.¿Es posible acceder a RSA Secure Id programáticamente para usar en Test Automation?

¿Es posible acceder al valor del token de RSA programáticamente a través de cualquier api o de cualquier otra forma, para que el flujo de prueba se pueda automatizar por completo?

+0

Supongo que estás hablando de tokens usb RSA, un token sellado implicaría una cámara web y un OCR :) – ZJR

+0

@ZJR, el cliente está usando RSA SecurId 700. Creo que "RSA SecurId Token para Windows" puede hacer clic en " Copie el botón "y obtenga el valor en el portapapeles y léalo desde allí. Sin embargo, dado que es un token, tengo que pensar en otras opciones. También el factor "tiempo de expiración" de una autenticación única también juega un papel. Si alguna api devuelve la clave segura y el tiempo restante para la validez de securekey, será más útil para la automatización de pruebas. – parishodak

+0

Mejor poner "cámara web y OCR" en una respuesta real, entonces! A menos que pueda convencerlos de que emitan un token que no sea de hardware para fines de prueba ... – bobince

Respuesta

-2

Una idea es grabar un montón de pares de reloj/token y ejecutar el reloj hacia atrás para su programa y reproducir la grabación. En realidad, si tiene la opción de cocinar el reloj, realmente solo necesita un par.

(no he dicho que era una buena idea.)

Buena suerte, /Bob Bryan

+2

Debería configurar el reloj del servidor para verificar los tokens. Buena suerte con eso. – SLaks

+0

Gracias por sus sugerencias. Realmente no pensé en esta solución. Pero me temo que no puedo meterme con el tiempo de la fecha del servidor: |, y está prohibido más el acceso al servidor de autenticación de tokens seguro, incluso si quiero intentarlo. – parishodak

1

Es necesario especificar qué tipo de Token utiliza.

Hay una serie de opciones aquí oí de:

  • token de hardware
  • software de aplicación token (Mac OS, Windows, iOS, Android, Windows Mobile, y algunos otros) navegador
  • Web token de

favor marque este enlace para más detalles: http://www.emc.com/security/rsa-securid/rsa-securid-software-authenticators.htm#!offerings_for_web_browsers

Con token de hardware, necesitará usar algún tipo de cámara y leer los píxeles de la imagen tomada (no podré ayudarlo allí)

El token de software es más simple.

Recientemente he creado una pequeña herramienta de línea de comandos que puede ejecutar, ingresar el PIN y leer el código de acceso generado en la aplicación del token. No puedo enviarle la herramienta (propiedad de mi empresa), pero puedo darle algunos consejos sobre lo que debe hacer para crear su propia aplicación que hará lo mismo.

Pero primero debe decirme si utiliza el token de software o no.


OK. Como tiene un token de software, describiré lo que hace mi aplicación para conectarse automáticamente a VPN.

1) necesita tener su token de software configurado antes de hacer esto.
Además de eso, el cliente de VPN también deberá estar configurado, y la conexión debe aparecer en la lista de conexiones disponibles.
Cuando está configurado, puede hacer su conexión VPN automática.
Tenemos identificador de software similar a éste:
https://ssl.seagate.com/ssl/docs/soft_token_install_instructions.html
Nuestro Cliente VPN se ve se ve algo como esto:
http://wireless-setup.wsu.edu/msIPSEC.html

2) Una vez que todas las herramientas se configuran puede iniciar la conexión VPN.

Necesita estar preparado para investigar a fondo.
Chicos de RSA trabajaron muy duro para hacer que esto sea imposible, lo que estamos haciendo aquí.
No usan controles normales. Han creado sus propios controles para los que no tengo especificaciones para.

Lo he hecho usando las funciones API de C++ y WIN32. Esta es mi receta.

a) parámetros de lectura se pasan al programa

b) validar los parámetros que tienen número de parametros como el PIN, número de conexión para establecer, Comando a ejecutar cuando se establece la conexión, etc. Pueden ser codificado por supuesto, pero para ser flexible puedo pasarlos desde la línea de comandos.

c) cheque por token de aplicación [EnumWindows]
aplicación simbólico puede tener 2 ventanas de nivel superior [El uno se introduce el PIN y el otro con código de acceso]
Si detecto dos ventanas abiertas cierro la aplicación y reiniciarlo.
Puede intentar enviar el mensaje WM_CLOSE para cerrar la aplicación. Simulo usuarios de la acción de presionar "X" botón de cierre

//restore it <if minimized> 
SendMessage(hwndTokenApplicationPinWindow,WM_SYSCOMMAND,SC_RESTORE,NULL); 
//close the app 
SendMessage(hwndTokenApplicationPinWindow,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(223,14)); 
SendMessage(hwndTokenApplicationPinWindow, WM_LBUTTONUP,0,MAKELPARAM(223,14)); 

para iniciarlo utilizo CreateProcess función.
Al reiniciar la aplicación o si solo tenía una ventana abierta, ahora puede ingresar el PIN.

d) introduzca el PIN del

simulo usuarios dejaron clic en WM_LBUTTONDOWN ventana de pines, WM_LBUTTONUP.
Introduzco el pin usando WM_CHAR.
Una vez ingresado, haga clic en el botón Aceptar usando WM_LBUTTONDOWN, WM_LBUTTONUP.
Una vez completada, debe tener la ventana de Código de acceso visualizada.

e) Leer código de acceso
Para obtener el código de acceso utilizo el botón Copiar de la ficha. Este botón Copia datos al portapapeles.
simulamos al pulsar este botón: WM_LBUTTONDOWN, WM_LBUTTONUP
y leer datos desde el portapapeles:

BOOL InvalidData = FALSE; 
OpenClipboard(NULL); 
HANDLE clip0 = GetClipboardData(CF_UNICODETEXT); 
wchar_t* p=(wchar_t*)GlobalLock(clip0); 
if(wcslen(p) == MaxPasscodeSize-1) 
    wcscpy_s(currentPasscode,MaxPasscodeSize,p); 
else if(wcslen(p) != MaxPasscodeSize-1 && wcslen(p) != 0) 
{ 
    wprintf(L"Error: Passcode in clipboard is invalid\n"); 
    InvalidData = TRUE; 
} 
GlobalUnlock(clip0); 
CloseClipboard(); 

Ahora usted tiene clave de acceso listo para ser utilizado en el cliente VPN de Cisco.
Háganme saber si tiene sentido para usted.
Si lo hace, y su aplicación funciona hasta este momento, por favor avíseme y aprobaré las instrucciones para tratar con el cliente VPN.

Si necesita instrucciones más detalladas para los pasos anteriores, por favor hágamelo saber.

+1

Según mi conocimiento, el cliente tiene tokens de software y hardware – parishodak

2

Automatizamos nuestra entrada a una VPN que utiliza RSA Secure ID y Cisco AnyConnect, haciendo lo siguiente: Identificación del seguro

1) Abrir RSA mediante programación la manera deseada

2) Ejecutar el siguiente. PS1

#Source http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html 
function Get-ClipBoard { 
Add-Type -AssemblyName System.Windows.Forms 
$tb = New-Object System.Windows.Forms.TextBox 
$tb.Multiline = $true 
$tb.Paste() 
$tb.Text 
} 
# end Source http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html 

$wshell = New-Object -ComObject wscript.shell; 
$wshell.AppActivate('the name')#Here you need to write the name that appears on the left top corner of the rsa secure id window 
Sleep 1 
$wshell.SendKeys('{TAB}') 
$wshell.SendKeys('~') 
$a = Get-ClipBoard 


#Source http://www.cze.cz 
#This script is tested with "Cisco AnyConnect Secure Mobility Client version 3.0.5080″ 
#Please change following variables 

[string]$CiscoVPNHost = 'the vpn you are trying to connect' 
[string]$Login = 'your user' 
[string]$Password = $a 

#Please check if file exists on following paths 
[string]$vpncliAbsolutePath = 'C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpncli.exe' 
[string]$vpnuiAbsolutePath = 'C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe' 

#**************************************************************************** 
#**** Please do not modify code below unless you know what you are doing **** 
#**************************************************************************** 

Add-Type -AssemblyName System.Windows.Forms -ErrorAction Stop 

#Set foreground window function 
#This function is called in VPNConnect 
Add-Type @' 
using System; 
using System.Runtime.InteropServices; 
public class Win { 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 
} 
'@ -ErrorAction Stop 

#quickly start VPN 
#This function is called later in the code 
Function VPNConnect() 
{ 
Start-Process -FilePath $vpncliAbsolutePath -ArgumentList "connect $CiscoVPNHost" 
$counter = 0; $h = 0; 
while($counter++ -lt 1000 -and $h -eq 0) 
{ 
sleep -m 10 
$h = (Get-Process vpncli).MainWindowHandle 
} 
#if it takes more than 10 seconds then display message 
if($h -eq 0){echo "Could not start VPNUI it takes too long."} 
else{[void] [Win]::SetForegroundWindow($h)} 
} 

#Terminate all vpnui processes. 
Get-Process | ForEach-Object {if($_.ProcessName.ToLower() -eq "vpnui") 
{$Id = $_.Id; Stop-Process $Id; echo "Process vpnui with id: $Id was stopped"}} 
#Terminate all vpncli processes. 
Get-Process | ForEach-Object {if($_.ProcessName.ToLower() -eq "vpncli") 
{$Id = $_.Id; Stop-Process $Id; echo "Process vpncli with id: $Id was stopped"}} 

#Disconnect from VPN 
echo "Trying to terminate remaining vpn connections" 
start-Process -FilePath $vpncliAbsolutePath -ArgumentList 'disconnect' -wait 
#Connect to VPN 
echo "Connecting to VPN address '$CiscoVPNHost' as user '$Login'." 
VPNConnect 

#Write login and password 
[System.Windows.Forms.SendKeys]::SendWait("$Login{Enter}") 
[System.Windows.Forms.SendKeys]::SendWait("$Password{Enter}") 

#Start vpnui 
start-Process -FilePath $vpnuiAbsolutePath 
#Wait for keydown 
#echo "Press any key to continue …" 
#try{$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")}catch{} 
#Exit 

Todo lo que hay que hacer ahora es configurar el vpn, y el usuario en el guión anterior.

+0

En el script, puede encontrar 2 fuentes diferentes. Solíamos usar el script que se puede encontrar aquí: [link] (http://www.cze.cz), porque no usamos el Token. Sin embargo, comenzamos a usarlo después de un tiempo, así que tuvimos que agregar algunas líneas al script para poder seguir usándolo. La solución se encontró aquí: [link] (http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html), y agregamos las líneas necesarias para que funcione. – JS5

Cuestiones relacionadas