29 KiB
Linuxフォレンジクス
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
**htARTE (HackTricks AWS Red Team Expert)**を使用して、ゼロからヒーローまでAWSハッキングを学びましょう
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのグッズを入手してください
- 独占的なNFTsのコレクションであるThe PEASS Familyを発見してください
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
初期情報収集
基本情報
まず最初に、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(すべてのセグメントが連結されたもの)
- Padded(Rawと同じですが、右ビットにゼロが入っています)
- 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
例
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
ユーザーアカウントとログオンアクティビティのレビュー
異常な名前やアカウント、または既知の不正イベントに近接して作成または使用されたアカウントを探すために、/etc/passwd、/etc/shadow、およびセキュリティログを調査します。また、sudoの総当たり攻撃をチェックします。
さらに、ユーザーに与えられた予期しない特権を確認するために、_/etc/sudoersや/etc/groups_などのファイルをチェックします。
最後に、パスワードのないアカウントや簡単に推測できるパスワードを持つアカウントを探します。
ファイルシステムの調査
マルウェア調査におけるファイルシステム構造の分析
マルウェア事件を調査する際、ファイルシステムの構造は情報の重要な源であり、イベントの順序やマルウェアの内容を明らかにします。しかし、マルウェアの作者は、ファイルのタイムスタンプの変更やデータ保存のためのファイルシステムの回避など、この分析を妨げる技術を開発しています。
これらのアンチフォレンジック手法に対抗するためには、次のことが重要です:
- Autopsyなどのツールを使用してイベントタイムラインを視覚化するか、Sleuth Kitの
mactime
を使用して詳細なタイムラインデータを取得することで、徹底的なタイムライン分析を実施します。 - 攻撃者が使用する可能性のあるシェルやPHPスクリプトを含む、システムの$PATHにある予期しないスクリプトを調査します。
- 通常は特殊ファイルを含むはずの**/devを非典型的なファイル**を調べますが、マルウェア関連のファイルが格納されている可能性があります。
- ".. "(ドットドットスペース)や"..^G"(ドットドットコントロール-G)などの名前の隠しファイルやディレクトリを検索し、悪意のあるコンテンツを隠す可能性があります。
find / -user root -perm -04000 -print
コマンドを使用して、setuid rootファイルを特定します。これにより、攻撃者に悪用される可能性のある権限の昇格ファイルを見つけることができます。- inodeテーブル内の削除タイムスタンプを確認して、大量のファイル削除を検出し、rootkitやトロイの存在を示す可能性があります。
- 1つを特定した後、隣接する悪意のあるファイルを見つけるために連続した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
: 破損したファイル
参考文献
- https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems_Ch3.pdf
- https://www.plesk.com/blog/featured/linux-logs-explained/
- https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
- 書籍: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides
AWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)!
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝してみたいですか?または、PEASSの最新バージョンにアクセスしたいですか?または、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見し、独占的なNFTsコレクションを入手します
- 公式PEASS&HackTricksスウォッグを手に入れます
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitterで私をフォローします 🐦@carlospolopm.
ハッキングトリックを共有するには、hacktricksリポジトリ およびhacktricks-cloudリポジトリ にPRを提出してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}