SSHポートフォワードを使った、社内開発環境へのスキャン方法

SaaS型Webアプリ診断ツール「AeyeScan」を運営している株式会社エーアイセキュリティラボが、セキュリティテストの自動化、脆弱性診断の内製化、AI/機械学習などの技術情報の共有を目的とした記事です。
AeyeScanの情報はこちら https://www.aeyescan.jp
エーアイセキュリティラボの情報はこちら、https://www.aeyesec.jp

[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)

こんにちは。株式会社エーアイセキュリティラボ　カスタマーサクセス担当　日髙です。
今回は、SSHポートフォワードを利用して、社内開発環境など、インターネットから直接アクセスできないWebサイトにスキャンを実施する方法についてご紹介します。

# 概要
SaaS型のスキャンツールを利用する場合、スキャン対象のWebサイトがインターネットに公開されている必要があります。
そのため、スキャン用に新たにWebサイトを準備したり、テストサイトを公開しなくてはならないのではと思う方もいらっしゃるかもしれません。
しかし、今回ご紹介するSSHのポートフォワード機能を利用すれば、開発環境など、インターネットからアクセスが出来ないケースでも、スキャンを実施することが可能です。

# 実現方法
実際に設定を行う前に実現イメージをお伝えします。

スキャン対象Webサーバからのsshコマンド実行可否によって、以下の二つの方法があります。

## スキャン対象Webサーバからsshコマンド実行可能な場合
スキャン対象のWebサーバと転送用サーバを接続します。
この場合、スキャン対象Webサーバからsshコマンドを実行し、SSHサーバのポート8080にアクセスがあった場合に、スキャン対象Webサーバのポート80に転送するように設定します。

![【AeyeScan】SSHリモートポートポートフォーワードを利用したローカル環境へのスキャン方法-pdf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/197696ca-8e8e-bed4-cdf7-0c06035904b3.png)


## スキャン対象Webサーバからsshコマンドが実行できない場合
スキャン対象のWebサーバとアクセス可能な転送用のクライアントPCと転送用サーバを接続します。
この場合、転送用クライアントPCからsshコマンドを実行し、SSHサーバのポート8080にアクセスがあった場合に、スキャン対象Webサーバのポート80に転送するように設定します。

![【AeyeScan】SSHリモートポートポートフォーワードを利用したローカル環境へのスキャン方法-pdf (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/8adee60b-e210-9e4a-8abb-e3b1d848c306.png)

以上が設定のイメージとなります。
それでは、早速設定をおこなっていきましょう。

# 事前準備
事前に転送用サーバの作成とポートフォワードを利用するために必要な設定を行います。
今回は、以下のIPアドレスとポート番号の構成で設定を行います。

|項目|設定値|
|---|---|
|転送用サーバIP|18.183.172.XXX|
|転送用サーバ待受けポート|8080|
|スキャン対象WebサーバIP|192.168.3.13|
|スキャン対象Webサーバポート|80|


## 転送用サーバの作成
今回は、AWSのインスタンスで転送用サーバを作成します。
基本的にデフォルトの設定で作成します。

### インスタンスタイプ
インスタンスタイプ、は「t2.micro」を選択します。
![インスタンスを起動-EC2-Management-Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/8cf9bb6e-811b-2e87-d525-ad4fb41b96f1.png)

### セキュリティルールの設定

以下の2つの設定をインパウンドルールに追加します。

- スキャンツールからhttpアクセスするためのポート（今回は8080）を開放します。
※セキュリティ確保のため、ソースIPは制限することをお勧めします。
- スキャン対象Webサーバ(192.168.3.13)からのSSHポート(22)へのアクセスを許可します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/fe530449-f8fa-5f85-fd3c-a5e70ff97de1.png)


以上の設定を行い、転送用サーバを作成後、起動します。

## SSHコンフィグファイルの設定変更
転送用サーバの設定ファイル（例:/etc/ssh/sshd_config）に初期設定では無効となっている（コメントアウトされている）2つのオプションを有効にします。

ファイル内の97行目、98行目辺りを以下のように設定します。
```:/etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
```

設定を有効にするため、sshdの設定をリロードします。
```
$ sudo systemctl reload sshd
```

# sshコマンド実行
スキャン対象Webサーバにて以下のコマンドを実行します。

```
$ ssh -f -N –i 証明書.pem ec2-user@18.183.172.XXX -R 8080:localhost:80
```
※バックグラウンドでコマンドを実行するため、コマンド終了時にはkillコマンド等で終了させてください。

スキャン対象のWebサーバからsshコマンドが実行できない場合は、スキャン対象Webサーバにアクセス可能な「転送用クライアントPC」にて以下のコマンドを実行します。

```
$ ssh -f -N -i 証明書.pem ec2-user@18.183.172.XXX -R 8080:192.168.3.13:80
```

# 接続
設定が完了しましたので、接続を行います。

以下のURLにアクセスします。

http://18.183.172.XXX:8080
以下の通り、アクセスできることが確認できました。（今回は、転送先として検証用に立てたXAMPP環境を指定しております。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/f2bef731-2959-d34a-9646-dc09ddd0a3af.png)

## 【参考】コマンドの説明

sshコマンドで利用したオプションの説明を以下に記載します。

```
ssh -f -N -i 証明書.pem ec2-user@SSHサーバのIPアドレス
 -R SSHサーバの待受けポート:スキャン対象のホスト名:スキャン対象のWebサーバのポート番号
```

|オプション|説明|
|---|---|
|-f |バックグラウンドでの動作。ターミナルを閉じてもポート転送が維持されます。(停止時には、プロセスをkillコマンド等で停止してください。）|
|-N  |リモートコマンドを無効にします。ポート転送のみ行う場合に有効。|
|-i  |接続に使用する公開鍵ファイルの指定。（ID・PASSのみの場合は不要。）|
|-R  |リモートホストからローカル方向へのトンネリングを実現できます。|

# 利用上の注意
今回ご紹介したSSHポートフォワードを利用したスキャン方法については、無償無保証のため不明点の質問やカスタマイズについてのサポートはできません。
また、証明書の検証など一部の診断項目は、正しくスキャンが行えない場合がありますので、ご認識の上、ご活用ください。

# おわりに
今回は、SSHポートフォワードを使って、社内開発環境にスキャンを実施する方法をご紹介しました。
ご紹介した方法を利用して、インターネットから接続できないサイトに対してもスキャンが可能ですので、ご活用いただければ幸いです。

# 参考文献
SSHによるポートフォワーディング
https://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=SSH%A4%CB%A4%E8%A4%EB%A5%DD%A1%BC%A5%C8%A5%D5%A5%A9%A5%EF%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0

ITログ＞ 【改訂版】SSHポートフォワード（SSHトンネル）【ローカル・リモート・ダイナミック総集編】
https://www2.filewo.net/wordpress/2019/03/31/%e3%80%90%e6%94%b9%e8%a8%82%e7%89%88%e3%80%91ssh%e3%83%9d%e3%83%bc%e3%83%88%e3%83%95%e3%82%a9%e3%83%af%e3%83%bc%e3%83%89%ef%bc%88ssh%e3%83%88%e3%83%b3%e3%83%8d%e3%83%ab%ef%bc%89%e3%80%90%e3%83%ad/

AeyeScanのトライアル、脆弱性診断の自動化のご相談は[こちら](https://www.aeyescan.jp/)
[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)