
ライブトリアージ、メモリ取得(LiME)、ディスクイメージング、YARAスキャン、HTMLレポート生成を備えた自動化されたLinuxインシデントレスポンススクリプト。
Linux インシデント対応

TuxResponse は、bash で書かれた Linux システム向けのインシデント対応スクリプトです。Linux システム上のインシデント対応活動を自動化し、結果を損なうことなくシステムを迅速にトリアージできます。通常、企業システムには何らかの監視と制御が存在しますが、シャドー IT や標準外のイメージが企業内に展開されている場合など、例外があります。 試行錯誤しながら10個のコマンドを入力する作業が、ボタン一つで完了します。
テスト済み:
主な目的:
パッケージに含まれる外部ツール:
INSTALL LiME
function init_lime(){
if [ -f /usr/bin/yum ]; then
yum -y install make kernel-headers kernel-devel gcc
elif [ -f /usr/bin/apt-get ]; then
apt-add-repository universe
apt-get -y install make linux-headers-$(uname -r) gcc
fi
rm -f /tmp/v1.8.1.zip
wget -P/tmp https://github.com/504ensicsLabs/LiME/archive/v1.8.1.zip
unzip /tmp/v1.8.1.zip
rm -f /tmp/v1.8.1.zip
pushd LiME-1.8.1/src
make
mv lime-*.ko /tmp/lime.ko
popd
rm -rf LiME-1.8.1
}
インシデント対応時に LiME をすべて手動で入力してインストールしなければならないと、大幅に時間がかかります。
1)システム情報、IP、日付、時刻、ローカルタイムゾーン、最終起動 - 'hostnamectl; who -b; uname -a; uptime; ifconfig; date; last reboot'
1)マウントされたファイルシステムの確認 -'df -h'
2)実行可能ファイルのハッシュ(MD5) - 'find /usr/bin -type f -exec file "{}" \; | grep -i "elf" | cut -f1 -d: | xargs -I "{}" -n 1 md5sum {}'
3)変更されたファイル - 'modified_files_period_select'(tuxresponse.sh 内の関数を呼び出し)
4)隠しディレクトリの一覧 - 'find / -type d -name "\.*"'
5)ユーザー/グループ名がないファイル/ディレクトリ - 'find / \( -nouser -o -nogroup \) -exec ls -l {} \; 2>/dev/null'
6)パッケージから変更されたファイル -'packaged_files_changed'(tuxresponse.sh 内の関数を呼び出し)
1) ルートキットのチェック - 'chkrootkit' を実行
2) Yara スキャン - tuxresponse.sh 内の関数 'yara_select' を呼び出し(マスターリポジトリで利用可能なすべての YARA Linux ルールでシステムをスキャン)
3) EXIFTool - tuxresponse.sh 内の関数 'exiftool_select' を呼び出し(EXIFTool をインストール)
1) 実行中のプロセスの一覧 - 'ps -axu'
2) 削除されたバイナリがまだ実行中 - 'ls -alR /proc/*/exe 2> /dev/null | grep deleted'
3) アクティブなネットワーク接続(TCP、UDP) - 'ss -tunap | sed "s/[ \t]\+/|/g"'
4) PID に基づくプロセスのダンプ - 'dump_process_select'(tuxresponse.sh 内の関数を呼び出し)
1) ダンプする PID を入力: **(実行されるコマンド - gcore -a -o "${DUMP_FILE}" ${DUMP_PID} )**
5) /tmp、/dev から実行中のプロセス - 'ls -alR /proc/*/cwd 2> /dev/null | grep -E "tmp|dev"'
1) すべてのアクティブなネットワーク接続/raw ソケットの一覧 - 'netstat -nalp; netstat -plant'
1) システムに接続中のすべてのユーザー - 'w'
2) パスワードを持つユーザーの取得 - 'getent passwd'
1) Bash 履歴ファイルの確認 - 'cat ~/.bash_history | nl'
1) すべての Cron ジョブの一覧 - 'list_all_crontab'(tuxresponse.sh 内の関数を呼び出し)
2) すべての起動時/ブートプログラムの一覧 - 'list_all_onstartup'(tuxresponse.sh 内の関数を呼び出し)
1) ユーザーの .bash_history をダンプ - 'cat_all_bash_history'(tuxresponse.sh 内の関数を呼び出し)
2) バイナリが含まれるログを検索 - 'grep [[:cntrl:]] /var/log/*.log'
このオプションを使用すると、リモートシステムに接続し、すべてのスクリプトとツールをコピーしてシステムを分析できます。
このオプションを使用すると、LiME をソースからコンパイルし、システムの RAM メモリをダンプできます。他の方法では、すべての主要なカーネルバージョンに対してソースからコンパイルして LKM を挿入する必要があるため、これが最も簡単な方法です。
このオプションを使用すると、よく知られたツール dd を使用してターゲットシステムの完全なディスクイメージを作成できます。この関数は、ソースと宛先をパラメータとして受け取り、次のコマンドに挿入します 'dd if=${IMAGE_IN} | pv | dd of='${IMAGE_OUT}' bs=4K conv=noerror,sync'。リモートシステムを調査している場合、スクリプトは自身をそこにコピーします。その後、パラメータ ${TARGET_HOST} が設定されている場合、次のコマンドを使用してイメージを分析システムにダウンロードします >> "ssh -p${TARGET_PORT} ${TARGET_USER}@${TARGET_HOST} 'dd if=${IMAGE_IN} bs=4K conv=noerror,sync' | pv | dd of='${IMAGE_OUT}'"(進行状況を追跡するために pv を多用しています)
実行したすべての操作はテキストファイルに記録されるため、後で出力を確認しやすくなります。これの利点は、お気に入りのログ分析ツールにアップロードして後で意味を解釈できることです。さらに、この関数を使用して HTML レポートを生成し、コマンドで生成された出力をより人間が読みやすい形式で表示できます。
スクリプトの正常な動作に必要なバイナリをインストールします。
1) 依存関係
2) Yara とルール
3) ExifTool
4) Init チェック
5) chckrootkit
6) LiME
tuxresponse.sh の強化とフォレンジックサウンドネスのパス:
YYYYMMDDTHHMMSSZ)を使用し、防御可能なタイムスタンプを実現。evidence/manifest.txt に SHA-256 ハッシュ化されます。ディスクイメージには兄弟ファイル .sha256 が作成されます。modified_files_period_select は、ターゲットファイルシステムにタイムスタンプファイルを touch しなくなりました(これにより find の前に /tmp の atime/mtime が汚染されていました)。代わりに find / -xdev -newermt "1 $opt ago" を使用します。_create_disk_image 内の eval ${DD_CMD} を削除。dd/ssh パイプラインは直接実行され、ソースデバイスは使用前に ^/dev/[a-zA-Z0-9]+$ に対して検証されます。注: メニュー駆動モードは依然として
.cmds.sh、.menu_en.sh、forensics.shに依存していますが、これらはこのリポジトリには含まれていません。コマンド/メニューカタログの再構築は別の取り組みとして追跡されています。
dump_process_select は PID が数値であり、/proc/<pid> が存在することを確認してから gcore を呼び出します。exec_CMD は eval を使用しなくなりました。内部カタログからのシェルパイプラインコマンドは bash -c を介してディスパッチされます。set -euo pipefail で実行され、グローバル変数は事前に初期化されます。DISTO → DISTRO のタイプミスを修正(以前はサイレントにディストロ名を誤って設定していました)。apt-get install netstat → net-tools。evidence/*.txt を反復処理し(もはや ls 解析は行いません)、マニフェストをスキップします。出力変数は引用符で囲まれています。VERSION='1.1' 定数を追加。バナーにバージョンが表示されます。shellcheck -S error でクリーンです。