RaspberyPi セキュリティ奮闘記

提供: omotenashi-mind
移動先: 案内検索


RaspberryPi にセキュリティ攻撃

Raspberry PiをラップトップとLANケーブル直に繋いで開発を行っていましたが、ある程度の機能が動作するようになったので家の一角にRaspberry Piを設置して動かし、必要に応じてラップトップからsshでつなぐ形で作業しようと思い家のLAN端子に繋ぎ、就寝。
次の日に作業の続きをしようと思ったら、 pi ユーザでsshに繋がらなくなっていました。。

まさかと思いつつ、ひとまずLANケーブルを抜き、モニタに直接繋いでチェックしてみたところ、不正アクセスをくらってウィルスをもらった様子。 pi ユーザのパスワードをいくら書き換えても再起動時にパスワードを強制書き換えする代物で、諦めてOSを一から導入することにしました。

ここでは、再発防止のため、どのようにセキュリティ対策をとって行ったのかを簡単にまとめていきます。

pi ユーザの無効化

Raspbery Piはデフォルトで pi ユーザアカウントのパスワードが「 raspberry 」と設定されています。この pi アカウントを狙って不正アクセスしてくる攻撃があるので、pi アカウント自体を利用せず、別アカウントを用意するほうが安全性が高まるので、その方法を取ることにしました。

pi アカウントのパスワード変更

RaspberryPiでは、pi アカウントをベースに動作しているソフトウェアがいくつかあるので、アカウントそのものを消すのはかなり手間がかかります。なので、最低限パスワードを変更するようにしました。
pi アカウントでログイン後、

passwd

でパスワード更新。これだけです。

piユーザの代替ユーザ作成

次に、 pi アカウントに代替する、新たなアカウントの作成です。

sudo adduser xxx

xxxには任意のアカウント名を指定します。ここでは、「xxx」というアカウントを作成しました。

sudoコマンド実行できないと困るので、sudoグループへ追加。

usermod -G sudo xxx


代替ユーザにsshログインを限定的に許可する

/etc/ssh/sshd_configファイルを開き、以下の行を追加します。これにより、pi ユーザからのsshアクセスを禁止し、新たに追加した代替ユーザのみ、sshアクセスを許可するようにします。

AllowUsers xxx


sshにkeyのみのアクセスを許可する

piアカウントおよびrootユーザへのパスワードクラッキングがかなり多いので、keyを持っている端末からのみのアクセスを許可するようにします。
まずはkeyファイルから作成します。

ssh-keygen

デフォルトだと、公開鍵は ~/.ssh/id_rsa.pub、秘密鍵は ~/.ssh/id_rsaとしてファイルが作成されます。ここは任意で変更可能です。
公開鍵と秘密鍵が出来上がったら、公開鍵をRaspberry Piにコピーします。コピーは以下のコマンドで実行可能です。

cat ~/.ssh/id_rsa.pub | ssh xxx@IPAddressOfRaspberryPi 'cat >> .ssh/authorized_keys'

xxxには任意のアカウント、IPAddressOfRaspberryPiにはターゲットとなるRaspberry PiのIPアドレスもしくはホスト名を指定してください。

ここまでできたら、sshコマンドで実際に接続して、keyでアクセスできるか確認してみます。問題なければ、一旦設定完了です。

ここからが本題ですが、key経由でsshアクセスできるようになったら、次はRaspberry Pi本体へのパスワード認証によるアクセスを禁止します。

Raspberry Piにsshでアクセスし、/etc/ssh/ssh_configを開きます。開いたら以下の行のコメントアウトを外して、値を'no'に変更します。

PasswordAuthentication no

あとはsshサービスを再起動して完了です。これで、keyからのsshアクセスのみを許容するようになりました。

その他取り組み

上記設定に加え、ログ監視を行い、不正アクセスと思われる記録を発見したらアラート通知としてslackメッセージを飛ばすようにしました。また、一定程度の不正アクセスを検出すると対象アドレスからtcpアクセスそのものを遮断する仕組みも実装しました。
ログを見続ける必要がないので、slackはかなり便利に利用しています。