[サーバ] お行儀の悪いアタック国ランキング

前回の続きです。 狙われやすいアカウント名ランキングに続きまして、どこの国からアタックを受けているかも調査してみました。…まぁなんとなく結果はわかっていましたが、数値化するのが大事ですよね!(虚空を見つめがら)

結果発表

IPアドレス単位

# カウント IPアドレス 国CD 国名
1 43,148 218.92.1.163 CN 中国
2 43,147 58.242.83.7 CN 中国
3 43,147 218.92.1.174 CN 中国
4 43,147 218.92.1.173 CN 中国
5 31,139 112.85.42.196 CN 中国
6 27,063 218.92.1.181 CN 中国
7 21,800 112.85.42.238 CN 中国
8 20,223 112.85.42.197 CN 中国
9 13,908 218.92.1.172 CN 中国
10 10,678 112.85.42.232 CN 中国
11 9,605 112.85.42.233 CN 中国
12 8,584 112.85.42.151 CN 中国
13 6,735 58.242.83.17 CN 中国
14 6,666 193.201.224.216 UA ウクライナ共和国
15 3,559 122.194.229.49 CN 中国
16 3,359 112.85.42.231 CN 中国
17 3,228 112.85.42.193 CN 中国
18 2,558 101.91.215.199 CN 中国
19 2,548 101.91.215.80 CN 中国
20 1,818 188.92.77.235 LV ラトビア共和国
21 1,505 122.194.229.18 CN 中国
22 1,483 106.13.34.94 CN 中国
23 1,209 188.92.75.248 LV ラトビア共和国
24 980 59.46.135.42 CN 中国
25 828 146.0.228.106 DE ドイツ連邦共和国
26 719 206.189.149.126 SG シンガポール
27 606 112.85.42.235 CN 中国
28 575 54.169.36.191 SG シンガポール
29 408 185.246.128.25 SE スウェーデン王国
30 402 103.207.38.197 VN ベトナム

国単位

# 行ラベル 合計 / カウント 割合
1 中国 353,341 87.5079%
2 アメリカ合衆国 8,128 2.0130%
3 ウクライナ共和国 6,939 1.7185%
4 フランス共和国 4,729 1.1712%
5 ラトビア共和国 3,039 0.7526%
6 シンガポール 2,893 0.7165%
7 ドイツ連邦共和国 2,270 0.5622%
8 インド 1,975 0.4891%
9 ロシア 1,629 0.4034%
10 大韓民国 1,504 0.3725%
11 ブラジル連邦共和国 1,443 0.3574%
12 イギリス 1,346 0.3333%
13 オランダ王国 1,176 0.2912%
14 カナダ 922 0.2283%
15 ベトナム 899 0.2226%
16 インドネシア共和国 857 0.2122%
17 イタリア共和国 688 0.1704%
18 ポーランド共和国 634 0.1570%
19 コロンビア共和国 626 0.1550%
20 スウェーデン王国 525 0.1300%
21 日本 494 0.1223%
22 メキシコ合衆国 483 0.1196%
23 香港 445 0.1102%
24 中華民国 441 0.1092%
25 アルゼンチン共和国 428 0.1060%
26 タイ王国 388 0.0961%
27 スペイン 276 0.0684%
28 イラン・イスラム共和国 222 0.0550%
29 南アフリカ 215 0.0532%
30 マレーシア 211 0.0523%

結論

中国からのアクセスをブロックすれば80%以上のアタックを防げる結果になりました\(^o^)/

ちなみに日本からのアタックは494件、0.1223%でした。

集計方法

IPアドレスの割当国を見つける

geoip-countryというNode.jsのモジュールを利用しました。こちらはMaxMindから提供されているフリーのデータを利用しているようです。

インストール

$ mkdir geoip; cd geoip
$ npm install geoip-country
$ node node_modules/geoip-country/scripts/updatedb.js

最後の行はMaxMindの国データをネットワーク越しに取得するスクリプトです。便利ですねー。

集計元データの準備

$ sudo grep Failed /var/log/secure* | gawk 'match($0,/from (.*) port/,a){print a[1]}' | sed 's/invalid user //' | sort | uniq -c | sort -nr > ip.txt

ip.txtをEXCELで開いてタブ区切りテキストで保存し直しました。若干の敗北感がありますが気にしない方向でお願いしますw このip.txtを先ほど作成したgeoipフォルダに放り込みます。

この時点では以下のようなデータとなっています。

$ head ip.txt
43148   218.92.1.163
43147   58.242.83.7
43147   218.92.1.174

集計スクリプト

雑なコードで恐縮ですw

/**
 * ipsearch.js
 */
const geoip = require('geoip-country');
const fs = require('fs');

let buff = fs.readFileSync("./ip.txt", {encoding: "utf-8"}).split(/\r\n/);
for(let i=0; i<buff.length; i++){
  let [count,ip] = buff[i].split(/\t/);
  let geo = geoip.lookup(ip);
  let country = ( (geo!== null) && ("country" in geo) )?  geo.country:null

  console.log([count, ip, country].join("\t"));
}

あとは実行するだけです。

$ node ipsearch.js
43148   218.92.1.163    CN
43147   58.242.83.7     CN
43147   218.92.1.174    CN

全件データ

IPアドレス単位

国単位

補足

あくまでアクセス元のIPアドレスですので、他国を踏み台にしてリクエストしてきている可能性がありますのでご注意を。 また、中国からのアクセスが膨大で霞んで見ているだけで、アメリカやウクライナなど上位の国のリクエスト数も尋常じゃないですw

セキュリティのためのログ分析入門 サイバー攻撃の痕跡を見つける技術 (Software Design plusシリーズ)
折原 慎吾 鐘本 楊 神谷 和憲 松橋 亜希子 阿部 慎司 永井 信弘 羽田 大樹 朝倉 浩志 田辺 英昭
技術評論社
売り上げランキング: 15,209