co jakiś czas pojawia mi się potrzeba użycia “tajnego" hasła w programie który ma działać w miarę automatycznie.
przez “w miarę" rozumiem, że mam kontrolę nad tym kiedy i jak go uruchamiam.
ostatnio pojawił mi się ten problem gdy chciałem napisać program który wykrywa zmiany na moim koncie w banku (mbank). wolałem (z oczywistych przyczyn) nie:
- wpisywać konta i hasła do kodu programu
- wpisywać konta i hasła do pliku konfiguracyjnego
- podawać tych danych jako zmienne środowiskowe
- podawać tych danych jako parametry wykonania
z drugiej strony – soft miał działać bez mojej dalszej ingerencji.
na początku chciałem by to był cron. ale z zastrzeżeniami z punktów powyżej chyba nie da się crona napisać.
więc stwierdziłem – nie może być cron? ok. niech będzie daemon.
co więc można zrobić?
program pyta się użytkownika przy uruchomieniu o dane (konto/ hasło). potem się loguje na stronę mbanku. jeśli proces logowania sie nie uda, trudno , program wypisuje błąd, i się kończy.
jeśli jednak się uda, to program kasuje z pamięci zawartość numeru konta i hasła, po czym przechodzi w tło i cyklicznie odpytuje mbank o saldo – korzystając z cookie.
oczywiście nadal istnieje ryzyko, że ktoś “ukradnie" mi cookie, ale ponieważ cookie są przechowywane w pamięci to jest to dosyć trudne.
pewnym utrudnieniem jest fakt, iż polegamy na cookie, gdyż cookie ma dosyć krótką żywotność. co oznacza, iż muszę cyklicznie co minutę odświeżać dane. testowanie konta co 5 minut wymagałoby już trzymania w pamięci hasła i numeru konta, co staje się potencjalnie niebezpieczne.
soft oczywiście nie jest idealny, ale może komuś z was się do czegoś przyda.
a może wskażecie mi błędy w moim rozumowaniu 🙂
Kategoria wskazuje ze uzyles do tego Perla. Czy tajemnica jest jakiego modul do tego uzywasz?
w tekście jest link do programu:
https://www.depesz.com/various/get-mbank-balance.pl
ściągnij i obejrzyj.
Cookie pewnie można Ci podkraść sniffując ruch między Tobą a bankiem, co utrudnia SSL. Można też wydobyć je jakimś strace/ktrace i podobnymi programami, ale te wymagają dość bliskiej zażyłości z prawami roota na Twoim kompie. Ewentualnie, możnaby zalogować się na inne konto w mBanku, popatrzeć czy da się przewidzieć jak generowane są cookie (id. sesji czy cokolwiek) i próbować to wykorzystać – ale bez dobrego pomysłu jak to zrobić będzie to zgadywanka w stylu “co teraz wypadnie z /dev/urandom”. Jeżeli ktoś ma ochotę poćwiczyć, to fajna, choć dość stara “gra” na ten temat jest tutaj: http://quiz.ngsec.biz:8080/
Racja, dzieki, o pewnej godzinie czlowiek sie slepy robi;/.
Co do nietrzymania hasła na filesystemie z automatyzacją, wymyślilismy na gnupg-devel rozwiązanie – ale wymaga kawałka sprzętu.
Potrzebna jest smartkarta kryptograficzna wspierająca specyfikację OpenPGP, np karta członka wspierającego FSF. No i czytnik.
Na karcie generujemy klucz OpenPGP (albo go na nią wgrywamy). Tajne hasło, np credentialsy do banku szyfrujemy tym kluczem. Klucz na karcie jest bez hasła.
Kiedy program używający hasła, np cronjob, go potrzebuje, próbuje je odszyfrować za pomocą gpg. Jeśli karta jest w czytniku, odszyfruje bez problemu. Jeśli nie – a można ją wyjąć w każdej chwili – dostanie błąd.
I juz.
Ja ustawiłem sobie powiadomienia SMS w mBank i jak ktoś wpłaci/wypłaci kasę kartą/przelewem dostaje SMS. Podobnie jak zakupy robie. 20 groszy to nie dużo.