数回に分けて、cowrieでsshの不正アクセスの実態を取得するようにしてきた。

  1. ハニーポットcowrieのログを、mariaDBで管理しよう
  2. cowrieの不正侵入ログをelasticsearchにデータを入れる
  3. td-agent2-2-1ではfilterが使えるように

構成としてはこのような感じ。

[image.jpg]

今回は不正アクセスIPを利用し、地理情報を得て、どの国からのアクセスが多いのかをkibana4を使って出してみた。

GeoIPを設定する。

geoipをインストールする。

1
yum -y install geoip-devel

地理情報のデータベースをアップデート

1
/usr/bin/geoipupdate

fluentdでgeoipを扱うプラグインをインストールする。

1
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-geoip

td-agentの設定

td-agent.confでIPアドレスを元に国コードとロケーションを取得する。

1
2
3
4
5
6
7
8
9
<match geo.replicator.**>
type geoip
geoip_lookup_key ip
<record>
country ${country_code['ip']}
location ${latitude['ip']},${longitude['ip']}
</record>
remove_tag_prefix geo.
</match>

elasticsearchの設定

デフォルトのままだと、全てstring扱いになり、地理情報として扱ってくれないので、いったんマッピングを削除

1
curl -XDELETE localhost:9200/*

独自に定義したjsonファイルを作成する。今回はこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ cat mapping.json
{
"mappings": {
"cowrie": {
"properties": {
"country": {
"type": "string"
},
"id": {
"type": "long"
},
"ip": {
"type": "string",
"index" : "not_analyzed"
},
"location": {
"type": "geo_point"
},
"password": {
"type": "string"
},
"timestamp": {
"type": "date",
"format": "dateOptionalTime"
},
"username": {
"type": "string",
"index" : "not_analyzed"
}
}
}
}
}
}

マッピングする。

1
curl -XPUT localhost:9200/cowrie --data-binary @mapping.json

マッピングできているか確認

1
curl -X GET -w - http://localhost:9200/_mapping?pritty | jq -C '.'

td-agentを再起動。

1
systemctl restart td-agent

データ入っているか確認

1
2
3
4
5
6
7
8
9
10
11
$ curl "http://localhost:9200/cowrie/search/_search?size=100&pretty" | tail
"_source":{"id":491,"timestamp":"2015-07-23T9:02:44+09:00","ip":"213.136.89.235","username":"melissa","password":"melissa","country":"DE","location":"51.0,9.0"}
}, {
"_index" : "cowrie",
"_type" : "search",
"_id" : "496",
"_score" : 1.0,
"_source":{"id":496,"timestamp":"2015-07-23T9:04:52+09:00","ip":"213.136.89.235","username":"albert","password":"albert","country":"DE","location":"51.0,9.0"}
} ]
}
}

kibana4の設定

kibana4を使ってデータを可視化する。

1
2
3
4
5
wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz
tar zxf kibana-4.1.1-linux-x64.tar.gz
mv kibana-4.1.1-linux-x64 kibana
cd kibana
./bin/kibana &
1
2
firewall-cmd --permanent --add-port 5601/tcp
systemctl start firewalld.service

http://localhost:5601/ にアクセスするとこのような画面。

[top.png]

elasticsearchのマッピングでlocationtypegeo_pointにしているのでこのlocationを用いて地図上にどの国からのアクセスが多いかを可視化した。

[location.png]

データを可視化すると見えないものが見えて来る。
是非、現場で活用してみてはいかがだろうか。


参照URL