
syslogを追跡し、IPアドレスとポート番号を解析して攻撃者をリアルタイムで可視化するサイバーセキュリティのGeoIP攻撃マップ。
現在、このプロジェクトを維持する時間はあまりありません。私はこの課題をJavaScriptを学び、すでに知っていたPythonを向上させる手段として引き受けました。実装に関しては、もっと別の方法があったはずだと確信しています。私のコードをダウンロードして閲覧してくださった方から建設的な批判をいただいても、気分を害することはありません。この作業を通じて多くのことを学びました。オープンソースコミュニティから今後も多くのことを教えていただけることを願っています。
注記: このプロジェクトを維持していないため、そのままでは動作しない機能がいくつかあります。例えば、正当なMapBox APIキーを支払っていないため、地図はおそらく表示されません。これを修正するには、独自のMapBoxアカウントを作成し、自分のキーを使用する必要があります。
このGeoIP攻撃マップ可視化ツールは、組織に対するネットワーク攻撃をリアルタイムで表示するために開発されました。データサーバーはsyslogファイルを監視し、送信元IP、宛先IP、送信元ポート、宛先ポートを解析します。プロトコルは一般的なポートに基づいて判別され、可視化はプロトコルの種類に応じて色が異なります。デモ動画はこちらをクリックしてください。このプロジェクトは、Sam Cappella氏が2015年のPalmetto Cyber Defense Competition向けに作成したサイバー防御競技ネットワークトラフィック可視化ツールがなければ実現しませんでした。主に彼のコードを参考にしましたが、表示サーバーの作成やWebアプリの視覚的側面において、いくつかの関数をお借りしました。また、実装に関するアドバイスをいただいたDylan Madisetti氏にも特に感謝します。
このプログラムはsyslogに完全に依存しており、すべてのアプライアンスがログを異なる形式で出力するため、ログ解析関数をカスタマイズする必要があります。組織がセキュリティ情報イベント管理システム(SIEM)を使用している場合、ログを正規化して正規表現を書く手間を大幅に省くことができます。
db_path 変数をデータベースを保存した場所に変更してください。
hqLatLng 変数に本部の緯度経度を追加してください。エラーやバグを見つけた場合は、お知らせください。質問やフィードバックも歓迎します。[email protected] に送信するか、このリポジトリでIssueを開いてください。
Ubuntu 16.04 LTS で動作確認済み。
アプリケーションをクローン:
git clone https://github.com/matthewclarkmay/geoip-attack-map.git
システム依存関係をインストール:
sudo apt install python3-pip redis-server
Python要件をインストール:
cd geoip-attack-map
sudo pip3 install -U -r requirements.txt
Redisサーバーを起動:
redis-server
データサーバーDBを設定:
cd DataServerDB
./db-dl.sh
cd ..
データサーバーを起動:
cd DataServer
sudo python3 DataServer.py
Syslog Genスクリプトを起動(DataServerディレクトリ内):
新しいターミナルタブを開く(UbuntuではCtrl+Shift+T)。
./syslog-gen.py
./syslog-gen.sh
攻撃マップサーバーを設定し、フラグを適切な場所に展開:
新しいターミナルタブを開く(UbuntuではCtrl+Shift+T)。
cd AttackMapServer/
unzip static/flags.zip
攻撃マップサーバーを起動:
sudo python3 AttackMapServer.py
ブラウザから攻撃マップサーバーにアクセス:
別のコンピュータのブラウザからアクセスするには、AttackMapServerを実行しているマシンの外部IPを使用します。
"AttackMapServer" ディレクトリの "/static/map.js" ファイル内のIPアドレスを編集します。以下の箇所から:
var webSock = new WebSocket("ws:/127.0.0.1:8888/websocket");
例えば以下のように変更:
var webSock = new WebSocket("ws:/192.168.1.100:8888/websocket");
攻撃マップサーバーを再起動:
sudo python3 AttackMapServer.py
別のコンピュータで、ブラウザを以下のアドレスに指定:
http://192.168.1.100:8888/