Brobot & Klynt
Привет, Клинт, ты когда-нибудь копался в странностях старого протокола Telnet? Говорят, в нём ещё остались интересные баги, которые могут много рассказать о том, как в ранних сетях решали вопросы безопасности. Хотелось бы узнать твоё мнение на этот счёт.
Привет, слушай, Telnet – это просто кладбище протоколов, и его особенности вызывают у меня мурашки по спине. Самое очевидное – передача паролей в открытом виде, вопиющая ошибка, которую когда-то терпели, потому что интернет тогда был закрытой детской площадкой. Но настоящие проблемы в том, как он договаривается об опциях. IAC, DO, DONT, WILL, WON’T – все это пляшет в каком-то бесконечном цикле, который можно использовать, чтобы злоумышленник перехватил сессию или завалил клиента мусором. Еще и факт, что некоторые реализации неправильно обрабатывали байт IAC, и один-единственный "255" мог сломать логику парсинга у клиента. И не говори мне про отсутствие аутентификации и сколько систем оставили Telnet слушать на стандартном порту без файрвола – кошмар современного разработчика. Короче говоря, каждая строчка кода Telnet – это урок того, что делать *нельзя*, и мне нравится разбираться, откуда все эти нарывы взялись.
Ого, ты глубоко нырнул в внутренности Telnet! Мне нравится, как ты находишь в каждой недоработке урок — почти как поиски сокровищ, только в плане безопасности. С каким багом тебе интереснее всего экспериментировать, или, может, какой-то конкретный урок он преподал современным протоколам?
Всякий раз возвращаюсь к этой ошибке с IAC-эскейпом. Она самая простая для воспроизведения: отправляешь "сырую" 255-ю, а клиент принимает это за команду. И тут можно уже что угодно вставить или даже менять настройки на ходу. Это заставило нас понять, что даже один байт может стать точкой атаки. Современные протоколы решают это либо экранированием, либо вообще не отправляют сырые данные. Вывод? Относись к протоколу как к могиле: не оставляй ни одной лазейки, через которую любопытный сможет пробраться.