声明:この記事は、ネットワークセキュリティの知識を共有し普及するために作成されました。読者がこの情報を利用してネットワークセキュリティに関連する行為を行った場合の責任は、読者自身にあり、筆者およびこのウェブサイトとは関係ありません。
私自身およびこのサイトは、いかなるウェブサイト、企業、組織の情報や資料も提供していません。
起因#
学習目的で、私のようなネットワークセキュリティ愛好者は、オンラインで「漏れた」情報をいくつか持っていることがあります。
したがって、データ量の増加と合法的なペネトレーションテストでの情報収集のニーズに応えるために、ローカルで高速かつ正確な社工库を構築することは非常に重要です。
では、どのような環境が必要ですか?
現在、オンラインで構築されている社工库のほとんどは、mysql+coreseek+php のアーキテクチャです。coreseek は sphinx をベースにした優れた全文検索エンジンですが、データ量が数億を超えるとパフォーマンスが低下し、クラスタを構築して分散処理を行う場合のパフォーマンスも理想的ではありません。将来的にデータ量が増えることを考慮する必要がある場合は、他のソリューションを使用する必要があります。
私はここでELK
という方法を使用します。これは元々オープンソースのリアルタイムログ分析プラットフォームです。
この記事では、ELK
環境の構築と一般的なデータのインポートおよびクエリ方法について説明します。
ELK の紹介#
ELK とは何ですか?
ELK は、3 つのオープンソースソフトウェアの略称で、Elasticsearch、Logstash、Kibana のことを指します。これらはすべてオープンソースソフトウェアです。ただし、Beats という軽量なログ収集ツール(エージェント)が追加されました。Beats はリソースをほとんど消費せず、ログを収集して Logstash に転送するため、公式サイトでも推奨されています。現在、元の ELK スタックメンバーに Beats ツールが追加されたため、Elastic Stack と改名されました。Elastic Stack には次のものが含まれます。
Elasticsearch はオープンソースの分散型検索エンジンであり、収集、分析、データの保存の 3 つの機能を提供します。その特徴は、分散型、ゼロ構成、自動検出、インデックスの自動シャーディング、インデックスのレプリケーションメカニズム、RESTful スタイルのインターフェース、複数のデータソース、自動検索負荷分散などです。詳細は、Elasticsearch の公式ガイドを参照してください。
Logstash は、ログの収集、分析、フィルタリングを行うためのツールであり、多くのデータ取得方法をサポートしています。一般的な動作方法は、クライアント / サーバアーキテクチャで、クライアント側はログを収集するホストにインストールされ、サーバ側は受信した各ノードのログをフィルタリング、変更などの操作を行い、elasticsearch に送信します。
Kibana もオープンソースで無料のツールであり、Kibana は Logstash と ElasticSearch が提供するログ分析に適した Web インターフェースであり、重要なデータログの集約、分析、検索をサポートします。
Beats は、軽量なログコレクターです。実際、Beats ファミリーには 6 つのメンバーがあります。以前の ELK アーキテクチャでは、Logstash を使用してログを収集および解析していましたが、Logstash はメモリ、CPU、I/O などのリソースを多く消費します。Logstash と比較して、Beats はシステムの CPU とメモリをほとんど消費しません。
ELK スタック(5.0 以降)--> Elastic Stack ==(ELK スタック + Beats)。現在、Beats には 6 つのツールが含まれています。
なぜ ELK を使用するのですか?
伝統的な社工库は通常、MySQL データベースを使用して構築されますが、非常に大きなデータの場合、検索効率が非常に低くなります。この関係型データベースでは、クエリを実行するために列名を明示的に指定する必要があります。一方、ES では全文検索が可能であり、大規模なデータのクエリでもほぼミリ秒単位で応答するため、非常に高速です!ELK は元々ログの大規模データ収集と分析に使用されており、社工库としても優れた選択肢です。
ELK 公式ウェブサイト、ELK ソフトウェアのダウンロード、ELK 中国語ガイド(ログインが必要)
ELK 環境の構築#
Java 環境の設定#
ELK
はJava
環境のサポートが必要であり、JAVA_HOME
環境変数を設定する必要があります。
さまざまなバージョンのJava
の有料と無償の混乱のため、私は常にJava8
のバージョンを使用しています。
私が使用しているJDK
環境を使用します:ダウンロードはこちら、burpsuite
1.7 もこの環境で直接使用できます
ただし、Elasticsearch
はすぐにJava
8 のサポートを終了するとの警告が表示されていますので、できるだけ早くJava
11 にアップグレードしてください。ここで、JRE
とJDK
について説明します:
前者は「Java Runtime Environment」の略で、最小限の環境で Java ファイルを実行するためのものです。
後者は「Java SE Development Kit」の略で、Java プログラミングのための開発環境ツールキットです。
初心者の場合は、直接JDK
をインストールすることをお勧めします。JDK
にはJRE
が含まれており、インストール後に環境変数にインストール場所を手動で追加することを忘れないでください。
Java
のデフォルトのインストールパスは「C:\Program Files\Java」で、jre
とjdk
の両方が含まれています。
そして、jdk
フォルダ内にはjre
フォルダもあります。システム変数JAVA_HOME
を新規作成し、値にjdk
のパスを設定します。
次に、PATH
に%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
を追加します。これでJAVA_HOME
環境変数の設定が完了しました。
基本的な実行#
Elasticsearch
、Logstash
、Kibana
の 3 つの圧縮ファイルをダウンロードして解凍します。
1.Elasticsearch
フォルダのbin\
ディレクトリを開き、cmd
を入力します:elasticsearch.bat
:
ブラウザでhttp://localhost:9200/
を開きます:
2.kibana
フォルダ内のconfig\kibana.yml
を開き、末尾の
#i18n.locale: "en"
を次のように変更します:
i18n.locale: "zh-CN"
保存後、kibana
フォルダ内でbin\kibana.bat
ファイルをクリックします。
ブラウザでhttp://localhost:5601
を開き、初回の画面が表示されます:
ここまでで、基本的な実行が完了しました。以下に、いくつかの主要な設定ファイルとその役割について説明します:
メインノードの設定ファイルelasticsearch.yml
、なぜメインノードと呼ばれるのかというと、ELK は元々分散型アーキテクチャのログ分析のために設計されているからです。
場所はelasticsearch\config\elasticsearch.yml
で、通常は変更しないことをお勧めします。デフォルトの設定で問題ありません。
#仮想メモリを無効にしてパフォーマンスを向上させる
bootstrap.memory_lock: true
#ノード名をカスタマイズ:
cluster.name: elasticsearch
#データ通信ポート:
http.port: 9200
#リッスンするネットワークカードのIP
network.host: 192.168.1.1
#データノードであるかどうか:
node.data: true
#無効にする:
node.ingest: true
#メインノードであるかどうか、定義しない場合は最初に起動されるのがメインノードです:
node.master: true
#最大ストレージノード数:
node.max_local_storage_nodes: 1
#ノード名をカスタマイズ:
node.name: Win-Master-1
#データファイルのパス
path.data: D:\elk\elasticsearch\data
path.logs: D:\elk\elasticsearch\logs
#ノード間通信ポート:
transport.tcp.port: 9300
#ノードIP、ノード間でpingと9300ポート通信を許可する必要があります
discovery.zen.ping.unicast.hosts: ["192.168.1.1", "192.168.1.2"]
#headプラグイン関連:
http.cors.enabled: true
http.cors.allow-origin: "*"
# 0.0.0.0を指定すると、外部からのアクセスが可能になります
network.host=0.0.0.0
データのインポート#
ここまでです。明日続きます。
一般的なテクニック#
参考文献:
以上です。