2012-08-22 15 views
8

Mam wymaganie, w którym muszę wprowadzić bezpieczny identyfikator z tokena RSA podczas uwierzytelniania logowania, a następnie uruchomić test automatyzacji.Czy programowo można uzyskać dostęp do identyfikatora RSA Secure ID w celu użycia w automatyzacji testów?

Czy można uzyskać dostęp do wartości tokena RSA programistycznie za pomocą dowolnego interfejsu API lub w jakikolwiek inny sposób, dzięki czemu przepływ testowy może zostać całkowicie zautomatyzowany?

+0

Przypuśćmy, że mówimy o tokenach RSA, zapieczętowany token wymaga kamery internetowej i OCR :) – ZJR

+0

@ZJR, klient używa RSA SecurId 700. Przypuszczam, że "RSA SecurId Token for Windows" może kliknąć " Skopiuj "i pobierz wartość do schowka i przeczytaj ją. Jednak ponieważ jest to symbol, muszę wymyślić inne opcje. Ważny jest również czynnik "czasu wygaśnięcia" jednorazowego uwierzytelnienia. Jeśli jakikolwiek api zwróci klucz bezpieczeństwa i czas pozostały do ​​ważności klucza bezpiecznego, będzie on bardziej przydatny w automatyzacji testów. – parishodak

+0

Lepiej umieścić "kamerę internetową i OCR" jako prawdziwą odpowiedź! Jeśli nie możesz ich przekonać do wydania tokena spoza sprzętu dla celów testowych ... – bobince

Odpowiedz

-2

Jednym z pomysłów jest nagranie zestawu par zegarów/żetonów i uruchomienie zegara do programu i ponowne odtworzenie nagrania. Właściwie, jeśli masz możliwość gotowania zegara, naprawdę potrzebujesz tylko jednej pary.

(nie powiedzieć, że był DOBRY pomysłem.)

Powodzenia /Bob Bryan

+2

Musisz ustawić zegar serwera weryfikującego tokeny. Powodzenia z tym. – SLaks

+0

Dzięki za sugestie. Naprawdę nie myślałem o tym rozwiązaniu. Ale obawiam się, że nie mogę zepsuć czasu serwera: |, a więcej niż dostęp do bezpiecznego serwera uwierzytelniania tokenów jest zabroniony, nawet jeśli chcę spróbować. – parishodak

1

musisz określić, jaki rodzaj tokena użyć.

Istnieje wiele opcji tutaj słyszałem:

  • sprzętowego tokena
  • oprogramowania tokenu aplikacji (Mac OS, Windows, iOS, Android, Windows Mobile, i kilka innych) przeglądarka
  • internetowej Token

Proszę sprawdzić ten link, aby uzyskać więcej informacji: http://www.emc.com/security/rsa-securid/rsa-securid-software-authenticators.htm#!offerings_for_web_browsers

Przy użyciu tokena sprzętowego należy użyć aparatu i odczytać piksele z wykonanego zdjęcia (nie będę w stanie Ci pomóc).

Token oprogramowania jest prostszy.

Ostatnio utworzyłem małe narzędzie wiersza poleceń, które jest w stanie wykonać, wprowadzić kod PIN i odczytać kod wygenerowany w aplikacji tokena. Nie mogę wysłać ci narzędzia (własności mojej firmy), ale mogę ci dać wskazówki, co musisz zrobić, aby stworzyć własną aplikację, która zrobi to samo.

Najpierw jednak musisz mi powiedzieć, czy używasz tokena oprogramowania, czy nie.


OK. Ponieważ masz token oprogramowania, opiszę, co robi moja aplikacja, aby automatycznie połączyć się z VPN.

1) przed wykonaniem tej czynności należy skonfigurować token programowy.
Oprócz tego klienta VPN należy również skonfigurować, a połączenie musi być wymienione na liście dostępnych połączeń.
Po skonfigurowaniu możesz wykonać automatyczne połączenie VPN.
Mamy tokena oprogramowania podobnego do tego:
https://ssl.seagate.com/ssl/docs/soft_token_install_instructions.html
Nasz Klient VPN wygląda wygląda coś jak ten:
http://wireless-setup.wsu.edu/msIPSEC.html

2) Gdy wszystkie narzędzia są skonfigurowane można rozpocząć połączenie VPN.

Musisz być przygotowany na przeprowadzenie szczegółowego dochodzenia.
Faceci z RSA bardzo ciężko pracowali, aby uniemożliwić to, co tutaj robimy.
Nie używają zwykłych elementów sterujących. Stworzyli własne kontrole, których nie mam dla specyfikacji .

Zrobiłem to za pomocą funkcji API C++ i WIN32. To mój przepis.

a) parametry odczytu przekazywane do programu

b) zweryfikować parametry Mam liczbę params jak PIN, numer połączenia do ustalenia, polecenia do uruchomienia gdy połączenie zostanie nawiązane itd. Mogą być oczywiście zakodowane, ale żeby być elastycznym, mogę je przekazać z linii poleceń.

c) czek na tokena aplikacji [EnumWindows]
Reklamowe aplikacja może mieć 2 okna najwyższego poziomu [jednej wprowadzić kod PIN, a jedno z hasłem]
Gdybym wykryć oba okna otwarte zamknę aplikację i uruchom ją ponownie.
Możesz spróbować wysłać wiadomość WM_CLOSE, aby zamknąć aplikację. I symulować działanie użytkownikom nacisnąć „X” przycisk Zamknij

//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)); 

uruchomić go używam CreateProccess funkcyjny.
Po ponownym uruchomieniu aplikacji lub gdy zostało otwarte tylko jedno okno, można teraz wprowadzić kod PIN.

d) Wprowadź PIN

symulować użytkowników lewym przyciskiem myszy na okno pin WM_LBUTTONDOWN, WM_LBUTTONUP.
Wprowadzam pin za pomocą WM_CHAR.
Po wprowadzeniu kliknij przycisk OK, używając WM_LBUTTONDOWN, WM_LBUTTONUP.
Po zakończeniu należy wyświetlić okno kodu dostępu.

e) Czytaj hasło
Aby otrzymać kod dostępu użyć przycisku Kopiuj z tokena. Ten przycisk Skopiuj dane do schowka.
symulować naciśnięcie tego przycisku: WM_LBUTTONDOWN, WM_LBUTTONUP
I odczytać dane ze schowka:

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(); 

Teraz masz Passcode gotowe do użycia w Cisco VPN Client.
Proszę dać mi znać, jeśli ma to dla ciebie jakiś sens.
Jeśli tak, a Twoja aplikacja działa do tego momentu, proszę dać mi znać, a ja przekażę instrukcje dotyczące obsługi klienta VPN.

Jeśli potrzebujesz bardziej szczegółowych instrukcji dotyczących powyższych kroków, daj mi znać.

+1

Jeśli chodzi o moją wiedzę, klient ma zarówno oprogramowanie, jak i tokeny sprzętowe. – parishodak

2

Mamy zautomatyzowany naszą logowanie do sieci VPN, który korzysta rsa Secure ID i Cisco Anyconnect, wykonując następujące czynności:

1) Otwarte rsa bezpieczny identyfikator programowo sposób chcesz

2) Uruchom następujące. 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 

Wszystko, co musisz teraz zrobić, to ustawić swój vpn i użytkownika w powyższym skrypcie.

+0

W skrypcie można znaleźć 2 różne źródła. Kiedyś używaliśmy skryptu, który można znaleźć tutaj: [link] (http://www.cze.cz), ponieważ nie używaliśmy tokena. Jednak zaczęliśmy go używać po pewnym czasie, więc musieliśmy dodać kilka wierszy do skryptu, abyśmy mogli dalej z niego korzystać. Rozwiązanie zostało znalezione tutaj: [link] (http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html) i dodaliśmy linie potrzebne do jego działania. – JS5

Powiązane problemy