KaliLinuxでIDA-Demoを使う

環境

  • Linux version 4.6.0-kali1-amd64

おそらくDebian系ならこれでできると思う

IDA Demo 6.95 for Linuxをダウンロードする

$ mkdir temp
$ cd temp
$ wget https://out7.hex-rays.com/files/idademo695_linux.tgz
$ tar xvzf idademo695_linux.tgz
$ cd idademo695

ソースではなく実行形式が含まれているので

$ ./idaq

で実行できるがこのKaliLinuxのバージョンではライブラリ等が足りないので

$ ./idaq
 bash: ./idaq: そのようなファイルやディレクトリはありません

となる。

本記事はこれを実行できるように試行錯誤したものなので、

結果だけ知りたいという人は最後のコマンドを実行してください

前準備

$ apt update
$ apt upgrade

ライブラリのインストール

IDA-Demoでは32ビットのライブラリが必要なので

$ dpkg -S libgthread-2.0.so.0
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0.4800.1
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0

dpkgでライブラリが含まれているパッケージを探す今回は

$ apt install libglib2.0-0:amd64
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
libglib2.0-0 はすでに最新バージョン (2.48.1-2) です。
libglib2.0-0 は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

amd64だけではなくi386も必要なので

$ apt install libglib2.0-0:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ libglib2.0-0:i386 が見つかりません
E: 'libglib2.0-0' に一致するパッケージは見つかりませんでした
E: 正規表現 'libglib2.0-0' ではパッケージは見つかりませんでした

OSが64ビットなので32ビットのパッケージのリポジトリは追加されていないのでみつからない、なので

$ dpkg --add-architecture i386
$ apt update
ヒット:1 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling InRelease
取得:2 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling/main i386 Packages [13.9 MB]
取得:3 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling/non-free i386 Packages [135 kB]
取得:4 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling/contrib i386 Packages [86.7 kB]
14.1 MB を 11秒 で取得しました (1,186 kB/s)                                    
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています       
状態情報を読み取っています... 完了
パッケージはすべて最新です。

追加してからもう一度インストールする

$ apt install libglib2.0-0:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  gcc-6-base:i386 libc6:i386 libffi6:i386 libgcc1:i386 libpcre3:i386
  libselinux1:i386 zlib1g:i386
提案パッケージ:
  glibc-doc:i386 libc-l10n:i386
以下のパッケージが新たにインストールされます:
  gcc-6-base:i386 libc6:i386 libffi6:i386 libgcc1:i386 libglib2.0-0:i386
  libpcre3:i386 libselinux1:i386 zlib1g:i386
アップグレード: 0 個、新規インストール: 8 個、削除: 0 個、保留: 0 個。
5,986 kB のアーカイブを取得する必要があります。
この操作後に追加で 16.7 MB のディスク容量が消費されます。
続行しますか? [Y/n] y

実行してみる

$ ./idaq 
./idaq: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

まだライブラリが足りないようなので

$ ldd idaq | \grep 'not found' | awk '{ print $1 }' | xargs dpkg -S | awk '{ print $1 "i386" }' | sort | uniq
libstdc++6:amd64:i386
libx11-6:amd64:i386

足りないパッケージの32ビット版をインストールしていく

$ apt install libstdc++6:i386 libx11-6:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libxau6:i386 libxcb1:i386 libxdmcp6:i386
以下のパッケージが新たにインストールされます:
  libstdc++6:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxdmcp6:i386
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 0 個。
1,281 kB のアーカイブを取得する必要があります。
この操作後に追加で 3,933 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

もう一度実行してみる

$ ./idaq
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: linuxfb, minimal, xcb.

Reinstalling the application may fix this problem.
中止

今度はQt関連のエラーが出る

なのでライブラリをインストールしていく

$ apt install libqt5gui5:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libbsd0:i386 libdbus-1-3:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386
  libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libegl1-mesa:i386 libelf1:i386 libevdev2:i386 libexpat1:i386
  libfontconfig1:i386 libfreetype6:i386 libgbm1:i386 libgcrypt20:i386
  libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386
  libglew1.13:i386 libglu1-mesa:i386 libgpg-error0:i386 libgraphite2-3:i386
  libgudev-1.0-0:i386 libharfbuzz0b:i386 libice6:i386 libicu57:i386
  libinput10:i386 libjpeg62-turbo:i386 libllvm3.8:i386 liblzma5:i386
  libmtdev1:i386 libpciaccess0:i386 libpcre16-3:i386 libpng16-16:i386
  libproxy1v5:i386 libqt5core5a:i386 libqt5dbus5:i386 libqt5network5:i386
  libqt5svg5:i386 libqt5widgets5:i386 libsm6:i386 libsystemd0:i386
  libtinfo5:i386 libtxc-dxtn-s2tc0:i386 libudev1:i386 libuuid1:i386
  libwacom2:i386 libwayland-client0:i386 libwayland-server0:i386
  libx11-xcb1:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386
  libxcb-icccm4:i386 libxcb-image0:i386 libxcb-keysyms1:i386
  libxcb-present0:i386 libxcb-randr0:i386 libxcb-render-util0:i386
  libxcb-render0:i386 libxcb-shape0:i386 libxcb-shm0:i386 libxcb-sync1:i386
  libxcb-util0:i386 libxcb-xfixes0:i386 libxcb-xinerama0:i386 libxcb-xkb1:i386
  libxdamage1:i386 libxext6:i386 libxfixes3:i386 libxi6:i386
  libxkbcommon-x11-0:i386 libxkbcommon0:i386 libxrender1:i386
  libxshmfence1:i386 libxxf86vm1:i386 mesa-utils:i386
提案パッケージ:
  rng-tools:i386 glew-utils:i386 libthai0:i386 libqt5libqgtk2:i386
  qt5-image-formats-plugins:i386 qtwayland5:i386
推奨パッケージ:
  qttranslations5-l10n:i386
以下のパッケージは「削除」されます:
  mesa-utils
以下のパッケージが新たにインストールされます:
  libbsd0:i386 libdbus-1-3:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386
  libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libegl1-mesa:i386 libelf1:i386 libevdev2:i386 libexpat1:i386
  libfontconfig1:i386 libfreetype6:i386 libgbm1:i386 libgcrypt20:i386
  libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386
  libglew1.13:i386 libglu1-mesa:i386 libgpg-error0:i386 libgraphite2-3:i386
  libgudev-1.0-0:i386 libharfbuzz0b:i386 libice6:i386 libicu57:i386
  libinput10:i386 libjpeg62-turbo:i386 libllvm3.8:i386 liblzma5:i386
  libmtdev1:i386 libpciaccess0:i386 libpcre16-3:i386 libpng16-16:i386
  libproxy1v5:i386 libqt5core5a:i386 libqt5dbus5:i386 libqt5gui5:i386
  libqt5network5:i386 libqt5svg5:i386 libqt5widgets5:i386 libsm6:i386
  libsystemd0:i386 libtinfo5:i386 libtxc-dxtn-s2tc0:i386 libudev1:i386
  libuuid1:i386 libwacom2:i386 libwayland-client0:i386 libwayland-server0:i386
  libx11-xcb1:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386
  libxcb-icccm4:i386 libxcb-image0:i386 libxcb-keysyms1:i386
  libxcb-present0:i386 libxcb-randr0:i386 libxcb-render-util0:i386
  libxcb-render0:i386 libxcb-shape0:i386 libxcb-shm0:i386 libxcb-sync1:i386
  libxcb-util0:i386 libxcb-xfixes0:i386 libxcb-xinerama0:i386 libxcb-xkb1:i386
  libxdamage1:i386 libxext6:i386 libxfixes3:i386 libxi6:i386
  libxkbcommon-x11-0:i386 libxkbcommon0:i386 libxrender1:i386
  libxshmfence1:i386 libxxf86vm1:i386 mesa-utils:i386
アップグレード: 0 個、新規インストール: 79 個、削除: 1 個、保留: 0 個。
40.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 249 MB のディスク容量が消費されます。
続行しますか? [Y/n] y

GUIを拡張するためにGTKのライブラリもインストールする

$ apt install libgtk2.0-0:i386 gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libatk1.0-0:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386 libcairo2:i386 libcomerr2:i386 libcups2:i386 libdatrie1:i386 libgail-common:i386 libgail18:i386 libgdk-pixbuf2.0-0:i386
  libgmp10:i386 libgnutls30:i386 libgssapi-krb5-2:i386 libhogweed4:i386 libidn11:i386 libjbig0:i386 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libnettle6:i386 libp11-kit0:i386
  libpango-1.0-0:i386 libpangocairo-1.0-0:i386 libpangoft2-1.0-0:i386 libpixman-1-0:i386 libtasn1-6:i386 libthai0:i386 libtiff5:i386 libxcomposite1:i386 libxcursor1:i386 libxinerama1:i386 libxrandr2:i386
提案パッケージ:
  gnutls-bin:i386 krb5-doc:i386 krb5-user:i386 librsvg2-common:i386 gvfs:i386
推奨パッケージ:
  murrine-themes:i386
以下のパッケージが新たにインストールされます:
  gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 libatk1.0-0:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386 libcairo2:i386 libcomerr2:i386 libcups2:i386 libdatrie1:i386
  libgail-common:i386 libgail18:i386 libgdk-pixbuf2.0-0:i386 libgmp10:i386 libgnutls30:i386 libgssapi-krb5-2:i386 libgtk2.0-0:i386 libhogweed4:i386 libidn11:i386 libjbig0:i386 libk5crypto3:i386
  libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libnettle6:i386 libp11-kit0:i386 libpango-1.0-0:i386 libpangocairo-1.0-0:i386 libpangoft2-1.0-0:i386 libpixman-1-0:i386 libtasn1-6:i386 libthai0:i386
  libtiff5:i386 libxcomposite1:i386 libxcursor1:i386 libxinerama1:i386 libxrandr2:i386
アップグレード: 0 個、新規インストール: 37 個、削除: 0 個、保留: 0 個。
8,173 kB のアーカイブを取得する必要があります。
この操作後に追加で 21.6 MB のディスク容量が消費されます。
続行しますか? [Y/n] y

実行できるが何かメッセージがあるので

$ ./idaq
Gtk-Message: Failed to load module "atk-bridge"
Gtk-Message: Failed to load module "canberra-gtk-module"

それぞれインストールする

$ apt install libatk-adaptor:i386 libgail-common:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
libgail-common:i386 はすでに最新バージョン (2.24.30-4) です。
libgail-common:i386 は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libatk-bridge2.0-0:i386 libatspi2.0-0:i386
以下のパッケージが新たにインストールされます:
  libatk-adaptor:i386 libatk-bridge2.0-0:i386 libatspi2.0-0:i386
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
141 kB のアーカイブを取得する必要があります。
この操作後に追加で 495 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
$ sudo apt install libcanberra-gtk-module:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libasound2:i386 libcanberra-gtk0:i386 libcanberra0:i386 libltdl7:i386 libogg0:i386 libtdb1:i386 libvorbis0a:i386 libvorbisfile3:i386
提案パッケージ:
  libasound2-plugins:i386 libcanberra-pulse:i386
以下のパッケージが新たにインストールされます:
  libasound2:i386 libcanberra-gtk-module:i386 libcanberra-gtk0:i386 libcanberra0:i386 libltdl7:i386 libogg0:i386 libtdb1:i386 libvorbis0a:i386 libvorbisfile3:i386
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
863 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,251 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

これで実行できる

結果

結局次のコマンドを実行すればいい

$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libglib2.0-0:i386 libstdc++6:i386 libx11-6:i386 libqt5gui5:i386 libgtk2.0-0:i386 gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 libatk-adaptor:i386 libgail-common:i386 libcanberra-gtk-module:i386

UbuntuにApache+PHP7でWebサーバー、Postfix+Dovecot+Rainloop+MySQLでWebメール構築(途中)

環境

  • Ubuntu-Server : 15.10
  • PHP : 7.0.7
  • Apache : 2.4.12 (Ubuntu)
  • Postfix : 2.11.3
  • Dovecot : 2.2.18

ポイントはApacheを先にインストールすること!

Webサーバーの構築

Apacheのインストール

$ sudo apt-get update
$ sudo apt-get install apache2

http://~などでアクセスしてみて、インストールできてるか確認

PHP7のインストール

php7は標準ではインストール出来ないのでPPAを追加します

$ sudo add-apt-repository ppa:ondrej/php

php7とphp7のMySQLモジュールをインストールします

$ sudo apt-get update
$ sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-mcrypt

インストールが完了したら、Apacheを再起動して、以下のソースをwebルート(/var/www/html/)にアップロードしてブラウザからアクセスしてみます

$ sudo service apache2 restart
<?php
    phpinfo();
?>

phpの設定が表示されれば成功です

MySQLのインストール

次にMySQLをインストールします

$ sudo apt-get install mysql-server

インストールの時にrootのパスワードの設定するよう求められるので設定します。

完了したら以下のコマンドで、rootとして設定したパスワードでMySQLにアクセスできればインストール成功です。

$ mysql -u root -p

Webメールの構築

  • ドメイン名:hoge.com
  • ユーザー名/パスワード:hoge/hagehage

とする

Postfixの設定

SMTPサーバー。ポート25を使用して、外部のSMTPサーバーからのメール受信や、外部SMTPサーバーへのメール送信を行う。MTA(Message Transfer Agent)とも呼ばれる。

インストール

$ sudo apt-get install postfix

メールサーバーのタイプは[Internet Site]を選択します。 システムメール名(デフォルトのドメイン名のようなもの)はドメイン名を指定します。

設定ファイル編集

設定ファイルをコピーしてから編集

$ mv /etc/postfix/main.cf /etc/postfix/main.cf.old
$ cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf
$ vi /etc/postfix/main.cf
#基本設定
myhostname = hoge.com
mydomain = hoge.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination
home_mailbox = Maildir/ #ユーザーディレクトリ内にメールが格納される
mynetworks = 127.0.0.0/8
inet_interfaces = all
inet_protocols = ipv4

#以下コメントアウトする
#sendmail_path =       
#newaliases_path =
#mailq_path =
#setgid_group =
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =


#SMTP-Auth設定(追記する)
#認証にはdovecotを参照させる(Dovecotと同じユーザー名/パスワードで認証可能にする)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#スパム対策(追記する)
smtpd_etrn_restrictions = reject
smtpd_helo_required = yes
disable_vrfy_command = yes

Postfixを再起動する

$ newaliases
# /etc/init.d/postfix restart
[ ok ] Restarting postfix (via systemctl): postfix.service.

Dovecotの設定

DovecotはPostfixが保存したメールをメーラーへと渡すPOP3/IMAPサーバー。

この時のDovecotの認証方法をそのままPostfixのSMTP-Auth認証時に参照させる。

インストール

$ apt-get install dovecot-common dovecot-imapd dovecot-pop3d

認証方法を設定する

Dovecotの認証にはいくつかの方法があるが、最もわかりやすいパスワードフアイルを参照する方法(auth-passwdfile)で設定する。

OSのpasswdファイルと似た書式でDovecot専用のパスワードファイルを作製し参照させる。

$ vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no   #コメントを外す
auth_mechanisms = plain login  #コメントを外す 
!include auth-passwdfile.conf.ext #コメントを外す

パスワードファイルの参照先を設定

$ vi/etc/dovecot/conf.d/auth-passwdfile.conf.ext

このように書き換える

passdb {
  driver = passwd-file
  #args = scheme=CRYPT username_format=%u /etc/dovecot/users
  args = /etc/dovecot/users
}

userdb {
  driver = passwd-file
  #args = username_format=%u /etc/dovecot/users

  # Default fields that can be overridden by passwd-file
  #default_fields = quota_rule=*:storage=1G

  # Override fields from passwd-file
  #override_fields = home=/home/virtual/%u
  args = /etc/dovecot/users
}

パスワードファイルを用意

Dovecotのパスワードフアイルは暗号化してから記載する。

ユーザー名:hoge、パスワード:hagehageの時の暗号化文は以下のコマンドで取得できる。

$ doveadm pw -s DIGEST-MD5 -u hoge -p hagehage
{DIGEST-MD5}8687f71fc51f3392269ee94cbc1d33f1

参照先として指定した場所にパスワードファイルを作製する。

(ユーザー名):(暗号化済みパスワード) の形式で記載する。

$ vi /etc/dovecot/users
hoge:{DIGEST-MD5}8687f71fc51f3392269ee94cbc1d33f1

その他編集

$ vi /etc/dovecot/dovecot.conf
# 30行目:変更(IPv6をリスンしない場合)
listen = *
$ vi etc/dovecot/conf.d/10-mail.conf
# 30行目:Maildir形式に変更
mail_location = maildir:~/Maildir
$ vi /etc/dovecot/conf.d/10-master.conf 
# 96-98行目:コメント解除し追記
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}
$ vi /etc/dovecot/conf.d/10-ssl.conf
# 6行目:コメント解除して変更(SSLなし)
ssl = no

# 12,13行目:コメントにする
#ssl_cert = </etc/dovecot/dovecot.pem
#ssl_key = </etc/dovecot/private/dovecot.pem

再起動

Dovecotを再起動し設定を反映させる。

$ /etc/init.d/dovecot restart

動作確認

telnetで接続してPostfix・Dovecot認証の動作確認を行う

POP3動作確認

telnetで接続して認証確認をする。

POP3は平文なので、そのままユーザー名をパスワードを打てばいい。

$ telnet hoge.com 110
Trying 127.0.1.1...
Connected to hoge.com.
Escape character is '^]'.
+OK Dovecot ready.
USER hoge
+OK
PASS hogehoge
OK LOGGED IN.

こうなれば成功

$ telnet hoge.com 110
Trying 127.0.1.1...
Connected to hoge.com.
Escape character is '^]'.
+OK Dovecot ready.
USER hoge
+OK
PASS hogehoge
-ERR [AUTH] Authentication failed.

エラーが出たら次のコマンドを実行してエラーを確認します。

$ doveconf -n