Kali Linuxにzenmapを導入する

ペネトレーションテスト用としてよく利用される「Kali Linux」ですが、最近のリリース(2021.1付近)にはzenmapがデフォルトではインストールされていないようです。aptでインストールしようとしてもKaliのパッケージリポジトリにはzenmapは入っていません。
zenmapがpython2+gtk2で動作していることが原因なのかもしれません(または「zenmapなんて初心者ツール使うな!」というKali Linux側の想いなのかもしれませんが...)。
とはいえ、nmapに比べるとGUIで操作できるzenmapはやはり便利。なんとかインストールできないものか、と思い立ち、ちょっとやってみましたので、その方法をご紹介します。
インストール手順概要
2021年5月現在、Linux用のzenmapパッケージは.rpm形式でしか提供されていません。ですのでrpm形式のパッケージをDebian/Ubuntuで利用できるように.deb形式に変換してインストールすることにします。
その際に、.rpmパッケージを.debパッケージに変換するための「alien」というパッケージを先に導入します。
また、Kali Linuxにはzenmapを動作させるためのpython-gtk2パッケージ(とそれに関連するパッケージ)が入っていませんしKali Linux用のaptリポジトリにも入っていません。
必要なパッケージを1つずつ探してきてインストールする方法もありますが、後々のことを考えてpython-gtk2パッケージを含んだリポジトリを導入することにします。
まずはパッケージのアップデート
本題に入る前に、まずはaptリポジトリとパッケージ類のアップデートを行います。
$ sudo apt update
$ sudo apt upgrade
alienの導入
.rpmパッケージを.debパッケージに変換するためのパッケージとして「alien」をインストールします。
$ sudo apt install alien
zenmapの入手&変換
nmapのサイトからzenmapのrpmパッケージを入手します。
Nmap: the Network Mapper - Free Security Scanner
ダウンロードが終了したらzenmapパッケージを変換します。
以下の例では、「zenmap-7.91-1.norach.rpm」を「Download」ディレクトリにダウンロードしたものとします。
$ cd Download
$ sudo alien zenmap-7.91-1.noarch.rpm
zenmap_7.91-2_all.deb generated
ちなみに、このあとすぐにzenmapを実行してみると、こんな感じになってしまいます。
$ sudo zenmap
Could not import the zenmapGUI.App module: 'No module named gtk'.
I checked in these directories:
/usr/bin
/usr/share/offsec-awae-wheels/backports.functools_lru_cache-1.6.1-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/colorama-0.4.3-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/ply-3.11-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/six-1.15.0-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/certifi-2020.4.5.1-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/pycparser-2.20-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/requests-2.23.0-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/PySocks-1.7.1-py27-none-any.whl
/usr/share/offsec-awae-wheels/chardet-3.0.4-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/beautifulsoup4-4.9.1-py2-none-any.whl
/usr/share/offsec-awae-wheels/idna-2.9-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/soupsieve-1.9.5-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/pyOpenSSL-19.1.0-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/enum34-1.1.10-py2-none-any.whl
/usr/share/offsec-awae-wheels/urllib3-1.25.9-py2.py3-none-any.whl
/usr/share/offsec-awae-wheels/ipaddress-1.0.23-py2.py3-none-any.whl
/usr/share/cffi-wheels/py-1.8.1-py2.py3-none-any.whl
/usr/share/cffi-wheels/setuptools-44.1.0-py2.py3-none-any.whl
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.6/site-packages
If you installed Zenmap in another directory, you may have to add the
modules directory to the PYTHONPATH environment variable.
「gtkがない」と言われているので、aptでgtkを入れようとしても
$ sudo apt install python-gtk2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
E: パッケージ python-gtk2 が見つかりません
python-gtk2の導入
Debian 10(buster)のリポジトリを追加してみます。
今回は /etc/apt/sources.list に直接Debianのリポジトリを使用するように設定します。
$ sudo vi /etc/apt/sources.list
「/etc/apt/sources.list」を次のように編集して保存します。
:
# Additional line for source packages
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free
deb http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free <------ この行を追加
「apt update」します。
$ sudo apt update
改めてpython-gtk2をインストールします。
$ sudo apt install python-gtk2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libffi6 python-cairo python-gobject-2 python-numpy python-pkg-resources
提案パッケージ:
python-gobject-2-dbg python-gtk2-doc gfortran python-dev python-pytest
python-numpy-dbg python-numpy-doc python-setuptools
以下のパッケージが新たにインストールされます:
libffi6 python-cairo python-gobject-2 python-gtk2 python-numpy
python-pkg-resources
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 2 個。
3,283 kB のアーカイブを取得する必要があります。
この操作後に追加で 17.0 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
:
入ったようです。
ここで再度zenmapを起動してみます。
$ sudo zenmap
今度は起動されました。
念のために、今回追加したDebianリポジトリはこのあと無効にしておくほうが良いかもしれません(誤ってDebianリポジトリ側のパッケージをインストール/更新してしまわないように)。
が、python-gtk2パッケージとその関連パッケージのアップデートに備え、定期的にDebianリポジトリを有効にしてapt update & upgradeするほうが良いでしょう。
このあたりの運用はよく検討する必要があるかと思います。