ONTAPへPort Scanを実施してみる【Service Policyによる防御】

## はじめに
NetApp StorageであるAFFやFASのOSであるONTAPには様々な機能がありますが、
この記事ではSecurityに関する機能であるService Policyについて、この記事では**ONTAPに対してPort Scanを実行するとどうなるのか、Portの空きをサービス停止以外で検知させない方法はあるか**について記載します。
設定はCLIを用いて行います。



:::note alert
**他者が管理している機器に対しPort Scanを行うことは不正アクセスの予備的な行為と見なされる為、自ら管理する環境でのみ実施して下さい**
:::

## 何をしたい？できる？
- Network Interface(LIF)への**Service-Policyの設定**
- <font color="Red">**Port ScanでSSHのPortが空いているのを表示させない為にService-Policyを利用**</font>



## Port Scanとは
Port ScanとはNetworkを通じた攻撃手法の一つで、対象のコンピュータのTCPあるいはUDPのポートに接続を試み、機能停止や侵入などの攻撃に使えそうな保安上の弱点がないか調べるといった攻撃前の情報収集にあたる内容になります。

各種パケットをポート番号を変えながらIPパケットを送信して、反応の違いからポートの開閉を調べ空いているPort番号でServiceやOSの種類を推測が為されます。
|![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/aa4a86fc-13f6-055d-3632-7e9bd7845f32.png)
|:-:|



### Nmapとは
高性能なPort ScanerでOSを推測する機能も備えてます。
Scan方法は以下の表のようにオプション指定することで変更できます。

|Scanタイプ     |説明　　　　　　　|
|:----------------|:----------------|
|-sS               |TCP SYN Scanの実施 (TCPコネクションは確立しない)|
|-sT               |TCP Connect Scanの実施	(TCPコネクションを確立=ログに記録)|
|-sU               |UDPに対してScan|
|-sV               |各ポートのサービスのバージョンを検出|
|-sC               |defaultカテゴリのスクリプトをすべて実行|

今回検証で利用するHalf-connect(SYN Scanとも呼ばれる)には以下の特徴があります。
- **メリット**
  ・Scan速度が速い
  ・アプリでScanを認識しない
  ・接続してない為、基本的にはIDS/IPSを避けやすいが…

- **デメリット**
  ・通常のトラフィックではないので、 IDS/IPSに検知されるかも
  ・権限が必要

|![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/efd42f98-29e5-3b41-bad3-d21933841f62.png)
|:-:|




## Network InterfaceのService Policyとは
**ONTAP Versionの9.6以降では**、Network Interface(LIF)でIP設定時にデータアクセス用や管理Network用として指定していた**Roleの代わりに**、**トラフィックの種類を決定するService Policyを LIF に割り当てる形に変更**されています。
また、以前はFirewall Policyでアクセス元の制御を行っていましたが、こちらも9.6以降で**Service Policyを使い、HTTPSやSSHアクセスへのクライアントアクセス制御を行う事ができる**ようになってます。

|![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/a3c674a8-f412-bce1-f3f6-157eca0ea949.png)
|:-:|

## 確認手順
例で指定されている以下のパラメータは、環境によって異なる内容なので適宜変更して下さい。
**既にService POlicyを指定してLIFは作成されている環境の例となってます。**
- 仮想Storage(SVM)名：cifs100
- 仮想Storage(SVM)の管理IP：172.16.10.147
- ONTAP側管理ユーザ：vsadmin

- PortScanを実行する端末(Kali Linux)：172.16.10.145
- SSHが許可されているIP：172.16.10.143


コマンド例では、**SSH用のLIFにアクセス制限を実行する設定例**です。

#### 1. Service Policy変更前の状態で、ClientからPort Scanの実行

```bash:
> sudo nmap -sS -sV -nvv -O 172.16.10.147
[sudo] user01 のパスワード:
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-11 18:17 JST
NSE: Loaded 45 scripts for scanning.
Initiating ARP Ping Scan at 18:17
Scanning 172.16.10.147 [1 port]
Completed ARP Ping Scan at 18:17, 0.04s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 18:17
Scanning 172.16.10.147 [1000 ports]
Discovered open port 443/tcp on 172.16.10.147
Discovered open port 22/tcp on 172.16.10.147　　<=="SSHサービスが実行されているのが確認できる"
Discovered open port 30000/tcp on 172.16.10.147
Discovered open port 10000/tcp on 172.16.10.147
　　　　　　　　　　　　　　　　　　　　(中略)
```


#### 2. Storage側でService Policy変更
**この手順例では、特定のClient IPからのアクセスを許可します。**
SSHに関する設定は、Policy内のmanagement-sshというサービスになります。

```bash:
> set advanced
Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
Do you want to continue? {y|n}: y　<=="yを入力します"

> network interface service-policy modify-service -vserver cifs100 -policy default-management -service management-ssh -allowed-addresses 172.16.10.143/32
```

**設定値の確認**
```bash:
> network interface service-policy show -vserver cifs100 -policy default-management

                   Vserver: cifs100
               Policy Name: default-management
         Included Services: data-core, management-ssh, management-https
Service: Allowed Addresses: data-core: 0.0.0.0/0
                            management-ssh: 172.16.10.143/32
                            management-https: 0.0.0.0/0
```


#### 3. Service Policy変更後、ClientからPort Scanの実行
**Discovered open port 22/tcp on 172.16.10.147**の行が表示されなくなる事が確認できます。

```bash:
> sudo nmap -sS -sV -nvv -O 172.16.10.147
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-11 18:28 JST
NSE: Loaded 45 scripts for scanning.
Initiating ARP Ping Scan at 18:28
Scanning 172.16.10.147 [1 port]
Completed ARP Ping Scan at 18:28, 0.06s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 18:28
Scanning 172.16.10.147 [1000 ports]
Discovered open port 443/tcp on 172.16.10.147
Discovered open port 30000/tcp on 172.16.10.147
Discovered open port 10000/tcp on 172.16.10.147
　　　　　　　　　　　　　　　　　　　　(中略)
```

#### 3. 許可されたClientからSSHが実施できる事の確認

 <img width="800" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/dc1edd0a-c1a5-be76-212b-bc0375dc2ee7.png>




## Service PolicyはNFSやCIFS用のLIFに設定できないのか？

**設定しようとすると、サポート外ということでエラーとなります。**

```bash:
> network interface service-policy modify-service -vserver cifs100 -policy default-data-files -service data-nfs -allowed-addresses 172.16.10.143/32
 
Error: command failed: Service "data-nfs" cannot be added to service policy "default-data-files" on Vserver "cifs100" with allowed
       addresses "172.16.10.143/32" because this service does not support custom allowed address lists. Try the command again
       without specifying an allowed address list and the system will supply an appropriate setting.
```

これは、**ONTAPの仮想ストレージ自体にログインしてもLinux用のスクリプトや、WindowsのPowershellファイルの実行が出来ない**ので、空きポートを検知してもリモート接続しての攻撃に繋がらない形となり、Service Policyよりもファイルやフォルダのアクセス権設定で十分ともいえる内容になります。
むしろ、**ONTAPにとっては、SSHログインをされてSnapshot削除やVolume削除をされるほうが致命的と言えるかと思います。**


## 参考及びリンク
[LIFのservice policy設定](https://docs.netapp.com/ja-jp/ontap/networking/configure_lif_service_policies.html)

[ONTAP 9.6 以降の LIF とサービスポリシー](https://docs.netapp.com/ja-jp/ontap/networking/lifs_and_service_policies96.html#%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0-svm-%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC)