Integrasi Wazuh Alert dengan Telegram Bot

Bayu Sangkaya
3 min readDec 16, 2022

--

Untuk mengoptimalkan fungsi alert pada Wazuh, kita bisa menghubungkan Wazuh Alert dengan Telegram Bot. Produk akhir dari tutorial ini adalah, Wazuh akan mengirimkan alert kepada Blue Team atau Tim CISRT melalui Telegram yang ada di Smartphone anggota tim. Tutorial ini dibagi menjadi 2 bagian yaitu membuat Telegram Bot dan Menghubungkan Telegram Bot dengan server Wazuh.

Membuat Telegram Bot dan Mendapatkan Chat ID

  • Buka Telegram lalu search BotFather pilih akun yang Verified atau dengan centang biru supaya tidak terkena Man-in-the-Middle Attack
Search “BotFather”
  • Klik start untuk memulai percakapan dengan BotFather
  • Ketik command /newbot lalu masukkan nama bot, di sini saya menggunakan nama BayuskyWazuhBot untuk bot saya, lalu simpan dan catat HTTP API, karena akan digunakan untuk integrasi nantinya.
  • Search bot yang baru dibuat BayuskyWazuhBot lalu klik start untuk memulai percakapan.
  • Buat grup yang beranggotakan BayuskyWazuhBot dengan anggota tim CISRT (bila ada). Lalu mulai percapakan dalam grup untuk membangkitkan chat ID.
  • Masukkan HTTP API ke link https://api.telegram.org/bot<HTTP-API>/getUpdates untuk mendapatkan chat ID. Chat ID berupa angka : -xxxx (termasuk tanda minus) , dalam hal ini saya mendapatkan Chat ID : -826434xxx dan HTTP API : 551002xxxx:AAGT1kcg554SFINnRGlga11J-lHvLSxxxxx
CHAT ID

Chat ID dan HTTP API harus dirahasiakan, jika bocor, kendali bot bisa diambil oleh orang lain.

Jika link getUpdates belum menghasilkan chat ID, bisa dicoba beberapa langkah berikut : Mention bot dalam chat grup, DM (Direct Message) bot, Keluarkan bot dari grup, lalu masukkan lagi.

Integrasi dengan Wazuh Server

  • Cek kesiapan sistem dengan command ini
# pip install requests
  • Buat 2 file : custom-telegram dan custom-telegram.pydalam directory /var/ossec/integrations
# nano /var/ossec/integrations/custom-telegram
#!/bin/sh

WPYTHON_BIN="framework/python/bin/python3"

SCRIPT_PATH_NAME="$0"

DIR_NAME="$(cd $(dirname ${SCRIPT_PATH_NAME}); pwd -P)"
SCRIPT_NAME="$(basename ${SCRIPT_PATH_NAME})"

case ${DIR_NAME} in
*/active-response/bin | */wodles*)
if [ -z "${WAZUH_PATH}" ]; then
WAZUH_PATH="$(cd ${DIR_NAME}/../..; pwd)"
fi

PYTHON_SCRIPT="${DIR_NAME}/${SCRIPT_NAME}.py"
;;
*/bin)
if [ -z "${WAZUH_PATH}" ]; then
WAZUH_PATH="$(cd ${DIR_NAME}/..; pwd)"
fi

PYTHON_SCRIPT="${WAZUH_PATH}/framework/scripts/${SCRIPT_NAME}.py"
;;
*/integrations)
if [ -z "${WAZUH_PATH}" ]; then
WAZUH_PATH="$(cd ${DIR_NAME}/..; pwd)"
fi

PYTHON_SCRIPT="${DIR_NAME}/${SCRIPT_NAME}.py"
;;
esac


${WAZUH_PATH}/${WPYTHON_BIN} ${PYTHON_SCRIPT} "$@"
# nano /var/ossec/integrations/custom-telegram.py
#!/usr/bin/env python

import sys
import json
import requests
from requests.auth import HTTPBasicAuth

#CHAT_ID="-xxxx" --- change with your chat id
CHAT_ID="-826434xxx"

# Read configuration parameters
alert_file = open(sys.argv[1])
hook_url = sys.argv[3]


# Read the alert file
alert_json = json.loads(alert_file.read())
alert_file.close()

# Extract data fields
alert_level = alert_json['rule']['level'] if 'level' in alert_json['rule'] else "N/A"
description = alert_json['rule']['description'] if 'description' in alert_json['rule'] else "N/A"
agent = alert_json['agent']['name'] if 'name' in alert_json['agent'] else "N/A"
# Generate request
msg_data = {}
msg_data['chat_id'] = CHAT_ID
msg_data['text'] = {}
msg_data['text']['description'] = description
msg_data['text']['alert_level'] = str(alert_level)
msg_data['text']['agent'] = agent
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}


# Send the request
requests.post(hook_url, headers=headers, data=json.dumps(msg_data))

sys.exit(0)
  • Tentukan permission yang benar untuk kedua file tersebut
#chown root:wazuh /var/ossec/integrations/custom-telegram*
#chmod 750 /var/ossec/integrations/custom-telegram*
  • Masukkan baris kode xml ini dengan mencamtukan HTTP API ke dalam /var/ossec/etc/ossec.conf
    <integration>
<name>custom-telegram</name>
<level>3</level>
<hook_url>https://api.telegram.org/bot<API_KEY>/sendMessage</hook_url>
<alert_format>json</alert_format>
</integration>

Kode di atas jika ingin mengirimkan alert level 3 ke atas melalui bot telegram. Namun jika hanya ingin mengirimkan yang critical saja, bisa mengubah nilai parameter pada frame <level>

  • Restart wazuh-manager
# systemctl restart wazuh-manager
  • Telegram Tim CISRT / Blue Team sudah bisa mendapatkan alert dari Wazuh
Wazuh Alert

--

--

Bayu Sangkaya

Seorang SysAdmin yang berpengalaman gelar server dari scratch (merakit dan memasang hardware) sampai monitoring dan analysis.