Kali でツール出力を読み、絞り込む

LinuxBeginner
オンラインで実践に進む

はじめに

セキュリティツールの長い出力には、メモ、重複した観測、診断情報が含まれることがあります。有用な結果とは、由来を理解できる、関連する調査結果を絞り込んだものです。

この実習では、スキャンツールを実行する前に、提供されたテキストファイルで練習します。内容を読み、開いているサービスの記録を絞り込んで重複を除き、件数を数え、エラーと有用な出力を分けます。

用意された出力ファイルを読む

このステップでは、調査結果を抽出する前に、用意されたテキストファイルをいくつかの方法で調べます。これはサンプルデータであり、自分で実行するスキャンの出力ではありません。

準備済みの Kali シェルを開きます。

kali

絶対パスで共有作業ディレクトリを選びます。

cd /home/labex/project

observations.txt には、NOTE、OPEN、CLOSED で始まる短い行があります。ここで OPEN は、サンプルの観測でサービスが開いていると記されていることを意味し、脆弱性を証明するものではありません。小さなファイル全体を表示します。

cat observations.txt

開いているサービスの重複行に加え、メモや閉じているサービスの行が表示されます。先に元の内容を読むと、意図した情報を保持するフィルターを選べます。

長いファイルには、ファイルを変更せずに 1 ページずつ表示する less を使います。

less observations.txt

必要に応じて矢印キーで移動し、q で終了してシェルに戻ります。サンプルは 1 画面に収まる大きさですが、同じページャーは大きなツール出力にも使えます。

head はファイルの先頭、tail は末尾を読みます。-n は表示する行数を指定します。先頭 3 行を調べます。

head -n 3 observations.txt

想定される出力:

NOTE supplied training observations
OPEN training-web:8080 http
CLOSED training-db:5432 postgresql

次に末尾 2 行を調べます。

tail -n 2 observations.txt

最後の行は NOTE end of sample です。最初の実習で紹介した > 演算子で、3 行のプレビューを保存します。

head -n 3 observations.txt > preview.txt
cat preview.txt

プレビューには上記と同じ 3 行があるはずです。元の内容を変更せず、有用な表示を保存できました。

絞り込み、並べ替え、重複した調査結果の削除

このステップでは、開いているサービスの記録を残し、重複を除くパイプラインを作ります。

Kali 内で続け、共有ワークスペースに戻ります。

cd /home/labex/project

grep は一致する行を表示します。次のパターンはシングルクォートで囲み、シェルがそのまま渡すようにしています。アンカー ^ は行頭を意味し、OPEN の後の空白は記録の種類とデータを区切ります。

grep '^OPEN ' observations.txt

重複行を含め、開いているサービスの観測がすべて出力されます。メモと CLOSED の行は含まれません。

パイプ記号 | は、あるコマンドの標準出力を次のコマンドの標準入力につなぎます。sort は同じ行が隣り合うように並べ替えます。

grep '^OPEN ' observations.txt | sort

重複行がまとまりました。uniq は隣接する同一行を除くため、重複行が離れている可能性がある場合は、並べ替えの後に置きます。

grep '^OPEN ' observations.txt | sort | uniq

想定される出力:

OPEN training-dns:5353 dns
OPEN training-ssh:2222 ssh
OPEN training-web:8080 http

各コマンドには、記録の選択、並べ替え、重複の集約という一つずつの役割があります。結果のストリームを別の出力ファイルに保存します。

grep '^OPEN ' observations.txt | sort | uniq > open-services.txt
cat open-services.txt

同じ 3 件の重複のない記録が表示されるはずです。リダイレクトはパイプラインの最終出力に適用され、元の観測ファイルは編集されません。

結果を数え、エラー出力を分ける

このステップでは、選択した調査結果を数え、通常の出力とエラーメッセージを区別します。

共有ワークスペースから始めます。

cd /home/labex/project

wc はテキストを数えます。-l オプションは改行で終わる行を数えます。保存したファイルでは 1 行が 1 件の調査結果なので、その数は開いているサービスの異なる記録の件数です。

wc -l open-services.txt

出力には 3 とファイル名が表示され、間隔は異なる場合があります。パイプラインならファイル名の引数なしでテキストを渡せるので、件数だけを保存するのに便利です。

cat open-services.txt | wc -l > finding-count.txt
cat finding-count.txt

値は 3 で、先頭に空白が付く場合があります。

通常、プログラムは有用なデータを標準出力へ、診断情報を標準エラー出力へ送ります。シェルの > は標準出力を、2> は標準エラー出力をリダイレクトします。違いを観察するため、意図的に存在しないファイルを読み、その診断情報を保存します。missing-observations.txt が存在しないため、次のコマンドは失敗する想定です。意図的な実演なので、その後も続けてください。

cat missing-observations.txt 2> read-error.txt

エラーメッセージは read-error.txt に送られるため、画面には何も表示されないはずです。分けて保存した診断情報を調べます。

cat read-error.txt

メッセージには missing-observations.txt の名前があり、存在しないので読めないと示されます。実際の調査結果は引き続き別になっています。

cat open-services.txt

有効な 3 件の記録は変わりません。診断情報を分けておくと、エラーメッセージをツールの調査結果と間違えるのを防げます。

まとめ

cat、less、head、tail でテキストを読み、grep で行を選択し、sort と uniq のパイプラインを組み、wc で記録を数え、出力とエラーのリダイレクトを使いました。これらのスキルは、冗長なツール出力を小さく確認しやすい結果にまとめるのに役立ちます。