AWS EC2でKali Linuxを立ち上げてRDP接続する方法
はじめに
Hack the Box というペネトレーションテストを競技化したコンテンツにハマり数ヶ月が経ち、ローカルの環境を問わず同じ Kali の環境にアクセスできるようにしたいと思い立ちました。
本記事では AWS の EC2 に Kali Linux のインスタンスを作成し RDP 接続する方法を簡単に紹介します。
ローカル環境
- M4 macbook pro
EC2
インスタンスの作成
具体的な手順は既に記事が豊富にあるので省略します。以下に挙げる記事を参考にしてください。
セキュリティグループの作成
Kali に RDP 接続をするためのポートを開放します。
まずは左ペインから「セキュリティグループ」をクリックして右上の「セキュリティグループを作成」をクリックします。
次に「基本的な詳細」に必要事項を入力してインバウンドルールに任意のポート番号を設定してください。
今回使用する RDP ツールのポート番号はデフォルトでは 3389 ですが、この番号を開放していると外部の第三者が RDP 接続を試みる可能性があるのでデフォルト値以外にしましょう。
続いて先に作成したインスタンスの概要画面の右上から「セキュリティグループを変更」をクリックしてセキュリティグループを追加してください。
Kali のセッティング
大体の手順は公式ドキュメント通りですがここでも簡単に説明しておきます。作成した Kali のインスタンスに SSH アクセスして以下の手順に従ってください。
kali ユーザのパスワードを設定します。
kali@kali ~
$ echo kali:kali | sudo chpasswd
Kali の基本的なツールをインストール(環境次第ですが 10 分程度かかります)。
kali@kali ~
$ sudo apt install kali-linux-default
xrdp をインストールします。
kali@kali ~
$ sudo apt-get install -y kali-desktop-xfce xorg xrdp
xrdp のポート番号をインスタンスに追加したセキュリティグループで設定したものにします。
kali@kali ~
$ sed -i 's/port=3389/port=11111/g' /etc/xrdp/xrdp.ini
xrdp が自動で起動するようにしておきます。
kali@kali ~
$ sudo systemctl enable xrdp --now
最後にクリップボード共有のためのツールもインストールしておきます。
kali@kali ~
$ sudo apt install spice-vdagent
以上の手順が完了したら念の為再起動しておきましょう。
kali@kali ~
$ sudo reboot
RDP クライアントのセットアップ
続いてローカル環境に RDP クライアントをインストールします。macbook で利用できる RDP クライアントにはWindows Appなどが挙げられますが、今回は CLI で操作できるFreeRDPを利用します。
FreeRDP をインストールします。
local@macbook
$ brew install freerdp
環境変数を設定します。
local@macbook
$ export DISPLAY=:0
以上の手順が完了したら以下のコマンドで RDP にアクセスできます。その際クリップボード共有や軽量化のためのオプションも付けています。
local@macbook
$ xfreerdp /u:kali /p:PASSWORD /v:KALI_INSTANCE_IP:PORT_NUMBER /cert:ignore /auto-reconnect-max-retries:0 +clipboard /size:1920x1080 /bpp:16 /printer:off /compression-level:2 /network:modem
エイリアスの作成
以上で RDP 接続のための設定はすべて完了しました。ただ起動のたびに長いコマンドを打つのは面倒なので以上の手順をエイリアスにまとめておきます。
ローカルの ~/.zshrc
に以下のコードを追記してください。
export DISPLAY=:0
alias kalistart='aws ec2 start-instances --instance-ids INSTANCE_ID'
alias kalirdp='IP=$(aws ec2 describe-instances --instance-ids INSTANCE_ID --query "Reservations[*].Instances[*].PublicIpAddress" --output text) && xfreerdp /u:kali /p:PASSWORD /v:$IP:PORT_NUMBER /cert:ignore /auto-reconnect-max-retries:0 +clipboard /size:1920x1080 /bpp:16 /printer:off /compression-level:2 /network:modem'
alias kaliaccess='IP=$(aws ec2 describe-instances --instance-ids INSTANCE_ID --query "Reservations[*].Instances[*].PublicIpAddress" --output text) && ssh -tt -i ~/kali_key.pem kali@$IP'
alias kalistop='aws ec2 stop-instances --instance-ids INSTANCE_ID'
alias kalistatus='aws ec2 describe-instances --instance-ids INSTANCE_ID'
各エイリアスの簡単な説明は以下のとおりです。
エイリアス | 説明 |
---|---|
kalistart |
インスタンスの起動 |
kalirdp |
インスタンスに RDP 接続 |
kaliaccess |
インスタンスに SSH 接続 |
kalistop |
インスタンスを停止 |
kalistatus |
インスタンスのステータスを表示 |
EC2 のインスタンスはデフォルト設定では起動のたびにパブリック IP アドレスが変化しますが、ElasticIPを利用すれば IP アドレスを固定できるので上のエイリアスももう少し簡潔にすることができます。
インスタンスを使わないときは停止しておくことを忘れずに!
Discussion