SOC Prime Bias: Середній

20 Jan 2026 20:18

Add Punycode to your Threat Hunting Routine

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
Add Punycode to your Threat Hunting Routine
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

У статті пояснюється, як інтернаціоналізовані доменні імена (IDN) можуть бути використані за допомогою Punycode для створення оманливих URL, які на перший погляд виглядають легітимно. Описуються базові концепції кодування/декодування, наведені приклади Punycode-рядків, спостережених у телеметрії DNS, і підкреслюється практична евристика для пошуку: моніторинг журналів запитів DNS для xn-- префікс як високоіндикативний сигнал потенційного спуфінгу або зловживання на основі IDN.

Дослідження

Автор демонструє декодування домену, закодованого Punycode, за допомогою короткого прикладу на Python, а потім застосовує ту ж логіку до спостережень у реальному світі. Витяги з журналів DNS показують повторювані запити до xn--доменів з префіксом, що свідчить про автоматизовані або скриптові запити, а не органічне переглядання користувачем. Цей шаблон допомагає ілюструвати, як зловмисники можуть використовувати IDN-подібних у масштабі, залишаючись складними для виявлення в сирих журналах.

Пом’якшення

Команди безпеки повинні додати рутинні пошуки для xn-- у журналах резолвера DNS і розглядати кожну відповідність як потенційний випадок зловживання IDN. Після цього перевірити декодовані домени на наявність підозрілих символів Unicode (наприклад, омогліфів), а потім застосувати стандартні засоби контролю, такі як перевірка URL, перевірка репутації домену та кореляція з телеметрією кінцевих точок/процесів. Де можливо, збагачувати виявлення списками дозволених відомих легітимних використань IDN у вашому середовищі для зменшення шуму.

Відповідь

Коли виявлений домен Punycode, аналітики повинні декодувати домен, оцінити репутацію та історичний контекст і визначити, чи відповідає трафік очікуваній бізнес-активності. Якщо підтверджено зловмисний намір, заблокуйте або перенаправте запити до домену та визначте пов’язану інфраструктуру і спроби доступу нижчого рівня. Постійно моніторте зловживання IDN/Punycode як складову частину процесу пошуку загроз, коригуючи пороги і збагачення з часом для збереження високої точності.

Потік атаки

Ми ще оновлюємо цю частину. Підпишіться, щоб отримати сповіщення

Повідомити мене

Виконання симуляції

Попередня умова: Повинен пройти перевірку телеметрії та базових умов (Baseline Pre‑flight Check).

  • Атака та команди:
    Супротивник хоче зв’язатися з сервером командування та управління, який схований за доменом з Юнікод, щоб уникнути поверхневого огляду. Вони кодують домен за допомогою punycode, що приводить до рядка, що починається з «xn--». Виконавши DNS-запит для цього закодованого імені, зловмисник генерує саме ту телеметрію, яку правилом спостерігається. Зловмисник виконує пошук із компрометованого хоста, використовуючи вбудовані інструменти Windows для залишатися непомітним.

    # Злочинний домен punycode (приклад: xn--e1afmkfd.xn--p1ai)
    $maliciousDomain = "xn--e1afmkfd.xn--p1ai"
    Resolve-DnsName -Name $maliciousDomain -DnsOnly
  • Скрипт тестування регресії:

    <#
    .SYNOPSIS
        Імітує DNS-запит punycode для перевірки правила виявлення «Закодовані Punycode домени».
    
    .ОПИС
        Скрипт виконує один DNS-пошук сфабрикованого домену punycode.
        Він записує дію, чекає короткий час для забезпечення інгестації журналу, а потім виходить.
    #>
    
    #--- Конфігурація ---
    $punycodeDomain = "xn--e1afmkfd.xn--p1ai"   # Замініть будь-яким закодованим punycode-доменом
    $logFile       = "$env:Temppunycode_test.log"
    
    #--- Виконання ---
    "[$(Get-Date -Format o)] Початок DNS-запиту punycode для $punycodeDomain" | Out-File -FilePath $logFile -Append
    try {
        Resolve-DnsName -Name $punycodeDomain -DnsOnly -ErrorAction Stop | Out-Null
        "[$(Get-Date -Format o)] Запит пройшов успішно" | Out-File -FilePath $logFile -Append
    } catch {
        "[$(Get-Date -Format o)] Запит не вдався: $_" | Out-File -FilePath $logFile -Append
    }
    
    #--- Додаткова пауза для дозволу на інгестацію SIEM (адаптувати за потреби) ---
    Start-Sleep -Seconds 5
    "[$(Get-Date -Format o)] Скрипт завершено" | Out-File -FilePath $logFile -Append
  • Команди очищення:

    # Очистити кеш DNS, щоб видалити запит з кешу локального резолвера
    ipconfig /flushdns
    
    # Видалити тимчасовий файл журналу, створений тестовим скриптом
    Remove-Item -Path "$env:Temppunycode_test.log" -ErrorAction SilentlyContinue