2013-10-03 19 views
5

Tworzę program w Pythonie, który będzie obejmował mieszanie hasła. Zakładając, że to wykorzystać, aby uzyskać hasło:Bezpiecznie zastąpić zmienne Pythona w pamięci RAM?

import getpass 
password = getpass.getpass("Password: ") 

A potem hash to, czy jest jakiś sposób, aby bezpiecznie usunąć wszystkie ślady unhashed hasło z pamięci RAM?

+0

myślę, że to stanowisko może pomóc: [http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python][1] [1]: http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python –

+3

Dlaczego miałbyś chcieć to zrobić? Aby móc czytać (naprawdę bardzo ciężko) pamięć, haker powinien i tak uzyskać dostęp do roota. Skoncentruj swoją energię na bardziej rozsądnych/popularnych [wektorach ataku] (https://www.owasp.org) niż na tworzeniu tego fałszywego poczucia bezpieczeństwa. – RickyA

+0

@RickyA Nie masz pojęcia, co tkbx próbuje zrobić, to właściwie dobre pytanie. – Joe

Odpowiedz

3

Jak już wcześniej wspomniano, nie ma na to niezawodny sposób w Pythonie, nawet jeśli miałeś niestandardową implementację (chociaż może to być sposób).

Teraz nie wiem, co ma zrobić twoja aplikacja, ale mogę bez żadnych wątpliwości powiedzieć, że twoje dane są bezpieczniejsze w pamięci RAM niż w twojej bazie danych, nawet po haszowaniu.

Sposób działania pamięci jest tak złożony. Każdy proces ma swoją własną wirtualną przestrzeń pamięci, która nie musi być ciągła. Pełne bloki pamięci są zamieniane na dysk i umieszczane z powrotem w innym bloku pamięci. Cała pamięć jest po prostu zbiorem bajtów i prawie niemożliwe jest odróżnienie tablicy liczb całkowitych, ciągu, kota lub prostych danych losowych.

Niektóre bloki danych są częściowo ponownie przydzielane, tworząc dużą ilość częściowych danych. Wyobraź sobie, co by to było, 1, 2, 8 lub nawet 16 Gb losowych danych, a potencjalny haker musiałby znaleźć hasło we wszystkich tych 0 i 1.

Jeśli ktoś chciał zhakować twoje hasło podczas wykonywania procesu, musiałby mieć aktywny dostęp do komputera jako root; nie może tego zrobić, po prostu patrząc na zamianę później z powodów, o których mówiłem wcześniej.

Ale jeśli ktoś ma taki dostęp, jest tak wiele innych sposobów na uzyskanie hasła. Na przykład po prostu debuguj program, lub lepiej, po prostu zmień źródło i spraw, by wydrukował hasło :)

Większość hakerów nie będzie zawracać sobie tym głowy. Hackowanie to w większości około social engineering, co zasadniczo powoduje, że użytkownik chętnie udostępnia hakerowi swoje hasło. Jednym z takich sposobów jest Phishing.

+0

Powinieneś głosować, aby zamknąć to pytanie, ponieważ jest to duplikat zamiast odpowiadać. Jeśli masz nową odpowiedź, możesz umieścić ją na oryginalnym pytaniu. – Joe

+0

Ten facet ma sens! – RickyA

+1

"potencjalny haker musiałby znaleźć hasło we wszystkich tych 0 i 1 s". Po pierwsze, pomysł, że hakerzy * nigdy nie mogą tego zrobić *, jest ważnym stwierdzeniem. Istnieje mnóstwo praktycznych exploitów, które polegają na znajdowaniu określonych rzeczy w pamięci lub zamienianiu ich w miejsca, w które nie sądzisz, że było ich wiele. Po drugie, faktycznie skanujemy plik wymiany dla wszystkiego, co wygląda na tekst. Znajdziesz o wiele więcej niż tylko hasło, a następnie użyj tego jako listy zgadywanek. Oznacza to, że można znaleźć igłę w stogu siana, próbując uszyć każdy kawałek siana po kolei, aż zadziała. –