データ収集-1
参考書籍 : 実践bashによるサイバーセキュリティ対策
・利用するコマンド
1, cut : ファイルの指定した位置を抽出する
-c : 抽出する文字を指定する
-d : フィールドのデリミタを指定する。デフォルトはタブ
-f : 抽出するフィールドを指定する。
例えば、以下のcutfile.txtに対して、
12/05/2017 192.168.10.14 test.html 12/30/2017 192.168.10.185 login.html
IPアドレスのみを抽出するには、以下のようにする。
$ cut -d' ' -f2 cutfile.txt 192.168.10.14 192.168.10.185
2, file : 指定されたファイルのファイル形式を特定する。ファイル名だけでなく、ファイルの先頭部を読み込み解析する
-f : 解析するファイル名のリストをファイルから読み込む
-k : 最初のマッチで検索を終了せず、マッチしたすべてのファイル形式を表示する
-z : 圧縮ファイルの中も検索する
3, head : ファイルの先頭数行もしくは何バイトかを表示する。
-n : 表示する行数、デフォルトは10行
-c : 表示するバイト数
4, reg : Windowsレジストリを操作するコマンド。Windows XP以降で利用可能
add : レジストリにエントリを追加
export : 指定したレジストリのエントリをファイルにコピーする
query : 指定したパス配下のサブキーの一覧を返却する。
>reg query HKEY_LOCAL_MACHINE HKEY_LOCAL_MACHINE\BCD00000000 HKEY_LOCAL_MACHINE\HARDWARE HKEY_LOCAL_MACHINE\SAM HKEY_LOCAL_MACHINE\SECURITY HKEY_LOCAL_MACHINE\SOFTWARE HKEY_LOCAL_MACHINE\SYSTEM
5, wevtutil : Windowsにおけるシステムログの閲覧や管理を行うためのコマンド
el : 参照できるログを列挙する
qe : ログ内のイベントを検索する
/c : 読み取るイベントの最大数を指定する
/f : 出力をテキストファイルにするか、XMLファイルにするかを指定する
/rd : 読み取り順の制御を行う
直近のSystemログを表示するには、以下のようにする。
>wevtutil qe System /c:1 /rd:true
・システム情報の収集
1, SSHによるコマンドのリモート実行 : SSHを用いて、リモートでセキュアにコマンドを実行できる。
コマンドをリモートシステム上で実行し、出力をローカルシステムのファイルにリダイレクトするには、次のようにする
$ ssh myserver ps > /tmp/ps.out $ ssh myserver ps \> /tmp/ps.out # リモートシステム上のファイルにリダイレクト
次のようにして、ローカルのシェルスクリプトをリモートシステム上で実行させることもできる。
$ ssh myserver bash < ./osdetect.sh
2, Linuxにおけるログファイルの収集
tarコマンドにより、/var/log配下に格納されるログファイルを単一のファイルにまとめることができる。
$ tar -czf ${HOSTNAME}_logs.tar.gz /var/log/
Linuxの主要なログとして
/var/log/apache2/
/var/log/auth.log
/var/log/kern.log
/var/log/messages
/var/log/syslog
がある。
ログの保管場所は、/etc/syslog.confもしくは/etc/rsyslog.confを参照する。
3, Windowsにおけるログファイルの収集 : Windows環境ではwevtutilによりログファイルの収集と操作を行う。
次のwinlogs.shスクリプトで、wevtutil elにより取得可能なログを列挙した上で、eplによりそれぞれのログをファイル出力している。
#!/bin/bash - # # Usage : ./winlogs.sh [-z] TGZ=0 if (( $# > 0 )) then if [[ ${1:0:2} == '-z' ]] # support -z option then TGZ=1 # tar/zip flag shift fi fi SYSNAM=$(hostname) LOGDIR=${1:-/tmp/${SYSNAM}_logs} # support log path mkdir -p $LOGDIR cd ${LOGDIR} || exit -2 wevtutil el | while read ALOG do ALOG="${ALOG%$'\r'}" # delete \r from \n\r echo "${ALOG}:" SAFNAM="${ALOG// /_}" # replace space by _ SAFNAM="${SAFNAM//\//-}" # replace \ by - wevtutil epl "$ALOG" "${SYSNAM}_${SAFNAM}.evtx" done if (( TGZ == 1 )) then tar -czvf ${SYSNAM}_logs.tgz *.evtx fi cd -
4, システム情報の収集
システム上で任意のコマンドを実行できれば、システムに関する情報を収集できる。
システム情報を得るためのコマンド例を以下に示す
#Linux Command |MSWin Bash |Purpose #----------------+------------+------------------------------ uname -a |uname -a |O.S. version etc cat /proc/cpuinfo|systeminfo |system hardware and related info ifconfig |ipconfig |Network interface information ip route |route print |routing table arp -a |arp -a |ARP table netstat -a |netstat -a |network connections mount |net share |mounted disks ps -e |tasklist |running processes
5, Windowsレジストリの収集
Windowsレジストリはシステムやアプリケーションの挙動を制御する広大なリポジトリである。
特定のレジストリキーを参照することで、マルウェアや侵入の痕跡を発見することができることも多い。
Git Bashでは、次のコマンドでレジストリ全体をエクスポートできる。
$ regedit //E ${HOSTNAME}_reg.bak
regコマンドを使ってレジストリの特定のセクションをエクスポートするには、次のようにする。
$ reg export HKEY_LOCAL_MACHINE $(HOSTNAME)_hklm.bak