Введение

Сервис семейства протоколов Интернет

Протокол генератора символов (CHARGEN) — это сервис семейства протоколов Интернет, определённый в 1983 году Джоном Постелом. Он предназначен для тестирования, отладки и измерений. Протокол используется редко из-за присущих ему недостатков, которые позволяют легко злоупотреблять им. Хост может подключиться к серверу, поддерживающему протокол генератора символов, через порт 19 протокола управления передачей (TCP) или протокола пользовательских датаграмм (UDP). После установления TCP-соединения сервер начинает отправлять произвольные символы подключающемуся хосту и продолжает это делать до тех пор, пока хост не закроет соединение. В UDP-реализации протокола сервер отправляет UDP-датаграмму, содержащую случайное количество (от 0 до 512) символов, каждый раз при получении датаграммы от подключающегося хоста. Все данные, полученные сервером, отбрасываются.

Приложения

Служба CHARGEN может использоваться как источник байтового потока для отладки TCP-сетевого кода с целью проверки корректности границ и управления буферами. Она также может служить источником универсальных данных для измерения пропускной способности и/или тонкой настройки QoS. Следует учитывать, включено ли аппаратное сжатие, поскольку выходные данные службы CHARGEN легко и эффективно сжимаются. Это сжатие может привести к тому, что тесты пропускной способности будут показывать размер данных после декомпрессии, а не фактический объем данных, переданных по сети.

Визуальная симуляция вывода

По соображениям безопасности, на большинстве современных машин следует отключать сервисы Telnet и CHARGEN. Ниже представлен скрипт bash для Linux, который имитирует визуальный вид службы CHARGEN в окне терминала. Скрипт можно остановить, нажав Ctrl + C. strg=""; for n in {32..126}; do c=`printf '%x' $n | xxd -r -p`; strg=${strg}${c}; done; strg=${strg}${strg}; n=0; while :; do m=$((n % 95)); echo "${strg:$m:72}"; n=$((n+1)); sleep 0.1; done;

Злоупотребление

Служба была использована злонамеренно для вывода из строя серверов доменных имен Microsoft (DNS) под управлением Windows NT 4.0, путем прямой передачи произвольных символов в порт прослушивания сервера DNS (telnet ntbox 19 | telnet ntbox 53). Однако, атака могла быть следствием некорректного управления буфером в службе DNS Microsoft, а не напрямую связана со службой CHARGEN. UDP CHARGEN обычно используется в атаках типа "отказ в обслуживании". Используя поддельный IP-адрес источника, злоумышленник может направить отраженный трафик с UDP CHARGEN-приложения на жертву. UDP CHARGEN отправляет от 200 до 1000 раз больше данных, чем получает, в зависимости от реализации. Это "умножение трафика" также привлекательно для злоумышленника, поскольку оно скрывает его IP-адрес от жертвы. CHARGEN широко использовался в сетевых принтерах. Поскольку прошивка принтеров редко обновлялась в старых моделях до того, как стали известны CHARGEN и другие уязвимости, до сих пор может существовать множество сетевых принтеров, поддерживающих этот протокол. Если они доступны из Интернета, они неизменно используются в качестве векторов для атак типа "отказ в обслуживании". Потенциальные злоумышленники часто сканируют сети в поисках источников UDP CHARGEN на порту 19. Настолько широко распространено наличие CHARGEN в принтерах, что некоторые трояны для распределенных атак типа "отказ в обслуживании" теперь используют порт 19 UDP для своего трафика. Предполагаемая цель – запутать следствие, заставить исследователей искать старые принтеры, а не скомпрометированные компьютеры.