Kali Linux導入のメモ

## はじめに

Kali Linuxというハッキングツールを色々兼ね備えたOSがあるのですが, 2019年末にrootユーザがデフォルトで廃止されて見た目も大きく変わりました.

Kaliを普段使いする人はあまりいないと思いますが, Capture The FlagやHack The Boxなど, セキュリティ方面のあれやこれやでKaliを導入したいという人の役に立つよう綴っていくつもりです.

## OSスペック等

参考までに, 自分の環境を記しておきます.

 - ホストOS(要は元からあるPCの本体の方です)：Windows 10 Pro
 - ゲストOS(これから導入する仮想環境の方)：Kali Linux 2020.1a(64bit)
 - ハイパーバイザ(仮想環境を実現するソフトウェア)：VMware Workstation 15.5 Player

## VMware, Kali linuxディスクイメージ入手

既に仮想環境に触れたことのある人は, VMWareの導入は飛ばしてOKです.
[VMwareの公式ページ](https://www.vmware.com/jp/products/workstation-player/workstation-player-evaluation.html)からWorkstation 15.5 Player **for Windows**をダウンロードします. VMWareのバージョン(15.5の部分)は適宜読み替えてください.
その後, セットアップウィザードに従って進めていきます. 途中のカスタムセットアップ等の選択はお好みでどうぞ. 
迷うことはないと思いますが, 困ったら以下も参照してください.

[【手順】Windows10にVMWare WorkStation Player 15 インストール](https://bright-east-blog.com/skill-up/vmware15-install-win10)

また, Kali Linuxのディスクイメージを[公式ページ](https://www.kali.org/downloads/)から一番上の**Kali Linux 64-Bit(Installer)**をダウンロードします. サイズの小さい.torrentファイルでも大丈夫ですが素直に.isoファイルでいいと思います. 気長に待ちましょう.

以下の画像からもわかりますが, 2020年5月19日時点で最新のバージョンは2020.2です.

![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334637/d8af715b-2506-4698-29c8-cd7cb657f5bb.png)

また, 下の方に**Kali linux 64-bit VMware**というのもありますが.7zで圧縮されているうえ, その後の日本語入力などの初期設定がすべてスキップされる(もちろん後で変更可能です)ので無視して構いません.

## Windows 10 Homeの場合
Kali Linuxを立ち上げる, あるいはそもそもVMWareを立ち上げる際に, 「VMware PlayerとDevice/Credential Guardには互換性がありません」とメッセージが出ることがあります.

解消するには, コマンドプロンプトを管理者権限で立ち上げ[^4], 

```terminal
C:> bcdedit /set hypervisorlaunchtype off
```

として再起動しましょう. なお, 補足ですがこれによりWSL2(Windows Subsystem for Linux 2)が使えなくなってしまうので, KaliではなくWSL2を使いたい方は同じくコマンドプロンプトにて

```terminal
C:> bcdedit /set hypervisorlaunchtype auto
```

として再起動します. 面倒ですが, これがWindows 10 Homeの宿命です. 

## Kali Linuxセットアップ

まずはVMware Workstationを立ち上げ, 「新規仮想マシンの作成」→真ん中の「インストーラディスクイメージファイル」→「参照」から先ほど入手したKali Linuxのディスクイメージを選択します.
ここで「このディスクイメージのOSの種類を検出できませんでした」と表示されても特に問題はありません.

"ゲストOSの選択"画面では

- ゲストOS：Linux
- バージョン：Debian 7.x 64ビット[^1]

を選択します.

"仮想マシンの名前"画面では好きな名前を入れましょう. VMwareを立ち上げたときに表示される名前になります. 自分は

- 仮想マシン名：Kali-Linux-2020.1a
- 場所：(デフォルトのまま変更なし. Windowsのドキュメントフォルダに格納されます.)

としました.

"ディスク容量の指定"画面はストレージを調節できます. ホストOS(Windows 10)のストレージと相談しつつ設定します. ここでは

- ディスク最大サイズ：200GB(ホスト側に余裕があったので大きめにとりました)
- 「仮想ディスクを単一ファイルとして格納」を選択

としました.

最後に「ハードウェアをカスタマイズ」を選択してメモリとプロセッサを変更します. ここも自分のPCスペックと要相談です.

- メモリ：8GB(2GB以上を推奨したいです)
- プロセッサコアの数：2(2以上を推奨)

としました.


これにて準備完了です. わかりにくい点があれば以下が画像付きで大変わかりやすいと思います.
[Vmwareを使ってLinuxOS(Kali-Linux)を導入しよう](https://qiita.com/306_san/items/391f2665d9bd5c5e9128#step1-vmware-player%E3%81%AE%E5%B0%8E%E5%85%A5)

##Kali Linux初期設定
VMwareを立ち上げて「仮想マシンの再生」をクリックします.

「Graphical install」→「Japanese」→「日本」→「日本語」を選択.
最初のGraphical installのみ(ゲストOS上で)マウスカーソルが出ないと思うのでキーボードで操作します. 
なお, この段階でホストOSに戻りたい場合はCtrl + Altで.

ホスト名は特に変更ありません. 初期設定「kali」のままで.
ドメイン名も空白のままで問題ありません.

次は"ユーザとパスワードのセットアップ"です. 上でも述べた通り, Kali Linuxのrootユーザが廃止されてしまったのでユーザアカウントを作成する必要があります. 
>あなたのフルネームを入力するのが妥当な選択でしょう

とありますが, まぁお好きなように. 次のユーザ名とパスワードはログイン画面で必要になります.

以下, 「ガイド-ディスク全体を使う」→「SCSI3(0,0,0)(sda) …」(1つしか表示されないはず)→「すべてのファイルを1つのパーティションに」→「パーティショニングの終了とディスクへの変更の書き込み」→「はい」を選択.

次のHTTPプロキシの情報は空白のままでOKです.

次の"インストールするソフトウェアの選択"はお好きなものを選択してください. 自分はデフォルトで選択されている

- Kali desktop environment Xfce
- Generic metapackages
- Generic metapackages default
- 標準システムユーティリティ

の他に

- Install tools by purpose

を選択しました. ここは結構バージョンが変わるたびに大きく表記が変わるので適宜読み替えてください.

長いインストールが終わった後, 最後の"ハードディスクへのGRUBブートローダのインストール"で「はい」→「dev/sda」を選択し無事終了です.

これもわからない点があれば

[Vmwareを使ってLinuxOS(Kali-Linux)を導入しよう](https://qiita.com/306_san/items/391f2665d9bd5c5e9128#step1-vmware-player%E3%81%AE%E5%B0%8E%E5%85%A5)

を参照するといいと思います(多少異なる点もありますが).

## zshへの変更(任意)

意地でも`bash`を使いたいという強いこだわりがある方は読み飛ばしてください. 

Kali linuxを立ち上げ, ターミナル(左上の黒い四角です)を起動し, 以下のコマンドで`/bin/zsh`があることを確認します.

```terminal
$ cat /etc/shells
```

確認ができたら以下でログインシェルを`zsh`にします.

```terminal
$ chsh -s /bin/zsh
```

ここで一度再起動し, 再度ターミナルを立ち上げると, なんとも味気ないものに変わっていると思います. 

まずは設定ファイル`.zshrc`の作成から.

```terminal
$ touch ~/.zshrc
```

ここからのカスタマイズは各自にお任せするので, 最低限のものだけ以下に記載しておきます.
`~/.zshrc`ファイルに以下を記入します.

```
$ vi ~/.zshrc
```

として, `i`を押すと挿入モードになり編集可能です. 

以下を入力し終えたら(ターミナル上でのペーストは`Ctrl` + `Shift` + `v`), `Esc`を押して編集モードを終了したのち, `:wq`と入力します.

コロンも必須です.

```zsh:.zshrc
# /sbinへのPATHを通す
export PATH=/sbin:$PATH

# 上下矢印キーでヒストリーの表示
bindkey "^[[5~" history-beginning-search-backward
bindkey "^[[6~" history-beginning-search-forward

# プロンプトの色付け
PROMPT='%F{red}%m@%n%f:%F{cyan}%~%f$ '
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias dir='dir --color=auto'
    alias grep='grep --color=auto'
fi

# laコマンド(全ディレクトリ表示)の設定
alias la='ls -la'
```

あとはzsh-autosuggestionの導入を以下に載せます.

```terminal
$ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
$ echo 'source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh' >> ~/.zshrc
```

ここまでを実行してターミナルを再び立ち上げると`bash`の時とほぼ変わらない状況が出来上がっていると思います.

とは言っても, `zsh`のautosuggestionが入っているので長ったらしいコマンドを打つ際には格段に`zsh`の良さが感じられると思います。


## 日本語入力の有効化

以下を入力.

```terminal
$ sudo apt -y update
$ sudo apt -y upgrade
$ sudo apt install -y ibus-anthy
```

以下のコマンドで一度再起動.


```terminal
$ sudo reboot -f
```

その後ターミナルか何かを開いて右上に「JA」のように表示されていればOKです. クリックすると以下のように表示されるはずです. ここで「日本語-Anthy」を選択することで, 以下半角/全角ボタンで日本語とアルファベット入力の切り替えができるようになります.
![スクリーンショット (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334637/abf19c9b-a7a0-6eed-d04d-c022a0988236.png)

上手くいかないようなら一番左上のメニュー(Kali Linuxのドラゴンっぽいアイコン)から「すべてのアプリケーション」→「IBusの設定」→「入力メソッド」を選択し, 「日本語-Anthy」が入っているか確認してください[^3].

この部分は以下を参考にしました.

[Kali Linux ver2019.4の導入と日本語化](https://qiita.com/serion253/items/86a1d351462922c53846)

## VMware Toolsのインストールと共有フォルダ設定

ホストOS(Windows 10)とゲストOS(Kali Linux)との間でファイル共有するには大抵VMware Toolsを用いるのですが, VMware Workstationの「Player」→「管理」→「VMware Toolsの再インストール」がグレーアウトしてインストールできない場合があります. 色々調べてみると, フロッピーディスクの検出を有効にするだとか, 最初のBIOS画面からログインするまでならグレーアウトされないだとかいろいろ出てきますが結局のところフォルダ共有までには至りません.

![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334637/cb7a40fa-cbe7-98c5-ebae-59654ea49db7.png)

上の画像はグレーアウトされていない場合です. この場合は「VMware Toolsの再インストール」をクリックすることでデスクトップ上にVMware Toolsというディスクが登場すると思いますので以下を参照しつつ共有フォルダを作成してください(ここでは割愛).

[VMwareとの共有フォルダの作成](https://naakojr.hatenablog.com/entry/2019/06/03/003419?utm_source=feed) 

以下ではグレーアウトする場合を取り上げます.
まずはホストOS(Windows10)で共有するフォルダを作っておきます. 中身は空っぽで構いません. 自分は`vm_share`という名前にしました.

次にVMware左上の「Player」→「管理」→「仮想マシン設定」→「オプション」→「共有フォルダ」を選択し「常に有効」を選択します.
また, 「追加」を押すと共有フォルダ追加ウィザードが立ち上がります. ホストパスには先ほど作成したフォルダ(`vm_share`)を選択します. 名前は変更してもかまいませんが, ゲストとホストで共通のものにしておいたほうがいいと思います.

最後の「この共有を有効化」 **のみ** にチェックをいれ(おそらく初期の状態からこうなっているはず), 「完了」を押します.
これでホストOS側の操作は終了です. 次はKali Linuxのターミナルを開き, 以下を実行します.

```terminal
$ sudo apt install -y --reinstall open-vm-tools-desktop fuse
$ sudo reboot -f
```

再起動したら以下を実行. 名前は`.mount-shared-folders.sh`にしましたが何でもOKです.

```terminal
$ touch ~/.mount-shared-folders.sh
$ chmod 755 ~/.mount-shared-folders.sh
```

`.mount-shared-folders.sh`には以下を書き込みます.

```sh
#!/bin/zsh

vmware-hgfsclient | while read folder; do
  mkdir -p "/mnt/hgfs/${folder}"
  umount -f "/mnt/hgfs/${folder}" 2>/dev/null
  vmhgfs-fuse -o allow_other -o auto_unmount ".host:/${folder}" "/mnt/hgfs/${folder}"
done

sleep 2s
```

viでもどんなテキストエディタでも構いません. 書き込めたらターミナルで以下を実行.

```terminal
$ sudo ~/.mount-shared-folders.sh
```

あとは操作しやすいようにシンボリックリンクを設定しておきます. 以下の`vm_share`の部分は各自で設定した共有フォルダの名前に置き換えてください.

```terminal
$ ln -s /mnt/hgfs/vm_share ~/vm_share
```

## Kali Linux立ち上げ時と共にマウント

このままだと, Kali Linuxを立ち上げるたびに

```terminal
$ sudo ~/.mount-shared-folders.sh
```

を実行しないといけません. さすがにこれでは面倒なので, 起動時に自動的にマウントするようにします.

```terminal
$ sudo su
```

でrootに切り替えます. 

```terminal
# crontab -e
```

とすると, 初回に限りどのエディタを使うか聞いてくるので選択します(デフォルトはnanoで, viは2です). 

viの使い方は`~/.zshrc`の作成の際に少し書いてあるのでそちらを参考にしてください.

いろいろとシャープから始まる記述がありますが, 一番下に以下を追加して保存するだけでOKです.

```
@reboot /home/(ユーザ名)/.mount-shared-folders.sh
```

特に何もしていなければこの`.mount-shared-folders.sh`はホームディレクトリにあると思うので, 上のように記入しましょう.

ユーザ名が分からなければ(そんなことはないと思いますが), 別のターミナルを開いて

```
$ pwd
```

とすれば確認できます.

以上で設定完了です. 再起動すると, ホスト側とのフォルダの共有ができていると思います.



## Hack The BoxのためのVPN設定

Hack The Boxでアカウント作成するための[Invite Code](https://www.hackthebox.eu/invite)は各自挑戦してください.
調べればいくらでも解法は出てきますので一例を挙げておきます.

[Hack The Box: How to get invite code](https://codeburst.io/hack-the-box-how-to-get-invite-code-56e369fc8dae)

ここでは既にアカウント作成, ログインまでは済んでいるものとします.

ログイン出来たら左の"Labs"から「Access」をクリック→"Getting Started"から"connection pack"をダウンロード(`here`の部分)

その一行下に書かれている通り, ターミナル上で

```terminal
$ sudo openvpn (username).ovpn
```
を実行します. `(username)`の部分は各自Hack The Boxに登録したユーザ名に置き換えてください.
なお, Hack The Boxのサイトには`sudo`は書かれていませんが, これがないと最終2行が

```terminal
Sat Mar 14 17:50:50 2020 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
Sat Mar 14 17:50:50 2020 Exiting due to fatal error
```

のようになり上手くいかないので注意. 上手くいった場合は最後の1行が

```terminal
Sat Mar 14 17:51:46 2020 Initialization Sequence Completed
```

となるはずです. また

`$ ifconfig`

で下のほう(`tun0`の部分)に`10.10.xx.xx`のようなIPアドレスが出てくると思います. これが手元のマシンのアドレスになります.

あとは別のターミナルを立ち上げ、`nmap`でも`msfconsole`でも好きなだけ使いましょう

















[^1]: Kali LinuxはDebianの"Testing"バージョンに基づいているので, ここで表示される"Stable"バージョンである7.x, 8.x, 9.xのいずれとも関係はなく, 実はどれを選んでも関係ありません.
[^2]: 左端のドルマークは入力する必要はありません(途中の`$PATH`部分は絶対必要です. ないと結構悲惨なことになるので注意). 念のため注記しておきます.
[^3]: 「日本語-日本語」は必要ないので削除してもOKです.
[^4]: 左下のスタートボタン → Windowsシステムツール → コマンドプロンプトを右クリック → その他 → 管理者として実行