螺子です。本連載記事では、リモートアクセスログを、さまざまなsyslog-ng Store Box (SSB)の機能を使用して調査してみます。
(リモートアクセスのセキュリティ対策については、こちらをご参照ください。)
はじめに
前回までの記事で、業務時間外のリモートアクセスのログを調査しました。
前回はサービス残業の観点でしたが、業務時間外のアクセスは不正アクセスかもしれません。正規ユーザーのいない時間帯に不正アクセスは試みられる傾向があるからです。
今回の記事ではGeoIP2(GeoLite2フリー版)を利用して、アクセス元のIPアドレスからアクセスしてきた国や都市、ASN(※ネットワークの識別番号)を確認してみます。
アクセス元を調査することで、不正アクセス、なりすまし、あるいはサイバー攻撃などを検知することが可能になるかもしれません。
GeoLite2データダウンロード
GeoIP2(GeoLite2フリー版)は、MaxMind社によって提供されているIPアドレスに関する情報(国、都市、ASPなど)のデータベースです。 ユーザー登録をして利用規約に同意することで無償で利用できます。 This product includes GeoLite2 data created by MaxMind, available from https://www.maxmind.com. |
GeoLite2 Free Geolocation Dataページにアクセスします。
“Sign Up for GeoLite2″を選択して、サインアップします。
必要なサインアップ情報を入力して”Continue”をクリックします。
サインアップが完了すると、”Welcome To MaxMind”メールが届きます。
メールの指示に従って、パスワードを設定します。
サインアップが正常に終了すると、確認メールが届きます。
続いて、ライセンスを取得します。必要に応じて上述で作成したアカウントでログインします。
※ライセンスキーは必ず控えておいてください。ライセンスキーは管理画面で確認できず、以後の操作時にはマスクされます。
“Manage License Keys”で”Generate new license key”をクリックして、ライセンスキーを作成します。
GeoLite2データをダウンロードするには、”Download Files”を選択します。必要なデータのリンクをクリックしてデータをダウンロードします。
ここでは、”GeoLite2 ASN”および”GeoLite2 City”の”Download ZIP”をクリックして、それぞれバイナリーデータをダウンロードします(テキストのCSV形式のデータをダウンロードするには”~~ :CSV Format”を選択します)。
ダウンロードしたGeoLite2データを解凍します。ファイル名と同じフォルダが作成されデータファイルが展開されます。
CSVエクスポート
ここで、SSBに保存されているリモートアクセスログからリモートアクセス元のIPアドレスを取得してみます。やっと、SSBの機能の説明になります。^^;
リモートアクセス元のIPアドレスは、動的カラム”.sdata.kv.remip”に格納されています。
※メッセージをkey-valueパーサーで分割したメタデータを、動的カラムとしてSSBの検索インターフェースに表示することができます。key-valueパーサー、動的カラムについては過去記事「(その1)「フィルターログスペースを使用して必要なログのみ検索・抽出してみる!」」を参照してください。
CSVのエクスポートの手順は、以下の通りです。
まず、動的カラム”.sdata.kv.remip”の統計情報を表示します。
次に、統計情報画面の”Export all to CSV”をクリックして、ブラウザでファイルを保存します。統計情報でエクスポートするとIPアドレスの重複がなくなるので便利です。
※統計情報の表示については、過去記事「(その5)「サービス残業させていない?業務時間外勤務の実態をグラフで見やすく!」」を参照してください。
※大量のデータをエクスポートしないでください。特にシステムの負荷が高い場合、データのエクスポートが非常に遅くなる可能性があります。
保存したファイルをExcelで開きます。”.sdata.kv.remip”以下のIPアドレスを選択して、テキストファイルにコピーします。ここでは、”ip_list.txt”という名前のファイルに保存します。
GeoLite2データの取得(PHP)
リモートアクセス元のIPアドレスから、GeoLite2データを取得する準備がようやくできました。
ここでは、PHPスクリプトを使用して、リモートアクセス元のIPアドレスから、GeoLite2データ(国、都市およびASN)を取得してみます。
コマンドプロンプトから以下を実行します。ここでは、PHPスクリプトファイル名は”PhpExample.php”です。
※GeoIP2データおよびスクリプトコードの内容、実行結果あるいはその影響については、一切責任を負いかねますのでご了承ください。^^;
>php PhpExample.php
図14. PHPスクリプト実行例
実行したPHPスクリプトコードは以下の通りです。”geolite2city”および”geolite2asn”に各GeoLite2のバイナリデータへのパスを指定しています。適宜、環境に合わせて変更してください。
<?php
require_once 'c:/Users/screw/vendor/autoload.php';
use GeoIp2¥Database¥Reader;
// GeoIp2データベースへのパス
$geolite2city='<パス>¥GeoLite2-City.mmdb';
$geolite2asn='<パス>¥GeoLite2-ASN.mmdb';
// データベースの読み込み
$readercity = new Reader($geolite2city);
$readerasn = new Reader($geolite2asn);
$filename = 'ip_list.txt'; // ファイルを変数に格納
$fp = fopen($filename, 'r'); // fopenでファイルを開く('r'は読み込みモードで開く)
// whileで行末までループ処理
while (!feof($fp)) {
$txt = fgets($fp); // fgetsでファイルを読み込み、変数に格納
$txt = trim($txt); // 余分な改行コードを削除
print("IP Address : ".$txt."¥n");
$record = $readercity->city($txt);
print("Country : ".$record->country->name . "¥n");
print("Subdivision : ".$record->mostSpecificSubdivision->name . "¥n");
print("City: ".$record->city->name . "¥n");
$record = $readerasn->asn($txt);
print("ASN: ".$record->autonomousSystemOrganization . "¥n");
print("¥n");
}
fclose($fp); // fcloseでファイルを閉じる
?>
図16. PHPスクリプトコード例
その他
“City”および”Country”データベースから情報を取得する、その他のAPIおよびサンプルコードについては、GeoIP2 and GeoLite City and Country Databasesを参照してください。
“ASN”データベースから情報を取得する、その他のAPIおよびサンプルコードについては、GeoLite2 ASN Databaseを参照してください。
SSBの機能
本記事で使用したSSBの機能は以下の通りです。
- CSVエクスポート
参考資料
カスタム統計情報からCSV形式でデータをエクスポートする方法などについては、syslog-ng Store Box 6 LTS管理者ガイドの「12.3.1 ログ統計情報の表示」を参照してください。
検索ページから出力したログ全体をCSV形式でデータをエクスポートする方法については、同ガイドの「12.1 検索インターフェースの使用」を参照してください。
今回、WindowsでPHPスクリプトを実行するのに、”PHP 8.1.0″および”composer“をインストールしました。ダウンロードおよびインストールについては以下のサイトを参考にしました。
また、”composer”の使用方法や”GeoIP2″を使用してIPアドレスから情報を取得する方法については以下のサイトを参考にしました。
- Windows10へのcomposerのインストールとインストール後のディレクトリ構成
- GeoIP2によりIPアドレスから住所(緯度・経度)を特定する
- MaxMind GeoLite2 のライセンスと取得方法が変わったので対応する。
- GeoIP2/GeoLite2 を使いIPアドレスから国情報取得!
- 【PHP】GeoIP2の使い方とIPアドレスから国・地域名を取得する方法
エクセルを使用してGeoIP2の情報を取得する方法についても参考になりました。
いかがでしたでしょうか。今回は、”CSVエクスポート”機能とGeoLite2を使用してIPアドレスに関する情報(国、都市、ASPなど)の取得について紹介しました。次回はリモートアクセスログから認証エラーのログ調査してみます。
それでは、次回の連載記事をお楽しみに!
これまでの「リモートアクセスログを調査」連載記事
- (その1)「フィルターログスペースを使用して必要なログのみ検索・抽出してみる!」
- (その2)「マルチログスペースを使用してログを集約してみる!」
- (その3)「リモートログスペースを使用して他のSSBに保存したログを検索・抽出してみる!」
- (その4)「サービス残業させていない?リライトを使用して日時を指定して検索してみる!」
- (その5)「サービス残業させていない?業務時間外勤務の実態をグラフで見やすく!」
- (その6)「サービス残業させていない?レポートを日ごと、週ごと、月ごとに定期的に送信!」
「syslog-ng Store Box大活用連載企画」連載記事リスト
- 第1回「syslog-ng Store Boxを知る」
- 第2回「syslog-ng Store Boxを仮想環境にインストールする」
- 第3回「syslog-ng Store Boxで出来ることまとめ」
- 第4回「Wiresharkでsyslogプロトコルパケットを覗く」
- 第5回「Ciscoスイッチ、FortigateファイアウォールログをSSBで受信!よりログを検索しやすく」
- 第6回「RPC APIを使ってみる、自社システムに統合!ログ検索の自動化!」
- 第7回「Active Directoryと連携して、Active Directoryユーザー認証!」
- 第8回「SSBをHA(High Availability)構成で構築してみる!」
- 第9回「ログをバイナリおよびテキスト形式で保存、違いを比較してみる」
- 第10回「ログファイルを共有して、外部ホストからアクセスしてみる!」
- 第11回「フィルターを使用して、必要なログのみ保存してみる!」
- 第12回「SSBの監視とアラート!SNMPマネージャーで監視およびSNMPトラップを受信してみる」
- 第13回「コンテンツベースアラート。重要なログを見逃さない!」
- 第14回「設定変更履歴。コンプライアンスにも対応!」
- 第15回「トラブルシューティングに役立つ機能。問題を迅速に解決!」
- 第16回「ユーザーアクセス制御。アクセス権限とタイプを設定してみる!」
- 第17回「リライト機能。ログの整形や正規化!」
- 第18回「バックアップリストア。システムデータおよびログデータをバックアップ、リストアしてみる!」
- 第19回「アーカイブ/クリーンアップ。ログデータをアーカイブ、クリーンアップしてみる!」
- 第20(最終)回「SSBの有効活用および安定稼働のためのポイントを紹介!」
SSBは、高信頼ログ管理アプライアンスです。様々なデバイスおよびアプリケーションからログメッセージを収集、分類、フィルタリング、正規化して安全に保存可能です。ログデータの信頼性を担保し、膨大なログが発生する高負荷環境、あるいはログロストが許されない企業・組織のログ管理に最適です。
syslog-ng Store Boxについての詳細は、製品紹介ページ・製品ガイドをご参照ください。