Python-forensics-linux
LinuxでのPythonフォレンジック
デジタル調査の主な関心事は、重要な証拠またはデータを暗号化またはその他の形式で保護することです。 基本的な例はパスワードの保存です。 したがって、これらの貴重なデータを保護するには、デジタルフォレンジックの実装にLinuxオペレーティングシステムの使用法を理解する必要があります。
すべてのローカルユーザーの情報は、主に次の2つのファイルに保存されます-
- /etc/passwd * etc/shadow
最初のパスワードは必須であり、すべてのパスワードが保存されます。 2番目のファイルはオプションであり、ハッシュされたパスワードを含むローカルユーザーに関する情報を保存します。
パスワード情報をすべてのユーザーが読み取り可能なファイルに保存するというセキュリティ問題に関して問題が発生します。 したがって、ハッシュされたパスワードは /etc/passwd に保存され、コンテンツは特別な値「 x 」に置き換えられます。
対応するハッシュは /etc/shadow で検索する必要があります。 /etc/passwd の設定は、 /etc/shadow の詳細を上書きする場合があります。
Linuxの両方のテキストファイルには1行に1つのエントリが含まれており、エントリはコロンで区切られた複数のフィールドで構成されています。
*/etc/passwd* の形式は次のとおりです-
Sr.No. | Field Name & Description |
---|---|
1 |
Username このフィールドは、人間が読める形式の属性で構成されています |
2 |
Password hash Posix crypt関数に従ってエンコードされた形式のパスワードで構成されます |
ハッシュパスワードが*空*として保存されている場合、対応するユーザーはシステムにログインするためにパスワードを必要としません。 このフィールドに感嘆符などのハッシュアルゴリズムで生成できない値が含まれている場合、ユーザーはパスワードを使用してログオンできません。
ロックされたパスワードを持つユーザーは、他の認証メカニズム(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:])
出力
パスワードは、次のスクリーンショットに示すように、16進形式で pass_db.txt に保存されます。 テキストファイルは、コンピューターフォレンジックでさらに使用するために保存されます。