Send secure log to BigQuery

/var/log/secureをBigQueryに送ってRe:dashで攻撃っぽいアクセスなどを可視化してみたかったので送ってみました。

準備

  • /var/log/secureをtd-agentでも読めるようにパーミッションを下げる
  • /var/log/secureがローテートされてもパーミッションが戻らないようにlogrotateの設定を変更する

td-agentの設定

td-agentの設定を追加します。

  • <filter syslog.secure>部分でログの送信元のサーバのホスト名をレコードに追加している
# syslog (secure log)
<source>
  @type tail
  format syslog
  path /var/log/secure
  tag syslog.secure
  pos_file /var/log/td-agent/syslog.secure.pos
</source>

<filter syslog.secure>
  @type record_transformer
  <record>
    logsource_hostname ${hostname}
  </record>
</filter>

<match syslog.secure>
  @type bigquery
  @id bigquery_output_syslog.secure

  method insert

  auth_method json_key
  json_key "jsonキー

  project プロジェクト名
  dataset データセット名
  table テーブル名_%Y%m%d

  auto_create_table true
  schema_path /etc/td-agent/schema-bigquery-syslog.secure.json

  time_format %s
  time_field time
</match>

次にSchemaファイル(schema-bigquery-syslog.secure.json)を用意します。

[
  {
    "name": "time",
    "type": "INTEGER"
  },
  {
    "name": "host",
    "type": "STRING"
  },
  {
    "name": "ident",
    "type": "STRING"
  },
  {
    "name": "pid",
    "type": "INTEGER"
  },
  {
    "name": "message",
    "type": "STRING"
  },
  {
    "name": "logsource_hostname",
    "type": "STRING"
  }
]

Schemaはformatのsyslog部分の説明に従って設定しました。

logsource_hostnameをくっつけているのと、timeがよくわからなかったのですが値が入らなかったので、timeに関してはtd-agent.conf側で入れちゃってます。

結果

キタ━━━━(゚∀゚)━━━━!!

  • time_format %sはUTCのユニックスタイム(秒)で入るので32400秒(9時間)を足してJSTにしている
$ bq query "SELECT SEC_TO_TIMESTAMP(time + 32400) as timestamp, host, ident, pid, message FROM データセット名.テーブル名_20170426 order by timestamp desc limit 10"
Waiting on bqjob_r425998fb2a8ed166_0000015ba9eb2b04_1 ... (0s) Current status: DONE
+---------------------+------------+-------+-------+-------------------------------------------------------------------------------------+
|      timestamp      |    host    | ident |  pid  |                                       message                                       |
+---------------------+------------+-------+-------+-------------------------------------------------------------------------------------+
| 2017-04-26 20:00:08 | ponpokopon | sshd  | 13454 | Received disconnect from 121.18.238.98: 11:  [preauth]                              |
| 2017-04-26 20:00:03 | ponpokopon | sshd  | 13179 | Failed keyboard-interactive/pam for root from 182.100.67.4 port 18210 ssh2          |
| 2017-04-26 20:00:03 | ponpokopon | sshd  | 13382 | pam_exec(sshd:auth): /usr/local/bin/vault-ssh-helper failed: exit code 1            |
| 2017-04-26 20:00:03 | ponpokopon | sshd  | 13179 | error: PAM: System error for root from 182.100.67.4                                 |
| 2017-04-26 20:00:02 | ponpokopon | sshd  | 13411 | Connection closed by 60.95.150.58 [preauth]                                         |
| 2017-04-26 20:00:01 | ponpokopon | sshd  | 13179 | Postponed keyboard-interactive for root from 182.100.67.4 port 18210 ssh2 [preauth] |
| 2017-04-26 20:00:01 | ponpokopon | sshd  | 13156 | error: PAM: System error for root from 182.100.67.119                               |
| 2017-04-26 20:00:01 | ponpokopon | sshd  | 13316 | pam_exec(sshd:auth): /usr/local/bin/vault-ssh-helper failed: exit code 1            |
| 2017-04-26 20:00:01 | ponpokopon | sshd  | 13156 | Failed keyboard-interactive/pam for root from 182.100.67.119 port 42704 ssh2        |
| 2017-04-26 20:00:00 | ponpokopon | sshd  | 13179 | Failed keyboard-interactive/pam for root from 182.100.67.4 port 18210 ssh2          |
+---------------------+------------+-------+-------+-------------------------------------------------------------------------------------+

なかなかの勢いでsshdに対するアタックが来ていますね...。

感想

普段見えない部分で攻撃は日々行われているのじゃ…。

セキュリティを自然に意識するようになって良いですね。可視化するぞ!!

あと、ホントは同僚の真似をしてrsyslogから直にtd-agentに投げたかったんだけど(その方法ならログファイルのパーミッションもいじらなくて済むし)、CnetOS7なのでjournaldの設定でrsyslogに送るようにして、それからrsyslogの設定をいじらないとダメそうで面倒なのでtailで(そんなことはなかった)手抜きしてしまった。

journalctlコマンドに-oオプションがあって、これでjsonフォーマットにして-fオプションでたれながせばいい感じにtd-agentに送れそうだけど、journalctlをバックグラウンドで動かし続けるみたいなことしないとだめな気がしてそれはそれできついというのもあった。

td-agentはやはりちょっと苦手意識あるのでもっときれいな書き方とか身につけたい…。

参考リンク