ФАК по CISCO                                                                           Вернуться обратно

Защита маршрутизатора средствами CISCO IOS



                                  Содержание.
Введение                                                           
Программное обеспечение маршрутизаторов Cisco            
Основные интерфейсы                                                            
Консольные интерфейсы                                                        
Решения Cisco Systems для обеспечения сетевой безопасности
Пользовательский и привилегированный уровни доступа
Парольная защита                                                  
Ограничение доступа к маршрутизатору     

                                  Введение.
Компания Cisco Systems является абсолютным лидером на рынке маршрутизаторов
(занимает около 70% рынка; на втором месте Juniper c 21%). Cisco предлагает
модели от простейших маршрутизаторов для малого офиса (серия 800) до
мультигигабитных устройств, размещаемых в ядре Интернета (серия 12000).

Кроме маршрутизаторов Cisco известна коммутаторами ЛВС марки Catalyst,
межсетевыми экранами марки PIX, продуктами для IP-телефонии, продуктами
марки Aironet для организации беспроводных сетей и др. С учетом всей
номенклатуры выпускаемой продукции Cisco Systems является лидером мирового
рынка оборудования связи (14%; на втором месте Siemens с 11,7%).

Все модели, кроме серии 800, обладают той или иной степенью модульности, то
есть, позволяют устанавливать сменные интерфейсные модули и
специализированные вычислительные модули (для шифрования или обработки
голоса). Соответственно, цена устройства сильно зависит от комплектации.
Широко распространены также устройства серий 2500 и 4000, но в настоящее
время они сняты с производства (за исключением моделей 2509 и 2511). На
смену 2500 пришли маршрутизаторы серий 1700 и 2600, а на смену 4000 - 3600.

Программное обеспечение маршрутизаторов Cisco.  IOS

Все маршрутизаторы Cisco работают под управлением операционной системы
Cisco IOS. Для каждой модели маршрутизатора предлагаются несколько
разновидностей IOS.

Образы IOS различаются по версии. Cisco использует достаточно сложную
систему идентификации версий, ознакомиться с которой можно по этой ссылке.

Для студентов достаточно будет следующего понимания: номер версии Cisco IOS
состоит из трех частей:

Номер основного релиза (major release; в настоящее время обычно встречаются
основные релизы 11.3, 12.0, 12.1, 12.2).

Номер обновления (maintenance release), начиная с 1. Обновления выпускаются
каждые 8 недель, в них включаются исправления ошибок. Набор функциональных
возможностей релиза не изменяется.


Номер выпуска (software rebuild), обозначается буквой, начиная с а. Выпуски
предназначены для экстренного исправления ошибок, которое не может ждать до
следующего обновления.

Таким образом, IOS 12.2(6с) - это основной релиз 12.2, обновление 6, выпуск c.

Каждая версия характеризуется степенью зрелости, как правило это LD
(Limited Deployment) или GD (General Deployment). LD подразумевает меньший
объем тестирования и опыта эксплуатации по сравнению с GD.

Кроме основного ряда IOS существует экспериментальный ряд, так называемый T-
train (или, официально, Technology Releases). Именно в T-train включаются
новые возможности и проходят "обкатку" до того, как будут введены в
основной ряд. Нумерация версий ряда Т строится аналогично основному ряду
(только выпуски нумеруются цифрами):

IOS 12.1(6)T2 - этот T-train базируется на основном релизе 12.1. Это второй
выпуск шестого обновления указанного T-train.

Со временем из T-train получается следующий основной релиз (так например,
12.0(6)Т переходит в 12.1, и в тот же момент образуется ряд 12.1Т для
добавления новых возможностей). Зрелость T-train характеризуется как ED
(Early Deployment), что означает, что программное обеспечение не
рекомендуется применять на ответственных участках, если аналогичную
функциональность можно найти в версиях LD или GD.

Не всякая версия может быть установлена на конкретный маршрутизатор в
конретной конфигурации; предварительно следует проконсультироваться у
специалиста компании-реселлера.

Кроме версий, образы IOS различаются по заложенной в них функциональности.
Функциональные возможности группируются в наборы, называемые feature sets.
Минимальная функциональность содержится в IP only feature set (или просто
"IP"); она включает в себя, в частности, поддержку IP-интерфейсов,
статическую и динамическую IP-маршрутизацию, поддержку мониторинга и
управления по SNMP. IP Plus feature set включает дополнительные возможности
(например, поддержку технологии VoIP для передачи голоса). Также имеются
feature sets с функциями межсетевого экрана (FW, Firewall), системы
обнаружения атак (IDS), криптозащиты трафика (IPSEC) и др., в том числе
имеются и комбинированные образы, например IP Plus FW IPSEC. Бесплатно с
маршрутизатором поставляется только IP only feature set, остальные образы
необходимо покупать. Для определения того, в каком feature set имеется
требуемая вам возможность, следует обратиться к специалисту компании-
реселлера.

Таким образом, конкретный образ IOS идентифицируется тремя параметрами:

аппаратная платформа, для которой он предназначен,
feature set,
версия.

Пример имени файла с образом IOS: c3620-is-mz.122-13a.bin. Это IOS IP Plus
12.2(13a) для Cisco 3620. Feature set (IP Plus) идентифицируется символами
"is", следующими за обозначением платформы. Другие примеры feature sets:
"i" - IP, "js" - Enterprise Plus, "io" - IP FW. Подобная кодировка
справедлива для серий 2600, 3600; для других платформ коды feature set
могут отличаться.

Буквы "mz" означают, что IOS при запуске загружается в оперативную память
(m) и что в файле образ хранится в сжатом виде (z).


Основные интерфейсы.

В каждом маршрутизаторе имеется некоторое число физических интерфейсов.
Наиболее распространенными типами интерфейсов являются:
Ethernet/FastEthernet и последовательные интерфейсы (Serial).
Последовательные интерфейсы по своему аппаратному исполнению бывают
синхронные, синхронно-асинхронные (режим выбирается командой конфигурации)
и асинхронные (Async). Протоколы физического уровня последовательных
интерфейсов: V.35 (чаще всего используется на синхронных линиях), RS-232
(чаще всего используется на асинхронных линиях) и другие.

Каждому интерфейсу соответствует разъем на корпусе маршрутизатора.
Интерфейсы Ethernet на витой паре обычно имеют разъем RJ-45, но на
некоторых моделях (серия 2500) встречаются разъемы AUI (DB-15), которые
требуют подключения внешнего трансивера, реализующего тот или иной
интерфейс физического уровня Ethernet.

Последовательные интерфейсы чаще всего снабжаются фирменными разъемами DB-
60 F или SmartSerial F (последний более компактен). Для того, чтобы
подключить интерфейс к внешнему оборудованию, необходимо использовать
фирменный кабель - свой для каждого протокола физического уровня. Фирменный
кабель имеет с одной стороны разъем DB-60 M, а с другой стороны - разъем
выбранного стандарта физического уровня для устройства DTE или DCE. Таким
образом, кабель выполняет следующие задачи:


путем замыкания специальных контактов в разъеме DB-60 сигнализирует
маршрутизатору, какой выбран протокол физического уровня, и каким типом
устройства является маршрутизатор: DTE или DCE;


является переходником с универсального разъема DB-60 на стандартный разъем
выбранного протокола физического уровня.


Примечание. В терминологии Cisco кабель DTE подключается к устройству DCE,
а кабель DCE - к устройству DTE; то есть тип кабеля указывает, какого вида
устройством является сам маршрутизатор, а не тот прибор, с которым его
соединяет кабель.


Обычно кабели DTE используются для подключения к маршрутизатору модемов, а
связка двух кабелей DTE-DCE используется для соединения двух
маршрутизаторов напрямую (back-to-back), при этом, естественно, один из
маршрутизаторов будет в роли DCE. На рисунке 2.2 приведен пример
сипользования кабедей для соединения устройств через интерфейс V.35
(стандартный разъем M.34).


Кроме универсальных последовательных интерфейсов, рассматривавшихся выше,
существуют специализированные последовательные интерфейсы, реализованные
вместе с каналообразующим оборудованием: контроллеры E1, модули ISDN BRI,
модули DSL, встроенные аналоговые или ISDN-модемы. В этом случае
последовательный интерфейс находится внутри маршрутизатора, "между"
каналообразующим оборудованием и ядром маршрутизатора. Для подключения
линий связи к вышеуказанному каналообразующему оборудованию обычно
используется разъем RJ-45 (для подключения линий к аналоговым модемам - RJ-11).


Консольные интерфейсы.

Два специальных последовательных интерефейса - CON и AUX - предназначены
для доступа с терминала администратора к маршрутизатору для настройки и
управления. Интерфейс CON подключается напосредственно к COM-порту
компьютера администратора. К интерфейсу AUX подключается модем, что дает
возможность удаленного управления маршрутизатором путем дозвона на модем.
Интерфейс AUX может быть использован и как обычный последовательный
интерфейс, через который производится маршрутизация дейтаграмм, но обрабока
пакетов на этом интерфейсе требует большой доли процессорного времени
(каждый полученный байт вызывает прерывание), а скорость ограничена 115
кбит/с. Интерфейс CON используется только для терминального доступа к
маршрутизатору, параметры COM-порта должны быть 9600-8-N-1.


Обычно разъемы CON и AUX выполнены в формате RJ-45. Подключение к ним
производится с помощью специального кабеля RJ45-RJ45, прилагаемого к
маршрутизатору. Одним концом кабель включается в CON или AUX, а на другой
надевается переходник. Для подключения порта CON к компьютеру на кабель
надевается переходник, помеченный как "TERMINAL", а для подключения порта
AUX к модему со стороны модема используется переходник "MODEM".



Виртуальные интерфейсы.

Наряду с физическими интерфейсами в маршрутизаторе могут быть организованы
виртуальные интерфейсы: Loopback, Null, Dialer, Virtual-Template,
Multilink, BVI и др.

Loopback и Null вообще никак не связаны с физическими интерфейсами.

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

интерфейс всегда активен (в отличие от физических интерфейсов, где,
например, обрыв кабеля переводит интерфейс в отключенное состояние);

как и в случае физических интерфейсов, пакеты, адресованные на этот
интерфейс, считаются адресованными маршрутизатору, а воображаемая IP-сеть,
к которой он "подсоединен" (согласно своим адресу и маске), считается
непосредственно подсоединенной к маршрутизатору;

пакеты, маршрутизированные через такой интерфейс (то есть, направленные к
узлам воображаемой сети, к которой подсоединен Loopback), уничтожаются.


Применения интерфейсов Loopback будут рассмотрены по ходу лабораторного
практикума.

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

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



Решения Cisco Systems для обеспечения сетевой безопасности.

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

Для обеспечения защиты сетевых соеднений: Network based IPSec VPN solution
for Service Providers, VPN AIM Module for Cisco 2600XM, VAM2 Card for
7200s, VPN SM for Cat6500/7600, VPN 3000 Concentrator v4.0, AES Module for
VPN 3000, VPN Client v.4.0.

Для управления системой безопасности: Cisco IOS AutoSecure, Cisco Security
Device Manager v1.0 , Cisco ISC v3.0, CiscoWorks VMS v2.2, CiscoWorks
Security Information Management Solution (SIMS) v3.1.

Для обнаружения и предотвращения сетевых атак и вторжений: IDS 4215 Sensor,
IDS Network Module for Cisco 2600XM, 3660, 3700 series, Cisco Security
Agents v4.0, Cisco CSS 11501S and WebNS v7.2 SSL s/w ,Cisco ACNS Software
version 5.0.3 with Websense Content Filtering On-Box.

Для достоверной идентификации сторон, участвующих в защищенном обмене
информацией: Cisco IOS software Identity Enhancements.

Network based IPSec VPN solution for Service Providers позволяет
поставщикам услуг доступа управлять распределенными сетями на базе MPLS-
VPN, IP-VPN и FR/ATM-VPN при помощи одного интегрированного пакета
управления.

VPN AIM Module for Cisco 2600XM (AIM-VPN/BPII) предоставляет маршрутизатору
функции аппаратной шифрации с поддержкой алгоритмов DES, 3DES и AES и
обеспечивает в два раза более высокую производительность по сравнению с
предыдущим модулем ускорения шифрации (AIM-VPN/BP) - до 22 Мбит/сек.

VAM2 Card for Cisco 7200 - модуль аппаратного ускорения шифрации для
маршрутизаторов серии Cisco 7200. Один модуль обеспечивает
производительность шифрации до 260 Мбит/сек, два модуля - до 460 Мбит/сек.

VPN SM for Cat6500/7600 - сервисный модуль аппаратной шифрации для
коммутаторов Catalyst 6500/7600. Обеспечивая производительность до 14
Гбит/сек он также поддерживает расширенную функциональность - поддержку и
ускорение GRE-туннелей, полнофункциональне резервирование IPSec-соединений
(stateful failover), IPSec Remote Access и возможность подключения WAN-
интерфейсов.

VPN 3000 Concentrator v4.0 - новое ПО для концентратора VPN-соединений.
Появились новые диагностические функции, поддержка авторизации
пользователей через Kerberos/Active Directory, LAN-to-LAN backup для
резервирования межсетевых соединений. Также появилась поддержка нового
модуля шифрации AES - SEP-E, поддерживающего до 10000 одновременных
соединений DES/3DES/AES.

VPN Client v.4.0 - новая версия ПО для клиентских рабочих станций,
работающих через VPN. Интеграция с Cisco Security Agent предоставляет
пользователю функции firewall, удобный и простой графический интерфейс
облегчает настройку и управление, поддержка приложений, работающих с
протоколом H.323 позволяет дистанционно общаться, не беспокоясь о
защищенности соединения.

Cisco IOS AutoSecure - функция интерфейса IOS, позволяющая быстро
произвести настройку функций безопасности, отключить редко используемые
сетевые сервисы и разрешить доступ и управление только для авторизованных
пользователей.

Cisco Security Device Manager v1.0 - ПО управления сетевой безопасностью,
доступное на всех моделях маршрутизаторов доступа, от Cisco 830 до Cisco
3700, позволяющее в графическом режиме, удаленно с любой раюбочей станции
(через веб-браузер) изменять любые настройки безопасности на
маршрутизаторе. Встроенный алгоритм аудита предупредит пользователя о
потенциально опасных настройках и предложит варианты решения.

Cisco ISC v3.0 - Cisco IP Solution Center позволяет определять политики
безопасности для всей сети, скрывая подробности реализации политик на
конкретных устройствах. Политики позволяют учитывать схемы реализации
механизмов LAN-to-LAN VPN, Remote Access VPN, EZ VPN и DMVPN, Firewall, NAT
и QoS, а ISC реализует их на всех сетевых устройствах, работающих с
механизмами безопасности (IOS, PIX, VPN3K Concentrator и т.п.).

CiscoWorks VPN/Security management Solution 2.2 централизует функции
управления, мониторинга, учета, диагностики и обновления для ПО всех
сетевых устройств Cisco, реализующих функции сетевой безопасности.
CiscoWorks Security Information Management Solution (SIMS) v3.1 позволяет
управлять безопасностью в сетях, использующих оборудование и ПО различных
производителей.

IDS 4215 Sensor - отдельное устройство в стоечном исполнении, высотой 1 RU,
позволяет организовывать до 5 сенсоров с общей пропускной способностью до
80 Мбит/сек, которые способны прослушивать сетевой трафик, отслеживать
потенциально опасную активность, предпринимать действия по предотвращению и
остановке сетевых атак.

IDS Network Module for Cisco 2600XM, 3660, 3700 series - аналогичное
устройство, но предназначенное для слежения за трафиком на самом периметре
сети - на маршрутизаторе доступа. Обеспечивая производительность до 45
Мбит/сек, модуль использует то же ПО, что и IDS sensor, что позволяет
строить гомогенную инфраструктуру безопасности, с единым централизованным
интерфейсом управления.

Cisco Security Agents v4.0 - "последняя линия" сетевой обороны, ПО,
устанавливаемое на рабочие станции и серверы. Они отслеживают попытки
несанкционированного доступа к операционной системе, а также следят за
активностью приложений, в случае некорректных действий или нестабильной
работы они могут остановить или перезапустить приложение или сервис.
Оповещения о подозрительных событиях пересылаются и накапливаются на
центральной консоли управления.

Cisco CSS 11500 Series Content Services Switch - платформа управления
трафиком на уровнях 4-7, позволяющая определять правила распределения
трафика, его балансировки и резервирования.

Cisco ACNS Software version 5.0.3 with Websense Content Filtering On-Box -
версия 4 этого продукта работала как двухуровневая система, где модуль
фильтрации размещался на устройствах Cisco Content Engine, а набор шаблонов
WebSense для фильтрации - на внешнем сервере. Новая версия совмещает оба
элемента на одной платформе (Content Engine).

Cisco IOS software Identity Enhancements - новые функции IOS обеспечивают
надежную идентификацию устройств и пользователей, участвующих в обмене
информацией по защищенным каналам. Поддержка инфраструктуры PKI и
интеграция с функциями AAA на серверах, маршрутизаторах и концентраторах
доступа облегчают идентификацию в распределенной сети с использованием
цифровых сертификатов и подписей. Secure RSA private key предотвращает
использование украденных маршрутизаторов - в случае попытки вскрытия пароля
приватные ключи маршрутизатора уничтожаются. N-tier CA Chaining позволяет
отследить цепочку доверенных сертификатов, начиная с ближайшего и
заканчивая центральным (root) certificate authority. Authentication Proxy
проверяет права пользователя перед тем как выпустить пользователя за
пределы сети. Secure ARP - связывает MAC и IP-адреса устройств, не позволяя
подменить одно из устройств в процессе передачи данных. Поддержка 802.1X
требует авторизации пользователя перед тем как пустить его трафик в сеть.



Пользовательский и привилегированный уровни доступа.



Cisco IOS для конфигурации маршрутизатора поддерживает интерфейс командной
строки, работать с которым можно с терминала, подключенного к
маршрутизатору через консольный порт (Console port) или с помощью
удаленного доступа по модему и telnet - соединения по сети. Сеанс командной
строки называется EXEC-сессией.


В целях безопасности Cisco IOS обеспечивает два уровня доступа к интерфейсу
командной строки: пользовательский и привилегированный. Пользовательский
уровень называется user EXEC режим, а привилегированный privileged EXEC
режим.

Предусмотрено 16 уровней привилегий: от 0 до 15. На нулевом уровне доступно
всего пять команд: disable, enable, exit, help, logout. На уровне 15
доступны все возможные команды.


Пользовательский режим


Вид командной строки имеет вид Router>

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


Router>enable 7


Команды enable и enable 15 являются аналогичными и приводят пользователя на
привилегированный уровень.


Привилегированный режим


Вид командной строки в имеет вид Router#

Набор привилегированных команд устанавливает параметры работы системы.
Пользователь имеет доступ к командам глобального конфигурирования и
специальным конфигурационным режимам.


Возможности пользовательского режима с первым уровнем привилегий достаточно
широкие. Из этого режима возможно выполнение "опасных" команд, таких как
telnet, connect, tunnel, login и совсем не нужных для некоторых
пользователей команд traceroute, enable, mstat, mrinfo, а также команд
группы show: show hosts, show versions, show users, show flash: и многие
другие.


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


1. Создадим пользователя cook с нулевым уровнем привилегий


Router(config)#username cook privilege 0 password 7 044D0908


2. Работать это будет только тогда, когда прописать следующее


Router(config)#aaa new-model

Router(config)#aaa authorization exec default local none


После регистрации пользователь с именем cook по команде ? (список доступных
команд) увидит перечень:


Router>?


Exec commands:


     <1-99>   Session number to resume


     disable  Turn off privileged commands


     enable   Turn on privileged commands


     exit     Exit from the EXEC


     help     Description of the interactive help system


     logout   Exit from the EXEC



Router>


Команду enable переведем на уровень выше (на уровень 1), а выполнение
команды telnet разрешим для нулевого уровня


Router(config)#privilege exec level 1 enable

Router(config)#privilege exec level 0 telnet


К данным командам действует некоторое исключение - их действие нельзя
отменить при помощи стандартной команды no. Этот вариант здесь не проходит.


Router(config)#no privilege exec level 1 enable

Router(config)#no privilege exec level 0 telnet


Для отмены действия этих команд необходимо ввести следующие команды:


Router(config)#privilege exec reset enable

Router(config)#privilege exec reset telnet


Сейчас после регистрации пользователь cook по команде ? увидит следующее:


Router>?


Exec commands:


     <1-99>   Session number to resume


     disable  Turn off privileged commands


     exit     Exit from the EXEC


     help     Description of the interactive help system


     logout   Exit from the EXEC


     telnet   Open a telnet connection



Router>


Проделав все операции, получили пользователя с заранее заданными
возможностями.


Существует такой тип пользователей, для которых необходимо
зарегистрироваться на маршрутизаторе и выполнить одну единственную команду
(например, show users). Для этого можно завести на маршрутизаторе
пользователя с входом без пароля и с выполнением автокоманды.


Router(config)#username dream nopassword autocommand show users


После ввода имени пользователя dream на экран выдается информация о
присутствующих в данный момент на маршрутизаторе пользователях.



Парольная защита.



В соответствии с имеющимися пользовательским и привилегированным уровнями
доступа существует два вида паролей: username password и enable secret (или
enable password). Оба типа этих паролей могут иметь длину до 25 символов,
содержать в себе различные знаки препинания и пробелы.


Пароль типа username password устанавливается с соответствующим ему именем
пользователя. Задается это в режиме конфигурации следующей командой
(пользователь cook с паролем queen):


Router(config)#username cook password queen


При выводе конфигурации (при помощи команды show running-config) на экране
мы увидим следующую информацию:


username cook password 0 queen


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


no service password-encryption


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


Router(config)#service password-encryption


Тогда строка конфигурации об имени и пароле пользователя будет иметь
несколько другой вид, где мы уже не видим текст пароля в явном виде (тип
"7" - зашифрованный пароль):


username cook password 7 03154E0E0301


Для входа в privileg EXEC level (привилегированный уровень) пользователь
должен ввести пароль. При выключенном сервисе шифрования пароля
соответствующая строка в конфигурации будет иметь вид:

enable password queen

При включенном же сервисе шифрования:

enable password 7 071E34494B07

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

Лучшая возможность имеется для шифрования пароля к привилегированному
уровню - использование не enable password, а enable secret, в котором для
кодирования пароля применяется алгоритм MD5 (тип "5"):

Router(config)#enable secret queen

Строка конфигурации:

enable secret 5 $1$EuWt$SxHM5UPH3AIL8U9tq9a2E0


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



Ограничение доступа к маршрутизатору.

Управлять маршрутизаторами можно удаленно через telnet или локально через
консольный порт или порт AUX. Отсюда следует два вида ограничения доступа к
маршрутизатору: локальное и удаленное.


Доступ к маршрутизатору для его конфигурирования и мониторинга может
производиться 6 способами:

с терминала, компьютера администратора (COM-порт), или терминального
сервера через консольный порт маршрутизатора

с терминала, компьютера администратора (COM-порт), или терминального
сервера путем дозвона на модем, подсоединенный к порту AUX

через Telnet

посредством Unix-команды rsh


по протоколу SNMP (community с правом записи - RW)

через WWW-интерфейс (встроенный в маршрутизатор HTTP-сервер)

Терминальным сервером называется хост, имеющий несколько последовательных
асинхронных портов стандарта RS-232 (COM-порты), к которым подключаются
консольные кабели маршрутизаторов. Поскольку обычный компьютер имеет 2 COM-
порта, то для организации многопортового терминального сервера на базе ПК
требуется установка карты расширения с дополнительными COM-портами
(например, RocketPort). Из обрудования Cisco в качестве терминальных
серверов обычно используются маршрутизаторы Cisco 2509 (8 асинхронных
интерфейсов) и 2511 (16 асинхронных интерфейсов); при этом режим
маршрутизации обычно отключается (no ip routing).

В целях безопасности все способы доступа, кроме консольного, следует по
возможности ограничить, а лучше - полностью отключить. По умолчанию rsh и
SNMP отключены, а доступ по Telnet, наоборот, разрешен, причем без пароля.
Статус HTTP-сервера зависит от версии IOS и модели оборудования.

Консольный доступ уже сам по себе физически ограничен подключением
консольного кабеля к терминальному серверу. Если администратор получает
доступ к терминальному серверу удаленно, то встаёт задача защищенного
доступа на терминальный сервер. Наиболее правильный способ организации
удаленного доступа к терминальному серверу - протокол SSH.


Локальное ограничение доступа к маршрутизатору


Во-первых, необходимо специальное помещение с ограничением доступа для
персонала, в котором бы находилось оборудование. Это рекомендуется для
того, чтобы посторонний человек не имел физический доступ к маршрутизатору,
т.к. при работе с маршрутизатором через консольный порт или порт AUX мы
работаем в EXEC сессии без пароля на уровне обычного пользователя. И для
получения доступа к привилегированному режиму посторонний человек может
воспользоваться самым простым методом восстановление паролей - перезагрузка
маршрутизатора, вход в режим ROM-монитора, изменение значения регистра
конфигурации, снова перезагрузка маршрутизатора и элементарный вход в
привилегированный режим без всякого пароля (вообще-то, это стандартный
метод восстановления забытого пароля для доступа в privileg EXEC mode, но
вот может использоваться и для совершенно противоположной цели).

Если физический доступ к маршрутизатору не может быть достаточно ограничен,
то необходимо установить пароль на работу в EXEC режиме по консольному
порту и порту AUX. Вообще это лучше делать всегда, даже когда маршрутизатор
находится в закрытом помещении под десятью замками (а вы уверены в своих
коллегах?). Делается это достаточно просто и существует минимум два
оптимальных варианта: совсем запретить вход в привилегированный режим или
разрешить вход с нормальной авторизацией через пароль.

Пример конфигурации, в которой для консольного порта разрешен вход через
пароль с временем работы на порту в течении 1,5 минут, а для порта AUX
запрещен вход EXEC режим:

aaa new-model
aaa authentication login default local
line con 0
  exec-timeout 1 30
line aux
  no exec

В этой конфигурации при подсоединении к консольному порту мы не сразу
попадем в user EXEC режим как это происходит обычно, а только после ввода
пользовательского имени и пароля. Хочу заметить, что в параметрах команды
exec-timeout время задается в минутах и секундах (через пробел), но если мы
захотим указать 0 минут и 0 секунд (exec-timeout 0 0), то это не означает,
что совсем нельзя будет попасть на данный порт. А как раз наоборот -
пользователь будет находиться в EXEC режиме бесконечно долго. Это нужно
обязательно учитывать администраторам при конфигурации маршрутизатора.
Самое минимальное время - 1 секунда (exec-timeout 0 1).



Удаленное ограничение доступа к маршрутизатору

Обычно рекомендуется совсем запрещать удаленный доступ к маршрутизатору по
telnet или же жестко ограничивать его. Достичь этого можно благодаря
применению списков доступа.

1. Полное запрещение доступа по telnet к маршрутизатору

access-list 1 deny any
line vty 0 4

access-class 1 in

2. Доступ к маршрутизатору по telnet разрешен только с определенного хоста
(создадим расширенный список доступа и применим его к интерфейсу Ethernet
0/0)

access-list 101 permit tcp host 140.11.12.73 host 140.11.12.236 eq telnet
interface Ethernet0/0
  ip address 140.11.12.236 255.255.255.0
  ip access-group 101 in

Необходимо заметить, что в списке доступа в структуре "от кого - кому" в
качестве "кому" прописан IP адрес интерфейса Ethernet 0/0. А так же то, что
при данной конфигурации через Ethernet 0/0 больше никто никуда не попадет,
отсекаемый неявным оператором deny any. Поэтому нужно будет дополнить
список доступа необходимыми "разрешениями".


Если необходимо конфигурировать маршрутизатор с удаленного хоста и
терминальный сервер при маршрутизаторе отсутствует (например, одиночный
маршрутизатор в удаленном филиале), то вместо Telnet следует использовать
SSH. IPSEC Feature set операционной системы Cisco IOS поддерживает работу
SSH-сервера непосредственно на маршрутизаторе. IPSEC Feature set имеет
высокую стоимость, требует довольно зачительных ресурсов процессора и
памяти и реализует относительно слабый алгоритм (DES с 40-битным ключом).
Поддержка сильного алгоритма (Triple DES с 256-битным ключом) связана с
преодолением экспортных ограничений США. Исходя из вышесказанного,
организовывать административный доступ к маршрутизатору с помощью IPSEC
Feature set следует только при невозможности подключения терминального
сервера (или если IPSEC Feature set уже используется для организации VPN).

При доступе к маршрутизатору через WWW-интерфейс аутентификация
пользователя HTTP-сервером проводится по ненадежной технологии. Отключение
HTTP-сервера:

router(config)# no ip http server

Протокол SNMP (по крайней мере, версий 1 и 2) вообще не предоставляет
адекватных средств обеспечения безопасности, поэтому разрешать запись через
SNMP категорически не рекомендуется. Чтение следует разрешить только для
административной станции - для этого надо сформировать соответствующий
список доступа и указать его в команде активизации SNMP-агента:

router(config)#snmp-server community public RO номер_списка_доступа

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


                      Список использованных источников.

http://cisco.com/     http://www.mark-itt.ru/CISCO/ITO/

 http://telecom.opennet.ru/cisco/security.shtml#part_3
 http://athena.vvsu.ru/net/labs/lab02_cisco_2.html#2.12

 

 

 

Перепаковка Cisco IOS или Исследования на тему юзабильности устаревшего оборудования Cisco

Статья была опубликована в журнале "Хакер" номер #124 за апрель 2009 года.

Приветствую, дорогой читатель! Сегодня мы будем давать вторую молодость, а может даже жизнь старым маршрутизаторам Cisco.
Имеем исходные данные: старенькая кошка Cisco 2611 c двумя Ethernet(!) портами, 64 Мб RAM и 16 MB на flash. Эти параметры являются максимально возможными из поддерживаемых данной платформой (читай — увеличить объем DRAM памяти и flash физически не представляется возможным из-за отсутствия в природе комплектующих больших объемов). Исходя из данных Cisco IOS Feature Navigator (http://tools.cisco.com/ITDIT/CFN/jsp/index.jsp) последней версией IOS для данного маршрутизатора является 12.3(26), что естественного для столь старого продукта (End-of-Sale - апрель 2003, End-of-Life – апрель 2008). Однако, иногда хочется получить только все самое последнее и новое, а все самое новое и вкусное доступно только в версии 12.4 (точнее 12.4T). Посыл номер два, или дополнительные исходные данные: если внимательно следить за модельным рядом маршрутизаторов Cisco или просто хорошо ознакомиться с информацией о продуктах на официальным сайте, то можно обнаружить что серия 2600 включает в себя, например, маршрутизаторы 2611XM. Отличается эта серия от своего предшественника незначительно:
- Максимальный объем flash-памяти увеличен до 48 MB (в 2611 — 16 MB)
- Максимальный объем SDRAM-памяти увеличен до 128 MB (в 2611 — 64 MB)
- Интегрированные 10/100 Fast Ethernet порты (в 2611 — 10 Мбит/c Ethernet)
Для такой кошки Cisco IOS Feature Navigator сообщит, что последний IOS за версией 12.4(23).
Системные требования для IOS 12.4(21) с набором Enterprise Base или Advanced Security составляют 128 MB DRAM и 32 MB flash. Конечно, у нас нет 128 MB памяти, но попытка не пытка, да и пропускная способность портов у нас невысокая, что позволяет сделать предположение о том, что ОС возможно запустить на моем устройстве. Осталось предположения превратить в практику.
Идея проста - загнать бинарный образ операционной системы Cisco IOS 12.4(21) с набором фьючерсов Enterprise Base на старенький маршрутизатор 2611 c исходными данными, представленными выше и в последующем использовать его как тестовый стенд, ибо 10-ти мегабитные интерфейсы ограничивают его применение в дикой природе, или, как говорится, in production. Хотя с таким же успехом это устройство может надежно служить файрволлом корпоративной сети взамен какого-нибудь PIX, если, конечно, достаточно пропускной способности в 10 Мбит, но тогда встает вопрос — а есть ли такой функционал, который может вам потребоваться в IOS 12.4, но которого нет в 12.3? За подсказкой вновь отправляю к Cisco IOS Feature Navigator (http://tools.cisco.com/ITDIT/CFN/Dispatch). Утилита сравнения образов вам в помощь, но ответ скорее всего будет - нет. Отсюда вывод — не стоит меня корить в малой практичности данной статьи, так как изначально она в большей степени исследовательская (jus for fun), чем практическая.
Возвращаясь от лирических отступлений к делу, скажу, что у меня не возникла бы потребность в написании статьи, если бы не одна, а точее две небольших проблемы. О первой из них я уже упомянул — это объем DRAM памяти. К сожалению, я не повелитель паяльника и вольтметра, так что здесь поделать ничего не можем. Стоит только надеяться, что ОС не уйдет в core в самый ответственный момент из-за недостатка пямяти. Вторая проблема, которая застигла меня врасплох — это размер самого образа образа IOS 12.4 и тот факт, что он не помещается на флеш объемом 16 МB. Этот образ принципиально туда не помещается из за своего размера, точнее сам маршрутизатор глаголет, что данный образ не поместится, и неудивительно. Файл образа — c2600-entbasek9-mz.124-9.T1.bin , который я взял для эксперимента, занимает 16,4 MB, то есть 17 257 364 байт. Флеш же размером 16 MB ровно (show flash: сообщает, что всего 16777212 байт или 16384K). Даже если стереть флеш с опцией no-squeeze-reserve-space:
router#erase /no-squeeze-reserve-space flash:

это нам не поможет, хотя в свое время для образа c2600-ik9o3s3-mz.123-13.bin являлось решением проблемы (этот образ чуть меньше размера самой флеш и для его загрузки требуется отформатировать ее с опцией, запрещающей резервировать свободное место).
Таким образом, решения здесь может быть два - грузиться с tftp, например, что не всегда удобно, либо же похекать образ так, чтобы его размер стал меньше, грубо говоря перепаковать (что, собственно, и было отчасти сделано). Посылом номер три является эмулятор Dynamips. Причем он здесь? А притом, что именно он натолкнул меня на мысль о перепаковке образа. Если взглянуть на раздел «How to use?» на официальном сайте проекта (http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator), то можно обнаружить, что эмулятор использует распакованные образы для ускорения загрузки:


To boot quickly, the preferred method is to decompress the IOS image with the "unzip" utility. It avoids to run the self-decompressing process in the emulator.
chris@portchris2:~/dynamips-0.2.5$ unzip -p c7200-advipservicesk9-mz.124-9.T.bin > image.bin
warning [c7200-advipservicesk9-mz.124-9.T.bin]: 27904 extra bytes at beginning or within zipfile
(attempting to process anyway)
chris@portchris2:~/dynamips-0.2.5$ file image.bin
image.bin: ELF 32-bit MSB executable, cisco 7200, version 1 (SYSV), statically linked, stripped
You can ignore the warning, unzip has just skipped the self-decompressing code at the beginning of the image.
Now, you can boot the imagе


Значит, если есть запакованный образ, то можно попытаться использовать более оптимальные параметры(!) сжатия, которые позволят разместить образ на флеш. Обращаю внимание на одну важную деталь — так как мы не собираемся переписывать самораспаковывающися код, то есть заниматься дизассемблированием, да и ассемблер под 32х битные процессоры PowerPC я не знаю (да и под 64х битные тоже), то сам алгоритм сжатия менять мы не сможем. Самораспаковывающаяся часть просто не сможет распаковать архивы, сжатые другими методами. По поводу используемого в образе алгоритма сжатия можно взглянуть сюда: Cisco IOS Configuration Fundamentals Configuration Guide, Release 12.4 - Loading and Managing System Images, пункт Image Naming Conventions. Поле «тип» в имени образа как раз отвечает за его характеристики:

f - The image runs from flash memory.
m - The image runs from RAM.
r - The image runs from ROM.
l - The image is relocatable.
z - The image is zip compressed.
x -The image is mzip compressed.

В нашем случае образ имеет тип mz – работает в памяти и запакован как раз в zip-архив. Убедиться в этом просто — большинство архиваторов (WinZIP, WinRAR, 7zip) c легкостью открывают и распаковывают архив.

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

7-zip 4.65 со следующими параметрами:
Формат архива — zip
Уровень сжатия — Ультра
Метод сжатия — Deflate
Размер словаря — 32КB
Размер слова — 258

В результате был получен архив следующих размеров: 15,7 MB (16 489 764 bytes)

WinZIP 11.2 при использовании улучшенного метода Deflate выдал файл размером 16,0 MB (16 803 634 bytes)

WinRAR 3.80 формат архива — zip с наилучшими параметрами сжатия: 16,3 MB (17131 353 bytes)

PKZIP 9.00 от создателей формата совсем подвел, и по методу Deflate с максимальным сжатием произвел файл, размером 16,3 MB (17 094 474 bytes).

Итогом моего небольшого сравнительного тестирования стал выбор для экспериментов архива, как нетрудно догадаться, созданного 7zip. Далее требуется этот архив поместить вместо оригинального образа. Чтобы проделать это, нам понадобится шестнадцатеричный редактор типа WinHex, HT Editor или hview. Я предпочитаю WinHex, но нам понадобится еще и HT, чуть позже объясню почему.

Как вы можете видеть на скриншоте, скорее всего бинарный образ IOS есть ничто иное, как исполняемый файл в формате ELF (Executable and Linkable Formate). ELF-формат является основным исполняемым файлом в *nix-like системах, неудивительно встретить его здесь. По ELF-формату существует четкая спецификация, последняя версия которой 1.2, однако для наших целей будет достаточно, например, заголовочного файла из состава libc - elf.h. Обычный бинарный ELF файл представляет собой структуру следующего вида:

ELF Header
Program Header Table (optional)
Section 1
Section 2

Section n
Section Header Table

Не углубляясь в описание, дабы не повторяться, отправляю вас к спецификации.
Так как весь процесс исследования я проводил в MS Windows, то пришлось искать замену утилите readelf из состава binutils. Этой заменой и оказался шестнадцатеричный редактор HT (http:///hte.sf.net), который умеет читать и модифицировать структуры данных исполняемых файлов ELF. При попытке открыть подопытный образ c2600-entbasek9-mz.124-9.T1.bin, HT сразу меня обругал, что и привлекло мое внимание. Обратимся к elf.h, структура данных, отвечающая за ELF-заголовок выглядит так:

typedef struct {
Elf_Char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;


В нашем случае поле e_machine имеет значение 0x002b или 43, что соответствует процессору SPARC v9:

#define EM_SPARCV9 43 /* SPARC v9 64-bit */

Однако нам известно, что маршрутизатор 2611 использует процессор Motorolla MPC860, значит поле должно иметь значение 0x0014, что соответствует:

#define EM_PPC 20 /* PowerPC */

Скорее всего, это есть простейшая защита от дизассемблирования образа, однако нам это не сильно помешает. С помощью F6 открываем режим просмотра elf/header. Из него нам становятся известны следующие подробности:

- elf header size 0x34
- program header entry size 0x20
- program header count 1
- section header entry size 0x28
- section header count 6

Что в сумме нам дает размер 52+32+6*40=324 или 0x144.
То есть в файле всего 6 секций (соответственно 6 заголовков секций) и 1 заголовок программы. Вероятнее всего одна из секций предназначена для хранения архива с исполняемым образом IOS. Эту секцию можно вычислить либо по размеру (логично, что ее размер должен быть максимальным), либо по типу секции. Заголовок таблицы секций можно просмотреть, нажав F6 и выбрав elf/section headers, но для начала обратимся к описанию секции:

typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;

Поле sh_type и будет отвечать за искомый тип. К сожалению здесь меня ждал облом, большинство из секций имело тип SHT_PROGBITS, предназначенный для секций, значение которых определяется самой программой. Однако 4-я секция, имела тип отличный от предыдущих и имела значение 0x00000007, секция предназначена для каких-либо программных заметок. Первая (нулевая) секция также имеет отличный от предыдущих тип (SHT_NULL), исходя из этого становится ясно что она пустая и ни с чем не ассоциирована. В итоге приходится искать секцию с максимальным размером (поле sh_size), ее оказывается секция за номером пять, ее размер 0x1070e7c или 17239676 байт. Вернемся к hex-виду (F6 - hex) и перейдем по смещению (поле sh_offset) с помощью кнопки F5:


И что же мы здесь видим? Где же наш архив, который должен начинаться с сигнатуры PK, а точнее если следовать спецификации PKZIP-формата (http://www.pkware.com/documents/casestudies/APPNOTE.TXT) 0x04034b50 в обратном порядке? Как не странно эта сигнатура обнаруживается на 22 байта позже. Однако, если хорошо присмотреться, то отказывается, что сразу за значением 0xFEEDFACE идет размер распакованного образа 0x02AED904. Если внимательно поискать в Сети, то можно наткнуться на информацию из книги Cisco Networks Hacking Exposed издательства McGraw-Hill/Osborne. Наши русские парни Andrew A. Vladimirov, Konstantin V. Gavrilenko, Janis N. Vizulis and Andrei A. Mikhailovsky еще в 2006 году занимались разработкой бинарного патчинга IOS 12.3(6). Им удалось выяснить что после магического значения 0xFEEDFACE идут последовательно uncompressed image size, compressed image size, compressed image checksum, uncompressed image checksum. Помимо этого, им стало известно, что алгоритм вычисления контрольной суммы представляет собой модифицированный алгоритм контрольной суммы в Интернет, однако нам, к счастью, не придется их вычислять — как проверено позже на практике,маршрутизатор сам скажет нам какое значение должно иметь это поле, если конечно подсчитанная контрольная сумма и записанная в соответствующем поле не совпадут:

Error : compressed image checksum is incorrect 0xB99D8823
Expected a checksum of 0xF6F69877

*** System received a Software forced crash ***
signal= 0x17, code= 0x5, context= 0x800805f0
PC = 0x0, Vector = 0x0, SP = 0x0

Итак, перейдем к активным действиям. Для начала вырезаем из файла старую 4ю секцию, содержащую zip архив за исключением 20 байт, начиная с магического значения 0xFEEDFACE до сигнатуры zip не включая, то есть со смещения 0x44F8 по смещение 0x1075360 + 0x44F8. Затем по смещению 0x44F8 вставляем новый архив.

Соединим всю известную нам информацию воедино. Размер старой секции (№5), содержащей архив с образом IOS, загружаемым в память 0x1070e7c или 17239676 (включая 20 байт с 0xFEEDFACE по 0x504B0304 не включая). Размер новой секции, содержащей архив 0xFB9D38 или 16489784 (опять же включая те 20 байт). Разница между старым и новым значением составит 0xB7158 — 749912. То есть смещение 4й секции, физически расположенной в файле после 5й секции, требуется изменить с 0x1075360 на 0xFBE208.

Старые значения после магической записи 0xFEEDFACE:
unpacked image size: 0x02AED904 45013252
packed image size: 0x01070E66 17239654 (разница с размером 5й секции - на 22 байта меньше)
packed image checksum: 0xB58BE139
unpacked image checksum: 0xA29D4F6E
затем идет сигнатура: 0x504B0304

Новые значения после магической записи 0xFEEDFACE:
unpacked image size: 0x02AED904 (остался тот же)
packed image size: 0x00FB9D22 16489762 (разница с размером 5й секции - на 22 байта меньше)
packed image checksum: нам неизвестна, можно заменить на что-нибудь приметное, типа 0x48000000
unpacked image checksum: 0xA29D4F6E (остался тот же)

Новую контрольную сумму, как я уже говорил, сообщит сам маршрутизатор.
После всех манипуляций конечный образ был получен, однако размер его меня не впечатлил. К сожалению, по сравнению с изначальным размером 16,4 MB (17257364 bytes) я получил всего лишь 15,7 MB (16507472 bytes), то есть разница, которую я уже посчитал выше, составила 749912 байт. Конечно, это позволит загрузить образ на flash, но скорее всего придется применять опцию /no-squeeze-reserve-space. Однако, когда при копировании маршрутизатор запросит повторное стирание flash, подтверждать действие не нужно:

router#erase /no-squeeze-reserve-space flash:
Erasing the flash filesystem will remove all files! Continue? [confirm]
Erasing device... eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeee ...erased
Erase of flash: complete
router#copy tftp://172.22.1.17/c2600-entbasek9-mz.124-9.T1-shad-pk.bin flash:
Destination filename [c2600-entbasek9-mz.124-9.T1-shad-pk.bin]?
Accessing tftp://172.22.1.17/c2600-entbasek9-mz.124-9.T1-shad-pk.bin...
Erase flash: before copying? [confirm]n
Loading c2600-entbasek9-mz.124-9.T1-shad-pk.bin from 172.22.1.17 (via Ethernet0/0): !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!![OK - 16507472 bytes]

Verifying checksum... CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC OK (0xE6ED)
16507472 bytes copied in 178.188 secs (92641 bytes/sec)
router#reload
Proceed with reload? [confirm]

Естественно, такая ситуация была бы только в том случае, если образ был бы сформирован правильно. Поэтому я не стал спешить, и для загрузки образа защел в режим rommon по Ctrl+Break, затем со своего компьютера загрузил образ по tftp напрямую в RAM:

rommon 1>tftpdnld -r

После загрузки маршрутизатор сказал:

TFTP flash copy: Error, image size (16507470) mismatches netsize (16507472).

Оказалось, что при редактировании размера 5й секции я ошибся на 2 байта (те самые 20 байт с 0xFEEDFACE + 2).

После второй попытки загрузки выяснилось, что контрольная сумма запакованного образа — 0xB0257B0D:

Error : compressed image checksum is incorrect 0xB99D8823
Expected a checksum of 0x48000000

*** System received a Software forced crash ***
signal= 0x17, code= 0x5, context= 0x800805f0
PC = 0x0, Vector = 0x0, SP = 0x0

Корректируем соответствующее поле после 0xFEEDFACE (Загружаем файл в HT по F3, переходим по смещению с помощью F5 и редактируем по F4, не забывая сохраняться по F2), затем снова грузимся.

rommon 4>reset -s

Дальше соответственно все ок, однако затем IOS вываливается, и отказывается работать по причине недостатка памяти:

System Bootstrap, Version 11.3(2)XA4, RELEASE SOFTWARE (fc1)
Copyright (c) 1999 by cisco Systems, Inc.
TAC:Home:SW:IOS:Specials for info
PC = 0xfff0a530, Vector = 0x500, SP = 0x680127c8
PC = 0xfff0a530, Vector = 0x500, SP = 0x680127b0
C2600 platform with 65536 Kbytes of main memory

PC = 0xfff0a530, Vector = 0x500, SP = 0x80004684

monitor: command "boot" aborted due to user interrupt
rommon 1 > tftpdnld -r

IP_ADDRESS: 172.22.1.199
IP_SUBNET_MASK: 255.255.255.0
DEFAULT_GATEWAY: 172.22.1.1
TFTP_SERVER: 172.22.1.17
TFTP_FILE: c2600-entbasek9-mz.124-9.T1-shad-pk.bin

Receiving c2600-entbasek9-mz.124-9.T1-shad-pk.bin from 172.22.1.17 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!
File reception completed.
program load complete, entry point: 0x80008000, size: 0xfbe0d8
Self decompressing the image : ################################################## ################################################## ################################################## ## [OK]

Smart Init is enabled
smart init is sizing iomem
ID MEMORY_REQ TYPE
000092 0X000B3280 C2600 Dual Ethernet
0X00098670 public buffer pools
0X00211000 public particle pools
TOTAL: 0X0035C8F0

If any of the above Memory Requirements are
"UNKNOWN", you may be using an unsupported
configuration or there is a software problem and
system operation may be compromised.
Rounded IOMEM up to: 3Mb.
Using 5 percent iomem. [3Mb/64Mb]



Cisco IOS Software, C2600 Software (C2600-ENTBASEK9-M), Version 12.4(9)T1, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2006 by Cisco Systems, Inc.
Compiled Wed 30-Aug-06 15:43 by prod_rel_team
Image text-base: 0x800080E4, data-base: 0x81B46C00

SYSTEM INIT: INSUFFICIENT MEMORY TO BOOT THE IMAGE!

%Software-forced reload

00:00:16 UTC Fri Mar 1 2002: Unexpected exception to CPUvector 700, PC = 0x8069DE48, LR = 0x8069DD88

-Traceback= 0x8069DE48 0x8069DD88 0x80014B10 0x81B3BAA4 0x8170812C 0x817082A4 0x816E3D68 0x816E3DF4 0x816E3ED4 0x816E3E38 0x816E3ED4 0x816E3E38 0x816E3ED4 0x816E4A1C 0x8171AB4C 0x81729008

CPU Register Context:
MSR = 0x00029032 CR = 0x33000095 CTR = 0x806A2518 XER = 0x8000FE00
R0 = 0x00000000 R1 = 0x82EDD858 R2 = 0x82AF0000 R3 = 0x00000003
R4 = 0xFFFFFFFE R5 = 0x00000000 R6 = 0x00000003 R7 = 0x00009032
R8 = 0x82AF0000 R9 = 0x82820000 R10 = 0x82BBCC50 R11 = 0x00000000
R12 = 0x00004117 R13 = 0xFFF48A24 R14 = 0x80A82090 R15 = 0x00000000
R16 = 0x00000000 R17 = 0x00000000 R18 = 0x00000000 R19 = 0x00000000
R20 = 0x00000000 R21 = 0x00000000 R22 = 0x81B47998 R23 = 0x00000000
R24 = 0x81B47A48 R25 = 0x81708128 R26 = 0x81708128 R27 = 0x00002814
R28 = 0x00000000 R29 = 0x82C8F368 R30 = 0x00000000 R31 = 0x82AF0000

Writing crashinfo to flash:crashinfo_20020301-000016

Однако, здесь я не расстроился, и решил взяться за другой образ — c2600-advsecurityk9-mz.124-21.bin. После аналогичных манипуляций с байтами, даже при использовании 128 битного слова в 7zip, размер составил 15947076 (против изначального размера 16635336), что позволило загрузить его во flash. Помимо прочего, этот образ уже не ругался на недостаток памяти RAM и прекрасно чувствовал себя на этой платформе:

router#show version
Cisco IOS Software, C2600 Software (C2600-ADVSECURITYK9-M), Version 12.4(21), RELEASE SOFTWARE (fc1)


router#show memory summary
Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)
Processor 82A44240 20244772 8718640 11526132 10171028 10098348
I/O 3CA3400 3525632 1650536 1875096 1875096 1875068


router#show flash:

System flash directory:
File Length Name/status
1 15947076 c2600-advsecurityk9-mz.124-21-shad-pk.bin
[15947140 bytes used, 830072 available, 16777212 total]
16384K bytes of processor board System flash (Read/Write)

Однако, у нас остается еще одна небольшая проблема. Если запустить проверку:

router#verify flash:c2600-advsecurityk9-mz.124-21-shad-pk.bin

Маршрутизатор обругает нас, сообщив, что Embedded hash и Calculated hash не совпадают. Исправить это очень просто — 16 байт контрольной суммы находится в самом конце бинарного файла образа. Обнаружить это можно даже с помощью простого поиска:





После исправления маршрутизатор сообщает, что контрольная сумма успешно подсчитана и совпадает:

Embedded Hash MD5 : 3DD2C6591FF4F033425147DE4540F9CD
Computed Hash MD5 : 3DD2C6591FF4F033425147DE4540F9CD
CCO Hash MD5 : 79020945BDFE2A354E012C8303136360

Embedded hash verification successful.
File system hash verification successful.

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

9 коммент.:

  1. круто!!!
    но похоже сисячники взяли ваш метод на вооружение, только про 7зип они недодумались
    вот только ковырял имидж c3660-jk9o3s-mz.124-6.XT2.bin, размером в 34.284.608
    размер флеша 33.554.432

    при запаковке имидж стал 32,494,754
    и сидит в файле по смещению 18dcc
    или 101,836
    итого выходит 32,596,590

    а... вообщето влезет

    основная проблема что комманды tftpdnld у меня нет, только xmodem - засада конкретная.

  2. кстати метож deflate64 позволяет сжать ещё сильнее

  3. ну что-же похакал последний имидж для 837 роутера по вашему методу. однако контрольную сумму выставлять просто так нельзя, - надо выставлять нули, как я понял контрольная сумма участвует в подсчёте. я сначало поставил 88888888 - поменял на ту что роутер сказал - он опять новую захотел

    метод deflate64 к сожалению незаработал

  4. ну шо, всё у меня получилось
    c3660-jk9o3s-mz.124-6.XT2
    теперь лезет в 32 метра, правда тольк с ключиком /no-squeeze-reserve-space

    c837-k9o3sy6-mz.124-11.XJ4 тоже исправлена, она и так залазила в роутер, но там оставалось 20 кб месте, теперь остаётся полмега

    спрашивайте на торрентс.ру

  5.  

    Возможно ли перепаковать IOS`ы 2800`ой/3800`ой/7600`ой серии?

  6.  

    Конечно возможно. Все делается абсолютно аналогично.

  7.  

    Недавно обнаружил вот этот пост: http://www.gossamer-threads.com/lists/cisco/nsp/113697?page=last

    Хотелось бы ответить нашим зарубежным коллегам: Yes, it is possible to repack almost any IOS! Just always follow the instructions strictly.

  8.  

    у меня вопрос, есть cisco 7140 по сути это cisco7200 с npe300, возможно ли залить иос с 72 на 71 ? если возможно то нужна ваша консультация

  9.  

    albert, честно говоря, не пробовал, но попробовать стоит. Если это не production-маршрутизатор - почему бы нет?


 

Память, поддерживаемая различными маршрутизаторами Cisco Systems

Типы и объемы памяти – справочная информация.

По данным компании Cisco Systems на 11 апреля 2005 г.

Все значения в Таблице 1 приведены для встроенной Flash/DRAM памяти. Данные для внешней памяти приведены в Таблице 5. В поле «Е?» указано наличие слотов для установки внешней памяти (см. также Таблицу 5). Объем памяти, указанный для маршрутизатора как стандартный, как правило, поставляется в оптимальной конфигурации – например, Маршрутизатор Cisco 3660 поставляется по умолчанию с 32 Мб DRAM, причем память будет установлена одним модулем объемом 32 Мб, а не 2х16 Мб. Исключения возможны только при недостатке на заводе производителе компонентов памяти.

Таблица 1. Маршрутизаторы класса SOHO/SMB (решения для дома, малого и среднего бизнеса).

Маршрутизатор Память Флэш-память
Встр. Слоты Стд. Макс. Встр. Слоты Стд. Макс. Е?
SOHO7x 16 0 16 16 8 0 8 8 N
SOHO9x 32 0 32 32 8 0 8 8 N
700 1,5 0 1,5 1,5 1 0 1 1 N
801-804 4 1 8 12 4 1 8 12 N
805 8 1 8 16 4 1 8 12 N
806 16 1 321 32 0 1 8 16 N
811-813 8 1 8 16 4 1 8 12 N
827/828 16 1 32 32 8 1 8 16 N
826/827H 16 1 321 32 8 1 8 16 N
827-4V 16 1 48 48 8 1 12 16 N
83x 32 1 642 80 8 1 12 24 N
1003/4/5 0 0 8 16 0 (только внешний PCMCIA) Y
1400 8 1 16 24 0 (только внешний PCMCIA) Y
16xx 2 1 2 18 0 (только внешний PCMCIA) Y
16xxR 8 1 8 24 0 (только внешний PCMCIA) Y
1701 64 1 64 128 32 0 32 32 N
1710 32 1 64 96 16 0 16 16 N
1711/1712 64 1 64 128 32 0 32 32 N
1720 16 1 32 48 0 1 8 16 N
1721 64 1 643 128 32 0 323 32 N
1750 16 1 16 48 0 1 4 16 N
1750-xV 16 1 32 48 0 1 8 16 N
1751 64 1 643 128 32 0 323 32 N
1751-V 64 1 963 128 32 0 323 32 N
1760 64 1 643 128 32 1 323 64 N
1760-V 64 1 963 128 32 1 323 64 N
1841 128 1 128 384 0 (только внешний CF) Y
IAD2400 64 0 64 64 8 0 8 8 N
2500 02 1 48 16 0 2 8 16 N

Примечания:

  1. Маршрутизаторы 806/826, поставляемые до апреля 2002 г., по умолчанию имели меньше памяти DRAM (16 Мб), а не 32 Мб в качестве объема по умолчанию/максимум.
  2. До мая 2003 г. серия 83x поставлялась с 8 Мб флэш по умолчанию. С марта 2005 г. объем стандартной DRAM памяти увеличен до 64 Мб.
  3. 1721/51/60, поставляемые до 18 августа 2003, имели 16 Мб флэш и 32-64 Мб DRAM.

Таблица 2. Машрутизаторы среднего класса, серверы доступа.

Маршрутизатор Системная память (System memory) Пакетная память (Packet memory) Основная флэш-память (Main Flash) Загрузочный флэш (Boot Flash) Е?
Слот Стд Макс Слот Стд Макс Встр Слоты Стд Макс Мин Макс
2610-13 2 321 64 0 0 1 8 16 0 N
262x 2 321 64 0 0 1 8 322 0 N
265x 2 32 128 0 0 1 8 32 0 N
261xXM/262xXM 2 1285 2566 0 16 1 325 48 0 N
265xXM 2 2565 2566 0 16 1 325 48 0 N
2691 2 2565 256 0 0 1 32 128 0 Y
2801 1 1288 384 0 0 (только внешняя CF) 4 4 Y
2811 2 256 768 0 0 (только внешняя CF) 2 2 Y
2821/2851 2 256 1024 0 0 (только внешняя CF) 2 2 Y
3620 4 32 64 0 0 2 163 32 0 Y
3640/3640A 4 32 128 0 0 2 163 32 0 Y
3660 (Ent) 2 32 256 0 0 2 163 64 0 Y
3660 (Telco) 2 327 256 0 0 2 167 64 0 Y
3631 2 64 256 0 0 1 32 128 0 N
3725 2 2565 256 0 0 1 32 128 0 Y
3745 2 2565 512 0 0 1 32 128 0 Y
3825/3845 2 256 1024 0 0 (только внешняя CF) 0 Y
mc3810 1 32 64 0 0 1 16 32 0 N
mc3810-V3 1 64 64 0 0 1 16 32 0 N
4000M 1 8 32 1 4 16 0 2 4 16 0 N
4400M 24 16 32 1 4 16 0 2 4 16 4 16 N
4700M 24 16 64 1 4 16 0 2 4 16 8 N
AS5200 1 8 16 1 4 16 0 2 16 16 0 N
AS5300 2 64 128 1 8 16 0 2 16 32 8 8 N
AS5350 2 128 512 1 64 128 0 2 32 64 8 16 N
AS5400(-HPX) 2 256 512 1 64 128 0 2 32 64 8 16 N

Примечания:

  1. Первоначально на маршрутизаторах 2610-21 устанавливалось 16 Мб DRAM, затем объем был увеличен до 24 Мб и, наконец, перед снятием с продаж (EoS) увеличен по умолчанию до 32 Мб.
  2. Маршрутизаторы 262x, изготовленные до марта 2001 г. имели загрузочный ROM, несовместимый с флэш-модулем в 32 Мб, инсталлируемым на маршрутизаторах серии 265х, то есть они должны быть модернизированы для работы с этим модулем.
  3. Маршрутизаторы серии 36хх, отгруженные до середины мая 2002 г. по умолчанию оснащались 8 Мб флэш-памяти.
  4. В любой маршрутизатор серии 4х00М необходимо инсталлировать память в с чипами одного размера.
  5. До 18 августа 2003 г. маршрутизаторы серии 26ххXM в основном поставлялись с 32 Мб DRAM и 16 Мб флэш-памяти. С 14 июня 2004 г. в маршрутизаторах 261х/2х XM объем памяти по умолчанию был увеличен с 96 до 128 Мб, а в маршрутизаторах 265х и 2691/37хх увеличен со 128 Мб до 256 Мб.
  6. В маршрутизаторах 26ххXM, поставляемых до апреля 2004 г. максимально возможный объем памяти составлял 128 Мб DRAM. Посредством загрузочного ROM объем памяти может быть увеличен до 256 Мб для старых версий 2600XM, для этого требуется IOS 12.3(11)T IOS.
  7. В маршрутизаторах 3660 (только Telco) объем памяти по умолчанию с февраля 2004 г. был увеличен с 32 Мб до 128 Мб DRAM и с 16 до 32 Мб флэш.
  8. Маршрутизатор 2801 имеет 128 Мб памяти, встроенной в материнскую плату.

Таблица 3. Маршрутизаторы серии 7ххх

Маршрутизатор Системная память (Route memory) Пакетная память (Packet memory) Загрузочный флэш (Boot Flash) Е?
Слот Стд Макс Слот Стд Макс Слоты Стд Макс
70x0(RP) 4 16 64 0 1 4 4 Y
70xO(RSP) 4 16 128 0 1 8 8 Y
71xx 2 64 256 1 64 64 1 8 8 Y
72xx (NPE-100) 41 32 128 0 0 N
72xx (NPE-150) 41 64 128 1 (встроенный) 0 N
72xx (NPE-175) 1 64 128 0 0 N
72xx (NPE-200) 41 64 128 4 (встроенный) 0 N
72xx (NPE-225) 1 128 256 0 0 N
72xx (NPE-300) 2 128 256 2 32 32 0 N
72xx (NPE-400) 1 128 512 0 0 N
72xx (NPE-G1) 21 256 1024 16 (<=256) или 32 (>256) 16 (встроенный) Y
72xx (NSE-1) 1 128 256 0 0 N
72xx (I/O;-FE) 0 0 или 1 4 4 Y
72xx (I/O-GE;2FE) 0 8 (встроенный) Y
7301 21 256 1024 16 (<=256) или 32 (>256) 32 (встроенный) Y
7304 (NSE-100) 1 512 512 0 1 32 32 Y
7304 (NPE-G100) 2 1024 1024 128 1 32 32 Y
7401 1 128 512 0 8 (встроенный) Y
75xx (RSP1) 4 16 128 0 1 8 8 Y
75xx (RSP2) 4 32 128 0 1 8 8 Y
75xx (RSP4/4+) 2 64 256 2 (встроенный) 1 8 16 Y
75xx (RSP8) 2 64 256 8 (встроенный) 1 16 16 Y
75xx (RSP16) 2 128 1024 8 (встроенный) _ _ _ Y
75xx (VIP2-10) 21 16 64 1 0,512 2 0 N
75xx (VIP2-15/20) 21 16 64 1 1 2 0 N
75xx (VIP2-40) 21 32 64 1 2 2 0 N
75xx (VIP2-50) 1 32 128 1 4 8 0 N
75xx (VIP4/VIP6) 1 64 256 1 64 64 0 N

Примечания:

  1. В маршрутизаторы NPE-100/150/200/G1, 7301 и VIP2-10/15/20/40 следует устанавливать парные модули SIMM памяти.

Таблица 4. Маршрутизаторы ядра.

Маршрутизатор Системная память (Route memory) Пакетная память (Packet memory) Загрузочный флэш (Boot Flash) Е?
Слот Стд Макс Слот Стд Макс Слоты Стд Макс
10000 (PRE/PRE-1) 2 512 512 0 128 128 0 32 32 Y
10000 (PRE-2) 2 1024 1024 0 256 256 0 64 64 Y
12000 (GRP-B) 2 128 512 0 1 8 8 Y
12000 (PRP) 2 512 2048 0 1 64 64 Y
12000 (PRP-2) 2 1024 4096 0 1 64 64 Y
12000 (Engine 4) 1 256 512 41 512 512 0 N
12000 (Engine 3) 2 256 512 41 512 512 0 N
12000 (Engine 2) 2 128 256 41 256 512 0 N
12000 (Engine 1) 2 128 256 41 256 256 0 N
12000 (Engine 0) 2 128 256 41 128 256 0 N
CRS-1 RP 2 2048 4096 0 1 40 Гб IDE диск Y
CRS-1 LC 1 2048 2048 2 2048 2048 0 N

Примечания:

  1. В 12000 серию устанавливается парная пакетная память в выделенные блоки (например, 2х64 Мб RX, 2x64 Мб TX (256 Мб config)). PRE и PRE-1 используют разную PXF память – первая - 512 Мб, вторая – 1 Гб. PRE-1 требуется для широкополосной сети.

Таблица 5. Внешняя флэш-память

Маршрутизатор Слоты Флэш-карта (FLC) Флэш-диск (FLD) Compact Flash
4 8 16 20 32 48 64 128 1G 32 64 128 256
1003/4/5 1 Y N N N N N N
14xx 1 Y1 Y Y N N N N
16xx 1 Y1 Y Y N N N N
16xxR 1 Y1 Y Y N N N N
1841 1 N N Y Y Y N
2691 1 N N Y Y Y N
2691 1 N N Y Y Y N
2801 1 N N N Y Y N
2811/21/51 1 N N N Y Y N
36xx 2 Y Y Y Y N N N
3725/45 1 N N Y Y Y N
3825/45 1 N N N Y Y Y
70x0 (RP) 1 N Y1 Y N N N N
70x0 (RSP) 2 N Y1 Y Y Y N N
71xx 2 N N N Y N Y1 Y Y N N
72xx (I/O) 2 N N Y Y N Y1 Y Y N N
72xx (NPE-G1) 1 N N N Y Y Y
7301 1 N N N Y Y Y
7304 (NSE-100) 1 N N N Y Y N
7304 (NPE-G100) 1 N N N N N Y
7401 1 N N N Y Y N
75xx (RSP1) 2 N Y1 Y Y N N N
75xx (RSP2) 2 N Y Y1 Y Y N N
75xx (RSP4) 2 N N Y1 Y Y N N
75xx (RSP8) 2 N N Y Y1 Y Y Y Y N N
75xx (RSP16) 2 N Y Y1 Y N N
10000 (PRE/PRE-1) 2 N Y1 N Y N N
10000 (PRE-2) 2 N N Y1 Y N N
12000 (GRP-B) 2 N N N N Y1 Y Y Y Y N
12000 (PRP) 2 N Y Y1 Y Y N
12000 (PRP-2) 2 N N Y1 Y Y N
CRS-1 RP 2 N N N N Y1 N

Примечания:

  1. Красным цветом выделена флэш-память, поставляемая вместе с маршрутизаторами по умолчанию (если флэш вообще устанавливается в умолчанию).

В большинстве маршрутизаторов существующая конфигурация памяти определяется достаточно просто, так как маршрутизатор имеет или только встроенную память, или имеет только один слот для DRAM памяти. Тем не менее, иногда маршрутизаторы оснащены несколькими слотами для памяти. В этом случае можно, как правило, определить объем и конфигурацию памяти (например, установлено в моей 3640 64 Мб DRAM как 2х32 Мб или 4х16 Мб) через программное обеспечение, не вскрывая шасси. Команды и процедуры, позволяющие это сделать, перечислены ниже. Обратите внимание, что данные команды не относятся ко всем без исключения мультислотовым маршрутизаторам. К некоторым моделям маршрутизаторов программные методы определения конфигурации памяти неприменимы. Возможно, в будущем такие методы будут встроены в IOS.

Модель маршрутизатора Описание процедуры
1841 Выполните команду “show platform”
26xx (non-XM) Выполните команду “show c2600”. Команда работает только в новых версиях IOS – 12.2(11)T обязателен (Cisco Enhancement ID CSCdv58188)
26xx (XM) Выполните команду “show c2600”. Команда выполняется только в новых версиях IOS – 12.2(11)Т обязателен (Cisco Enhancement ID CSCdv58188)
2691 Выполните команду “show platform”
2800 Выполните команду “show platform”
3631 Выполните команду “show platform”
3700 Выполните команду “show platform”
3800 Выполните команду “show platform”
AS5400 Выполните команду “show as5400”. Команда выполняется только в новых версиях IOS – требуется 12.2(11)Т (Cisco Enhancement ID XSXdv64625).

 

 

Перепаковка Cisco IOS или Исследования на тему юзабильности устаревшего оборудования Cisco

Статья была опубликована в журнале "Хакер" номер #124 за апрель 2009 года.

Эта версия оригинальная и не исправленная редакторами.

Статья, которая была создана изначально в целях систематизации своих изысканий, затем переросла в блогопост, ну и вот затем только в конечный вариант. Just4Fun.

Приветствую, дорогой читатель! Сегодня мы будем давать вторую молодость, а может даже жизнь старым маршрутизаторам Cisco.
Имеем исходные данные: старенькая кошка Cisco 2611 c двумя Ethernet(!) портами, 64 Мб RAM и 16 MB на flash. Эти параметры являются максимально возможными из поддерживаемых данной платформой (читай — увеличить объем DRAM памяти и flash физически не представляется возможным из-за отсутствия в природе комплектующих больших объемов). Исходя из данных Cisco IOS Feature Navigator (http://tools.cisco.com/ITDIT/CFN/jsp/index.jsp) последней версией IOS для данного маршрутизатора является 12.3(26), что естественного для столь старого продукта (End-of-Sale - апрель 2003, End-of-Life – апрель 2008). Однако, иногда хочется получить только все самое последнее и новое, а все самое новое и вкусное доступно только в версии 12.4 (точнее 12.4T). Посыл номер два, или дополнительные исходные данные: если внимательно следить за модельным рядом маршрутизаторов Cisco или просто хорошо ознакомиться с информацией о продуктах на официальным сайте, то можно обнаружить что серия 2600 включает в себя, например, маршрутизаторы 2611XM. Отличается эта серия от своего предшественника незначительно:
- Максимальный объем flash-памяти увеличен до 48 MB (в 2611 — 16 MB)
- Максимальный объем SDRAM-памяти увеличен до 128 MB (в 2611 — 64 MB)
- Интегрированные 10/100 Fast Ethernet порты (в 2611 — 10 Мбит/c Ethernet)
Для такой кошки Cisco IOS Feature Navigator сообщит, что последний IOS за версией 12.4(23).
Системные требования для IOS 12.4(21) с набором Enterprise Base или Advanced Security составляют 128 MB DRAM и 32 MB flash. Конечно, у нас нет 128 MB памяти, но попытка не пытка, да и пропускная способность портов у нас невысокая, что позволяет сделать предположение о том, что ОС возможно запустить на моем устройстве. Осталось предположения превратить в практику.
Идея проста - загнать бинарный образ операционной системы Cisco IOS 12.4(21) с набором фьючерсов Enterprise Base на старенький маршрутизатор 2611 c исходными данными, представленными выше и в последующем использовать его как тестовый стенд, ибо 10-ти мегабитные интерфейсы ограничивают его применение в дикой природе, или, как говорится, in production. Хотя с таким же успехом это устройство может надежно служить файрволлом корпоративной сети взамен какого-нибудь PIX, если, конечно, достаточно пропускной способности в 10 Мбит, но тогда встает вопрос — а есть ли такой функционал, который может вам потребоваться в IOS 12.4, но которого нет в 12.3? За подсказкой вновь отправляю к Cisco IOS Feature Navigator (http://tools.cisco.com/ITDIT/CFN/Dispatch). Утилита сравнения образов вам в помощь, но ответ скорее всего будет - нет. Отсюда вывод — не стоит меня корить в малой практичности данной статьи, так как изначально она в большей степени исследовательская (jus for fun), чем практическая.
Возвращаясь от лирических отступлений к делу, скажу, что у меня не возникла бы потребность в написании статьи, если бы не одна, а точее две небольших проблемы. О первой из них я уже упомянул — это объем DRAM памяти. К сожалению, я не повелитель паяльника и вольтметра, так что здесь поделать ничего не можем. Стоит только надеяться, что ОС не уйдет в core в самый ответственный момент из-за недостатка пямяти. Вторая проблема, которая застигла меня врасплох — это размер самого образа образа IOS 12.4 и тот факт, что он не помещается на флеш объемом 16 МB. Этот образ принципиально туда не помещается из за своего размера, точнее сам маршрутизатор глаголет, что данный образ не поместится, и неудивительно. Файл образа — c2600-entbasek9-mz.124-9.T1.bin , который я взял для эксперимента, занимает 16,4 MB, то есть 17 257 364 байт. Флеш же размером 16 MB ровно (show flash: сообщает, что всего 16777212 байт или 16384K). Даже если стереть флеш с опцией no-squeeze-reserve-space:
router#erase /no-squeeze-reserve-space flash:

это нам не поможет, хотя в свое время для образа c2600-ik9o3s3-mz.123-13.bin являлось решением проблемы (этот образ чуть меньше размера самой флеш и для его загрузки требуется отформатировать ее с опцией, запрещающей резервировать свободное место).
Таким образом, решения здесь может быть два - грузиться с tftp, например, что не всегда удобно, либо же похекать образ так, чтобы его размер стал меньше, грубо говоря перепаковать (что, собственно, и было отчасти сделано). Посылом номер три является эмулятор Dynamips. Причем он здесь? А притом, что именно он натолкнул меня на мысль о перепаковке образа. Если взглянуть на раздел «How to use?» на официальном сайте проекта (http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator), то можно обнаружить, что эмулятор использует распакованные образы для ускорения загрузки:


To boot quickly, the preferred method is to decompress the IOS image with the "unzip" utility. It avoids to run the self-decompressing process in the emulator.
chris@portchris2:~/dynamips-0.2.5$ unzip -p c7200-advipservicesk9-mz.124-9.T.bin > image.bin
warning [c7200-advipservicesk9-mz.124-9.T.bin]: 27904 extra bytes at beginning or within zipfile
(attempting to process anyway)
chris@portchris2:~/dynamips-0.2.5$ file image.bin
image.bin: ELF 32-bit MSB executable, cisco 7200, version 1 (SYSV), statically linked, stripped
You can ignore the warning, unzip has just skipped the self-decompressing code at the beginning of the image.
Now, you can boot the imagе


Значит, если есть запакованный образ, то можно попытаться использовать более оптимальные параметры(!) сжатия, которые позволят разместить образ на флеш. Обращаю внимание на одну важную деталь — так как мы не собираемся переписывать самораспаковывающися код, то есть заниматься дизассемблированием, да и ассемблер под 32х битные процессоры PowerPC я не знаю (да и под 64х битные тоже), то сам алгоритм сжатия менять мы не сможем. Самораспаковывающаяся часть просто не сможет распаковать архивы, сжатые другими методами. По поводу используемого в образе алгоритма сжатия можно взглянуть сюда: Cisco IOS Configuration Fundamentals Configuration Guide, Release 12.4 - Loading and Managing System Images, пункт Image Naming Conventions. Поле «тип» в имени образа как раз отвечает за его характеристики:

f - The image runs from flash memory.
m - The image runs from RAM.
r - The image runs from ROM.
l - The image is relocatable.
z - The image is zip compressed.
x -The image is mzip compressed.

В нашем случае образ имеет тип mz – работает в памяти и запакован как раз в zip-архив. Убедиться в этом просто — большинство архиваторов (WinZIP, WinRAR, 7zip) c легкостью открывают и распаковывают архив.

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

7-zip 4.65 со следующими параметрами:
Формат архива — zip
Уровень сжатия — Ультра
Метод сжатия — Deflate
Размер словаря — 32КB
Размер слова — 258

В результате был получен архив следующих размеров: 15,7 MB (16 489 764 bytes)

WinZIP 11.2 при использовании улучшенного метода Deflate выдал файл размером 16,0 MB (16 803 634 bytes)

WinRAR 3.80 формат архива — zip с наилучшими параметрами сжатия: 16,3 MB (17131 353 bytes)

PKZIP 9.00 от создателей формата совсем подвел, и по методу Deflate с максимальным сжатием произвел файл, размером 16,3 MB (17 094 474 bytes).

Итогом моего небольшого сравнительного тестирования стал выбор для экспериментов архива, как нетрудно догадаться, созданного 7zip. Далее требуется этот архив поместить вместо оригинального образа. Чтобы проделать это, нам понадобится шестнадцатеричный редактор типа WinHex, HT Editor или hview. Я предпочитаю WinHex, но нам понадобится еще и HT, чуть позже объясню почему.

Как вы можете видеть на скриншоте, скорее всего бинарный образ IOS есть ничто иное, как исполняемый файл в формате ELF (Executable and Linkable Formate). ELF-формат является основным исполняемым файлом в *nix-like системах, неудивительно встретить его здесь. По ELF-формату существует четкая спецификация, последняя версия которой 1.2, однако для наших целей будет достаточно, например, заголовочного файла из состава libc - elf.h. Обычный бинарный ELF файл представляет собой структуру следующего вида:

ELF Header
Program Header Table (optional)
Section 1
Section 2

Section n
Section Header Table

Не углубляясь в описание, дабы не повторяться, отправляю вас к спецификации.
Так как весь процесс исследования я проводил в MS Windows, то пришлось искать замену утилите readelf из состава binutils. Этой заменой и оказался шестнадцатеричный редактор HT (http:///hte.sf.net), который умеет читать и модифицировать структуры данных исполняемых файлов ELF. При попытке открыть подопытный образ c2600-entbasek9-mz.124-9.T1.bin, HT сразу меня обругал, что и привлекло мое внимание. Обратимся к elf.h, структура данных, отвечающая за ELF-заголовок выглядит так:

typedef struct {
Elf_Char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;


В нашем случае поле e_machine имеет значение 0x002b или 43, что соответствует процессору SPARC v9:

#define EM_SPARCV9 43 /* SPARC v9 64-bit */

Однако нам известно, что маршрутизатор 2611 использует процессор Motorolla MPC860, значит поле должно иметь значение 0x0014, что соответствует:

#define EM_PPC 20 /* PowerPC */

Скорее всего, это есть простейшая защита от дизассемблирования образа, однако нам это не сильно помешает. С помощью F6 открываем режим просмотра elf/header. Из него нам становятся известны следующие подробности:

- elf header size 0x34
- program header entry size 0x20
- program header count 1
- section header entry size 0x28
- section header count 6

Что в сумме нам дает размер 52+32+6*40=324 или 0x144.
То есть в файле всего 6 секций (соответственно 6 заголовков секций) и 1 заголовок программы. Вероятнее всего одна из секций предназначена для хранения архива с исполняемым образом IOS. Эту секцию можно вычислить либо по размеру (логично, что ее размер должен быть максимальным), либо по типу секции. Заголовок таблицы секций можно просмотреть, нажав F6 и выбрав elf/section headers, но для начала обратимся к описанию секции:

typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;

Поле sh_type и будет отвечать за искомый тип. К сожалению здесь меня ждал облом, большинство из секций имело тип SHT_PROGBITS, предназначенный для секций, значение которых определяется самой программой. Однако 4-я секция, имела тип отличный от предыдущих и имела значение 0x00000007, секция предназначена для каких-либо программных заметок. Первая (нулевая) секция также имеет отличный от предыдущих тип (SHT_NULL), исходя из этого становится ясно что она пустая и ни с чем не ассоциирована. В итоге приходится искать секцию с максимальным размером (поле sh_size), ее оказывается секция за номером пять, ее размер 0x1070e7c или 17239676 байт. Вернемся к hex-виду (F6 - hex) и перейдем по смещению (поле sh_offset) с помощью кнопки F5:


И что же мы здесь видим? Где же наш архив, который должен начинаться с сигнатуры PK, а точнее если следовать спецификации PKZIP-формата (http://www.pkware.com/documents/casestudies/APPNOTE.TXT) 0x04034b50 в обратном порядке? Как не странно эта сигнатура обнаруживается на 22 байта позже. Однако, если хорошо присмотреться, то отказывается, что сразу за значением 0xFEEDFACE идет размер распакованного образа 0x02AED904. Если внимательно поискать в Сети, то можно наткнуться на информацию из книги Cisco Networks Hacking Exposed издательства McGraw-Hill/Osborne. Наши русские парни Andrew A. Vladimirov, Konstantin V. Gavrilenko, Janis N. Vizulis and Andrei A. Mikhailovsky еще в 2006 году занимались разработкой бинарного патчинга IOS 12.3(6). Им удалось выяснить что после магического значения 0xFEEDFACE идут последовательно uncompressed image size, compressed image size, compressed image checksum, uncompressed image checksum. Помимо этого, им стало известно, что алгоритм вычисления контрольной суммы представляет собой модифицированный алгоритм контрольной суммы в Интернет, однако нам, к счастью, не придется их вычислять — как проверено позже на практике,маршрутизатор сам скажет нам какое значение должно иметь это поле, если конечно подсчитанная контрольная сумма и записанная в соответствующем поле не совпадут:

Error : compressed image checksum is incorrect 0xB99D8823
Expected a checksum of 0xF6F69877

*** System received a Software forced crash ***
signal= 0x17, code= 0x5, context= 0x800805f0
PC = 0x0, Vector = 0x0, SP = 0x0

Итак, перейдем к активным действиям. Для начала вырезаем из файла старую 4ю секцию, содержащую zip архив за исключением 20 байт, начиная с магического значения 0xFEEDFACE до сигнатуры zip не включая, то есть со смещения 0x44F8 по смещение 0x1075360 + 0x44F8. Затем по смещению 0x44F8 вставляем новый архив.

Соединим всю известную нам информацию воедино. Размер старой секции (№5), содержащей архив с образом IOS, загружаемым в память 0x1070e7c или 17239676 (включая 20 байт с 0xFEEDFACE по 0x504B0304 не включая). Размер новой секции, содержащей архив 0xFB9D38 или 16489784 (опять же включая те 20 байт). Разница между старым и новым значением составит 0xB7158 — 749912. То есть смещение 4й секции, физически расположенной в файле после 5й секции, требуется изменить с 0x1075360 на 0xFBE208.

Старые значения после магической записи 0xFEEDFACE:
unpacked image size: 0x02AED904 45013252
packed image size: 0x01070E66 17239654 (разница с размером 5й секции - на 22 байта меньше)
packed image checksum: 0xB58BE139
unpacked image checksum: 0xA29D4F6E
затем идет сигнатура: 0x504B0304

Новые значения после магической записи 0xFEEDFACE:
unpacked image size: 0x02AED904 (остался тот же)
packed image size: 0x00FB9D22 16489762 (разница с размером 5й секции - на 22 байта меньше)
packed image checksum: нам неизвестна, можно заменить на что-нибудь приметное, типа 0x48000000
unpacked image checksum: 0xA29D4F6E (остался тот же)

Новую контрольную сумму, как я уже говорил, сообщит сам маршрутизатор.
После всех манипуляций конечный образ был получен, однако размер его меня не впечатлил. К сожалению, по сравнению с изначальным размером 16,4 MB (17257364 bytes) я получил всего лишь 15,7 MB (16507472 bytes), то есть разница, которую я уже посчитал выше, составила 749912 байт. Конечно, это позволит загрузить образ на flash, но скорее всего придется применять опцию /no-squeeze-reserve-space. Однако, когда при копировании маршрутизатор запросит повторное стирание flash, подтверждать действие не нужно:

router#erase /no-squeeze-reserve-space flash:
Erasing the flash filesystem will remove all files! Continue? [confirm]
Erasing device... eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeee ...erased
Erase of flash: complete
router#copy tftp://172.22.1.17/c2600-entbasek9-mz.124-9.T1-shad-pk.bin flash:
Destination filename [c2600-entbasek9-mz.124-9.T1-shad-pk.bin]?
Accessing tftp://172.22.1.17/c2600-entbasek9-mz.124-9.T1-shad-pk.bin...
Erase flash: before copying? [confirm]n
Loading c2600-entbasek9-mz.124-9.T1-shad-pk.bin from 172.22.1.17 (via Ethernet0/0): !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!![OK - 16507472 bytes]

Verifying checksum... CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC OK (0xE6ED)
16507472 bytes copied in 178.188 secs (92641 bytes/sec)
router#reload
Proceed with reload? [confirm]

Естественно, такая ситуация была бы только в том случае, если образ был бы сформирован правильно. Поэтому я не стал спешить, и для загрузки образа защел в режим rommon по Ctrl+Break, затем со своего компьютера загрузил образ по tftp напрямую в RAM:

rommon 1>tftpdnld -r

После загрузки маршрутизатор сказал:

TFTP flash copy: Error, image size (16507470) mismatches netsize (16507472).

Оказалось, что при редактировании размера 5й секции я ошибся на 2 байта (те самые 20 байт с 0xFEEDFACE + 2).

После второй попытки загрузки выяснилось, что контрольная сумма запакованного образа — 0xB0257B0D:

Error : compressed image checksum is incorrect 0xB99D8823
Expected a checksum of 0x48000000

*** System received a Software forced crash ***
signal= 0x17, code= 0x5, context= 0x800805f0
PC = 0x0, Vector = 0x0, SP = 0x0

Корректируем соответствующее поле после 0xFEEDFACE (Загружаем файл в HT по F3, переходим по смещению с помощью F5 и редактируем по F4, не забывая сохраняться по F2), затем снова грузимся.

rommon 4>reset -s

Дальше соответственно все ок, однако затем IOS вываливается, и отказывается работать по причине недостатка памяти:

System Bootstrap, Version 11.3(2)XA4, RELEASE SOFTWARE (fc1)
Copyright (c) 1999 by cisco Systems, Inc.
TAC:Home:SW:IOS:Specials for info
PC = 0xfff0a530, Vector = 0x500, SP = 0x680127c8
PC = 0xfff0a530, Vector = 0x500, SP = 0x680127b0
C2600 platform with 65536 Kbytes of main memory

PC = 0xfff0a530, Vector = 0x500, SP = 0x80004684

monitor: command "boot" aborted due to user interrupt
rommon 1 > tftpdnld -r

IP_ADDRESS: 172.22.1.199
IP_SUBNET_MASK: 255.255.255.0
DEFAULT_GATEWAY: 172.22.1.1
TFTP_SERVER: 172.22.1.17
TFTP_FILE: c2600-entbasek9-mz.124-9.T1-shad-pk.bin

Receiving c2600-entbasek9-mz.124-9.T1-shad-pk.bin from 172.22.1.17 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!
File reception completed.
program load complete, entry point: 0x80008000, size: 0xfbe0d8
Self decompressing the image : ################################################## ################################################## ################################################## ## [OK]

Smart Init is enabled
smart init is sizing iomem
ID MEMORY_REQ TYPE
000092 0X000B3280 C2600 Dual Ethernet
0X00098670 public buffer pools
0X00211000 public particle pools
TOTAL: 0X0035C8F0

If any of the above Memory Requirements are
"UNKNOWN", you may be using an unsupported
configuration or there is a software problem and
system operation may be compromised.
Rounded IOMEM up to: 3Mb.
Using 5 percent iomem. [3Mb/64Mb]



Cisco IOS Software, C2600 Software (C2600-ENTBASEK9-M), Version 12.4(9)T1, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2006 by Cisco Systems, Inc.
Compiled Wed 30-Aug-06 15:43 by prod_rel_team
Image text-base: 0x800080E4, data-base: 0x81B46C00

SYSTEM INIT: INSUFFICIENT MEMORY TO BOOT THE IMAGE!

%Software-forced reload

00:00:16 UTC Fri Mar 1 2002: Unexpected exception to CPUvector 700, PC = 0x8069DE48, LR = 0x8069DD88

-Traceback= 0x8069DE48 0x8069DD88 0x80014B10 0x81B3BAA4 0x8170812C 0x817082A4 0x816E3D68 0x816E3DF4 0x816E3ED4 0x816E3E38 0x816E3ED4 0x816E3E38 0x816E3ED4 0x816E4A1C 0x8171AB4C 0x81729008

CPU Register Context:
MSR = 0x00029032 CR = 0x33000095 CTR = 0x806A2518 XER = 0x8000FE00
R0 = 0x00000000 R1 = 0x82EDD858 R2 = 0x82AF0000 R3 = 0x00000003
R4 = 0xFFFFFFFE R5 = 0x00000000 R6 = 0x00000003 R7 = 0x00009032
R8 = 0x82AF0000 R9 = 0x82820000 R10 = 0x82BBCC50 R11 = 0x00000000
R12 = 0x00004117 R13 = 0xFFF48A24 R14 = 0x80A82090 R15 = 0x00000000
R16 = 0x00000000 R17 = 0x00000000 R18 = 0x00000000 R19 = 0x00000000
R20 = 0x00000000 R21 = 0x00000000 R22 = 0x81B47998 R23 = 0x00000000
R24 = 0x81B47A48 R25 = 0x81708128 R26 = 0x81708128 R27 = 0x00002814
R28 = 0x00000000 R29 = 0x82C8F368 R30 = 0x00000000 R31 = 0x82AF0000

Writing crashinfo to flash:crashinfo_20020301-000016

Однако, здесь я не расстроился, и решил взяться за другой образ — c2600-advsecurityk9-mz.124-21.bin. После аналогичных манипуляций с байтами, даже при использовании 128 битного слова в 7zip, размер составил 15947076 (против изначального размера 16635336), что позволило загрузить его во flash. Помимо прочего, этот образ уже не ругался на недостаток памяти RAM и прекрасно чувствовал себя на этой платформе:

router#show version
Cisco IOS Software, C2600 Software (C2600-ADVSECURITYK9-M), Version 12.4(21), RELEASE SOFTWARE (fc1)


router#show memory summary
Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)
Processor 82A44240 20244772 8718640 11526132 10171028 10098348
I/O 3CA3400 3525632 1650536 1875096 1875096 1875068


router#show flash:

System flash directory:
File Length Name/status
1 15947076 c2600-advsecurityk9-mz.124-21-shad-pk.bin
[15947140 bytes used, 830072 available, 16777212 total]
16384K bytes of processor board System flash (Read/Write)

Однако, у нас остается еще одна небольшая проблема. Если запустить проверку:

router#verify flash:c2600-advsecurityk9-mz.124-21-shad-pk.bin

Маршрутизатор обругает нас, сообщив, что Embedded hash и Calculated hash не совпадают. Исправить это очень просто — 16 байт контрольной суммы находится в самом конце бинарного файла образа. Обнаружить это можно даже с помощью простого поиска:





После исправления маршрутизатор сообщает, что контрольная сумма успешно подсчитана и совпадает:

Embedded Hash MD5 : 3DD2C6591FF4F033425147DE4540F9CD
Computed Hash MD5 : 3DD2C6591FF4F033425147DE4540F9CD
CCO Hash MD5 : 79020945BDFE2A354E012C8303136360

Embedded hash verification successful.
File system hash verification successful.

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

 

 

Вернуться обратно