Linux系統下的Python取證



數字調查的主要關注點是使用加密或其他格式來保護重要的證據或資料。最基本的例子就是儲存密碼。因此,瞭解如何在數字取證實施中使用Linux作業系統來保護這些寶貴的資料是必要的。

所有本地使用者的資訊主要儲存在以下兩個檔案中:

  • /etc/passwd
  • /etc/shadow

第一個檔案是必須的,它儲存所有使用者的密碼。第二個檔案是可選的,它儲存有關本地使用者的資訊,包括雜湊後的密碼。

將密碼資訊儲存在每個使用者都可以讀取的檔案中,會引發安全問題。因此,雜湊後的密碼儲存在/etc/passwd中,其內容被特殊值“x”代替。

相應的雜湊值必須在/etc/shadow中查詢。/etc/passwd中的設定可能會覆蓋/etc/shadow中的詳細資訊。

Linux中的這兩個文字檔案每行包含一個條目,並且條目由多個用冒號分隔的欄位組成。

/etc/passwd的格式如下:

序號 欄位名稱和描述
1

使用者名稱

此欄位包含人類可讀格式的屬性

2

密碼雜湊

它包含根據Posix crypt函式編碼的密碼

如果密碼雜湊儲存為空empty,則相應的使用者無需任何密碼即可登入系統。如果此欄位包含雜湊演算法無法生成的數值,例如感嘆號,則使用者無法使用密碼登入。

具有鎖定密碼的使用者仍然可以使用其他身份驗證機制登入,例如SSH金鑰。如前所述,特殊值“x”表示密碼雜湊必須在影子檔案中找到。

密碼雜湊包括以下內容:

  • 加密鹽值 (Encrypted salt)加密鹽值有助於維護螢幕鎖定、PIN碼和密碼。

  • 使用者ID (Numerical user ID) − 此欄位表示使用者的ID。Linux核心將此使用者ID分配給系統。

  • 組ID (Numerical group ID) − 此欄位指的是使用者的所屬主組。

  • 主目錄 (Home directory) − 新程序將以此目錄為參考啟動。

  • 命令shell (Command shell) − 此可選欄位表示在成功登入系統後要啟動的預設shell。

數字取證包括收集與追蹤證據相關的資料。因此,使用者ID對於維護記錄非常有用。

使用Python,可以自動分析所有這些資訊以查詢入侵跡象(Indicators of Analysis),重建最近的系統活動。透過Linux Shell的實現,追蹤變得簡單易行。

Python與Linux程式設計

示例

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:])

輸出

密碼以十六進位制格式儲存在pass_db.txt中,如下面的螢幕截圖所示。這些文字檔案被儲存以供以後在計算取證中使用。

Python Forensics in Linux Output
廣告