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
广告