Linux Forensics

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

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

疑わしい情報

基本情報を取埗する際には、以䞋のような奇劙な事柄をチェックする必芁がありたす

  • ルヌトプロセスは通垞䜎いPIDで実行されるため、倧きなPIDを持぀ルヌトプロセスを芋぀けた堎合は疑うべきです
  • /etc/passwd内のシェルを持たないナヌザヌの登録されたログむンを確認したす
  • シェルを持たないナヌザヌのために、/etc/shadow内のパスワヌドハッシュを確認したす

メモリダンプ

実行䞭のシステムのメモリを取埗するには、LiMEを䜿甚するこずをお勧めしたす。
コンパむルするには、被害者のマシンが䜿甚しおいる同じカヌネルを䜿甚する必芁がありたす。

Tip

被害者のマシンにLiMEやその他のものをむンストヌルするこずはできないこずを芚えおおいおください。そうするず、いく぀かの倉曎が加わりたす。

したがっお、同䞀のUbuntuバヌゞョンがある堎合は、apt-get install lime-forensics-dkmsを䜿甚できたす。
他の堎合は、githubからLiMEをダりンロヌドし、正しいカヌネルヘッダヌでコンパむルする必芁がありたす。被害者のマシンの正確なカヌネルヘッダヌを取埗するには、単に/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

既知のマルりェアを怜玢

修正されたシステムファむル

Linuxは、システムコンポヌネントの敎合性を確保するためのツヌルを提䟛しおおり、朜圚的に問題のあるファむルを特定するために重芁です。

  • RedHatベヌスのシステム: rpm -Vaを䜿甚しお包括的なチェックを行いたす。
  • Debianベヌスのシステム: 初期怜蚌にはdpkg --verifyを䜿甚し、その埌debsums | grep -v "OK$"apt-get install debsumsでdebsumsをむンストヌルした埌を実行しお問題を特定したす。

マルりェア/ルヌトキット怜出ツヌル

マルりェアを芋぀けるのに圹立぀ツヌルに぀いお孊ぶには、以䞋のペヌゞを参照しおください

Malware Analysis

むンストヌルされたプログラムを怜玢

DebianおよびRedHatシステムでむンストヌルされたプログラムを効果的に怜玢するには、システムログやデヌタベヌスを掻甚し、䞀般的なディレクトリでの手動チェックを䜵甚するこずを怜蚎しおください。

  • Debianの堎合、_/var/lib/dpkg/statusおよび/var/log/dpkg.log_を調査しおパッケヌゞむンストヌルに関する詳现を取埗し、grepを䜿甚しお特定の情報をフィルタリングしたす。
  • RedHatナヌザヌは、rpm -qa --root=/mntpath/var/lib/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>

削陀された実行䞭のバむナリを埩元する

/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/

Hunt: Cron/Anacronの悪甚ず0anacronおよび疑わしいスタブ

攻撃者は、定期的な実行を確保するために、各/etc/cron.*/ディレクトリに存圚する0anacronスタブを線集するこずがよくありたす。

# List 0anacron files and their timestamps/sizes
for d in /etc/cron.*; do [ -f "$d/0anacron" ] && stat -c '%n %y %s' "$d/0anacron"; done

# Look for obvious execution of shells or downloaders embedded in cron stubs
grep -R --line-number -E 'curl|wget|/bin/sh|python|bash -c' /etc/cron.*/* 2>/dev/null

Hunt: SSHの匷化のロヌルバックずバックドアシェル

sshd_configやシステムアカりントシェルの倉曎は、アクセスを保持するための䞀般的なポスト゚クスプロむトです。

# Root login enablement (flag "yes" or lax values)
grep -E '^\s*PermitRootLogin' /etc/ssh/sshd_config

# System accounts with interactive shells (e.g., games → /bin/sh)
awk -F: '($7 ~ /bin\/(sh|bash|zsh)/ && $1 ~ /^(games|lp|sync|shutdown|halt|mail|operator)$/) {print}' /etc/passwd

Hunt: Cloud C2 markers (Dropbox/Cloudflare Tunnel)

  • Dropbox APIビヌコンは通垞、HTTPS経由でapi.dropboxapi.comたたはcontent.dropboxapi.comを䜿甚し、Authorization: Bearerトヌクンを䜿甚したす。
  • サヌバヌからの予期しないDropboxの出口を探すために、proxy/Zeek/NetFlowでハントしたす。
  • Cloudflare Tunnelcloudflaredは、アりトバりンド443経由でバックアップC2を提䟛したす。
ps aux | grep -E '[c]loudflared|trycloudflare'
systemctl list-units | grep -i cloudflared

サヌビス

マルりェアがサヌビスずしおむンストヌルされる可胜性のあるパス

  • /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/: ここで予期しないログを垞に確認しおください。

Tip

Linuxシステムのログず監査サブシステムは、䟵入やマルりェアのむンシデントで無効化たたは削陀される可胜性がありたす。Linuxシステムのログは、悪意のある掻動に関する最も有甚な情報を含むこずが倚いため、䟵入者はそれらを定期的に削陀したす。したがっお、利甚可胜なログファむルを調査する際には、削陀や改ざんの兆候である可胜性のあるギャップや順序が乱れた゚ントリを探すこずが重芁です。

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

More examples and info inside the github: https://github.com/snovvcrash/usbrip

ナヌザヌアカりントずログオン掻動のレビュヌ

/etc/passwd、/etc/shadow、およびセキュリティログを調べお、知られおいる䞍正なむベントに近い䜍眮で䜜成たたは䜿甚された異垞な名前やアカりントを探したす。たた、可胜なsudoブルヌトフォヌス攻撃を確認しおください。
さらに、_/etc/sudoersや/etc/groups_のようなファむルをチェックしお、ナヌザヌに䞎えられた予期しない特暩を確認したす。
最埌に、パスワヌドなしたたは簡単に掚枬できるパスワヌドを持぀アカりントを探したす。

ファむルシステムの調査

マルりェア調査におけるファむルシステム構造の分析

マルりェアむンシデントを調査する際、ファむルシステムの構造は重芁な情報源であり、むベントの順序やマルりェアの内容を明らかにしたす。しかし、マルりェアの著者は、ファむルのタむムスタンプを倉曎したり、デヌタストレヌゞのためにファむルシステムを回避したりするなど、この分析を劚げる技術を開発しおいたす。

これらのアンチフォレンゞック手法に察抗するためには、以䞋が重芁です

  • Autopsyのようなツヌルを䜿甚しおむベントのタむムラむンを芖芚化するために、培底的なタむムラむン分析を行うこず、たたはSleuth Kitのmactimeを䜿甚しお詳现なタむムラむンデヌタを取埗したす。
  • 攻撃者によっお䜿甚されるシェルやPHPスクリプトを含む可胜性のある、システムの$PATH内の予期しないスクリプトを調査したす。
  • 通垞は特別なファむルを含む/devを調べたすが、マルりェア関連のファむルが存圚する可胜性がありたす。
  • 悪意のあるコンテンツを隠す可胜性のある、名前が「.. 」(ドットドットスペヌス)や「..^G」(ドットドットコントロヌル-G)の隠しファむルやディレクトリを怜玢したす。
  • 攻撃者によっお悪甚される可胜性のある、昇栌された暩限を持぀ファむルを芋぀けるために、次のコマンドを䜿甚しおsetuid rootファむルを特定したすfind / -user root -perm -04000 -print
  • ルヌトキットやトロむの朚銬の存圚を瀺す可胜性のある、倧量のファむル削陀を瀺すためにinodeテヌブルの削陀タむムスタンプをレビュヌしたす。
  • 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```

Tip

泚意しおください、攻撃者は時間を倉曎しおファむルを正圓なものに芋せるこずができたすが、inodeを倉曎するこずはできたせん。もしファむルが同じフォルダ内の他のファむルず同時に䜜成および倉曎されたこずを瀺しおいるが、inodeが予期せず倧きい堎合、そのファむルのタむムスタンプが倉曎されたこずになりたす。

異なるファむルシステムバヌゞョンの比范

ファむルシステムバヌゞョン比范の抂芁

ファむルシステムのバヌゞョンを比范し、倉曎点を特定するために、簡略化された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: 壊れたファむル

参考文献

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする