Piは、あらゆるプロジェクトに使える夢のボードだ。安くて、簡単に使えて、さまざまなOSに幅広く対応していて、プログラム可能なGPIOピンやマルチコアのCPUや複数のUSBポートも備えている。Piだが、気をつけていないと、その可愛いボードを使った簡単な趣味のプロジェクトが、ネットワークへの侵入口になるなどのセキュリティホールになってしまう恐れもある。Trustzoneと違ってセキュアブートの機能がない。SDカードやOSは簡単には暗号化できない。Piとみなさんのネットワークに接続された機器を守るためのセキュリティの技を紹介しよう。・そのコンピューターパワーを悪用して暗号通貨が盗める。・他のホストを攻撃する際に、攻撃者が特定されないように中継点として使える。・内部ネットワークの侵入口として使える。攻撃者は簡単にファイルサーバーにアクセスでき、ランサムウエアをインストールできる。脅迫メール用の書類を盗んだり、ファイヤーウォールやルーターの設定を書き換えて、自由に出入りできるようにしてしまう。ルーターのウェブコンソールを攻撃したりuPNP操作を行って、インターネット上の別のポートを開いて攻撃することもできてしまう。最新バージョンのNOOBSまたはRaspbianをインストールする場合は、piユーザーのパスワードをデフォルトから、もっと長くて推測が難しいものに変更することが大切だ。P@assword1!などというものより、iamasuckerfor5dollarmojitosみたいなパスワードのほうが安全だ。アカウントを無効化する予定でも、このステップは防御の基本であることを覚えておこう。ユーザーアカウント次のステップは、Raspbianにデフォルトで設定されているPiアカウントを無効化すること。これを行う前に、新しいアカウントを作っておこう。それにはuseraddコマンドを使う。追加フラグを使用すれば、そのユーザーの新しいホームディレクトリーも設定できる。Piユーザーとしてログインして、以下のコマンドを実行する。makezinemakezineの部分は自分のユーザー名に書き換えること。これで新しいアカウントと、そのアカウントのためのディレクトリー(/home/makezineといった感じ)が作られる。ユーザーがsudoコマンドを使えるように、sudoグループのためのアカウントも作っておく。新しいユーザーアカウントができたら、そのアカウントのためのパスワードを、以下のように設定する。makezine次に、ルートのパスワードをリセットする。長くて推測されにくいパスワードを設定しよう。root最後に、Piアカウントを無効化する。piこれで、Piアカウントからログアウトして、新しいアカウントに新しいパスワードを使ってログインできるようになる。SSHを保護するデフォルトでは、Raspbianは、どこからでもアクセスできるリモート・アクセス・シェル(SSH)をインストールするようになっている。これは、認証されたSSHキーを使ってのみ特定のマシンにログインを許可するようにSSHの設定を変更して防ぐことができる。プライベートキーは、少なくとも2つの安全な場所にバックアップを取っておこう。これを行うには、まずviなどのテキストエディターを使って、以下のコマンドでSSHの設定ファイルを開く。/etc/ssh/sshd_configそして以下の行を設定する。コメント行になっていないことを確認してほしい。コメント行とは、先頭に#マークが付いている説明用の行のことで、この行は設定処理の対象にはならない。パスワードを使わない場合はyesに変更する(推奨しません)。通常のパスワードを禁止する場合はnoに変更する。Modules(PAM)またはLinuxのネイティブな認証を無効化して、キーを使ったログインのみを許可するというもので、とても重要だ。次にSSHキーを生成する。これはWindowsのPuTTYまたはLinuxのssh-keygenコマンドを使って行う。ユーザーのホームディレクトリーに「.ssh」というディレクトリーを作り、以下のコマンドを含むauthorized_keysファイルを作成する。適切に許可が下りるように設定することが大切だ(そうしなければキーを使った認証ができなくなる)。~/.ssh/authorized_keys次に、テキストエディターでauthorized_keysファイルを開き、ログインできるように、生成されたパブリックキーを貼り付ける。コマンドの効果が発揮されるように、必ずSSHを再起動すること。sshファイヤーウォールSSHの設定が完了したら、Piのiptablesファイヤーウォールが正しく作動しているかどうかを確認しておこう。念のため、ファイヤーウォールのルールが有効になり接続がブロックされたときにメッセージが記録されるよう、ファイヤーウォールを設定しておくとよい。以下のコマンドを使ってiptablesをインストールする。iptables-persistentiptablesファイヤーウォールを使うためには、新しいカーネルモジュールをロードする必要がある。簡単な方法は、Piを再起動することだ。iptablesがインストールできたら、以下のコマンドを使ってiptablesの現在のルールを確認する。-Lこれによってルールのリストが表示される。何も書かれていないはずだ。ルールは、以下のコマンドでテキストファイルとして保存や編集ができる。/etc/iptables/rules.v4このファイルは、システムが起動または再起動されるときに必ずファイヤーウォールが有効になるように、iptablesを常駐させるものだ。以下のような形にして保存しておこう(必要に応じてルールを編集してほしい)。すべてのループバック(lo0)トラフィックを許可し、すべてのトラフィックをloOを使用しない127/8にドロップします。確立されたすべての受信接続を許可します。すべての送信トラフィックを許可します。特定のトラフィックのみを許可したいときは、ここを変更してください。ものと同一にしてください。よって拒否されたコールを記録します(dmesgコマンドで見られます)。その他のすべての受信を拒否します。明示的にポリシーで許可さない限り、デフォルトで拒否されます。REJECTCOMMIT次に、iptablesが正しく機能しているかを確認する。これは、SSHを通してリモートで接続したり、何か問題が発生したが接続を切断したくない場合などは少し複雑になるが、幸いなことに、ルールを適用して接続の確認を助けてくれるコマンドがある。一定時間応答がないときは、プログラムは切断されたものと判断して変更を取り消す。応答があれば、変更を固定する。これは以下のコマンドで行える。/etc/iptables/rules.v4すべてが正常に機能すれば、変更は適用され、その結果を以下のコマンドで確認できるようになる。-L必要のないものは消す。ファイヤーウォールには必要なサービスだけが表示されるようにしよう。できれば、デフォルトではないポートが望ましい。自前のネットワークに接続する。Piは必ず自前のネットワークにインストールして、通常の使用において、インターネットへの送信のための接続を認識でき、フィルターできるようにしておく。自分のファイルサーバーや他のシステムにPiから接続できないようにしておくことも大切だ。Piからのインターネット接続にも制限を加えるとよい。更新とバックアップパッケージの更新は定期的に行う。Piのウェブサイトで更新を確認しよう。unattended-upgradesというパッケージをインストールすれば自動更新が可能になる。wikiを見てほしい。設定のバックアップを取る。SDカードは壊れることがある。データまたはSDカードの中身全体を、暗号化したパッケージ、ファイル、またはファイルシステムとしてUSBメモリーにバックアップしておこう。事前にインストールされているイメージは極力使わない。どこからか手に入れたプレインストールされたイメージを使おうと思ったら、なぜその必要があるのかを考えよう。その作者が信頼できる人物なのか。中身が改造されて怪しいソフトウェアやバックドアが仕込まれていないか。作者の知らないところで組み込まれている可能性もある。それが安全なものかを、よく確かめることだ。不確かなときは、Piが自分だけのネットワーク上にあり、他のシステムやネットワークに接続できない環境にあることを確認してからインストールすること。ルーターにDMZセグメントやゲスト用のWi-Fiネットワークがある場合は、見たいサービスだけがインターネット上で公開できる環境にPiを置くことが望ましい。してもそのイメージをインストールしたいときは、以下のようにするとよい。・piユーザーとrootユーザーだけでなく、すべてのアカウントのパスワードを変更する。Piに付属しているソフトウェアには、いろいろなサービスがある。netstartを使えば、どのサービスが有効かを確認できるので、必要なものだけを公開できるように、ファイヤーウォールとルーターを設定しておく。・以下の方法でSSHキーを再生成する。openssh-server・有効なサービスが使用するポートを通常使っていないポートに変更し、ソフトウェアの自動インストールやサービスの大量のスキャンを防止する。攻撃者は、標準のポートを狙ってくるものだ。・イメージの作者に最新の更新やセキュリティーに関する注意点などを聞く。Piがクラッシュすると、自動化されたシステムもダウンしてしまう。Timerが付属している。Piが自動的に再起動してくれるというものだ。Piがオーバーヒートしてしまうのは残念なことだ。そこで、大きな負荷がかかっても熱暴走しないように、CPUにヒートシンクを付けておくとよい。価格も安いし、簡単に取り付けられる。Logwatch:前日の活動や警告などを夜にメールで送ってくれる。Piがメールを送信できる状態にしておくことが必要だが、exim4リレー・エージェントが役に立ってくれる。以下のコマンドでLogwatchがインストールできる。logwatchインストールしたら、/usr/share/logwatch/default.conf/logwatch.confファイルを必要に応じて編集する。デフォルトでは、Logwatchはルートアカウントにメールを送るので、なんらかのリレーを使う方がよいかもしれない。詳しくは、私の電子メールリレーに関する記事を見てほしい。