データ収集-2
参考書籍 : 実践bashによるサイバーセキュリティ対策
・ファイルシステム上での検索
1, ファイル名による検索
findを使ってファイル名による検索を行う。
passwordという単語を含むファイル名を検索し、エラーを抑制する例を示す。
$ find /home -name '*password*' 2>/dev/null
2, 隠しファイルの検索
隠しファイルは検索逃れのために用いられることもあるので、隠しファイルも検索する必要がある。
Linuxにおいては、隠しファイルは.(ピリオド)から始まるので、次のように検索する。
$ find /home -name '.*'
Windowsにおいては、ファイル属性で検索する
> dir c:\ /S /A:H
/Sオプションにより、dirはディレクトリを再帰的に検索する。
/A:Hオプションにより、隠し属性ファイルの一覧が表示される。
3, findコマンドについて
findコマンドは-execオプションで、検索した各ファイルにコマンドを実行することができる。
findコマンドで検索したファイルの属性を表示(attrib)し、その中から隠しファイルのみを表示するには、次のようにする。
$ find /c -exec attrib '{}' \; | egrep '^.{4}H.*'
execは{}を見つかったファイル名に変更するため、'{`}' \;でファイル名を表示する。
egrepで5番目の文字がHであるもの(隠しファイル)を抽出する。
・ファイルサイズによる検索
通常ありえないサイズのファイルを検索するなど
5GB以上のファイルを検索するには、次のようにする。
$ find /home -size +5G
ファイルサイズが上位5つのファイルを検索するには、複数のコマンドを組み合わせる。
$ find / -type f -exec ls -s '{}' \; | sort -n -r | head -5
sortの-rオプションを外せば、小さいファイルを検索できる。
lsコマンドでも最大サイズのファイルを検索できる。findを使わないので、効率的になる。
$ ls / -R -s | sort -n -r | head -5
・時刻による検索
インシデント調査のときなど、最近変更があったファイルを探すときに役立つ。
最近5分以内に変更されたファイルを検索するには、次のようにする。
$ find /home -mmin -5
直近24時間以内に変更されたファイルも検索できる。
$ find /home -mtime -1
変更後48時間"以上経過"(48時間以上変更されていない)したファイルは次のように検索する。
$ find /home -mtime +2
mtimeオプションに+も-もつけなかった場合は、ちょうどを意味する。
・ファイル内容の検索
grepコマンドで、ファイル内容を検索することができる。
passwordという文字列を含むファイルを検索するには、次のようにする。
$ grep -i -r /home -e 'password'
iオプションで大文字小文字の区別をせずに検索する。
grepとfindを組み合わせて、カレントディレクトリのファイルにgrepでマッチングができる。
$ find /home -type f -exec grep 'password' '{}' \; -exec cp '{}' . \;
cpコマンドを使い、マッチしたファイルをカレントディレクトリにコピーすることも可能
・ファイル形式による検索
拡張子は任意に変更可能なので、拡張子ではなくfileコマンドでファイル形式による検索をする。
fileコマンドはマジックナンバーを調べることで、ファイル形式を特定する。
$ file title.png title.png: PNG image data, 644 x 905, 8-bit/color RGBA, non-interlaced
fileコマンドの出力に正規表現を用いて、ファイル形式による検索をする。
・メッセージダイジェスト値による検索
一般的なハッシュアルゴリズムとして、MD5, SHA-1, SHA-256がある。
sha1sumコマンドで、SHA-1メッセージダイジェストを計算できる。
$ sha1sum title.png d705afea3199b0534b5ad34791d5ec69938fa051 *title.png
ファイルの内容が少しでも異なれば、メッセージダイジェストは全く別のものになる。
なので、ファイルが同一であるかを調べることができる。