Використання Claude Haiku в дешборді Wazuh

Велика мовна модель (LLM – Large Language Model) – це програма штучного інтелекту (ШІ), яка розпізнає, обробляє та генерує тексти, схожі на людську мову. Claude Haiku – це LLM-модель, розроблена компанією Antropic, яка може виконувати завдання завершення коду, інтерактивних чат-ботів та модерації контенту.

Модель Claude Haiku може бути інтегрована як функція чату в дешборд Wazuh. Виконання цієї інтеграції забезпечує інтерфейс в межах дешборда Wazuh, де користувачі можуть вводити питання, пов’язані з безпекою, і запитувати модель Claude Haiku.

У цій статті описано, як інтегрувати модель Claude 3.5 Haiku в дешборд Wazuh.

Вимоги

Для демонстрації інтеграції Claude 3.5 Haiku з Wazuh використана наступна інфраструктура:

  • Кінцева точка Ubuntu 24.04 з центральними компонентами Wazuh (сервер Wazuh, індексатор Wazuh та дешборд Wazuh), інстальованими за допомогою посібника з встановлення Wazuh. Необхідно оновлювати дешборд Wazuh після кожного запиту, якщо ця інтеграція виконується на Wazuh OVA, який працює під управлінням Amazon Linux 2.
  • Середовище AWS, яке може отримати доступ до моделі Claude 3.5 Haiku.

Конфігурація

AWS

Варто дотримуватися наступних кроків:

  • Увімкнути модель Claude 3.5 Haiku
  • Створити користувача IAM та ключі доступу
  • Налаштувати політики Amazon Bedrock

Увімкнення моделі Claude 3.5 Haiku

Щоб увімкнути модель Claude 3.5 Haiku, потрібно виконати такі дії на консолі AWS.

1. Увійти в консоль управління AWS і виконати пошук «Amazon Bedrock».

2. Обрати Model access на лівій навігаційній панелі.

3. Натиснути Enable specific models та увімкнути модель Claude 3.5 Haiku. Можливо, доведеться звернутися до служби підтримки, щоб увімкнути цю модель.

claude-3-5-haiku-model
claude-3-5-haiku

4. Після увімкнення моделі має з’явитися інтерфейс, подібний до зображеного нижче.

model access
edit-model-access

Створення користувача IAM і ключів доступу

Потрібно виконати наступні кроки на консолі AWS, щоб створити користувача IAM і отримати ключі доступу.

1. Виконати пошук «IAM».

create-iam-user

2. Вибрати Users на лівій навігаційній панелі та натиснути Create user.

create-user

3. Призначити ім’я новому користувачеві та завершити процес створення користувача.

user-details
set-permissions
review-and-create

4. Вибрати Users на лівій навігаційній панелі й натиснути на новоствореного користувача.

choose-users

5. Перейти на вкладку Security credentials і натиснути Create access key.

claude-haiku-security-credentials

Варто зберегти облікові дані надійно, вони будуть використані пізніше при створенні конектора до моделі Claude Haiku з дешборда Wazuh.

6. Вибрати опцію Application running outside AWS і натиснути кнопку Next.

claude-haiku-application-running-outside-aws

7. Додати тег опису для секретних ключів і натиснути кнопку Create access key.

claude-haiku-create-access-key

8. Зберегти ключ доступу та секретний ключ доступу.

Примітка: Якщо не скопіювати облікові дані до натискання Done, відновити їх пізніше не вдасться. Однак можна створити новий секретний ключ доступу.

Налаштування політик Amazon Bedrock

Необхідно виконати наступні кроки в консолі AWS, щоб налаштувати політики, потрібні для інтеграції.

1. Виконати пошук «IAM».

configure-amazon-bedrock-policies

2. Вибрати Policies на лівій навігаційній панелі, натиснути Create policy і вставити політику, наведену нижче. Політика надає доступ до моделей Amazon Bedrock і дозволяє користувачеві IAM взяти на себе раніше створену роль для Amazon Bedrock.

{
    "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "MarketplaceBedrock",
      "Effect": "Allow",
      "Action": [
        "aws-marketplace:ViewSubscriptions",
        "aws-marketplace:Unsubscribe",
        "aws-marketplace:Subscribe"
      ],
      "Resource": "*"
    }
  ]
}

3. Надати політиці ім’я та натиснути кнопку Create policy.

assign-policy-name

4. Вибрати новостворену політику, перейти на вкладку Entities attached і натиснути Attach. Знайти раніше створеного користувача IAM і приєднати політику до нього.

entities-attached-tab
claude-haiku-attach-permissions

5. Переконатися, що політику було успішно прикріплено.

attached-successfully

6. Натиснути Policies на лівій навігаційній панелі та знайти політику «AmazonBedrockFullAccess», керовану AWS. Вибрати політику, натиснути Actions і Attach.

claude-haiku-policies

7. Знайти раніше створеного користувача AWS IAM і прикріпити політику.

aws-iam-user

8. Переконатися, що політику було успішно додано.

policy-successfully-added

Сервер дешборда Wazuh

Щоб встановити необхідні плагіни OpenSearch, слід виконати наступні дії на сервері, на якому розміщено дешборд Wazuh.

1. Завантажити файл плагінів OpenSearch Dashboard:

$ curl https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.13.0/opensearch-dashboards-2.13.0-linux-x64.tar.gz -o opensearch-dashboards.tar.gz

2. Розпакувати файл плагіна:

$ tar -xvzf opensearch-dashboards.tar.gz

3. Скопіювати наступні плагіни до теки плагінів дешборда Wazuh. У прикладі використовуються плагіни observabilityDashboards, mlCommonsDashboards та assistantDashboards:

# cp -r opensearch-dashboards-2.13.0/plugins/observabilityDashboards/ /usr/share/wazuh-dashboard/plugins/ 
# cp -r opensearch-dashboards-2.13.0/plugins/mlCommonsDashboards/ /usr/share/wazuh-dashboard/plugins/ 
# cp -r opensearch-dashboards-2.13.0/plugins/assistantDashboards/ /usr/share/wazuh-dashboard/plugins/

4. Встановити дозволи та права власності для плагінів, щоб дешборд Wazuh міг їх використовувати:

# chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/observabilityDashboards/
# chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/mlCommonsDashboards/
# chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/assistantDashboards/
# chmod -R 750 /usr/share/wazuh-dashboard/plugins/observabilityDashboards/
# chmod -R 750 /usr/share/wazuh-dashboard/plugins/mlCommonsDashboards/
# chmod -R 750 /usr/share/wazuh-dashboard/plugins/assistantDashboards/

5. Додати наступні налаштування до файлу /etc/wazuh-dashboard/opensearch_dashboards.yml. Це додасть і увімкне OpenSearch Assistant на дешборді Wazuh. OpenSearch Assistant – це користувацький інтерфейс на основі штучного інтелекту.

assistant.chat.enabled: true
observability.query_assist.enabled: true

6. Перейти до каталогу /usr/share/wazuh-indexer/:

# cd /usr/share/wazuh-indexer/

7. Встановити плагіни opensearch-flow-framework та opensearch-skills. Плагіни дозволяють використовувати додатки штучного інтелекту та функції машинного навчання на дешборді Wazuh.

# ./bin/opensearch-plugin install org.opensearch.plugin:opensearch-flow-framework:2.13.0.0
# ./bin/opensearch-plugin install org.opensearch.plugin:opensearch-skills:2.13.0.0

8. Перезапустити службу дешборда Wazuh:

# systemctl restart wazuh-dashboard

OpenSearch Assistant відображається після перезапуску служби дешборда Wazuh, як показано на зображенні нижче.

opensearch-assistant

Дешборд Wazuh

Потрібно виконати наступні кроки на дешборді Wazuh. Перейти на Indexer management > DevTools. Натиснути кнопку відтворення після введення кожного запиту, щоб відправити API-запити.

1. Налаштувати завдання машинного навчання на запуск на будь-якому вузлі кластера:

PUT /_cluster/settings
{
  "persistent" : {
    "plugins.ml_commons.only_run_on_ml_node":"false"
  }
}

Результат:

{
  "acknowledged": true,
  "persistent": {
    "plugins": {
      "ml_commons": {
        "only_run_on_ml_node": "false"
      }
    }
  },
  "transient": {}
}
claude-haiku-devtools-tab

2. Створити API-конектор для доступу до моделі Claude 3.5 Haiku, розміщеної на AWS:

POST /_plugins/_ml/connectors/_create
{
    "name": "Amazon Bedrock Claude Haiku",
    "description": "Connector for Amazon Bedrock Claude Haiku",
    "version": 1,
    "protocol": "aws_sigv4",
    "credential": {
      "access_key": "<ACCESS_KEY>",
      "secret_key": "<SECRET_KEY>"
    },
    "parameters": {
        "region": "<REGION>",
        "service_name": "bedrock",
        "auth": "Sig_V4",
        "response_filter": "$.content[0].text",
        "max_tokens_to_sample": "8000",
        "anthropic_version": "<ANTHROPIC_VERSION>",
        "model": "<MODEL>"
    },
    "actions": [
        {
            "action_type": "predict",
            "method": "POST",
            "headers": {
                "content-type": "application/json"
            },
            "url": "https://bedrock-runtime.<REGION>.amazonaws.com/model/${parameters.model}/invoke"
,
            "request_body": "{\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"${parameters.prompt}\"}]}],\"anthropic_version\":\"${parameters.anthropic_version}\",\"max_tokens\":${parameters.max_tokens_to_sample}}"
        }
    ]
}

Необхідні параметри виділені нижче.

  • access_key і secret_key: Це пари ключів доступу, які використовуються для автентифікації створеного тут користувача IAM. Слід замінити <ACCESS_KEY> і <SECRET_KEY> їхніми значеннями.
  • region: Це регіон AWS, у якому розміщено модель. Модель Claude Haiku доступна у регіоні us-west-2. Потрібно замінити <REGION> на необхідний регіон.
  • service_name: Назва сервісу AWS.
  • auth: Це протокол підпису AWS для додавання інформації про автентифікацію до запитів AWS API.
  • anthropic_version і model:
    • На вкладці Amazon Bedrock в консолі AWS натиснути на лівій панелі Providers.
    • Натиснути на Anthropic і обрати Claude 3.5 Haiku.
    • Прокрутити вниз до запиту API. Використовувати значення anthropic_version і modelid для <ANTHROPIC_VERSION> і <MODEL>. У випадку, що розглядається це bedrock-2023-05-31 та anthropic.claude-3-5-haiku-20241022-v1:0 відповідно.

Результат:

{
  "connector_id": "5KWlh5MB9UAfvOK_Onx6"
}
connector-id

Зберегти connector_id, оскільки він знадобиться в іншому запиті API.

3. Зареєструвати групу моделей. Група моделей необхідна для створення нової моделі.

POST /_plugins/_ml/model_groups/_register
{
    "name": "AWS Bedrock",
    "description": "This is a public model group"
}

Результат:

{
  "model_group_id": "3qWeh5MB9UAfvOK_xnyI",
  "status": "CREATED"
}

Зберегти model_group_id.

model-group-id

4. Зареєструвати та розгорнути модель у створеній раніше групі моделей:

POST /_plugins/_ml/models/_register?deploy=true
{
    "name": "Bedrock Claude model",
    "function_name": "remote",
    "model_group_id": "<MODEL_GROUP_ID>",
    "description": "Test Model",
    "connector_id": "<CONNECTOR_ID>"
}

Замінити <MODEL_GROUP_ID> та <CONNECTOR_ID> значеннями model_group_id та connector_id.

Результат:

{
  "task_id": "5aWmh5MB9UAfvOK_oXxk",
  "status": "CREATED",
  "model_id": "5qWmh5MB9UAfvOK_oXyQ"
}
model-group-id-and-connector-id

Зберегти model_id.

5. Варто використовувати наступний запит для тестування моделі:

POST /_plugins/_ml/models/<MODEL_ID>/_predict
{
  "parameters": {
    "prompt": "\n\nHuman:hello\n\nAssistant:"
  }
}

Замінити <MODEL_ID> на значення model_id.

Результат:

{
  "inference_results": [
    {
      "output": [
        {
          "name": "response",
          "dataAsMap": {
            "response": "Hi there! How are you doing today? I'm happy to help you with any questions or tasks you may have. What would you like to chat about?"
          }
        }
      ],
      "status_code": 200
    }
  ]
}
claude-haiku-inference-results

Примітка: Якщо буде отримано відповідь, наведену нижче, потрібно змінити поточний регіон. Це означає, що у регіоні не було доступу до моделі Claude 3.5 Haiku. Модель доступна в регіоні us-west-2.

{
  "error": {
    "root_cause": [
      {
        "type": "status_exception",
        "reason": "Error from remote service: {\"message\":\"Invocation of model ID anthropic.claude-3-5-haiku-20241022-v1:0 with on-demand throughput isn't supported. Retry your request with the ID or ARN of an inference profile that contains this model.\"}"
      }
    ],
    "type": "status_exception",
    "reason": "Error from remote service: {\"message\":\"Invocation of model ID anthropic.claude-3-5-haiku-20241022-v1:0 with on-demand throughput isn't supported. Retry your request with the ID or ARN of an inference profile that contains this model.\"}"
  },
  "status": 400
}

6. Зареєструвати агента на модель Claude 3.5 Haiku:

POST /_plugins/_ml/agents/_register
{
  "name": "Haiku_3.5_Claude_agent",
  "type": "conversational",
  "description": " This is a Haiku 3.5 Claude agent",
  "llm": {
    "model_id": "<MODEL_ID>",
    "parameters": {
      "max_iteration": 5,
      "stop_when_no_tool_found": true
    }
  },
  "memory": {
    "type": "conversation_index"
  },
  "tools": [
    {
      "type": "MLModelTool",
      "name": "bedrock_claude_model",
      "description": "A general tool to answer any question",
      "parameters": {
        "model_id": "<MODEL_ID>",
        "prompt": "Human: You're an Artificial intelligence analyst and you're going to help me with cybersecurity related tasks.\n\n${parameters.chat_history:-}\n\nHuman: ${parameters.question}\n\nAssistant:"
      }
    }
  ]
}

Результат:

{
  "agent_id": "UZjEh5MBBzF0ul56sFFZ"
}
agent-id

Зберегти agent_id.

7. Протестувати агента:

POST _plugins/_ml/agents/<AGENT_ID>/_execute
{
  "parameters": {
    "question": "Who are you?",
    "verbose": false
  }
}

Замінити <AGENT_ID> на значення agent_id.

Результат:

{
  "inference_results": [
    {
      "output": [
        {
          "name": "memory_id",
          "result": "V5jIh5MBBzF0ul56RFEB"
        },
        {
          "name": "parent_interaction_id",
          "result": "WJjIh5MBBzF0ul56RFEQ"
        },
        {
          "name": "response",
          "dataAsMap": {
            "response": "I am an AI assistant designed to help with a wide range of tasks, with deep expertise in areas like OpenSearch, logs, traces, and metrics. I can understand and process large amounts of text, engage in natural conversations, and provide informative and accurate responses to various questions while always prioritizing helpful and ethical interactions.",
            "additional_info": {}
          }
        }
      ]
    }
  ]
}
dataasmap

8. Під’єднати агента до OpenSearch Assistant:

PUT .plugins-ml-config/_doc/os_chat
{
    "type":"os_chat_root_agent",
    "configuration":{
        "agent_id": "<AGENT_ID>"
    }
}

Замінити <AGENT_ID> на значення agent_id.

Результат:

{
  "_index": ".plugins-ml-config",
  "_id": "os_chat",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 2,
  "_primary_term": 2
}
plugins-ml-config

9. Оновити дешборд Wazuh.

Використання Claude Haiku LLM в дешборді Wazuh

У розділі нижче показано, як можна перевірити знання моделі про Wazuh та її відповіді.

Примітка:

  • Слід завжди переглядати всі відповіді, які генерує Claude 3.5 Haiku LLM, оскільки іноді вона може давати неточні або неправильні відповіді. LLM може генерувати різні відповіді на одне й те саме запитання.
  • Для отримання відповідей на запитання, пов’язані з Wazuh, спершу треба переглянути документацію до Wazuh, запитати у спільноті Wazuh або скористатися пошуковою системою, щоб перевірити відповіді, надані LLM.

1. «Як встановити агента Wazuh на кінцеву точку Windows?» Хороша відповідь від LLM наведена на зображенні нижче.

claude-haiku-llm

2. «Що робити, коли я бачу сповіщення про вразливість Wazuh?» LLM генерує правильну відповідь, яку показано на зображенні нижче.

wazuh-vulnerability-alert

3. «Що таке MITRE ID для обфускації?» LLM генерує хорошу відповідь, як показано на зображенні нижче.

mitre-id-for-obfuscation

4. «Як налаштувати модуль активної відповіді Wazuh на блокування IP-адреси після декількох невдалих спроб автентифікації по SSH?» LLM генерує частково правильну відповідь, як показано на зображенні нижче.

multiple-failed-ssh-authentication-attempts

5. Написати Wazuh-декодер для семплу журналу «Nov 11 15:19:38 TrendDeepSecurity CEF:0|Trend Micro|Deep Security Manager|20.0.605|1556|Anti-Malware scan exclusion setting update|3|src=10.70.20.236 suser=System target=V-PRD-0014.example.com (V-PRD-0014) msg=The Anti-Malware scan exclusion setting contains the following errors:\n\nAn item specified in an Anti-Malware exclusion list cannot be modified by users.\nC:\windows\system32\spoolsv.exe\n\n TrendMicroDsTenant=Primary TrendMicroDsTenantId=0», витягуючи поля product, version та severity. LLM генерує неправильну відповідь, як показано на малюнках нижче.

wazuh-decoder
claude-haiku-llm-generates-an-incorrect-response

Висновок

Wazuh – це платформа моніторингу безпеки з відкритим вихідним кодом, яка об’єднує можливості SIEM та XDR. Інтеграція LLMs, таких як Claude Haiku, представляє інтерфейс, виконаний у форматі чату на дешборді Wazuh, де користувачі можуть вводити питання, пов’язані з безпекою, і робити запити до моделі.

Підписатися на новини