26 апреля, 2024

Перенаправление локальных портов через SSH для перехода в сети с ограниченным доступом

Содержание:

SSH — это мощный инструмент, который можно использовать большим количеством способов, и не только для входа на сервер. Этот протокол, который расшифровывается как Secure Shell, предоставляет возможности X11-forwarding (удаленный запуск программ с графическим интерфейсом), переадресацию (перенаправление) портов, защищенную передачу файлов и многое другое. Использование переадресации портов через SSH на скомпрометированном хосте, подключенном к сети с ограниченным доступом, позволяет атакующему получить доступ к узлам в такой сети или непосредственно зайти в сеть с ограниченным доступом.

В этой статье мы рассмотрим один из вариантов перенаправления портов через SSH — перенаправление локальных портов. Поскольку понятие «перенаправление портов» выглядит несколько туманным, то в первую очередь мы хотели бы немного поговорить о самой идее перенаправления (переадресации) портов.

Почему перенаправление портов имеет значение

Когда мы говорим о перенаправлении портов, то мы обычно думаем об этом с точки зрения и в терминах маршрутизатора. При обычной настройке домашней сети маршрутизатор подключается к глобальной сети (WAN) и у него есть IP-адрес, назначенный Интернет-провайдером. С другой стороны у маршрутизатора есть локальная сеть (LAN). IP-адреса хостам внутри локальной сети обычно назначаются маршрутизатором.

В большинстве домашних настроек маршрутизаторы действуют также и в роли брандмауэра, пропуская исходящие TCP-соединения и убивая входящие. Если вы хотите получить доступ к службе на компьютере, находящемся внутри вашей локальной сети, то вам необходимо настроить маршрутизатор для перенаправления соединений на этом порту на ваш компьютер. Это означает, что весь интернет будет иметь доступ к этой службе в вашей внутренней (или локальной) сети. Маршрутизатор будет принимать входящий трафик, предназначенный вашей службе, и направлять его прямо на ваш компьютер.

Давайте немного поразмышляем об этом. Представим, что сеть несколько больше. У нас может быть публичная Wi-Fi сеть для использования кем угодно и другая сеть — для сотрудников. Все хосты будут подключены к шлюзу и сегментированы сетью. Как и в примере с нашим домашним компьютером, у нас есть одно WAN-соединение, но, в то же время, у нас есть две LAN. Маршрутизатор не позволяет трафику из общедоступной сети получать доступ к сети сотрудников.

Когда имеет смысл использовать перенаправление портов через SSH

Если у вас есть контроль над маршрутизатором с правами администратора, то вы можете настроить его для перенаправления трафика в сеть для сотрудников. Но что, если у вас нет прав администратора? Возможно, у вас есть низкоуровневая учетная запись пользователя, и вы можете использовать SSH, но вы не можете получить доступ к панели администратора, соответственно, не можете изменять какие-либо настройки.

Именно здесь можно использовать перенаправление портов через SSH. Мы можем использовать его для перенаправления нашего трафика в сеть, доступ в которую мы при нормальных условиях не можем получить, тем самым как бы «сворачивая» в эту сеть. Это не просто работает на маршрутизаторах, это работает на любом узле с включенным SSH, у которого есть доступ к двум или более внутренним сетям.

Читать также:  Основы Linux .Часть 14 ( MySQL )

Давайте посмотрим, как это работает

По одному из возможных сценариев мы подключаемся к публичному периметру сети (демилитаризованной зоне или DMZ) в местном университете. Через перечисление мы обнаружили, что брандмауэр работает с SSH с крайне слабыми учетными данными. Мы пришли из DMZ, и наша цель — внутренняя сеть (интрасеть). Единственное, что стоит на нашем пути, это брандмауэр, с которым мы можем войти в систему через SSH, но у нашей захваченной учетной записи недостаточно привилегий для изменения любых параметров.

Брандмауэр защищает интрасеть (нашу цель — машины университетских сотрудников) от внешнего вредоносного трафика, но позволяет обеим сетям получать доступ к Интернету. Мы не можем подключиться к хостам в локальной сети из DMZ, и, исходя из простоты доступа к брандмауэру, мы подозреваем, что хосты в локальной сети невероятно доступны. Слабые учетные данные в сочетании с большим количеством администраторов, не рассматривающих свои внутренние сети как враждебные, означает, что безопасность на компьютерах в локальной сети чуть больше, чем никакая.

Поскольку это внутренняя сеть сотрудников, она, вероятно, содержит или имеет доступ к конфиденциальной информации. Если мы проводим тест на проникновение в качестве «белой шляпы», то было бы здорово включить эту конфиденциальную информацию в наш отчет. Если мы «черные» или «серые», то мы могли бы выяснить, как получить доступ к этой информации, изменить ее или удалить. Вопрос в том, как нам получить доступ?

Чтобы получить доступ к внутренней сети, нам нужно будет сделать «финт ушами» и «свернуть» в нее, т.к. мы не можем напрямую подключиться к ней. Именно здесь удобна переадресация портов через SSH.

Шаг 1. Исходное состояние

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

Наш атакующий компьютер находится в сети 192.168.1.0/24, представляющей сеть DMZ. Брандмауэр доступен как шлюз из DMZ в той же сети. Он также доступен как шлюз из внутренней сети, который находится в диапазоне адресов 192.168.56.0/24. Эти адреса описаны с использованием CIDR-нотации.

Целью здесь является обнаружение и атака хостов, находящихся во внутренней сети, из сети DMZ. Поскольку мы не можем напрямую подключиться к хосту во внутренней сети, мы будем использовать службу SSH брандмауэра DMZ, для перенаправления нашего трафика во внутреннюю сеть.

Читать также:  Виды атак на Wi-Fi

Многие новички не знают о полном наборе функций SSH. Без поворота во внутреннюю сеть атакующий будет полностью зависеть от того набора инструментов, который имеется на скомпрометированном брандмауэре. Что, скорее всего, дает крайне ограниченные возможности. Иногда, если повезет, вы получите Nmap. Атака может быть выполнена и таким образом, но гораздо проще работать, когда у нас есть большой набор инструментов, подобно тому, который включен в дистрибутив Kali Linux. Такие инструменты, как Metasploit, действительно облегчают работу.

Чтобы смоделировать такое первоначальное положение, мы настроили виртуальную машину на скомпрометированном хосте с адаптером только для хоста. Это делает жертву недоступной для трафика в сети DMZ. Если вы хотите попробовать это дома, просто создайте в VirtualBox виртуальную машину Linux с включенным SSH и настройте сетевой адаптер только на хост. Операционная система хоста должна иметь SSH, а также вам понадобится другой компьютер для доступа к службе SSH в системе хоста.

Когда конфигурация будет завершена, у нас должна получиться система, которая выглядит так:

Что происходит, когда атакующий компьютер пытается пропинговать гостевой компьютер? Мы не можем направить трафик на машину-жертву, но можем получить доступ к главной машине через SSH, и это все, что нам нужно. На скриншоте мы видим, что атакующий хост не может перейти в сеть vboxnet0.

 

Шаг 2. Сбор информации

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

ssh mailto:user@victimmachine"user@victimmachine

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

Шаг 3. Локальное перенаправление портов

Используя наше SSH-соединение с брандмауэром, рекомендуется выполнить некоторую сетевую проверку. Вам нужно узнать, какие хосты активны во внутренней сети. Если вам повезет, то Nmap будет установлен на уязвимом брандмауэре, иначе придется делать это руками. Чтобы сделать это вручную нужно написать ping-скрипт на bash (который не заметит машины с включенной блокировкой ping). В этом примере в сети работает только одна машина, а 80-й порт (HTTP) открыт.

Веб-приложения часто представляют собой отличную цель для атаки. В зависимости от владельца процесса веб-приложение может вернуть шел с низким уровнем прав, а может вернуть шел и с правами администратора. За исключением тех случаев, когда у нас ограниченный объем информации. Мы знаем, что на хосте во внутренней сети работает веб-сервер, но не знаем, что это за сервер.

Читать также:  Как скрыть порт от сканирования?

Чтобы узнать больше об этом веб-приложении, мы настроим перенаправление локального порта на это приложение, при помощи следующей команды:

ssh -L 8080:internalTarget:80 user@medisedMachine

Параметр -L указывает, что соединения с данным TCP-портом на локальном хосте должны быть перенаправлены на данный удаленный хост и порт. Это позволяет нам получить доступ к внутренней сети через скомпрометированный брандмауэр.

В нашем случае внутренняя сеть — все, что находится за интерфейсом vboxnet0. Технически эта команда создает SSH-туннель, используя ваш локальный порт 8080 для подключения через брандмауэр к целевой машине во внутренней сети. SSH будет прослушивать локальный порт 8080 для любых подключений. Когда он получает соединение, он будет туннелировать данные на SSH-сервер, в данном случае, на наш взломанный брандмауэр. Затем скомпрометированный брандмауэр подключается к целевому серверу, а порт возвращает данные обратно через наш SSH-туннель.

При выполнении этой команды вы получаете стандартное интерактивное SSH-соединение с брандмауэром, а также переадресацию портов. Если вам не нужен шел, то вы можете изменить аргумент в этой команде на -NTL. Аргумент N указывает SSH не выполнять удаленную команду, а аргумент T говорит SSH отключить распределение псевдотерминалов.

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

Конечно, мы не ограничиваемся перенаправлением HTTP. Мы можем перенаправить любой порт на внутренней машине, включая SSH, если мы знаем порт службы, трафик с которой мы пытаемся перенаправлять.

Это так же просто, как изменение номера порта в нашей SSH-команде. Ниже мы перенаправляем SSH-службу на машине-жертве на наш локальный порт 8080. Это позволит нам использовать брутфорс для взлома SSH или использовать учетные данные для входа в систему, если они у нас есть.

ssh -L 8080:internalTarget:22 user@compromisedMachine

Локальное перенаправление портов — отличный способ войти во внутренние сети. Это также отличный способ обойти сетевые ограничения, например, блокировку веб-трафика! Некоторые сети, например, могут быть заблокированы и будут пропускать трафик только через несколько ограниченных портов. В качестве дополнительного бонуса весь трафик, который мы сгенерируем с нашего компьютера на SSH-сервер, будет зашифрован.

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

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