【ハッキング・ラボ⑤】ホストOSをカスタマイズする

ホストOSをカスタマイズしていきます。
<br>
まとめ記事（①〜⑯をまとめてます）
[【ハッキング・ラボのつくりかた】をやってみた](https://qiita.com/nakatatsu711/items/e90e6e0962bb787bf4a9)



## システム環境
`仮想化ソフト`：VirtualBox 6.1.0
`ホストOS`：Windows10
`ゲストOS`：Kali Linux 2020.1



## VirtualBoxのファイル共有機能の利用
VirtualBoxには、Guest Additionsというアプリケーションが提供されており、これを使用することでファイル共有を実現できます。


### ホストOSの設定
ホストOSの設定を行っていきます。

C:\shareフォルダを作成し、任意の内容を入力したsample.txtファイルを配置します。
これは共有できたかどうかの確認のために使用します。

VirtualBoxの「設定」→「共有フォルダー」から以下のように設定を行います。
<img width="300" alt="hacking-lab-part5-1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/e7ab42bd-4139-8dd8-a40e-78b7fa520ff1.jpeg">


### ゲストOSの設定
ゲストOSの設定を行っていきます。

Gust Additionsを適用する準備として以下のコマンドを入力します。

```
# apt update -y
# apt install linux-headers-$(uname -r)
```

メニューから「デバイス」→「Guest Additions CDイメージの挿入」を選ぶと、デスクトップにCDのアイコンが表示されます。
<img width="600" alt="hacking-lab-part5-2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/627f0450-9678-619d-ba5c-1582558c9c7c.jpeg">

アイコンを右クリックして、「Open」を選ぶと、File Managerが起動するので、中身のファイルをすべてコピーします。

デスクトップにvboxディレクトリを作成し、その中にペーストします。CDはアンマウントしておきます。

以下のコマンドを入力すると、Guest Additionsをインストールします。ここではkaliユーザーで行っています。

```
$ cd ~/Desktop/vbox
$ chmod +x VBoxLinuxAdditions.run
$ sudo sh ./VBoxLinuxAdditions.run
```

インストール後、vboxディレクトリは削除しておきます。
再起動すると、Guest Additionsが適用されます。デスクトップにアイコンは表示されませんが、内部ではマウントに成功しています。
<img width="600" alt="hacking-lab-part5-3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/9f2a1db4-3e1e-b52d-508f-b63a43350565.jpeg">


### マウントポイントの追加
ここでは別のマウントポイントを追加していきます。
マウントとはシステムで認識している外部メディアをディレクトリにつなげることです。
/media/sf_shareを/shareにマウントします。

マウントにはmountコマンドを使用しますが、再起動するとまたマウントをやり直さなければなりません。
そこで自動起動を設定します。

まずshareディレクトリを作成します。  

```
# mkdir /share
```

自動起動のために/etc/rc.localファイルを作成し、以下の内容を記述します。

```rc.local
#!bin/sh


mount -t vboxsf share /share
```

ファイルに実行権限を与えます。  

```
# chmod 755 /etc/rc.local
```

Kali Linuxはsystemd系という起動システムを採用しており、systemdはUnitという単位で自動起動の内容を管理しています。
Unitを作成するために、/etc/systemd/system/rc-local.serviceファイルを作成し、以下の内容を記述します。

```rc-local.service
[Unit]
Description=/etc/rc.local

[Service]
ExecStart=/etc/rc.local
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target
```

最後にサービスの自動起動を設定し、再起動します。  

```
# systemctl enable rc-local.service
```

shareディレクトリがマウントされました。自動起動の設定もうまくいきました。
<img width="600" alt="hacking-lab-part5-4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/990a3dd6-ec18-0cfd-5dc3-89df60f09fa1.jpeg">


### 共有ディレクトリの設定
ここまでで/media/sf_shareと/shareを共有ディレクトリに設定しました。
ただ/media/sf_shareにはユーザー権限でアクセスすることができません。
権限を確認してみます。
<img width="600" alt="hacking-lab-part5-5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/b26f90fc-87f9-af9f-5ffc-726739c55ee3.jpeg">

権限を確認すると、vboxsfグループにユーザーを追加すればよいことがわかります。
ここではkaliユーザーとnakatatsuユーザーを追加しました。  

```
# gpasswd --add kali vboxsf
# gpasswd --add nakatatsu vboxsf
```

どちらのユーザーでも/media/sf_shareにアクセスできるようになりました。
<img width="600" alt="hacking-lab-part5-6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/d2b26053-d44e-4f23-ce4f-313d54d22a64.jpeg">



## VirtualBoxのドラッグ＆ドロップ機能の利用
Guest Additionsを適用すると、ドラッグ＆ドロップ機能も使えるようになります。
これにより、マウスの操作のみでファイルのやり取りができます。

メニューから「デバイス」→「ドラッグ＆ドロップ」→「双方向」を選ぶと、ドラッグ＆ドロップが実現できるようになります。

同様に「デバイス」→「クリップボードの共有」→「双方向」を選ぶと、コピー＆ペーストが実現できるようになります。

ちなみにこのバージョンではデフォルトで設定されていました。



## 共有設定の見直し
WindowsではデフォルトでC:\Usersフォルダが共有されています。
エクスプローラーで\\IPアドレスを入力すると、これを確認できます。
<img width="600" alt="hacking-lab-part5-7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/5b0c0830-0c7b-ae2c-8d90-6471f435421f.jpeg">

別のマシンからもこのフォルダにアクセスできますが（認証あり）、セキュリティの観点からは望ましくありません。

そこでC:\Usersフォルダの共有設定は無効にします。
代わりにこのフォルダをSecret$という名前で共有します。
末尾に$を付けると、共有名を正確に知らないとアクセスすることができないので、セキュリティは高くなります。

以下のように設定します。
なお最初から設定されていたUsersという共有名は削除しておきます。
<img width="300" alt="hacking-lab-part5-8" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/2fb35ed5-2a28-9274-5861-7c46a240c2f1.jpeg">

これにより、\\IPアドレスでは共有フォルダは表示されず、\\IPアドレス\Secret$を入力すると表示されることがわかります。
<img width="600" alt="hacking-lab-part5-9" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/05f08268-bc09-4ede-44d6-f3b330c203a8.jpeg">
<img width="600" alt="hacking-lab-part5-10" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/20df2bb1-bcea-233e-2d26-7c674e16bac1.jpeg">



## 右クリックメニューのカスタマイズ
右クリックメニューによく使うものを設定しておくと、操作が便利になります。

ここでは右クリックメニューにPowerShellアプリを追加してみます。

Windowsでは単に右クリックしたときのメニューと、Shiftキーを押しながら右クリックしたときのメニューに若干の差があります。

これはPCのパフォーマンスデータを保持しているレジストリにExtendedがあるかどうかの違いで、ExtendedがあればShiftキーを押しながら右クリックしたときだけ表示されます。

Extendedを削除すればよいことになるので、削除していきます。

まずWin＋rキーを押し、「ファイル名を指定して実行」画面に「regedit」と入力して、レジストリエディターを起動します。

HKEY_CLASSES_ROOT\Directory\shell\Powershellを右クリックして「アクセス許可」を選びます。  
これはフォルダーに対しての設定です。

Administratorsにフルコントロールの許可を与えるために以下の操作をします。

「詳細設定」→「変更」→「詳細設定」→「ユーザーまたはグループの選択」→「検索」から「Administrators」を選んで、「OK」ボタンを押します。
そして、フルコントロールの許可にチェックを入れます。

最後にレジストリエディターにてExtendedを削除すれば完了です。

ここまで終了すれば、フォルダーに対して右クリックをすることでメニューに「PowerShellウィンドウをここに開く」という項目が表示されるようになります。
<img width="300" alt="hacking-lab-part5-11" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/99a04b88-6ebe-448a-e00f-cd9c4da359b1.jpeg">

ドライブや背景をクリックしたときも同様の動作になるように、上記と同様の操作を以下のレジストリにも行います。

- HKEY_CLASSES_ROOT\Drive\shell\Powershell
- HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell



## Python環境の構築
以下のURLからPythonをインストールしていきます。
ここではバージョン2.7.15とバージョン3.6.5をダウンロードしました。
[https://www.python.org/downloads/](https://www.python.org/downloads/)

3系では「Add Python 3.5 to PATH」にチェックを入れず、「Customize installation」に進みます。
「Add Python to environment variables」のチェックを外し、「Install for all users」にはチェックを入れます。
インストール先はC:\Python36にしました。

2系では「Install for all users」にチェックを入れ、次に進みます。
インストール先はC:\Python27にしました。
「Register Extensions」をインストール対象から外し、インストールまで完了させます。

どちらもpython.exeにはパスは通っていないのですが、py.exeにはパスが通っていますのでpyコマンドを使います。

py.exeはPythonを起動するランチャーで、pyコマンドを実行すると適切なpython.exeを選んで実行してくれます。

例えば、2系で実行するのであれば、以下のように-2を指定します。

```
> py -2 Pythonプログラムのファイル
```

3系で実行するのであれば、以下のように-3を指定します。
またはpyのみでも3系が指定されるようになっています。

```
> py -3 Pythonプログラムのファイル
```

```
> py Pythonプログラムのファイル
```

また、3系の3.4と3.5をインストールしていたとして、-3を指定すると新しいバージョンが適用されます。この場合は3.5になります。
3.4を指定したい場合は以下のように-3.4を指定します。

```
> py -3.4 Pythonプログラムのファイル
```

Unix系OSではバージョン管理にpyenvを使うことが多いですが、Windowsではpyコマンドを使うことでバージョン管理ができることがわかります。
便利なので、pyコマンドを使っていくとよいと思います。

また開発ではpipコマンドで多くのパッケージをインストールしていくので、依存関係等の理由から実行環境を分けると便利です。

ここでは3系でよく使われているvenvを紹介します。
まず以下のコマンドでvenvの仮想環境を構築します。

```
> py -3 -m venv 仮想環境名
```

構築後、activate.batで仮想環境に入り、deactivate.batで仮想環境から出ることができます。

なお、仮想環境内にpython.exeがコピーされるので、仮想環境内ではpythonコマンドを使うことができます。バージョンは構築したときに指定したものになります。