# Integrasi Telegram Bot di Wazuh untuk Security Alert Monitoring

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/Wazuh%20Alert%20Manager.png" alt=""><figcaption></figcaption></figure>

## Introduction

Berikut ini adalah tulisan mengenai bagaimana cara membuat Security Alert Monitoring untuk [**Wazuh**](https://wazuh.com) dengan memanfaatkan bantuan dari Telegram Bot, yang mana bot ini dibuat dengan menggunakan bahasa pemrograman [**Python**](https://www.python.org).

Dengan adanya bot ini diharapkan dapat memudahkan proses monitoring jika Wazuh mendeteksi adanya alert baru terkait dengan cyber threat pada endpoint yang dilakukan monitoring yang sebelumnya sudah ter-install [**Wazuh Agent**](https://documentation.wazuh.com/current/installation-guide/wazuh-agent/index.html).

## Configuration

Sebelum melakukan integrasi Telegram Bot ke Wazuh, pastikan kita sudah melakukan instalasi dan konfigurasi Wazuh sebelumnya, untuk implementasi terkait SIEM dapat mengikuti artikel [**Implementasi SIEM dengan Menggunakan Wazuh dan Elastic Stack**](https://blog.madfxr.my.id/documentation/categories/cyber-security/implementasi-siem-dengan-menggunakan-wazuh-dan-elastic-stack).

### Membuat Bot Baru di BotFather

Setelah itu lakukan chat ke [**@BotFather**](https://t.me/BotFather) di Telegram dan buat bot baru (Misal: **WazuhAlertManagerBot**), kemudian salin HTTP API Token dari bot baru yang didapatkan (Misal: **`613961048:AZFWy0k603kxSOCjSIkKacmKuxxxTnqxW48`**).

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/Telegram%20Bot.png" alt=""><figcaption><p>Create a New Telegram</p></figcaption></figure>

### Mendapatkan ID dari Username Telegram

Selanjutnya chat ke [**@Inline Info Username**](https://t.me/usinfobot) di Telegram untuk mendapatkan ID dari username Telegram yang kita gunakan, nantinya ID tersebut digunakan untuk melakukan identifikasi percakapan antara kita dengan bot.

### Install Paket Software Requests

Agar kita dapat mengirim permintaan ke Telegram Server, kita perlu melakukan instalasi paket software **`requests`** dengan menggunakan **`pip3`** dan berikut perintahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
pip3 install requests
```

{% endcode %}

### Menulis Script untuk Generate Pesan

Setelah paket software **`requests`** berhasil ter-install, kita perlu menulis script Python dengan nama file **`custom-telegram.py`** dan ubah parameter **`[CHAT_ID]`** dengan ID dari username Telegram yang kita gunakan, kemudian bikin script Shell dengan nama file **`custom-telegram`**, kedua script tersebut disimpan pada directory **`/var/ossec/integrations`** dan berikut perintahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
cd /var/ossec/integrations
vi custom-telegram.py
vi custom-telegram
chown root:wazuh /var/ossec/integrations/custom-telegram*
chmod 750 /var/ossec/integrations/custom-telegram*
```

{% endcode %}

{% hint style="warning" %}
{% code title="/var/ossec/integrations/custom-telegram.py" %}

```python
#!/usr/bin/env python3
# -*- Coding: UTF-8 -*-
import sys
import json

try:
    import requests
except Exception:
    print("No module 'requests' found. Install: pip3 install requests")
    sys.exit(1)

CHAT_ID = "[CHAT_ID]"

def create_message(alert_json):
    # Get Alert Information
    title = alert_json['rule']['description'] if 'description' in alert_json['rule'] else ''
    description = alert_json['full_log'] if 'full_log' in alert_json else ''
    description.replace("\\n", "\n")
    alert_level = alert_json['rule']['level'] if 'level' in alert_json['rule'] else ''
    groups = ', '.join(alert_json['rule']['groups']) if 'groups' in alert_json['rule'] else ''
    rule_id = alert_json['rule']['id'] if 'rule' in alert_json else ''
    agent_name = alert_json['agent']['name'] if 'name' in alert_json['agent'] else ''
    agent_id = alert_json['agent']['id'] if 'id' in alert_json['agent'] else ''

    # Format Message with Markdown
    msg_content = f'*{title}*\n\n'
    msg_content += f'_{description}_\n'
    msg_content += f'*Groups:* {groups}\n' if len(groups) > 0 else ''
    msg_content += f'*Rule:* {rule_id} (Level {alert_level})\n'
    msg_content += f'*Agent:* {agent_name} ({agent_id})\n' if len(agent_name) > 0 else ''

    msg_data = {}
    msg_data['chat_id'] = CHAT_ID
    msg_data['text'] = msg_content
    msg_data['parse_mode'] = 'markdown'

    # Debug Information
    with open('/var/ossec/logs/integrations.log', 'a') as f:
        f.write(f'MSG: {msg_data}\n')

    return json.dumps(msg_data)

# 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()

# Send The Request
msg_data = create_message(alert_json)
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
response = requests.post(hook_url, headers=headers, data=msg_data)

# Debug Information
with open('/var/ossec/logs/integrations.log', 'a') as f:
    f.write(f'RESPONSE: {response}\n')

sys.exit(0)
```

{% endcode %}
{% endhint %}

{% hint style="warning" %}
{% code title="/var/ossec/integrations/custom-telegram" %}

```sh
#!/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} "$@"
```

{% endcode %}
{% endhint %}

### Integrasi Telegram Bot di Wazuh Manager

Selanjutnya untuk melakukan integrasi Telegram Bot ke Wazuh, kita perlu melakukan konfigurasi pada Wazuh Manager dan melakukan perubahan pada file **`/var/ossec/etc/ossec.conf`**, kemudian tambahkan baris konfigurasi di bawah tepat di atas bagian **`<!-- Osquery integration -->`** dan ubah parameter **`[HTTP_API_TOKEN]`** dengan HTTP API Token yang sudah didapatkan dari BotFather, kemudian simpan perubahan dan berikut perintahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
cd /var/ossec/etc
vi ossec.conf
```

{% endcode %}

{% hint style="warning" %}
{% code title="/var/ossec/etc/ossec.conf" %}

```markdown
  <integration>
    <name>custom-telegram</name>
    <hook_url>https://api.telegram.org/bot[HTTP_API_TOKEN]/sendMessage</hook_url>
    <alert_format>json</alert_format>
  </integration>
```

{% endcode %}
{% endhint %}

### Restart Service Wazuh Manager

Selanjutnya lakukan restart service pada Wazuh Manager dan lihat apakah service-nya telah running dengan normal:

{% code overflow="wrap" lineNumbers="true" %}

```bash
systemctl restart wazuh-manager
systemctl status wazuh-manager
```

{% endcode %}

## Testing

### Verifikasi HTTP API Telegram Bot

Setelah kita sudah selesai membuat Telegram Bot dan telah mendapatkan HTTP API Token dari BotFather pada saat membuat bot, kemudian akses URL **`https://api.telegram.org/bot[HTTP_API_TOKEN]/sendMessage?chat_id=[CHAT_ID]&text=Wazuh%20Alert%20Manager%20is%20Running!`** melalui Web Browser seperti [**Chromium**](https://www.chromium.org/Home), [**Google Chrome**](https://www.google.com/chrome), [**Mozilla Firefox**](https://www.mozilla.org/en-US/firefox), [**Brave**](https://brave.com), [**Safari**](https://www.apple.com/safari) maupun [**Microsoft Edge**](https://www.microsoft.com/en-us/edge), ganti **`[HTTP_API_TOKEN]`** dengan HTTP API Token yang sebelumnya didapatkan melalui  [**@BotFather**](https://t.me/BotFather) dan ganti juga **`[CHAT_ID]`** dengan ID dari username Telegram yang kita gunakan yang sebelumnya didapatkan dari [**@Inline Info Username**](https://t.me/usinfobot).

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/Send%20Message.png" alt=""><figcaption><p>Send Message to Telegram Bot</p></figcaption></figure>

### Pengujian Security Alert Monitoring

Setelah semua proses instalasi, konfigurasi dan integrasi Telegram Bot di Wazuh sudah selesai dilakukan, jika Telegram Bot dapat berjalan dengan normal pada saat kita menjalankan perintah **`/start`**, maka Security Alert Monitoring yang ada di Telegram berhasil kita deploy seperti pada gambar di bawah ini.

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/Security%20Alert.png" alt=""><figcaption><p>Security Alert Monitoring Run Normally</p></figcaption></figure>

Demikian sedikit pengetahuan dan pengalaman yang dapat saya bagikan, semoga apa yang telah saya sampaikan dapat bermanfaat bagi kita semua.

<details>

<summary><strong>Referensi</strong></summary>

* [**Integrating Telegram with Wazuh**](https://medium.com/@jesusjimsa_12801/integrating-telegram-with-wazuh-4d8db91025f)
* [**Telegram Integration**](https://github.com/OpenSecureCo/Demos/blob/d59bbb3395fd2971c9c450718effa3e1bf514018/Telegram%20Integration#L3-L37)

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.madfxr.my.id/documentation/categories/cyber-security/integrasi-telegram-bot-di-wazuh-untuk-security-alert-monitoring.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
