chikoblog

やってみたことの掃溜め

AWS環境にKali Linuxを建てて遊ぶ方法

この記事は マイナビ Advent Calendar 2020 の7日目の記事です。

Kali LinuxAWS環境で建てて、脆弱性診断やセキュリティの勉強をしたい人向けに僕が実際に建てたハッキングラボ環境を簡単に紹介しようと思います。

準備するもの

  • Kali LinuxとテストAttackできる脆弱なサーバを置いてもいいAWSアカウント
  • この環境用のVPCを作成
    • 脆弱なサーバ用のセキュアなサブネット(KaliからHTTP/HTTPSができればOK)
    • Kali Linux用のパブリックサブネット
  • 少量のお金(推奨構成にする場合無料枠の利用ではなくなるので)

VPCの作成

そんなに難しいことではないので今回は詳しい説明は省いちゃいます。 VPCの作成やその他NW設定系が初めての方は以下を参考に作るといいかと思います。 dev.classmethod.jp

ザックリ以下のようなことができればいいのかなと思います。 f:id:Chiko_gorilla:20201204223122p:plain

Kali Linux EC2の作成

今回はAWS Marketplaceにある以下のAMIを利用してEC2を構築していきます。
(スクショを取ったタイミングが更新前のものなので今はAMIの画像が違います。) aws.amazon.com

まずは、AWSコンソール開きEC2の画面で[インスタンスの作成]を選択します。 f:id:Chiko_gorilla:20200902195503p:plain

インスタンスの作成画面に移ったら[AWS Marketplace]を選択します。 f:id:Chiko_gorilla:20200902195717p:plain

選択するとこのような画面に移ると思います。 f:id:Chiko_gorilla:20200902195807p:plain

[Kali Linux]で検索をおこなうと対象のAMIが出てきますのでこれを利用していきます。 f:id:Chiko_gorilla:20200902200037p:plain

AMIを選択するとだいたいこれぐらいのお金がかかりますよ~といったアナウンス画面が出てきます。
Kali Linuxは基本EC2の利用料金しかかかりませんのであまり気にしなくても問題ないかと思いますが念のため確認しておくといいでしょう。 f:id:Chiko_gorilla:20200902200053p:plain

あとはいつも通りのEC2作成方法になるかと思いますので、今回は省略しちゃいます。 ベンダー推奨スペックはt2.mediumとなっていますので検証とかに別にお金使ってもいいや~と思う方は推奨スペックで構築することをお勧めします。

推奨より低いスペックだとどのようになるかは調べてません。。。

EC2を作ったことがない方は以下を参考作成してください。
※注意点ですが、利用するAMIは上記しているAWS MarketplaceにあるAMIを利用してください。 dev.classmethod.jp

EC2を作成したら任意の方法でサーバにログインし、いろいろ見てみます。 まずは、以下のコマンドで現在利用可能なツールを確認します。
※EC2ですがこれはkali Linuxです。ec2-userではログインできません。初期ログイン時はユーザ名 kali:パスワードkali でログインしてくださいね。

(ちなみに以下の手順は基本デフォルトシェルをいじっております…実際の画面とちょっと差異があるかもです。)

kali@kali:~$ sudo -s
root@kali:/home/kali# 
root@kali:/home/kali# dpkg -l

これで見てみるとわかるのですが、
このAMIで建てたKaliは何のツールも初期では入っていないようです。

なので、必要なツールがあれば都度インストールしていく必要があります。
Kali Linux自体はAMIから立ち上げてツールをインストールしたらすぐに使えます。

Kali Linuxで利用できるツールは以下にまとまっていますので、ここを見て必要なツールを確認するといいかもしれません。簡単なツールの実行手順とかも載っていますのでこれを見ていろいろなツールを使ってみてください。 tools.kali.org

簡単な脆弱性試験ならNiktoがおすすめです。
今回はNiktoのインストールと実行までやってみようと思います。 tools.kali.org

Niktoのインストール

root@kali:/home/kali# apt-get install nikto

ここまで来たら次は攻撃用のサーバを作成していきます。

テスト用Attackサーバの作成

EC2サーバを1つ用意します。
このEC2は初期設定をおこなうため、Kali Linux用のパブリックサブネットに一時的にEC2を建てます。

攻撃用に脆弱性のあるサーバを建てるのに最適な練習用WEBアプリDVWAを利用しようと思います。 www.dvwa.co.uk

DVWAはPHPMySQLで構築された脆弱性のあるWebアプリケーションで、SQLインジェクションXSSのテスト用に利用することができます。

環境構築のため、EC2にログインします。

ログインしたらまず、DVWAに必要なソフトウェアをインストールします。

$ sudo yum update
$ sudo yum install mariadb-server php php-mysqli php-gd git httpd

DVWAをインストールします。

$ git clone https://github.com/ethicalhack3r/DVWA.git

ファイルの確認

$ ls -ls
total 4
4 drwxrwxr-x 9 user user 4096 Aug 27 06:48 DVWA

DVWAファイル群をWEB領域に移動します。

$ sudo mv DVWA /var/www/html

$ ls /var/www/html |grep DVWA
DVWA

DVWAのコンフィグの有効化をおこないます。

$ ll /var/www/html/DVWA/config/
total 4
-rw-rw-r-- 1 user user 1799 Dec  4 10:09 config.inc.php.dist

$ sudo mv /var/www/html/DVWA/config/config.inc.php.dist /var/www/html/DVWA/config/config.inc.php

$ ll /var/www/html/DVWA/config/
total 4
-rw-rw-r-- 1 user user 1799 Dec  4 10:09 config.inc.php

httpd.confのドキュメントルートの変更をおこないます。

$ sudo vim /etc/httpd/conf/httpd.conf
変更前
~~~~~~~~~~~~~~~~~~~~~~~
DocumentRoot "/var/www/html"
~~~~~~~~~~~~~~~~~~~~~~~

変更後
~~~~~~~~~~~~~~~~~~~~~~~
DocumentRoot "/var/www/html/DVWA"
~~~~~~~~~~~~~~~~~~~~~~~

ApacheMySQLを起動します。

$ sudo systemctl start httpd

$ sudo systemctl start mariadb

後に隔離領域に移動しますのでApacheMySQL自動起動設定も入れておきます。

$ sudo systemctl enable httpd.service

$ sudo systemctl enable mariadb

接続確認のためDVWAにブラウザアクセスをおこないます。
EC2のパブリックDNS名でログイン可能です。(Kali Linux用のパブリックサブネットにEC2を建てていたら)

f:id:Chiko_gorilla:20201204203058p:plain

MySQLからアカウント登録をおこなっていきます。
ここで設定したMySQLのアカウントですがDVWAの初期アカウントになっております。変更したい場合はGRANT文を以下に用意しておいたのでそれに従って設定の変更してください。少しでもセキュアにしたい場合は変更をお勧めします。

$ mysql -u root -p
Enter password: パスワードを入力 ↑の流れできていればEnterで入れちゃいます
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> exit
Bye

セキュアにしたい人用GRANT文です。

MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO '任意のユーザ名'@'localhost' IDENTIFIED BY '任意のパスワード';

また、GRANT文を初期から変更した方は以下のDVWAのconfig.inc.phpファイルもあわせて変更する必要があります。

$ sudo vim /var/www/html/DVWA/
変更前
~~~~~~~~~~~~~~~~~~~~~~~
$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
$_DVWA[ 'db_port'] = '3306';
~~~~~~~~~~~~~~~~~~~~~~~

変更後
~~~~~~~~~~~~~~~~~~~~~~~
$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = '変更したユーザ名';
$_DVWA[ 'db_password' ] = '変更したパスワード';
$_DVWA[ 'db_port'] = '3306';
~~~~~~~~~~~~~~~~~~~~~~~

DVWAにブラウザアクセスをおこない、下の方にあるCreate/Reset DatabaseをクリックしてDVWAのデータベースを作成します。

問題なければ以下の画面が出てくるかと思います。 f:id:Chiko_gorilla:20201204210656p:plain

DVWAにユーザ名admin:パスワードpasswordでログインをおこないます。
無事にログインができたらテスト用Attackサーバ(DVWA)の作成は完了です。

セキュアなサブネットに移動する

先ほど作成したテスト用Attackサーバ(DVWA)のEC2をAMI化します。
作成方法がわからない方は以下を見ながらやれば問題なく作成はできると思います。 docs.aws.amazon.com

作成したAMI利用し、Kali LinuxからのみHTTP/HTTPSできるセキュアなサブネットにEC2作成します。

EC2を作成できたらあとはこのEC2へNiktoを実行するだけです。

Kali LinuxからNiktoの実行

再度、Kali Linux EC2にログインをします。

ログインしたら以下のコマンドでNiktoを実行してみましょう。

kali@kali:~$ sudo -s
root@kali:/home/kali# nikto -o report.html -Format htm -host http://ec2のDNS
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          EC2のIP
+ Target Hostname:    EC2のDNS名
+ Target Port:        80
+ Start Time:         2020-12-04 12:37:38 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.46 () PHP/5.4.16
+ Cookie PHPSESSID created without the httponly flag
+ Retrieved x-powered-by header: PHP/5.4.16
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Root page / redirects to: login.php
+ PHP/5.4.16 appears to be outdated (current is at least 7.2.12). PHP 5.6.33, 7.0.27, 7.1.13, 7.2.1 may also current release for each branch.
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /config/: Directory indexing found.
+ /config/: Configuration information may be available remotely.
+ OSVDB-12184: /?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-12184: /?=PHPE9568F34-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-12184: /?=PHPE9568F35-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3268: /docs/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /login.php: Admin login page/section found.
+ OSVDB-3092: /.git/index: Git Index file may contain directory listing information.
+ /.git/HEAD: Git HEAD file found. Full repo details may be present.
+ /.git/config: Git config file found. Infos about repo details may be present.
+ /.gitignore: .gitignore file found. It is possible to grasp the directory structure.
+ 8828 requests: 0 error(s) and 20 item(s) reported on remote host
+ End Time:           2020-12-04 12:38:32 (GMT0) (54 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested


      *********************************************************************
      Portions of the server's headers (Apache/2.4.46) are not in
      the Nikto 2.1.6 database or are newer than the known string. Would you like
      to submit this information (*no server specific data*) to CIRT.net
      for a Nikto update (or you may email to sullo@cirt.net) (y/n)? y

+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The site uses SSL and the Strict-Transport-Security HTTP header is not defined.
+ The site uses SSL and Expect-CT header is not present.
- Sent updated info to cirt.net -- Thank you!
root@kali:/home/kali# ls |grep report.html
report.html

Niktoの実行が完了したら作成したreport.htmlを開きます。
(僕はSCPでローカルに持ってきたりしました。) f:id:Chiko_gorilla:20201204220847p:plain

ほとんど隠さないといけない情報になっちゃいましたがこんな風に脆弱性情報が出てきます。

ざっくりですが、これができれば他にもいろいろなKali Linuxのツールが試せますので、いろいろ試していただければと思います!

☆付録☆EC2に建てたKali LinuxにRDP接続する方法

GUIの設定をおこないます。

kali@kali:~$ sudo apt install nvidia-driver nvidia-cuda-toolkit -y

kaliのデスクトップ設定を入れます。

kali@kali:~$ sudo apt-get install kali-desktop-xfce xorg xrdp -y

上記の設定はインストールに結構時間がかかると思います。

xrdpをインストールします。

kali@kali:~$ sudp apt install xrdp

RDPもセキュアにおこないたいので以下のようにコンフィグを書き換えます。
SSHポートフォワーディングを利用してRDPおこなう想定の設定となります。

kali@kali:~$ sudo vim /etc/xrdp/xrdp.conf

変更前
~~~~~~~~~~~~~~~~~~~~~~~
;   port=vsock://:
port=3389
~~~~~~~~~~~~~~~~~~~~~~~

変更後
~~~~~~~~~~~~~~~~~~~~~~~
;   port=vsock://:
port=tcp://127.0.0.1:3389
~~~~~~~~~~~~~~~~~~~~~~~

設定を反映させるためにxrdpを再起動します。

kali@kali:~$ sudo systemctl restart xrdp

先ほど設定したポートがリッスンしているか確認します。

kali@kali:~$ netstat -an | grep 3389
tcp        0      0 127.0.0.1:3389          0.0.0.0:*               LISTEN

xrdp自動起動設定をおこないます。

kali@kali:~$ sudo systemctl enable xrdp

RDP元のPCにSSHポートフォワーディング設定をおこないます。

> ssh -L 13389:localhost:3389 kali@EC2のIP -i 鍵の保管場所のパス

localhost:13389にRDPをおこなえば接続できるかと思います。 f:id:Chiko_gorilla:20201207102131p:plain

参考資料 mittaltarun9715.medium.com

まとめ

この環境を建てればいろいろセキュリティの勉強に使えたりしますのでいろいろ勉強に役立つかなと思います。
※「ハッキング・ラボのつくりかた」の環境にも対応可能です

AWS環境下での勉強時に注意したほうがいい内容は以下にまとまってますのでまず一読いただいて試してもらえればと思います。 下手したらアカウントロックされちゃう可能性もあるので注意は必要かと思います。 aws.amazon.com

今後はKali Linuxのツールについてもまとめていこうと思っております。