RaspberryPi で初歩のセキュリティハンズオン その1

「オープンハードセキュリティ #4」
https://openhardsecurity.connpass.com/event/183696/
のテキストです。

深センのものづくり企業 Ideagear の社内勉強会を兼ねて、セキュリティの初歩的なハンズオンをします。

# やること


- 19:00 オープニング、ssh 設定、自己紹介、Ideagear の説明など
- 19:20 RaspberryPi にログイン、Linuxの 基本操作
- 19:30 破壊行為実習
- 19:40 ハニーポッド設置、ログ監視
- 19:50 クロージング、次回開催のアナウンス

講師のRaspberry Pi 上にインターネット経由で ssh でログオンできるようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ef95b884-702d-5012-e9f1-09075695d7c6.png)

写真は別勉強会でRaspberryPiを使って更に他のワンボードマイコンの実験をしているところです。今回もこのようなシステムを使ってハンズオンを行います。


# 事前準備
今回使う情報を手元にメモしておいてください。

- サーバアドレス
- ssh ポート番号
- ssh ユーザ名
- ssh パスワード
- 自分のscreenセッション名 (connpass のエントリー名を元にします)

# RaspberryPi にログイン


# サーバに接続

ssh で指定したサーバに接続してください。
接続できたら以下のように表示されます。

```
Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jul 19 13:51:02 2020 from 192.168.42.17

Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use.

pi@raspberrypi:~ $ 
```

と出ます。
さて、以下のように表示されているところに入力していきます。

```
pi@raspberrypi:~ $ 
```

さて、$ の後ろに以下のように入力します。

```
pi@raspberrypi:~ $ screen -S hogehoge
```

この例では hogehoge が screen セッション名です。自分の screen セッション名に入れ替えてください。

``` 

$ 
```

の表示の後にキーボードから入力してエンターを押します。＄ を含め、これより前の部分を入力する必要はありません。
この命令で screen セッションに接続します。 セッションを共有して、作業を講師側でモニターします。

```
There is no screen to be attached matching hogehoge.
```

のように出た方はセッション名指定などがうまくできていません。講師にお声がけください。
正常に接続すると、画面が切り替わり再度

```
pi@raspberrypi:~ $ 
```
と表示されます。

今後、以下のように表示されているところを、

```
pi@raspberrypi:~ $
```

以下のように省略して表示しますので覚えていてください。$ のマークは入力可能であることを示していて、プロンプトと言います。プロンプトは状況により $ や # , > などがあります。

```
 $
```


追加操作として、プロンプトを以下のように設定します

```
 $ export PS1="hogehoge $"
```

# Linux の基本操作

ファイルの一覧を見てみます。

```
 $ ls
folder  test
```

ファイルの中身を見てみます。

```
 $ cat test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
```

ファイルの最初10行だけを見る方法です

```
 $ head test
1
2
3
4
5
6
7
8
9
10
```

ファイルの最後10行だけを見る方法です

```
 $ tail hogehoge
11
12
13
14
15
16
17
18
19
20
```

ディレクトリの中身を確認してみます

```
 $ ls folder
test2
```

ディレクトリに移動して、中身を確認してみます

```
 $ cd folder
 $ ls
test2
```

ディレクトリを1つ上に移動します。

```
 $ cd ..
 $ ls
folder  test
```

ディレクトリを新たに作成してみます。

hogehog は自分のセッション名に入れ替えてください。
ディレクトリを作ってみます。

```
 $ mkdir hogehoge
 $ ls
folder  hogehoge  test
```

今作ったディレクトリに移動して、中身を確認してみます

```
 $ cd hogehoge
 $ ls
```

ファイルを新たに作成してみます。

```

 $ touch hogehoge
 $ ls
hogehoge
```

今作ったファイルを消してみます。

```
 $ rm hogehoge
 $ ls
```

ディレクトリを一つ上に移ります。

```
 $ cd ..
 $ ls
folder  hogehoge  test
```

ディレクトリを削除します。

```
 $ rmdir hogehoge
```

# 破壊行為をしてみよう

先に学んだ削除コマンドで、ファイルを削除してみましょう。
システムの動作に必要なファイルも消すことができるでしょうか。

```
rm: cannot remove 'proc/1021/oom_score_adj': Operation not permitted
rm: cannot remove 'proc/1021/coredump_filter': Operation not permitted
rm: cannot remove 'proc/1021/io': Operation not permitted
rm: cannot remove 'proc/1021/uid_map': Operation not permitted
rm: cannot remove 'proc/1021/gid_map': Operation not permitted
rm: cannot remove 'proc/1021/projid_map': Operation not permitted
rm: cannot remove 'proc/1021/setgroups': Operation not permitted
rm: cannot remove 'proc/1021/timerslack_ns': Operation not permitted
rm: cannot remove 'root': Permission denied
```

# アクセス権

通常の Linux は一般のユーザでは、システムに必要なファイルはみだりに消せないようになっています。しかしながら、sudo をするとスーパーユーザー権限で作業ができるようになり、一般のユーザーでは削除できないようなファイルも削除ができるようになります。

sudo は危険なので sudo ができるユーザは限られています。しかしながら Raspberry Pi ではデフォルトで作られている一般ユーザである " pi " だと sudo ができるようになっています。

# 破壊行為が行われた後

```
pi@raspberrypi:/ $ ls
bash: /bin/ls: No such file or directory
```
操作ができなくなっています。ssh からのログインもできません。

# ハニーポッド設置

" pi " ユーザはデフォルトでパスワードが設定されていますが、それは広く知られています。デフォルトパスワードを使用していると、重大なセキュリティの問題となります。しかしながらデフォルトパスワードを変更せずに公開している事例も多くあるのが実情です。

ここでは、デフォルトパスワードを変更せずにインターネットに公開し、どのようなアクセスが発生するかをモニターします。


破壊したRapspberryPi とは別のRaspberry Pi にログオンします。

screen セッションで 今度は講師のセッションに接続してください。

```
 $ screen -x hogehoge
```

ssh でログオンがなされたかどうかの記録ついては、/var/log/syslog に記録されています。

```
 $ tail -f /var/log/syslog
```

とすると、 /var/log/syslog 
の末尾10行を表示します。今回は -f をつけているので末尾10行を表示した後待機し、ログが追加されたらその行を表示します。


#  クロージング、次回開催のアナウンス

お疲れ様でした。