Korzystam z demona oprogramowania, który wymaga pewnych akcji, aby wprowadzić hasło, aby odblokować niektóre funkcje, które wyglądają na przykład tak:
$ darkcoind masternode start <mypassphrase>
Teraz mam pewne obawy dotyczące bezpieczeństwa na moim bezgłowym serwerze debian.
Ilekroć przeszukuję moją historię bashów, na przykład za Ctrl+R
pomocą tego super silnego hasła. Teraz wyobrażam sobie, że mój serwer jest zagrożony, a intruz ma dostęp do powłoki i może po prostu Ctrl+R
znaleźć moje hasło w historii.
Czy istnieje sposób, aby wprowadzić hasło bez niego mają być wyświetlane w bash historii ps
, /proc
czy gdziekolwiek indziej?
Aktualizacja 1 : Nieprzekazanie hasła demonowi powoduje zgłoszenie błędu. To nie jest opcja.
Aktualizacja 2 : Nie każ mi usuwać oprogramowania ani innych pomocnych wskazówek, takich jak zawieszanie programistów. Wiem, że nie jest to przykład najlepszej praktyki, ale to oprogramowanie jest oparte na bitcoinach, a wszyscy klienci na bazie bitcoinów są pewnego rodzaju serwerem rson json, który nasłuchuje tych poleceń, a jego znany problem bezpieczeństwa jest wciąż omawiany ( a , b , c ) .
Aktualizacja 3 : Demon jest już uruchomiony i działa z poleceniem
$ darkcoind -daemon
Wykonanie powoduje ps
wyświetlenie tylko polecenia uruchamiania.
$ ps aux | grep darkcoin
user 12337 0.0 0.0 10916 1084 pts/4 S+ 09:19 0:00 grep darkcoin
user 21626 0.6 0.3 1849716 130292 ? SLl May02 6:48 darkcoind -daemon
Zatem przekazywanie poleceń za pomocą hasła nie pojawia się w ogóle ps
lub /proc
wcale.
$ darkcoind masternode start <mypassphrase>
$ ps aux | grep darkcoin
user 12929 0.0 0.0 10916 1088 pts/4 S+ 09:23 0:00 grep darkcoin
user 21626 0.6 0.3 1849716 130292 ? SLl May02 6:49 darkcoind -daemon
To pozostawia pytanie, gdzie pojawia się historia? Tylko w .bash_history
?
źródło
Odpowiedzi:
Naprawdę powinno to zostać naprawione w samej aplikacji. Takie aplikacje powinny być typu open source, więc rozwiązaniem problemu może być rozwiązanie samej aplikacji. Aplikacja związana z bezpieczeństwem, która popełnia ten błąd, może również popełniać inne błędy, więc nie ufałbym temu.
Prosty interpelator
Ale prosiłeś o inny sposób, więc oto jeden:
Skompiluj to z
następnie uruchom proces za pomocą
Biblioteka interposer uruchomi ten kod, zanim
main
funkcja z aplikacji zostanie wykonana. Zastąpi ostatni argument wiersza poleceń rzeczywistym hasłem w wywołaniu main. Jednak wiersz poleceń w postaci drukowanej/proc/*/cmdline
(i dlatego widziany przez narzędzia takie jakps
) nadal będzie zawierał fałszywy argument. Oczywiście kod źródłowy i skompilowana z niego biblioteka będą musiały być czytelne tylko dla ciebie, więc najlepiej działaj wchmod 0700
katalogu. A ponieważ hasło nie jest częścią wywołania polecenia, twoja historia bash jest również bezpieczna.Bardziej zaawansowany interposer
Jeśli chcesz zrobić coś bardziej skomplikowanego, pamiętaj, że
__libc_start_main
zostanie on wykonany przed prawidłową inicjalizacją biblioteki środowiska wykonawczego. Sugeruję więc unikanie wywołań funkcji, chyba że są one absolutnie niezbędne. Jeśli chcesz móc wywoływać funkcje do treści twojego serca, upewnij się, że robisz to tuż przedmain
wywołaniem samego siebie, po zakończeniu całej inicjalizacji. Za poniższy przykład muszę podziękować Grubermenschowi, który wskazał, jak ukryć hasło przekazane jako argument wiersza poleceń, który zwróciłgetpass
moją uwagę.To monituje o hasło, więc nie musisz już utrzymywać w tajemnicy biblioteki interposer. Argument zastępczy jest ponownie używany jako monit o hasło, więc wywołaj to w ten sposób
Inna alternatywa polegałaby na odczytaniu hasła z deskryptora pliku (jak np.
gpg --passphrase-fd
Robi) lub zx11-ssh-askpass
, czy cokolwiek innego.źródło
strings
lukę. Zobacz : Ukryj hasło na terminalu .__libc_start_main
.To nie tylko historia. Pojawi się również w wynikach ps .
Ktokolwiek napisał to oprogramowanie, powinien zostać zawieszony, narysowany i podzielony na ćwiartki. Absolutnie NIE trzeba podawać hasło w wierszu poleceń, niezależnie od tego, jakie to oprogramowanie.
W przypadku procesu demona jest WIĘCEJ niewybaczalne ...
Oprócz rm -f na samym oprogramowaniu nie znam na to żadnego rozwiązania. Szczerze mówiąc: znajdź inne oprogramowanie, aby wykonać zadanie. Nie używaj takich śmieci.
źródło
rm -f
teraz.ps
. Więc dopóki deweloper nie będzie w stanie tego naprawić, sugeruje użycie czegoś innego.ps
, więc nie jest lepsze niżrm
rozwiązanie.Spowoduje to wyczyszczenie danych
ps
wyjściowych.BĄDŹ BARDZO ŚWIADOME : może to spowodować uszkodzenie aplikacji. Jesteście odpowiednio ostrzeżeni, że tu będą smoki.
Teraz jesteś należycie powiadamiany o tych strasznych ostrzeżeniach. Spowoduje to wyczyszczenie wyjścia wyświetlanego w
ps
. Nie wyczyści twojej historii, ani nie wyczyści historii zadań bash (takich jak uruchomienie procesu jakmyprocess myargs &
). Aleps
nie będzie już pokazywał argumentów.Wywołaj program, zapisując
chmod +x
go. Następnie robienie./whatever <pidoftarget>
Jeśli to zadziała, nie da żadnych wyników. Jeśli zawiedzie, na coś narzeka i rezygnuje.źródło
gdb
można zmodyfikować pamięć uruchomionych procesów (z większą precyzją chirurgiczną niż mogę dodać).Czy możesz przekazać argument z pliku dostępnego tylko dla użytkownika root lub wymaganego użytkownika?
WIELKIE nie można wpisywać haseł w konsoli, ale ostatnie odwołanie ... rozpocznij linię spacją, aby nie pojawiła się w historii.
źródło
export HISTCONTROL=ignoreboth
ignoruje zarówno duplikaty, jak i wiersze z wiodącym miejscem na wejście do historii. Dodaj go do swojego .bashrc lub .bash_profile.Może to działa (?):
źródło
darkcoind masternode start `head -1`
, jeśli chcesz ręcznie wprowadzić hasło.ps
i podobnych narzędzi..bash_history
postaci zwykłego tekstu na hasło w postaci zwykłego tekstupassword.txt
daje ci dokładnie to, co?Niestety, jeśli twoje
darkcoind
polecenie oczekuje hasła jako argumentu wiersza poleceń, zostanie ono ujawnione za pomocą narzędzi takich jakps
. Jedynym prawdziwym rozwiązaniem jest edukacja programistów .Chociaż
ps
ujawnienie może być nieuniknione, możesz przynajmniej uniemożliwić zapisanie hasła w pliku historii powłoki.Plik historii powinien tylko rejestrować
xargs darkcoind masternode start
, a nie hasło.źródło
ignorespace
w$HISTCONTROL
, a następnie można zapobiec żadnego polecenia od wchodzenia w historii powłoki poprzedzając polecenia ze spacjami.Jak powiedzieli inni, sprawdź swoją kontrolę historii powłoki, aby ukryć informacje przed historią.
Ale jedną rzeczą, której nikt jeszcze nie sugerował, jest montowanie za
/proc
pomocą tegohidepid
parametru. Spróbuj zmodyfikować swój/proc
wiersz,/etc/fstab
aby zawierałhidepid
:źródło
Możesz ukryć hasło w historii powłoki, wykonując polecenie z nowego procesu powłoki, który następnie natychmiast przerywasz. Na przykład:
Upewnij się, że
sh
skonfigurowano, aby nie zapisywać historii w pliku.Oczywiście nie rozwiązuje to innych problemów, takich jak widoczne hasło w
ps
. Wierzę, że istnieją sposoby, abydarkcoind
sam program ukrył informacjeps
, ale to tylko skraca okno podatności.źródło
ps
i podobnych narzędzi.W przypadku Bitcoin oficjalną odpowiedzią programisty jest użycie dostarczonego opakowania Pythona w
contrib/bitrpc/bitrpc.py
( github ):i:
Źródło: # 2318
Odblokuj portfel:
Zmień hasło:
https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc
W przypadku darkcoin działa anlogue:
https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc
źródło