AWS環境にKali Linuxを建てて遊ぶ方法
この記事は マイナビ Advent Calendar 2020 の7日目の記事です。
Kali LinuxをAWS環境で建てて、脆弱性診断やセキュリティの勉強をしたい人向けに僕が実際に建てたハッキングラボ環境を簡単に紹介しようと思います。
準備するもの
VPCの作成
そんなに難しいことではないので今回は詳しい説明は省いちゃいます。 VPCの作成やその他NW設定系が初めての方は以下を参考に作るといいかと思います。 dev.classmethod.jp
ザックリ以下のようなことができればいいのかなと思います。
Kali Linux EC2の作成
今回はAWS Marketplaceにある以下のAMIを利用してEC2を構築していきます。
(スクショを取ったタイミングが更新前のものなので今はAMIの画像が違います。)
aws.amazon.com
まずは、AWSコンソール開きEC2の画面で[インスタンスの作成]を選択します。
インスタンスの作成画面に移ったら[AWS Marketplace]を選択します。
選択するとこのような画面に移ると思います。
[Kali Linux]で検索をおこなうと対象のAMIが出てきますのでこれを利用していきます。
AMIを選択するとだいたいこれぐらいのお金がかかりますよ~といったアナウンス画面が出てきます。
Kali Linuxは基本EC2の利用料金しかかかりませんのであまり気にしなくても問題ないかと思いますが念のため確認しておくといいでしょう。
あとはいつも通りの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はPHP、MySQLで構築された脆弱性のある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" ~~~~~~~~~~~~~~~~~~~~~~~
$ sudo systemctl start httpd $ sudo systemctl start mariadb
後に隔離領域に移動しますのでApacheとMySQLの自動起動設定も入れておきます。
$ sudo systemctl enable httpd.service $ sudo systemctl enable mariadb
接続確認のためDVWAにブラウザアクセスをおこないます。
EC2のパブリックDNS名でログイン可能です。(Kali Linux用のパブリックサブネットにEC2を建てていたら)
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のデータベースを作成します。
問題なければ以下の画面が出てくるかと思います。
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
でローカルに持ってきたりしました。)
ほとんど隠さないといけない情報になっちゃいましたがこんな風に脆弱性情報が出てきます。
ざっくりですが、これができれば他にもいろいろな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をおこなえば接続できるかと思います。
参考資料 mittaltarun9715.medium.com
まとめ
この環境を建てればいろいろセキュリティの勉強に使えたりしますのでいろいろ勉強に役立つかなと思います。
※「ハッキング・ラボのつくりかた」の環境にも対応可能です
AWS環境下での勉強時に注意したほうがいい内容は以下にまとまってますのでまず一読いただいて試してもらえればと思います。 下手したらアカウントロックされちゃう可能性もあるので注意は必要かと思います。 aws.amazon.com
今後はKali Linuxのツールについてもまとめていこうと思っております。