syslog-ng Store Box (SSB)でリモートアクセスログを調査(その7)「不正アクセスされていない?アクセス元IPアドレスから国・都市・ASNの調査!」

螺子です。本連載記事では、リモートアクセスログを、さまざまな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″を選択して、サインアップします。

図1. GeoLite2 Free Geolocation Data画面例

必要なサインアップ情報を入力して”Continue”をクリックします。

図2. サインアップ画面例

サインアップが完了すると、”Welcome To MaxMind”メールが届きます。

メールの指示に従って、パスワードを設定します。

図3. パスワード設定画面例
図4. パスワード設定成功画面例

サインアップが正常に終了すると、確認メールが届きます。

図5. サインアップ成功例

続いて、ライセンスを取得します。必要に応じて上述で作成したアカウントでログインします。
※ライセンスキーは必ず控えておいてください。ライセンスキーは管理画面で確認できず、以後の操作時にはマスクされます。

“Manage License Keys”で”Generate new license key”をクリックして、ライセンスキーを作成します。

図6. ライセンス作成画面
図7. ライセンス作成確認画面

GeoLite2データをダウンロードするには、”Download Files”を選択します。必要なデータのリンクをクリックしてデータをダウンロードします。

ここでは、”GeoLite2 ASN”および”GeoLite2 City”の”Download ZIP”をクリックして、それぞれバイナリーデータをダウンロードします(テキストのCSV形式のデータをダウンロードするには”~~ :CSV Format”を選択します)。

図8. Download Databases画面例

ダウンロードしたGeoLite2データを解凍します。ファイル名と同じフォルダが作成されデータファイルが展開されます。

図9. GeoLite2データの展開例

CSVエクスポート

ここで、SSBに保存されているリモートアクセスログからリモートアクセス元のIPアドレスを取得してみます。やっと、SSBの機能の説明になります。^^;

リモートアクセス元のIPアドレスは、動的カラム”.sdata.kv.remip”に格納されています。

※メッセージをkey-valueパーサーで分割したメタデータを、動的カラムとしてSSBの検索インターフェースに表示することができます。key-valueパーサー、動的カラムについては過去記事「(その1)「フィルターログスペースを使用して必要なログのみ検索・抽出してみる!」」を参照してください。

図10. “.sdata.kv.remip”の出力例
図11. “.sdata.kv.remip”の統計情報例

CSVのエクスポートの手順は、以下の通りです。

まず、動的カラム”.sdata.kv.remip”の統計情報を表示します。

次に、統計情報画面の”Export all to CSV”をクリックして、ブラウザでファイルを保存します。統計情報でエクスポートするとIPアドレスの重複がなくなるので便利です。

※統計情報の表示については、過去記事「(その5)「サービス残業させていない?業務時間外勤務の実態をグラフで見やすく!」」を参照してください。

※大量のデータをエクスポートしないでください。特にシステムの負荷が高い場合、データのエクスポートが非常に遅くなる可能性があります。

保存したファイルをExcelで開きます。”.sdata.kv.remip”以下のIPアドレスを選択して、テキストファイルにコピーします。ここでは、”ip_list.txt”という名前のファイルに保存します。

図12. CSVファイルのExcel読込例
図13. IPアドレスコピー例

GeoLite2データの取得(PHP)

リモートアクセス元のIPアドレスから、GeoLite2データを取得する準備がようやくできました。

ここでは、PHPスクリプトを使用して、リモートアクセス元のIPアドレスから、GeoLite2データ(国、都市およびASN)を取得してみます。

コマンドプロンプトから以下を実行します。ここでは、PHPスクリプトファイル名は”PhpExample.php”です。

※GeoIP2データおよびスクリプトコードの内容、実行結果あるいはその影響については、一切責任を負いかねますのでご了承ください。^^;

>php PhpExample.php

図14. PHPスクリプト実行例

図15. 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を参照してください。

図17. GeoIP2 and GeoLite City and Country Databasesページ例

“ASN”データベースから情報を取得する、その他のAPIおよびサンプルコードについては、GeoLite2 ASN Databaseを参照してください。

図18. 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アドレスから情報を取得する方法については以下のサイトを参考にしました。

エクセルを使用してGeoIP2の情報を取得する方法についても参考になりました。

いかがでしたでしょうか。今回は、”CSVエクスポート”機能とGeoLite2を使用してIPアドレスに関する情報(国、都市、ASPなど)の取得について紹介しました。次回はリモートアクセスログから認証エラーのログ調査してみます。



それでは、次回の連載記事をお楽しみに!

これまでの「リモートアクセスログを調査」連載記事

「syslog-ng Store Box大活用連載企画」連載記事リスト



SSBは、高信頼ログ管理アプライアンスです。様々なデバイスおよびアプリケーションからログメッセージを収集、分類、フィルタリング、正規化して安全に保存可能です。ログデータの信頼性を担保し、膨大なログが発生する高負荷環境、あるいはログロストが許されない企業・組織のログ管理に最適です。

syslog-ng Store Boxについての詳細は、製品紹介ページ・製品ガイドをご参照ください。

こんな記事も読まれています

最新記事

おすすめ記事

  1. 産業スパイを発見し、防ぐ方法とは

  2. Flexible NetFlowとは?を5分で理解する

  3. WinSyslog 使い方ガイド#2 受信時刻とデバイスタイムスタンプ両方を出力する

製品カテゴリー

JTC IT用語集
TOP