Linux中的Python取证
数字调查的主要关注点是用加密或任何其他格式来保护重要的证据或数据。基本的例子是存储密码。因此,有必要了解Linux操作系统在数字取证中的应用,以确保这些有价值的数据。
所有本地用户的信息大多存储在以下两个文件中 –
- /etc/passwd
- etc/shadow
第一个文件是强制性的,它存储所有的密码。第二个文件是可选的,它存储了关于本地用户的信息,包括散列的密码。
在一个每个用户都能读到的文件中存储密码信息,会产生一些安全问题。因此,哈希密码被存储在 /etc/passwd 中,其中的内容被一个特殊的值 ” x “取代。
相应的哈希值必须在 /etc/shadow中查找。 /etc/passwd 中的设置可能会覆盖 /etc/shadow 中的细节 。
Linux中的两个文本文件都是每行一个条目,条目由多个字段组成,用冒号分隔。
/etc/passwd 的格式如下
序号:Sr.No. | 字段名称和描述 |
---|---|
1 | 用户名 这个字段由人可读格式的属性组成。 |
2 | 密码散列 该字段由根据Posix加密函数编码的密码组成。 |
如果哈希密码被保存 为空 ,那么相应的用户将不需要任何密码来登录系统。如果这个字段包含一个不能由哈希算法生成的值,比如一个感叹号,那么用户就不能使用密码登录。
拥有锁定密码的用户仍然可以使用其他认证机制登录,例如,SSH密钥。如前所述,特殊值” x “意味着必须在影子文件中找到密码散列。
密码哈希值 包括以下内容 –
- 加密的盐 – 加密的盐 有助于维护屏幕锁、引脚和密码。
-
数字化的用户ID – 这个字段表示用户的ID。Linux内核将这个用户ID分配给系统。
-
数字组ID – 这个字段指的是用户的主组。
-
主目录 – 新的进程是以这个目录为参考启动的。
-
命令外壳 – 这个可选字段表示在成功登录系统后将启动的默认外壳。
数字取证包括收集与追踪证据有关的信息。因此,用户ID在维护记录方面是有用的。
使用Python,所有这些信息都可以被自动分析为分析指标,重构最近的系统活动。通过Linux Shell的实现,跟踪变得简单而容易。
使用Linux的Python编程
例子
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 中,如下截图所示。这些文本文件被保存起来,以便在计算取证中进一步使用。