Linux의 Python 포렌식

디지털 조사의 주요 관심사는 암호화 또는 기타 형식을 사용하여 중요한 증거 또는 데이터를 보호하는 것입니다. 기본적인 예는 암호를 저장하는 것입니다. 따라서 이러한 귀중한 데이터를 보호하기 위해서는 디지털 포렌식 구현을위한 Linux 운영 체제의 사용을 이해해야합니다.

모든 로컬 사용자에 대한 정보는 대부분 다음 두 파일에 저장됩니다.

  • /etc/passwd
  • etc/shadow

첫 번째는 필수이며 모든 비밀번호를 저장합니다. 두 번째 파일은 선택 사항이며 해시 된 암호를 포함하여 로컬 사용자에 대한 정보를 저장합니다.

모든 사용자가 읽을 수있는 파일에 암호 정보를 저장하는 보안 문제와 관련하여 문제가 발생합니다. 따라서 해시 된 암호는/etc/passwd, 콘텐츠가 특수 값 "으로 대체됩니다.x".

해당 해시를 찾아야합니다. /etc/shadow. 설정/etc/passwd 세부 사항을 재정의 할 수 있습니다. /etc/shadow.

Linux의 두 텍스트 파일에는 한 줄에 하나의 항목이 포함되며 항목은 콜론으로 구분 된 여러 필드로 구성됩니다.

형식 /etc/passwd 다음과 같습니다-

Sr. 아니. 필드 이름 및 설명
1

Username

이 필드는 사람이 읽을 수있는 형식의 속성으로 구성됩니다.

2

Password hash

Posix crypt 기능에 따라 암호화 된 형식의 암호로 구성됩니다.

해시 비밀번호가 다음과 같이 저장되는 경우 empty이면 해당 사용자가 시스템에 로그인 할 때 암호가 필요하지 않습니다. 이 필드에 느낌표와 같이 해시 알고리즘으로 생성 할 수없는 값이 포함 된 경우 사용자는 암호를 사용하여 로그온 할 수 없습니다.

잠긴 암호를 가진 사용자는 SSH 키와 같은 다른 인증 메커니즘을 사용하여 계속 로그온 할 수 있습니다. 앞서 언급했듯이 특별한 값 "x"는 섀도우 파일에서 비밀번호 해시를 찾아야 함을 의미합니다.

그만큼 password hash 다음을 포함합니다-

  • Encrypted saltencrypted salt 화면 잠금, 핀 및 암호를 유지하는 데 도움이됩니다.

  • Numerical user ID−이 필드는 사용자의 ID를 나타냅니다. Linux 커널은이 사용자 ID를 시스템에 할당합니다.

  • Numerical group ID −이 필드는 사용자의 기본 그룹을 나타냅니다.

  • Home directory −이 디렉토리를 참조하여 새 프로세스가 시작됩니다.

  • Command shell −이 선택적 필드는 시스템에 성공적으로 로그인 한 후 시작되는 기본 셸을 나타냅니다.

디지털 포렌식에는 증거 추적과 관련된 정보 수집이 포함됩니다. 따라서 사용자 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:])

산출

암호는 16 진수 형식으로 저장됩니다. pass_db.txt다음 스크린 샷에 표시된대로. 텍스트 파일은 전산 법의학에서 나중에 사용할 수 있도록 저장됩니다.