dfirr

A Note on R How-to in Cybersecurity Investigation

esquisseでApacheログを概観する

むかし計量経済学を学習していたころに最初に教わった事柄の1つに、データを概観することの重要性があります。いきなり回帰を試すのではなく、まずプロットしてみること。それだけで何か得るものがあるかもしれないし、外れ値などデータの異常に気づくかもしれない。

DFIRの現場でも、ログを入手したら、まず概要を把握することが大切です。そして、可視化は概要把握の有力な手段です。

私はこの目的でesquisseというパッケージを使っています。このパッケージはRStudioのAddinになっていて、GUI操作で可視化を実現してくれるものです。

材料としては、「SecRepo」に掲載されているApacheのCombinedログを使用します。

準備

パッケージをインストールする

esquisseはCRANに登録されているので、

install.packages("esquisse")

でインストール可能です。

サンプルデータを読み込む

Apache Combinedログをパースするための関数を作り、取り込みます。webreadrパッケージを使ってもかまいません。tidyverseに収録されているreadrパッケージは、読み込み先がファイルでもURLでもよく、圧縮ファイルにも対応しています。今回は、適当に9月28日のアクセスログを取得することにしました。

library(tidyverse)

read_combined <- function(file) {
  names <- c("ip_address", "remote_user_ident", "local_user_ident", "timestamp", 
             "request", "status_code", "bytes_sent", "referer", "user_agent")
  col_types <- list(col_character(), col_character(), col_character(), 
                    col_datetime("%d/%b/%Y:%H:%M:%S %z"), col_character(), 
                    col_character(), col_integer(), col_character(), col_character())
  data <- read_log(file = file, col_names = names, col_types = col_types)
  return(data)
}

x1 <- read_combined("https://www.secrepo.com/self.logs/access.log.2020-09-28.gz")

esquisseを起動する

esquisseの起動は、以下のようにします。(ToolsメニューのAddinsから行うこともできます。)

esquisse::esquisser(x1)

使ってみる

esquisseを起動すると、画面写真のようなウインドウが表示されます。ウインドウタイトルにある「きみがバラのために費やした時間こそが、そのバラを大切なものにしている」とは、『星の王子さま』でのキツネの有名なセリフ「大切なものは目には見えない」につづく言葉。可視化ツールで引用しますか、そこ……。

f:id:dfirr:20201223073320p:plain

気を取り直してパレットの上段を見ると、各変数が型で色分けされていることがわかります。この変数を下段の小部屋にドラッグして放り込むことで、変数の型に応じて適当にグラフを作ってくれます。

まずはtimestampをX軸にとり、ついでにstatus_codeで色分け(fill)します。1変数グラフなので、自動的にカウントが選択されます。

f:id:dfirr:20201223075230p:plain

次に、今回のログで唯一の数値型であるbytes_sentをY軸にとってみます。いくつか飛び跳ねているところがあります。このIPアドレスはなんでしょう?

f:id:dfirr:20201223075243p:plain

そこで今度はY軸をip_addressにして、bytes_sentをcolorにまわします。これで、サイズに応じて色分けしてくれます。赤色になっているところが、サイズが大きなところです。このウインドウサイズではIPアドレスが重なってしまっていますが、あとで調整できます。数分で概観する分には、これくらいで十分でしょう。

f:id:dfirr:20201223075256p:plain

ここまではグラフの種類はesquisseにお任せしていましたが、手動で選ぶこともできます。

f:id:dfirr:20201223075308p:plain

下のほうにメニューがある通り、タイトルや凡例をつけたり、見た目を変えたりすることも可能です。

汎用グラフィックス文法

esquisseの本当の価値は、「目に見えない」ところにあると思います。すなわち、可視化したものをggplot2のコードとして出力する機能です。このおかげで、二度目以降はGUIをいっさい使わずに再現できます。軸や解像度、サイズなどの調整も、コード化すれば簡単です。下の画面写真が実際のコードですが、とても簡潔だと私は思っています。

f:id:dfirr:20201223075319p:plain

ggplot2は汎用グラフィックス文法を実装したもので、tidyverseの中核をなすパッケージです。どんなグラフが描けるかは、下のリンクをご参照ください。