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

29 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/inittabrc.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/syslogDebianまたは /var/log/messagesRedHatシステム全体のメッセージとアクティビティをキャプチャします。
  • /var/log/auth.logDebianまたは /var/log/secureRedHat認証試行、成功および失敗したログインを記録します。
  • 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/croncronジョブの実行を記録します。
  • /var/log/daemon.log:バックグラウンドサービスのアクティビティを追跡します。
  • /var/log/btmp:失敗したログイン試行を文書化します。
  • /var/log/httpd/Apache HTTPDのエラーおよびアクセスログが含まれています。
  • /var/log/mysqld.log または /var/log/mysql.logMySQLデータベースのアクティビティを記録します。
  • /var/log/xferlogFTPファイル転送を記録します。
  • /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

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

更多示例和信息请查看github: https://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等名称的隐藏文件或目录可能隐藏恶意内容。
  • 使用命令查找具有root权限的setuid文件: 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リポジトリ およびhacktricks-cloudリポジトリ にPRを提出してください。


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

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