hacktricks/forensics/basic-forensic-methodology/linux-forensics.md

30 KiB
Raw Blame History

Linuxフォレンジクス


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!

HackTricksをサポートする他の方法

初期情報収集

基本情報

まず最初に、USB良く知られたバイナリとライブラリが含まれていることが推奨されます単にUbuntuを取得して、_ / bin_、_ / sbin_、_ / lib_、および_ / lib64_のフォルダをコピーできます。次に、USBをマウントし、環境変数を変更してこれらのバイナリを使用します

export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64

一度システムを良いものや既知のバイナリを使用するように設定したら、基本情報を抽出することができます:

date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info
ifconfig -a || ip a #Network interfaces (promiscuous mode?)
ps -ef #Running processes
netstat -anp #Proccess and ports
lsof -V #Open files
netstat -rn; route #Routing table
df; mount #Free space and mounted devices
free #Meam and swap space
w #Who is connected
last -Faiwx #Logins
lsmod #What is loaded
cat /etc/passwd #Unexpected data?
cat /etc/shadow #Unexpected data?
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory

疑わしい情報

基本情報を取得する際に、次のような奇妙な点をチェックする必要があります:

  • Rootプロセス は通常、低いPIDで実行されます。そのため、大きなPIDで実行されているRootプロセスが見つかった場合は疑う必要があります
  • /etc/passwd 内にシェルを持たないユーザーの登録されたログイン を確認する
  • /etc/shadow 内にシェルを持たないユーザーのパスワードハッシュ を確認する

メモリーダンプ

実行中のシステムのメモリを取得するには、LiME を使用することをお勧めします。
それをコンパイル するには、被害者のマシンが使用している同じカーネル を使用する必要があります。

{% hint style="info" %} 被害者のマシンにLiMEやその他の何かをインストールすることはできない ことを覚えておいてください。それはそれにいくつかの変更を加えるためです {% endhint %}

したがって、Ubuntuの同一バージョンがある場合は、apt-get install lime-forensics-dkms を使用できます。
それ以外の場合は、LiME をgithubからダウンロードし、正しいカーネルヘッダーを使用してコンパイルする必要があります。被害者マシンの正確なカーネルヘッダー を取得するには、単に/lib/modules/<kernel version> ディレクトリをあなたのマシンにコピーし、それを使用してLiMEをコンパイル します:

make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"

LiMEは3つのフォーマットをサポートしています:

  • Rawすべてのセグメントが連結されたもの
  • PaddedRawと同じですが、右ビットにゼロが入っています
  • Limeメタデータを含む推奨フォーマット

LiMEは、path=tcp:4444のような方法を使用して、ダンプをネットワーク経由で送信することもできます。

ディスクイメージング

シャットダウン

まず、システムをシャットダウンする必要があります。これは常に選択肢というわけではありません。なぜなら、システムが企業がシャットダウンできない本番サーバーである場合があるからです。
システムをシャットダウンするには、通常のシャットダウンと**「プラグを抜く」シャットダウン2つの方法があります。最初の方法は、プロセスが通常通り終了し、ファイルシステムが同期されることを可能にしますが、悪意のあるソフトウェア証拠を破壊する可能性もあります。"プラグを抜く"アプローチは、いくらかの情報損失を伴うかもしれません(メモリのイメージをすでに取っているので、失われる情報はほとんどありません)が、悪意のあるソフトウェアが何もできないでしょう。したがって、悪意のあるソフトウェアがある可能性がある場合は、システムでsync** コマンドを実行してプラグを抜いてください。

ディスクのイメージを取得する

ケースに関連する何かにコンピュータを接続する前に、情報を変更しないように読み取り専用でマウントされることを確認する必要があります。

#Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512

#Raw copy with hashes along the way (more secure as it checks hashes while it's copying the data)
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes

ディスクイメージの事前分析

データがない状態でディスクイメージを作成します。

#Find out if it's a disk image using "file" command
file disk.img
disk.img: Linux rev 1.0 ext4 filesystem data, UUID=59e7a736-9c90-4fab-ae35-1d6a28e5de27 (extents) (64bit) (large files) (huge files)

#Check which type of disk image it's
img_stat -t evidence.img
raw
#You can list supported types with
img_stat -i list
Supported image format types:
raw (Single or split raw file (dd))
aff (Advanced Forensic Format)
afd (AFF Multiple File)
afm (AFF with external metadata)
afflib (All AFFLIB image formats (including beta ones))
ewf (Expert Witness Format (EnCase))

#Data of the image
fsstat -i raw -f ext4 disk.img
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: Ext4
Volume Name:
Volume ID: 162850f203fd75afab4f1e4736a7e776

Last Written at: 2020-02-06 06:22:48 (UTC)
Last Checked at: 2020-02-06 06:15:09 (UTC)

Last Mounted at: 2020-02-06 06:15:18 (UTC)
Unmounted properly
Last mounted on: /mnt/disk0

Source OS: Linux
[...]

#ls inside the image
fls -i raw -f ext4 disk.img
d/d 11: lost+found
d/d 12: Documents
d/d 8193:       folder1
d/d 8194:       folder2
V/V 65537:      $OrphanFiles

#ls inside folder
fls -i raw -f ext4 disk.img 12
r/r 16: secret.txt

#cat file inside image
icat -i raw -f ext4 disk.img 16
ThisisTheMasterSecret


Trickestを使用して、世界で最も先進的なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

既知のマルウェアを検索

変更されたシステムファイル

Linuxには、潜在的に問題のあるファイルを見つけるために重要なシステムコンポーネントの整合性を確認するためのツールが用意されています。

  • RedHatベースのシステム:包括的なチェックにはrpm -Vaを使用します。
  • Debianベースのシステム:最初の検証にはdpkg --verifyを使用し、その後debsums | grep -v "OK$"apt-get install debsumsを使用してdebsumsをインストールした後)を使用して問題を特定します。

マルウェア/ルートキット検出ツール

マルウェアを見つけるのに役立つツールについて学ぶには、次のページを参照してください:

{% content-ref url="malware-analysis.md" %} malware-analysis.md {% endcontent-ref %}

インストールされたプログラムを検索

DebianとRedHatの両方のシステムでインストールされたプログラムを効果的に検索するには、システムログとデータベースを活用し、一般的なディレクトリでの手動チェックを検討してください。

  • Debianの場合、パッケージのインストールに関する詳細を取得するには、**/var/lib/dpkg/status/var/log/dpkg.log**を調査し、grepを使用して特定の情報をフィルタリングします。

  • RedHatユーザーは、rpm -qa --root=/mntpath/var/lib/rpmを使用してRPMデータベースをクエリし、インストールされたパッケージのリストを取得できます。

これらのパッケージマネージャーの外で手動でインストールされたソフトウェアや、それらと関連付けられていない実行可能ファイルを特定するには、/usr/local/opt/usr/sbin/usr/bin/bin、**/sbin**などのディレクトリを調査します。ディレクトリリストとシステム固有のコマンドを組み合わせて、既知のパッケージに関連付けられていない実行可能ファイルを特定し、すべてのインストールされたプログラムを検索を強化します。

# Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
cat /var/log/dpkg.log | grep installed
# RedHat RPM database query
rpm -qa --root=/mntpath/var/lib/rpm
# Listing directories for manual installations
ls /usr/sbin /usr/bin /bin /sbin
# Identifying non-package executables (Debian)
find /sbin/ -exec dpkg -S {} \; | grep "no path found"
# Identifying non-package executables (RedHat)
find /sbin/ exec rpm -qf {} \; | grep "is not"
# Find exacuable files
find / -type f -executable | grep <something>


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

削除された実行中のバイナリの回復

/tmp/execから実行され、削除されたプロセスを想像してください。それを抽出することが可能です

cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it

オートスタートの場所を調査する

スケジュールされたタスク

cat /var/spool/cron/crontabs/*  \
/var/spool/cron/atjobs \
/var/spool/anacron \
/etc/cron* \
/etc/at* \
/etc/anacrontab \
/etc/incron.d/* \
/var/spool/incron/* \

#MacOS
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/

サービス

マルウェアがインストールされる可能性のあるサービスのパス:

  • /etc/inittab: rc.sysinitなどの初期化スクリプトを呼び出し、さらに起動スクリプトに誘導します。
  • /etc/rc.d/ および /etc/rc.boot/: サービスの起動スクリプトが含まれており、後者は古いLinuxバージョンに見られます。
  • /etc/init.d/: Debianなどの特定のLinuxバージョンで起動スクリプトを保存するために使用されます。
  • サービスは、Linuxのバリアントに応じて /etc/inetd.conf または /etc/xinetd/ を介してもアクティブ化される可能性があります。
  • /etc/systemd/system: システムおよびサービスマネージャースクリプト用のディレクトリ。
  • /etc/systemd/system/multi-user.target.wants/: マルチユーザーランレベルで起動する必要があるサービスへのリンクが含まれています。
  • /usr/local/etc/rc.d/: カスタムまたはサードパーティのサービス用。
  • ~/.config/autostart/: ユーザー固有の自動起動アプリケーション用であり、ユーザー向けのマルウェアの隠れた場所となる可能性があります。
  • /lib/systemd/system/: インストールされたパッケージによって提供されるシステム全体のデフォルトユニットファイル。

カーネルモジュール

マルウェアによってルートキットコンポーネントとして頻繁に使用されるLinuxカーネルモジュールは、システム起動時にロードされます。これらのモジュールにとって重要なディレクトリとファイルは次のとおりです

  • /lib/modules/$(uname -r): 実行中のカーネルバージョン用のモジュールを保持します。
  • /etc/modprobe.d: モジュールのロードを制御する構成ファイルが含まれています。
  • /etc/modprobe および /etc/modprobe.conf: グローバルモジュール設定用のファイル。

その他の自動起動場所

Linuxは、ユーザーログイン時に自動的にプログラムを実行するためにさまざまなファイルを使用し、潜在的にマルウェアを隠す可能性があります

  • /etc/profile.d/*, /etc/profile, および /etc/bash.bashrc: すべてのユーザーログイン時に実行されます。
  • ~/.bashrc, ~/.bash_profile, ~/.profile, および ~/.config/autostart: ユーザー固有のファイルで、ユーザーのログイン時に実行されます。
  • /etc/rc.local: すべてのシステムサービスが起動した後に実行され、マルチユーザー環境への移行の終了を示します。

ログの調査

Linuxシステムは、さまざまなログファイルを介してユーザーのアクティビティやシステムイベントを追跡します。これらのログは、不正アクセス、マルウェア感染、およびその他のセキュリティインシデントを特定するために重要です。主要なログファイルには次のものがあります

  • /var/log/syslog (Debian) または /var/log/messages (RedHat): システム全体のメッセージとアクティビティをキャプチャします。
  • /var/log/auth.log (Debian) または /var/log/secure (RedHat): 認証試行、成功および失敗したログインを記録します。
  • grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log を使用して関連する認証イベントをフィルタリングします。
  • /var/log/boot.log: システムの起動メッセージが含まれています。
  • /var/log/maillog または /var/log/mail.log: メールサーバーのアクティビティを記録し、メール関連のサービスを追跡するのに役立ちます。
  • /var/log/kern.log: エラーや警告を含むカーネルメッセージを保存します。
  • /var/log/dmesg: デバイスドライバーメッセージを保持します。
  • /var/log/faillog: 失敗したログイン試行を記録し、セキュリティ侵害の調査を支援します。
  • /var/log/cron: cronジョブの実行を記録します。
  • /var/log/daemon.log: バックグラウンドサービスのアクティビティを追跡します。
  • /var/log/btmp: 失敗したログイン試行を文書化します。
  • /var/log/httpd/: Apache HTTPDのエラーおよびアクセスログが含まれています。
  • /var/log/mysqld.log または /var/log/mysql.log: MySQLデータベースのアクティビティを記録します。
  • /var/log/xferlog: FTPファイル転送を記録します。
  • /var/log/: ここで予期しないログを常にチェックしてください。

{% hint style="info" %} Linuxシステムのログと監査サブシステムは、侵入やマルウェアのインシデントで無効化または削除される可能性があります。Linuxシステムのログは一般的に悪意のある活動に関する最も有用な情報のいくつかを含んでいるため、侵入者は定期的にそれらを削除します。したがって、利用可能なログファイルを調査する際には、削除や改ざんの兆候となる欠落や順序外のエントリを探すことが重要です。 {% endhint %}

Linuxは各ユーザーのコマンド履歴を維持し、以下に保存されます:

  • ~/.bash_history
  • ~/.zsh_history
  • ~/.zsh_sessions/*
  • ~/.python_history
  • ~/.*_history

さらに、last -Faiwx コマンドはユーザーログインのリストを提供します。未知または予期しないログインがあるかどうかを確認してください。

追加の特権を付与できるファイルを確認してください:

  • 予期しないユーザー特権が付与されている可能性がある /etc/sudoers を確認してください。
  • 予期しないユーザー特権が付与されている可能性がある /etc/sudoers.d/ を確認してください。
  • 異常なグループメンバーシップや権限を特定するために /etc/groups を調べてください。
  • 異常なグループメンバーシップや権限を特定するために /etc/passwd を調べてください。

一部のアプリケーションは独自のログを生成することもあります:

  • SSH: ~/.ssh/authorized_keys および ~/.ssh/known_hosts を調べ、不正なリモート接続を見つけます。
  • Gnomeデスクトップ: Gnomeアプリケーションを介して最近アクセスされたファイルを示す ~/.recently-used.xbel を調べます。
  • Firefox/Chrome: ~/.mozilla/firefox または ~/.config/google-chrome でブラウザの履歴とダウンロードをチェックし、不審な活動を見つけます。
  • VIM: アクセスされたファイルパスや検索履歴などの使用詳細を示す ~/.viminfo を確認します。
  • Open Office: 侵害されたファイルを示す可能性のある最近のドキュメントアクセスを確認してください。
  • FTP/SFTP: 許可されていないファイル転送を示す ~/.ftp_history または ~/.sftp_history のログを確認します。
  • MySQL: 実行されたMySQLクエリを示す ~/.mysql_history を調査し、許可されていないデータベースアクティビティを明らかにします。
  • Less: 閲覧されたファイルや実行されたコマンドなどの使用履歴を分析する ~/.lesshst を確認します。
  • Git: リポジトリの変更を示す ~/.gitconfig およびプロジェクト .git/logs を調べます。

USBログ

usbrip は、Linuxログファイル (/var/log/syslog* または /var/log/messages*、ディストリビューションによって異なります) を解析してUSBイベント履歴テーブルを作成するための純粋なPython 3で書かれた小さなソフトウェアです。

使用されたすべてのUSBデバイスを把握することは興味深いことであり、USBの許可リストを持っていると、そのリストに含まれていないUSBの使用を見つけるのに役立ちます。

インストール

pip3 install usbrip
usbrip ids download #Download USB ID database

Basic Forensic Methodology

Linux Forensics
  1. Collecting Volatile Data

    • Description: Collecting volatile data involves capturing information that is stored in temporary storage or memory, such as running processes, open network connections, and system logs.
    • Tools: ps, netstat, lsof, dmesg, last, w
  2. Collecting Non-Volatile Data

    • Description: Collecting non-volatile data involves acquiring information that is stored on persistent storage, such as files, directories, and system configurations.
    • Tools: dd, dc3dd, dcfldd, sleuthkit, autopsy
  3. Analyzing Data

    • Description: Analyzing data involves examining the collected information to identify potential evidence, patterns, or anomalies that may be relevant to the investigation.
    • Tools: grep, strings, hexdump, autopsy, volatility
  4. Reporting Findings

    • Description: Reporting findings involves documenting the results of the forensic analysis in a clear and organized manner, including any findings, conclusions, and recommendations.
    • Tools: sleuthkit, autopsy, reporting templates
  5. Preserving Evidence

    • Description: Preserving evidence involves ensuring that the integrity of the original data is maintained throughout the forensic process to prevent tampering or alteration.
    • Tools: Write blockers, forensic imaging tools, cryptographic hash functions
  6. Maintaining Chain of Custody

    • Description: Maintaining the chain of custody involves documenting the handling of evidence to establish its integrity and admissibility in a legal proceeding.
    • Tools: Evidence bags, seals, logs, documentation forms
usbrip events history #Get USB history of your curent linux machine
usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user
#Search for vid and/or pid
usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid

更多示例和信息请查看githubhttps://github.com/snovvcrash/usbrip


使用Trickest 可以轻松构建和自动化工作流,使用世界上最先进的社区工具。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

检查用户帐户和登录活动

检查 /etc/passwd/etc/shadow安全日志查找是否有异常名称或在已知未经授权事件附近创建或使用的帐户。此外检查可能的sudo暴力攻击。
此外,检查文件如 /etc/sudoers/etc/groups,查看是否给用户授予了意外的特权。
最后,查找没有密码或易于猜测密码的帐户。

检查文件系统

在恶意软件调查中分析文件系统结构

在调查恶意软件事件时,文件系统的结构是信息的重要来源,可以揭示事件序列和恶意软件的内容。然而,恶意软件作者正在开发技术来阻碍这种分析,例如修改文件时间戳或避免使用文件系统进行数据存储。

为了对抗这些反取证方法,重要的是:

  • 使用像Autopsy这样的工具进行彻底的时间线分析,用于可视化事件时间线,或者使用Sleuth Kitmactime获取详细的时间线数据。
  • 调查系统的$PATH中的意外脚本这些脚本可能包括攻击者使用的shell或PHP脚本。
  • 检查/dev中的非典型文件,因为它传统上包含特殊文件,但可能包含与恶意软件相关的文件。
  • 搜索具有名称像".. "(点 点 空格)或"..^G"(点 点 控制-G的隐藏文件或目录,这些文件可能隐藏恶意内容。
  • 使用以下命令识别setuid root文件 find / -user root -perm -04000 -print 这会找到具有提升权限的文件,可能会被攻击者滥用。
  • 查看inode表中的删除时间戳以发现大量文件删除可能表明存在rootkit或特洛伊木马。
  • 在识别一个恶意文件后检查相邻的inode,因为它们可能被放在一起。
  • 检查常见的二进制目录/bin/sbin)中最近修改的文件,因为这些文件可能被恶意软件修改。
# List recent files in a directory:
ls -laR --sort=time /bin```

# Sort files in a directory by inode:
ls -lai /bin | sort -n```

{% hint style="info" %} 攻撃者ファイルを正規に見せるために時間を変更できるが、inodeを変更することはできません。同じフォルダ内の他のファイルと同じ時間に作成および変更されたことを示すファイルが見つかった場合、inodeが予期せず大きい場合、そのファイルのタイムスタンプが変更されたことになります。 {% endhint %}

異なるファイルシステムバージョンのファイルを比較

ファイルシステムバージョンの比較サマリ

ファイルシステムバージョンを比較し変更点を特定するために、簡略化されたgit diffコマンドを使用します:

  • 新しいファイルを見つけるには、2つのディレクトリを比較します
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
  • 変更されたコンテンツについて、特定の行を無視して変更点をリストアップします:
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
  • 削除されたファイルを検出するために
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
  • フィルターオプション (--diff-filter) は、追加された (A)、削除された (D)、または変更された (M) ファイルなど、特定の変更に絞るのに役立ちます。
  • A: 追加されたファイル
  • C: コピーされたファイル
  • D: 削除されたファイル
  • M: 変更されたファイル
  • R: 名前が変更されたファイル
  • T: タイプの変更(例:ファイルからシンボリックリンクへ)
  • U: マージされていないファイル
  • X: 不明なファイル
  • B: 破損したファイル

参考文献

AWSハッキングをゼロからヒーローまで学ぶ htARTEHackTricks AWS Red Team Expert!

サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたいですか、またはHackTricksをPDFでダウンロードしたいですか? SUBSCRIPTION PLANSをチェックしてください!

ハッキングトリックを共有するには、 hacktricks repo hacktricks-cloud repo にPRを提出してください。


Trickest を使用して、世界で最も高度なコミュニティツールによって強化された ワークフローを簡単に構築 および 自動化 します。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}