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

20 Jan 2026 20:18

Add Punycode to your Threat Hunting Routine

Author Photo
Ruslan Mikhalov Chief of Threat Research at 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