dfirr

A Note on R How-to in Cybersecurity Investigation

アドホックなログをSplunkに転送する

情報セキュリティ関連業務にはログ分析が付き物であるものの、当該ログが最初からログ基盤に入っているとはかぎりません。システム担当者からログを圧縮ファイルとして受け取ることも多々あります。 そのログをいきなりRで読むのも一興ですが、一度Splunkに…

MSTICPyでSplunkからデータを取り込む

SplunkにはRest APIがあるので、RからAPIを叩いてデータを取得することができます。しかしRate Limitなど、考慮しなくてはいけない事項があります。SplunkにはPython SDKがありますがR用のSDKはないので、このあたりを手作業で解決しなければいけません。面…

フィッシングサイトの週次集計グラフを作る

今回は、特定の技法にテーマを絞っていない番外編です。2023年7月15日にISACA名古屋支部のSR分科会にお邪魔したので、そのとき出題されたお題をRで解いた例を示します。tidyverseの特徴が出やすい問題だったからです。 お題は、JPCERT/CCのフィッシングサイ…

複数データフレームから指定列の星取表を作る

複数のログを分析しているとき、特定のフィールド(たとえばIPアドレス)がどのログに出現しているのかを一覧したいことがあります。簡単な例を作ると、 logA <- tibble(src_ip = c("192.168.1.3", "192.168.1.1", "192.168.1.2")) logB <- tibble(src_ip = …

特定の文字の前後を抜き出す

「April 29, 2023 | 8:45 AM - 9:30 AM」から日付部分や時刻部分を抜き出すような処理は、よくあります。こういう場合、直接的にはstr_extract()関数に正規表現の前後読みを組み合わせることが考えられます。しかし、str_split_i()関数を使えば、もう少し簡…

イベントを時系列に変換して視覚化する

イベント(点過程)データであるログを日次・週次・月次などで集計して時系列データとし、これを視覚化することは、情報セキュリティ管理業務(だけでなく管理業務一般かもしれませんが)で日常的に発生します。 この投稿記事では、そうした際のggplot2での…

SSL/TLSが復号されるネットワーク環境でのWindows版Rの設定

Windows版R 4.2から、dwonload.file()で使われるライブラリが、従来のwininetからlibcurlに変更されました。結果、UTMなどでSSL/TLSが復号される環境にあると、証明書エラーが発生します。libcurlはWindowsの証明書ストアを使用しないため、企業のIT部門がグ…

情報セキュリティ実務家のためのPowerShell超特急

まったくRの話題ではないのですが、他に適当な場所もないので、「情報セキュリティ実務家のためのPowerShell超特急」の講演資料へのリンクを置いておきます。ちなみに「超特急」というタイトルは、山本矩一郎さんの「数学超特急」という学習参考書から拝借し…

contains演算子の構文糖をつくる

今回は思い付きの小ネタです。Rのstringrパッケージは一貫性が売りですが、やや冗長なところがあります。たとえば我々が行(ログの場合にはイベント)を絞り込むとき、大文字・小文字を区別せずにマッチさせたいことが多々あります。これをstringrで表現する…

Shift_JISのURLをデコードする

ログ分析の過程で、URLエンコーディングされたURLをデコードしたいことがあります。ところがurl_decode()関数はUTF-8にしか対応していないため、ファイル名などでShift_JISが登場したときに困ります。 そこで、下のような書き捨ての関数を作りつつ、stringr…

イベントの発生を視覚化する

今回は、横軸に時刻を、縦軸にアセットをとって、イベントの発生をプロットする手法を取り上げました。最終的に下のようなグラフをつくります。こうしたプロットを一貫した文法で記述できるのがggplot2のよいところです。 RPubs「イベントの発生を視覚化する…

Linuxの認証ログをパースする

今回はsyslogのパースを取り上げました。syslogは典型的な半構造データで、意外と厄介な形式です。 正面から取り組む方法として正規表現を使う方法、裏口から取り組む方法としてElastic Stackにパースさせる方法を取り上げています。前者ではR 4.0から利用可…

JSONデータを矩形化する

今回はJSONに代表される入れ子構造のリストを矩形化する方法を取り上げました。Rにおける入れ子構造の取り扱いは統計モデルが例に挙がることがほとんどなのですが、情報セキュリティ屋が対峙するケースとしては、情報提供サービスからREST APIで取得したJSON…

スクリプトに認証情報を埋め込まないようにする

データレイクや各種情報サービスなどからWeb APIを使ってデータを取得することは珍しくありません。たとえばSplunkからデータを取得する方法としては、同社のブログ「Leveraging External Data Science Stacks with Splunk Today」(2019-03-18)が参考にな…

esquisseでApacheログを概観する

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

Squidログを取り込む

今回はSquidプロキシのログを取り込む方法を取り上げました。CRANにはwebreadrというパッケージがあり、Squidログが読み込めることが謳われているのですが、mime_typeフィールドが未定義のため、実際にはエラーが生じるケースが多いと思います。Squidのログ…

IPアドレスをCIDRブロックにマッチさせる

情報セキュリティのログ調査では、IPアドレスを頻繁に扱います。私はBob Rudis氏の「iptools」パッケージを利用することが多いです。IPv4/v6に対応していて、IPアドレスを数値やバイナリに変換したり、ホスト名に変換したり、ランダムなアドレスを生成したり…

情報セキュリティ屋がRと再会して

ブログをはじめます このブログは、情報セキュリティに関連する業務でR言語を使うに際してのコツを整理するために作りました。 Rとの再会 私はむかし大学で統計学を勉強していたので、R(というかS-PLUS)に触れたことがありました。ただ、プログラミング言…