データ収集-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