Threat Hunting

Что такое threat hunting: определение, основные принципы, примеры и практические советы. Изучайте фундаментальной защите информации с подробными объяснениями для начинающих специалистов.

Threat Hunting

Что такое Threat Hunting?

Threat Hunting — это проактивный процесс поиска скрытых угроз в инфраструктуре организации, который основан на гипотезах о возможных атаках и использует различные техники анализа данных.

Ключевые принципы

  • Проактивность — поиск угроз до их обнаружения системами
  • Гипотезно-ориентированный подход — основан на гипотезах о возможных атаках
  • Анализ данных — глубокий анализ больших объемов данных
  • Непрерывность — постоянный процесс поиска

Методологии Threat Hunting

MITRE ATT&CK Framework

Тактики, техники и процедуры атак

Основные тактики:

  • Initial Access — первоначальный доступ
  • Execution — выполнение
  • Persistence — постоянство
  • Privilege Escalation — повышение привилегий
  • Defense Evasion — уклонение от защиты
  • Credential Access — доступ к учетным данным
  • Discovery — разведка
  • Lateral Movement — боковое перемещение
  • Collection — сбор данных
  • Command and Control — управление и контроль
  • Exfiltration — утечка данных
  • Impact — воздействие

Пример техники:

T1055 - Process Injection
Описание: Внедрение кода в процесс
Индикаторы:
- Создание процессов с подозрительными параметрами
- Изменения в памяти процессов
- Необычные сетевые соединения

Diamond Model

Модель анализа киберугроз

Компоненты модели:

  • Adversary — противник
  • Capability — возможности
  • Infrastructure — инфраструктура
  • Victim — жертва

Связи:

  • Adversary → Capability — противник использует возможности
  • Capability → Infrastructure — возможности используют инфраструктуру
  • Infrastructure → Victim — инфраструктура атакует жертву
  • Victim → Adversary — жертва предоставляет данные противнику

Cyber Kill Chain

Цепочка кибератаки

Этапы атаки:

  1. Reconnaissance — разведка
  2. Weaponization — создание оружия
  3. Delivery — доставка
  4. Exploitation — эксплуатация
  5. Installation — установка
  6. Command and Control — управление
  7. Actions on Objectives — достижение целей

Индикаторы компрометации (IOC)

Типы IOC

Различные типы индикаторов компрометации

IP-адреса и домены:

# Подозрительные IP-адреса
suspicious_ips:
  - "192.168.1.100"
  - "10.0.0.50"
  - "172.16.0.25"

# Подозрительные домены
suspicious_domains:
  - "malware.example.com"
  - "phishing-site.org"
  - "command-control.net"

Хеши файлов:

# MD5 хеши вредоносных файлов
malware_hashes:
  md5:
    - "d41d8cd98f00b204e9800998ecf8427e"
    - "5d41402abc4b2a76b9719d911017c592"
  sha1:
    - "da39a3ee5e6b4b0d3255bfef95601890afd80709"
  sha256:
    - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

Сетевые индикаторы:

# Подозрительные порты
suspicious_ports:
  - 4444 # Metasploit
  - 6666 # Backdoor
  - 31337 # Elite port

# Подозрительные протоколы
suspicious_protocols:
  - "ICMP" # Tunneling
  - "DNS" # Data exfiltration

Анализ IOC

Методы анализа индикаторов компрометации

Сбор данных:

// Сбор IOC из различных источников
async function collectIocs() {
  const iocs = {
    ips: [],
    domains: [],
    hashes: [],
    urls: [],
  };

  // Сбор из файрвола
  const firewallLogs = await collectFirewallLogs();
  iocs.ips.push(...extractIps(firewallLogs));

  // Сбор из DNS логов
  const dnsLogs = await collectDnsLogs();
  iocs.domains.push(...extractDomains(dnsLogs));

  // Сбор из антивируса
  const avLogs = await collectAvLogs();
  iocs.hashes.push(...extractHashes(avLogs));

  return iocs;
}

Корреляция IOC:

// Корреляция IOC с событиями
function correlateIocsWithEvents(iocs, events) {
  const matches = [];

  for (const event of events) {
    for (const [iocType, iocList] of Object.entries(iocs)) {
      if (iocType === "ips" && iocList.includes(event.srcIp)) {
        matches.push({
          event: event,
          iocType: iocType,
          iocValue: event.srcIp,
        });
      } else if (iocType === "domains" && iocList.includes(event.domain)) {
        matches.push({
          event: event,
          iocType: iocType,
          iocValue: event.domain,
        });
      }
    }
  }

  return matches;
}

Инструменты Threat Hunting

SIEM платформы

Использование SIEM для поиска угроз

Splunk SPL:

# Поиск подозрительной активности
index=security sourcetype=auth
| where action="failed" AND user!="
| stats count by user, src_ip
| where count > 10
| sort -count

# Анализ сетевого трафика
index=network sourcetype=firewall
| where action="allow" AND dest_port=22
| stats count by src_ip, dest_ip
| where count > 100
| sort -count

Elastic SIEM:

{
  "query": {
    "bool": {
      "must": [
        { "term": { "event.category": "authentication" } },
        { "term": { "event.outcome": "failure" } }
      ],
      "filter": {
        "range": {
          "@timestamp": {
            "gte": "now-1h"
          }
        }
      }
    }
  },
  "aggs": {
    "failed_logins": {
      "terms": {
        "field": "user.name",
        "size": 10
      }
    }
  }
}

Специализированные инструменты

Инструменты для анализа данных

YARA

Правила для обнаружения вредоносного ПО

rule SuspiciousProcess {
    meta:
        description = "Detects suspicious process creation"
        author = "Threat Hunter"
        date = "2024-01-15"

    strings:
        $cmd1 = "powershell.exe -enc" ascii
        $cmd2 = "cmd.exe /c" ascii
        $cmd3 = "rundll32.exe" ascii

    condition:
        2 of ($cmd*)
}

Sigma

Правила для SIEM систем

title: Suspicious PowerShell Execution
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects suspicious PowerShell execution patterns
author: Threat Hunter
date: 2024/01/15
modified: 2024/01/15
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith: '\powershell.exe'
    CommandLine|contains: "-enc"
  condition: selection
falsepositives:
  - Legitimate PowerShell scripts using encoded commands
level: medium

Аналитические инструменты

Инструменты для анализа данных

Jupyter Notebooks

Интерактивный анализ данных

// Анализ данных с помощью JavaScript
const fs = require("fs");
const csv = require("csv-parser");

// Загрузка данных
async function loadSecurityEvents() {
  return new Promise((resolve, reject) => {
    const results = [];
    fs.createReadStream("security_events.csv")
      .pipe(csv())
      .on("data", (data) => results.push(data))
      .on("end", () => resolve(results))
      .on("error", reject);
  });
}

// Анализ подозрительной активности
async function analyzeSuspiciousActivity() {
  const df = await loadSecurityEvents();

  const suspiciousActivity = df.filter(
    (row) => row.event_type === "failed_login" && parseInt(row.count) > 10
  );

  // Группировка по пользователям
  const userStats = {};
  suspiciousActivity.forEach((row) => {
    if (!userStats[row.user]) {
      userStats[row.user] = 0;
    }
    userStats[row.user] += parseInt(row.count);
  });

  // Вывод результатов
  console.log("Failed Login Attempts by User:");
  Object.entries(userStats)
    .sort(([, a], [, b]) => b - a)
    .forEach(([user, count]) => {
      console.log(`${user}: ${count} attempts`);
    });

  return suspiciousActivity;
}

R для анализа данных

Статистический анализ

# Загрузка данных
library(dplyr)
library(ggplot2)

security_data <- read.csv('security_events.csv')

# Анализ аномалий
anomalies <- security_data %>%
  filter(event_type == 'network_connection') %>%
  group_by(src_ip) %>%
  summarise(
    connection_count = n(),
    unique_dest_ports = n_distinct(dest_port),
    avg_bytes = mean(bytes)
  ) %>%
  filter(connection_count > 1000 | unique_dest_ports > 50)

# Визуализация
ggplot(anomalies, aes(x = connection_count, y = unique_dest_ports)) +
  geom_point() +
  labs(title = 'Network Anomalies', x = 'Connection Count', y = 'Unique Ports')

Процесс Threat Hunting

Планирование

Планирование охоты на угрозы

Этапы планирования:

  1. Определение целей — что искать
  2. Выбор гипотез — на основе каких предположений
  3. Подготовка данных — какие данные нужны
  4. Выбор инструментов — какие инструменты использовать

Пример планирования:

hunt_plan:
  objective: "Detect lateral movement in the network"
  hypothesis: "Attackers use RDP for lateral movement"
  data_sources:
    - "Windows Event Logs"
    - "Network Traffic"
    - "Authentication Logs"
  tools:
    - "Splunk"
    - "Wireshark"
    - "Custom Scripts"
  timeframe: "30 days"

Выполнение

Выполнение охоты на угрозы

Методы поиска:

  • Signature-based — поиск по сигнатурам
  • Anomaly-based — поиск аномалий
  • Behavioral — поведенческий анализ
  • Statistical — статистический анализ

Пример выполнения:

// Поиск подозрительной активности RDP
async function huntRdpLateralMovement() {
  // 1. Поиск множественных RDP подключений
  const rdpConnections = await searchEvents({
    query: "event_type=rdp_connection",
    timeframe: "30d",
  });

  // 2. Анализ паттернов подключений
  const connectionPatterns = analyzeConnectionPatterns(rdpConnections);

  // 3. Поиск аномалий
  const anomalies = findAnomalies(connectionPatterns);

  // 4. Расследование аномалий
  for (const anomaly of anomalies) {
    await investigateAnomaly(anomaly);
  }

  return anomalies;
}

Анализ результатов

Анализ результатов охоты

Методы анализа:

  • Correlation Analysis — корреляционный анализ
  • Timeline Analysis — анализ временной линии
  • Network Analysis — сетевой анализ
  • File Analysis — анализ файлов

Пример анализа:

// Анализ результатов охоты
function analyzeHuntResults(results) {
  const uniqueIps = new Set(results.map((r) => r.srcIp));

  const analysis = {
    totalEvents: results.length,
    uniqueIps: uniqueIps.size,
    timeRange: {
      start: Math.min(...results.map((r) => new Date(r.timestamp).getTime())),
      end: Math.max(...results.map((r) => new Date(r.timestamp).getTime())),
    },
    suspiciousPatterns: [],
  };

  // Поиск подозрительных паттернов
  for (const result of results) {
    if (isSuspicious(result)) {
      analysis.suspiciousPatterns.push(result);
    }
  }

  return analysis;
}

Лучшие практики

Рекомендации

  • Начните с гипотез — основывайтесь на конкретных предположениях
  • Используйте данные — анализируйте реальные данные
  • Документируйте — ведите записи о процессе
  • Сотрудничайте — работайте в команде
  • Учитесь — постоянно развивайте навыки

Чего избегать

  • Слепого поиска — не ищите без конкретной цели
  • Игнорирования контекста — учитывайте бизнес-контекст
  • Отсутствия документации — документируйте все находки
  • Игнорирования ложных срабатываний — проверяйте результаты

Метрики и KPI

Операционные метрики

  • Hunt Frequency — частота проведения охоты
  • Time per Hunt — время на одну охоту
  • Data Sources Used — количество используемых источников
  • Tools Utilized — количество используемых инструментов

Качественные метрики

  • Threats Detected — количество обнаруженных угроз
  • False Positive Rate — уровень ложных срабатываний
  • Hunt Success Rate — процент успешных охот
  • Coverage — покрытие инфраструктуры

Бизнес-метрики

  • Risk Reduction — снижение рисков
  • Cost Savings — экономия затрат
  • Compliance — соответствие требованиям
  • Business Impact — воздействие на бизнес

Заключение

Threat Hunting — это критически важный процесс для обеспечения безопасности организации. Успешная охота на угрозы требует:

  • Структурированного подхода — четкой методологии
  • Правильных инструментов — подходящих инструментов анализа
  • Квалифицированной команды — обученных специалистов
  • Непрерывного совершенствования — постоянного развития процессов

Помните: Threat Hunting — это не разовое мероприятие, а постоянный процесс поиска и анализа угроз. Успех зависит от правильного понимания методологий, качественного использования инструментов и постоянного развития навыков.