Аудит безопасности роутера SKYWORTH GN542VF — взламываем пароль не выходя из веб-браузера!


Заводские пароли (пароли по умолчанию) это большая брешь в безопасности Интернета вещей (internet of things, IoT) в том числе роутеров, камер наблюдения и другого сетевого оборудования.

Если у устройств одного производителя одинаковые пароли, то эти пароли знают все. Атака на сетевые устройства может приводить к утечке данных и расширению области атаки.

Смотрите, например: Атака на устройства в локальной сети через уязвимый роутер

Производители роутеров это понимают и в связи с этим предпринимают разнообразные шаги, например, уникальный пароль каждого устройства, который, например, совпадал с частью MAC-адреса.

Некоторые устройства требуют сменить пароль при первом входе пользователя (владельцы таких устройств страдают не столько от атак, сколько от невозможности вспомнить пароль роутера спустя годы после того, как он установлен).

Вариант с уникальными паролями на основе части MAC-адреса является не особо удачным, поскольку атакующий нередко может видеть MAC-адрес устройства (в отличии от пользователя, который слабо понимает, что вообще происходит).

В роутере SKYWORTH GN542VF применён интересный подход:

  1. Пароли уникальны для всех роутеров
  2. Чтобы пользователи не терялись, пароль выводится прямо на странице входа — так пароль ведь точно не потеряешь, правда?
  3. Чтобы посторонние не могли увидеть пароль, он показывается только при подключении к роутеру из локальной сети
  4. Даже если злоумышленник каким-либо образом узнал пароль и пытается его ввести при подключении из Глобальной сети, роутер не принимает его и показывает сообщение об ошибке

Безопасно и продуманно, не так ли?

Давайте убедимся в этом на практике.

В веб-браузере я набираю IP адрес роутера 192.168.1.1. Мне открывается страница входа на которой показан пароль:

Ввожу имя пользователя (admin) и пароль

и попадаю в админку роутера:

В информации о WAN можно увидеть, что в локальной сети Интернет-провайдера роутеру присвоен IP адрес 10.241.59.196, а шлюзом по умолчанию является 10.241.56.1.

Можно предположить, что в данной локальной сети имеются и другие роутеры. Но пока просто откроем в веб-браузере веб-интерфейс роутера по адресу 10.241.59.196.


Уже даже в этом случае пароль не выводится — всё довольно безопасно.

Быстрый взлом роутера SKYWORTH GN542VF

Для чистоты полученных результатов я буду проводить наш небольшой аудит безопасности не на своём локальном роутере, а на одном из случайных роутеров которые я нашёл в диапазоне подсети 10.241.0.0/16.

К примеру, попробуем открыть веб-панель роутера на IP адресе 10.241.114.14:

Пароль не показывается. Но заглянем в исходный код страницы (HTML разметку):

Среди прочего там есть такой фрагмент JavaScript кода:

	if( AccessIP != "N/A" && (LanIP != "N/A" || Ipv6LanIP != "N/A") )
	{
		if((LanIP != AccessIP) && (Ipv6LanIP != AccessIP) ){
			document.getElementById('default_password_tr').style.display="none";
		}
	}

То есть с помощью JavaScript кода скрывается элемент с идентификатором default_password_tr.

Любые защиты и проверки, выполняемые на стороне пользователя, заведомо следуют считать ненадёжными — на своей стороне пользователь может как угодно манипулировать данными — подменять значения переменных JavaScript, отключать блоки кода и модифицировать JavaScript и HTML любым способом.

Но возможно, это не несёт в себе никакой опасности — проверим это.

Далее я буду выполнять действия в веб-браузере в Chrome Developer Tools (или просто DevTools). Если вы не знаете что это такое, то рекомендуются для ознакомления следующие статьи:


Чтобы открыть инструменты разработчика нажмите F12. Чтобы попасть на вкладку «Elements» и сразу перейти к интересующему фрагменту кода кликните правой кнопкой мыши на странице по интересующему вас элементу и выберите «Просмотреть код» (в английской версии это называется Inspect.

Находим интересующий нас фрагмент кода

и подменяем «style="display: none;"» на «style="display: block;"».


И мы сразу получаем пароль для входа в административную панель роутера:

Это уже плохо.

Но возможно разработчики предусмотрели дополнительную защиту и не позволят авторизоваться, поскольку я пытаюсь выполнить вход не из локальной сети.

Ввожу логин («admin») и пароль и получаю следующее сообщение:

Sorry, remote access not allowed!

То есть удалённый доступ не разрешён. Но я вспомнил, что эту фразу я уже видел в HTML коде веб-страницы, давайте найдём фрагмент JavaScript кода и изучим его внимательнее:

      		if( AccessIP != "N/A" && (LanIP != "N/A" || Ipv6LanIP != "N/A") )
			{
				if((LanIP != AccessIP) && (Ipv6LanIP != AccessIP) && remoteAccess == "1"){
					var str = 'Sorry,  remote access not allowed!';
					document.write(str);
				}
			}

Суть в следующем, что если IP адрес не является локальным, то просто выводится данное сообщение. И всё… То есть больше не делается ничего.

Ещё раз заострю на это внимание — по логике работы программы вход с удалённого IP адреса должен быть аннулирован, даже если введены верные логин и пароль. Если эта проверка и аннулирование выполняется на стороне пользователя (в JavaScript), то такую проверку можно сломать/отключить. Но конкретно в данном случае не делается просто ничего, кроме вывода сообщения.

У меня появилась теория, что если введены правильные логин и пароль, то возможно вход в административную панель роутера всё-таки выполнен, не смотря на показанную строку о запрете удалённого входа?

Для проверки моей теории, в адресной строке веб-браузера я сокращаю URL с http://10.241.114.14/cgi-bin/index2.asp до http://10.241.114.14

и попадаю в админку!


Да, роутер успешно аутентифицировал пользователя с удалённого IP адреса и вместо аннулирования его входа просто показал сообщение уже выполнившему вход пользователю о том, что удалённый доступ не разрешён.

Заключение

В этом совсем небольшом примере мы взломали пароль администратора роутера SKYWORTH GN542VF без каких-либо специализированных программных инструментов, практически голыми руками. Нам хватило возможностей веб-браузера.

Не смотря на продуманность алгоритма, из-за неудачной реализации защита роутера от удалённого входа по заводскому паролю нивелирована.

Даже если бы защита была лучше проработана в JavaScript коде, то её можно было бы обойти или отключить. Любые проверки и реализации алгоритмов безопасности на стороне пользователя заведомо должны считаться ненадёжными (фактически, отсутствующими). В данном случае проверки IP адреса, запрет на удалённый вход и запрет на показ пароля по умолчанию должны были бы выполняться внутри роутера (на уровне веб-сервера роутера или внутреннего ПО).


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован.