Python Forensics w systemie Linux
Głównym problemem dochodzeń cyfrowych jest zabezpieczenie ważnych dowodów lub danych za pomocą szyfrowania lub innego formatu. Podstawowym przykładem jest przechowywanie haseł. W związku z tym konieczne jest zrozumienie wykorzystania systemu operacyjnego Linux do implementacji kryminalistyki cyfrowej w celu zabezpieczenia tych cennych danych.
Informacje dla wszystkich użytkowników lokalnych są przeważnie przechowywane w następujących dwóch plikach -
- /etc/passwd
- etc/shadow
Pierwsza jest obowiązkowa i przechowuje wszystkie hasła. Drugi plik jest opcjonalny i przechowuje informacje o lokalnych użytkownikach, w tym zaszyfrowane hasła.
Pojawiają się problemy związane z kwestią bezpieczeństwa przechowywania informacji o haśle w pliku, który może być odczytany przez każdego użytkownika. Dlatego zaszyfrowane hasła są przechowywane w plikach/etc/passwd, gdzie treść jest zastąpiona specjalną wartością "x”.
Należy wyszukać odpowiednie skróty /etc/shadow. Ustawienia w/etc/passwd może zastąpić szczegóły w /etc/shadow.
Oba pliki tekstowe w systemie Linux zawierają po jednym wpisie w każdym wierszu, a wpis składa się z wielu pól oddzielonych dwukropkami.
Format /etc/passwd wygląda następująco -
Sr.No. | Nazwa i opis pola |
---|---|
1 | Username To pole zawiera atrybuty formatu czytelnego dla człowieka |
2 | Password hash Składa się z hasła w postaci zakodowanej zgodnie z funkcją kryptograficzną Posix |
Jeśli hasło skrótu zostanie zapisane jako empty, wówczas odpowiedni użytkownik nie będzie wymagał podania hasła, aby zalogować się do systemu. Jeśli to pole zawiera wartość, której nie może wygenerować algorytm wyznaczania wartości skrótu, na przykład wykrzyknik, użytkownik nie może zalogować się przy użyciu hasła.
Użytkownik z zablokowanym hasłem może nadal logować się przy użyciu innych mechanizmów uwierzytelniania, na przykład kluczy SSH. Jak wspomniano wcześniej, specjalna wartość „x”oznacza, że skrót hasła musi znajdować się w pliku shadow.
Plik password hash obejmuje następujące -
Encrypted salt - The encrypted salt pomaga w utrzymywaniu blokad ekranu, pinezek i haseł.
Numerical user ID- To pole oznacza identyfikator użytkownika. Jądro Linuksa przypisuje ten identyfikator użytkownika do systemu.
Numerical group ID - To pole odnosi się do podstawowej grupy użytkowników.
Home directory - Nowe procesy są uruchamiane z odniesieniem do tego katalogu.
Command shell - To opcjonalne pole wskazuje domyślną powłokę, która ma zostać uruchomiona po pomyślnym zalogowaniu się do systemu.
Kryminalistyka cyfrowa obejmuje zbieranie informacji, które są istotne dla śledzenia dowodów. Dlatego identyfikatory użytkowników są przydatne w utrzymywaniu rekordów.
Korzystając z Pythona, wszystkie te informacje mogą być automatycznie analizowane pod kątem wskaźników analizy, rekonstruując ostatnią aktywność systemu. Śledzenie jest proste i łatwe dzięki implementacji powłoki Linux.
Programowanie w Pythonie w systemie Linux
Przykład
import sys
import hashlib
import getpass
def main(argv):
print '\nUser & Password Storage Program in Linux for forensic detection v.01\n'
if raw_input('The file ' + sys.argv[1] + ' will be erased or overwrite if
it exists .\nDo you wish to continue (Y/n): ') not in ('Y','y') :
sys.exit('\nChanges were not recorded\n')
user_name = raw_input('Please Enter a User Name: ')
password = hashlib.sha224(getpass.getpass('Please Enter a Password:')).hexdigest()
# Passwords which are hashed
try:
file_conn = open(sys.argv[1],'w')
file_conn.write(user_name + '\n')
file_conn.write(password + '\n')
file_conn.close()
except:
sys.exit('There was a problem writing the passwords to file!')
if __name__ == "__main__":
main(sys.argv[1:])
Wynik
Hasło jest przechowywane w formacie szesnastkowym w pass_db.txtjak pokazano na poniższym zrzucie ekranu. Pliki tekstowe są zapisywane do dalszego wykorzystania w informatyce śledczej.