Operatorzy w pewnym dziale korzystają z serwisu internetowego do którego się muszą zalogować. Niestety mają tylko jedno konto, przez co brak ustawień dostępów. Dodatkowo nie powinni mieć dostępu do konta poza firmą. Aktualnie hasła są zapisane w przeglądarce, ale kierownikom tej firmy przeszkadza to że operatorzy mogą hasło podejrzeć. Wpisywanie hasła przez kierownika ręcznie też odpada bo za dużo operatorów i trzeba byłoby to robić kilka razy dziennie.
Wymyśliłem by napisać im program w Javie z użyciem Selenium, dane do logowania byłby trzymane w bazie danych w wewnętrznej sieci. Wtedy program uruchamiałby przeglądarkę i po załadowaniu strony uzupełniał formularz logowania.
Do zrobienia jest to proste, ale pytanie czy nie ma jakiejś luki, czy takie uzupełnianie pól formularza botem jest bezpieczne?
Może ktoś z Was miał podobny problem i rozwiązał go w inny sposób?
A może lepiej jakieś karty inteligentne / coś na USB w tylu tokena/klucza HASP?
Jeśli podczas logowania jest to wsadzone - dostajesz dostęp. Nie trzeba wpisywać haseł.
To jest jakiś żart? :D Twój pomysł jest równie niebezpieczny jak to co macie teraz. Normalny człowiek:
- założyłby każdemu osobne konto, wtedy wiadomo kto się logował poza pracą jakby co
- logowanie poza pracą można załatwić za pomocą filtrowania IP / dostępu czasowego
- zrobił faktycznie jakiś hardware token który jest potrzebny do logowania
właśnie nie ma możliwości założenia kilku kont :(
Ogólnie to takie rozwiązanie w firmie przejdzie i będzie używane. Użytkownicy nie są techniczni.
Ciekawi mnie jakie są zagrożenia z wdrożenia tego rozwiązania.
mdolata napisał(a):
właśnie nie ma możliwości założenia kilku kont :(
Ogólnie to takie rozwiązanie w firmie przejdzie i będzie używane. Użytkownicy nie są techniczni.
Ciekawi mnie jakie są zagrożenia z wdrożenia tego rozwiązania.
Dlaczego nie ma możliwości założenia kilku kont? Czy chodzi o to, że trzeba za dodatkowe konta zapłacić? Co będzie wyższe koszt dodatkowych kont czy koszt potencjalnych nadużyć?
Co powiesz na to:
- Użytkownicy logują się na zdalnego desktopa (wirtualną maszynę), hasło jest już zapamiętane na takiej "zdalnej" przeglądarce, ruch z tej zdalnej przeglądarki idzie tylko do "wybranego serwisu a nie całego internetu".
- Każdy użytkownik ma swojego "wirtualnego desktopa" (swoje konto)
(Słaby punkt: pewnie można w takiej przeglądarce np. chrome włączyć synchronizację z kontem google /wyeksportować dane i takie hasła zostaną zreplikowane na dowolną zdalną maszynkę ;-) )
Kolejny słaby punkt: "Czy jest funkcjonalność serwisu, przypomnij hasło" ?
Serwis jest zewnętrzny. Hasło jest potrzebne. Jeśli serwis byłby lokalny lub bym miał dostęp do kodu to mógłbym się pobawić. Chyba że jest jakaś technika która by to umożliwiła
Jak najbardziej jest to możliwe. Konto firmowe mam w banku Raiffeisen. Dostęp do konta jest oczywiście przez przeglądarkę, a autoryzacja transakcji jest w oparciu o hasło oraz token na USB. W systemie instalują się jakieś sterowniki do tego urządzenia oraz plugin do przeglądarki (szczegółów nie podam - nigdy się tym aż tak nie interesowałem), a przeglądarka podczas prób autoryzacji w jakiś sposób wywołuje autoryzację przez ten token. Jeśli go nie ma, albo jeśli podam zły PIN, do przeglądarki wraca info o odmowie autoryzacji.
Moje urządzenie nazywa się Comarch Smart Card Reader, aczkolwiek tego typu rozwiązań jest pełno na rynku. A szukając w necie można znaleźć wiele informacji dot. obsługi czytników kart z poziomu przeglądarki - przykładowy wątek ze SO masz tutaj: https://stackoverflow.com/questions/6750928/smartcard-reader-access-from-a-web-browser
Może ten zewnętrzny system wspiera jakieś 2 factor auth? Wtedy każdy zna hasło, ale telefon z authenticatorem / sms z jednorazowym kodem są tylko w biurze?
@cerrato: jest to możliwe bo aplikacja Twojego banku udostępnia soft i api do takiej autoryzacji.
@Shalom: niestety nie ma 2FA. To by załatwiło sprawę.
Może użycie Selenium jest faktycznie śmieszne ale rozwiązuje problem utrudnienia przechwycenia hasła, ale przy okazji generuje kilka innych. Pochwaliłem się już POC-iem takiego programu, trochę za wcześnie...
TL;DR jesli lokalnie nie jest potrzebny ssl to zrob proxy ze wstrzykiwaniem hasla do formularza.
A za proxy moze byc ssl, vpn lub cokolwiek innego.
Schemat:
Operator -> formularz -> komp operatora -> komp proxy -> proxy -> siec zewn
@mdolata: problem z tym selenium jest taki, ze to takie security through obscurity i nic więcej. Przechwycić dane z formularza mając kontrole nad komputerem jest trywialnie łatwo. Tak samo zdekompilować tą twoją aplikację, wyciągnąć hasło do bazy danych i wyciągąć z niej loginy+hasła.
Juz bezpieczniej by było jakby twoja aplikacja logowała się do systemu z zupełnie innej maszyny a potem kopiowała session cookie na maszyny operatorów ;] Wtedy mogą pracować aż sesja nie wygaśnie.
jest to możliwe bo aplikacja Twojego banku udostępnia soft i api do takiej autoryzacji.
Masz rację, ale to było tylko podane jako przykład, że się da. Tego typu czytników kart/tokenów na USB/kluczy HASP jest pełno, każdy producent oferuje pełne wsparcie w zakresie dokumentacji, API oraz sposobów integracji. Ja pewien czas temu bawiłem sie kluczem HASP Sentinela (dawniejszy Aladdin). Jeśli ktoś jest zainteresowany, pod adresem http://www.systherm-info.pl/HASP/produkty/sentinel-ldk/demo-sentinel-hasp.html można zamówić sobie darmową demówkę tych kluczy. Pod tym adresem: http://sentinelldk.safenet-inc.com/LDKdocs/RN/Content/ReleaseNotes/130-Supported_Platforms_for_Sentinel.htm masz informacje o wspieranych technologiach. W pierwszym poście wspomniałeś coś o możliwości napisania czegoś w Java - stąd zakładam, że znasz ten język. Możesz w takim razie zrobić w java apkę do weryfikacji/autoryzacji,a następnie osadzić ją na stronie podczas logowania. Co o tym sądzisz?
Uzupełnienie formularza po załadowaniu strony nic nie zmieni, bo strona się załaduje, operator wciśnie "Zapamiętaj hasło" i później wyciągnie sobie je w taki sam sposób jak teraz. I to jakiś laik, nie mówiąc o kimś kto jest trochę bardziej techniczny.
Tak czy inaczej jest to bardzo dziwne, żeby na jakiejś aplikacji wykorzystywanej komercyjnie tylu ludzi pracowało na jednym koncie.
Na pewno nie łamiecie jakiejś licencji? :P Ponieważ ciężko mi znaleźć jakiekolwiek logiczne plusy takiego rozwiązania, dla których ktoś miałby nie zabezpieczać w odpowiedni sposób treści jakie Wam udostępnia.
Co do samego problemu...
Nie wiem jak duży jest ten serwis, ale mógłbyś napisać własnego klienta do przeglądarki, który łączył by się z Waszym serwerem, dzięki czemu mógłbyś zaimplementować dowolną autoryzacje, a później jeżeli nie macie API z wygodną dokumentacją spróbować wyciągać dane od nich jakimś CURLem.