2007/03/16

Как изменить приветствие SSH-сервиса

Если сервис был самостоятельно собран из исходников, то достаточно отредактировать файл version.h и пересобрать сервис по-новому.

Всё немного сложнее, если используется уже кем-то собранный пакет. Например, Debian-система при попытке подсоединения к ней говорит:
# telnet localhost 22
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.6

Злоумышленнику сразу выдаётся масса информации о системе.

Debian позволяет пересобрать пакет по своим потребностям и нуждам.

1. Необходимо убедиться, что файл /etc/apt/sources.list содержит хотя бы один deb-src-источник. Если не содержит - добавить. Также установить, если не установлены утилиты для сборки debian-пакетов

# cat >> /etc/apt/sourсes.list
deb-src http://ftp.at.debian.org/debian/ stable main
Ctrl + C
# apt-get update
# apt-get install dpkg-dev debhelper devscripts
...

2. Скачать и распаковать в текущую директорию debian-исходники пакета ssh

apt-get source ssh

3. Скачать и установить все необходимые для сборки пакеты (будет установлено достаточно большое количество пакетов - около 100)

apt-get build-dep ssh

4. В директории ./openssh-x.x.x/debian будет файл rules, в нем строка

SSH_VERSION := $(shell sed -e '/define/!d; s/.*\"\(.*\)\".*/\1/; q' <version.h) ... и т.д.

Можно отредактировать её по желанию, только не забыть, что она в свою очередь тоже зависит от содержимого файла version.h

5. Чтобы дальнейшие update'ы пакетов не затерли внесенные изменения, необходимо добавить в ./openssh-x.x.x/debian/changelog описание самостоятельно собранной версии. Номер версии должен отличаться, например вместо 1:3.8.1p1-8.sarge.6 укажите 1:3.8.1p1-8.sarge.6without_banner. Если что-то будет не так в данном файле сборка пакета не начнется.

6. Собрать самостоятельно сконфигурированный пакет

cd ./openssh-x.x.x
debuild -us -uc
...

7. Если процесс сборки прошёл успешно, установить собранный пакет

# cd ..
# dpkg -i ssh_x.x.x_i386.deb
(Reading database ... 33306 files and directories currently installed.)
Preparing to replace ssh x.x.x (using ssh_x.x.xwithout_banner_i386.deb) ...
Unpacking replacement ssh ...
Setting up ssh (x.x.xwithout_banner) ...
Restarting OpenBSD Secure Shell server: sshd.

Ссылки:

  1. How to make a small change to a Debian tool and repackage it?
  2. Rebuilding Debian packages
  3. HOWTO: Service banner faking

4 comments:

GQ said...

# apt-get install dpkg-dev debhelper devscripts
Заменить на
aptitude install build-essential

Roman Sozinov said...

to gq:
объясните, почему?
как будет возможность, попробую по вашему :)

GQ said...

# apt-cache show build-essential
Package: build-essential
Priority: optional
Section: devel
Installed-Size: 20
Maintainer: Matthias Klose
Architecture: i386
Version: 11.3
Depends: libc6-dev | libc-dev, gcc (>= 4:4.1.1), g++ (>= 4:4.1.1), make, dpkg-dev (>= 1.13.5)
Filename: pool/main/b/build-essential/build-essential_11.3_i386.deb
Size: 6982
MD5sum: 873767ed62c759b08c07b4e06a534005
SHA1: 9ded476f0d7a85febfcead168c63870a1c0fd716
SHA256: 82d90dec3a10ff322ac0776c60b5f7c164e2ea49ea467e87430ebc823940d173
Description: informational list of build-essential packages
If you do not plan to build Debian packages, you don't need this
package. Moreover this package is not required for building Debian
packages.
.
This package contains an informational list of packages which are
considered essential for building Debian packages. This package also
depends on the packages on that list, to make it easy to have the
build-essential packages installed.
.
If you have this package installed, you only need to install whatever
a package specifies as its build-time dependencies to build the
package. Conversely, if you are determining what your package needs
to build-depend on, you can always leave out the packages this
package depends on.
.
This package is NOT the definition of what packages are
build-essential; the real definition is in the Debian Policy Manual.
This package contains merely an informational list, which is all
most people need. However, if this package and the manual disagree,
the manual is correct.
Tag: devel::packaging, interface::commandline, role::data, suite::debian

Roman Sozinov said...

to GQ:
вопросов больше не имею :)