【2017年版】コンテナをハッキングから防御する50の方法 | from Opensource.com

法律: IT 解説記事 オープンソース コンテナ アプリ セキュリティ フノス(訳者)

 2017年1月4日|Daniel J Walsh

  私が若かった時分、『恋人と別れる50の方法』なんて曲をポール・サイモンが歌っていましたね。流行っていた。いや~懐かしい。
 今回はその歌になんとなく合わせながら、
 「システム管理は素人」という方でも実践できる、ハッカーをはねのける方法を50個お教えします。
 

 ”さっさとばっくれちゃえ、ジャック。”

 1. データのバックアップを取る。
 ランサムウェアに感染しても、バックアップさえあれば、相手に金銭を支払う必要はありません。

 2. 携帯電話を知らない機械で充電する時には、 syncstopを使う。あるいは、予備のバッテリーを持ち歩く。
 マルウェアのリスクが減らせます。

 3. 監視用サブシステムを使う。
 システム監視を平然とこなすツールはいっぱいあります。皆さんが機械にべったりと張り付かなくても、これらのツールが有事の際に、「何が起こり、どのような攻撃がなされたか」を知らせてくれます。

 4. ログの部分だけはオフラインで集約管理する。
 ハッカーがシステムに侵入したときに、まず最初に始めることは、システムのログを書き換えて、自分の存在をごまかすことです。しかし、ここでログが書き換えられなかったら、何者が侵入したかを知るきっかけになります。
 

  ”大事なのは次のプランよ、スタン。”

 5. SELinuxをenforcingモードで動かす。(詳しくは、 stopdisablingselinux.comを参照)
 SELinuxを後回しにしてもかまわないとお考えでは?まず、SELinuxにはゼロデイ攻撃を妨害する役割があります。シェルがどうにかしてしまったときに、システムを守れるのはSELinuxしかありません。

 6. アプリケーションは必ずや、SELinuxサンドボックス内で運用する。
 コンテナだけでは心もとありません。Flatpackの開発方針をよく見てみると、なぜサンドボックスを作成するに至ったかがよくわかります。

 7. Flashをインストールも使用もしないこと。
  問題はセキュリティだけではありません。Firefoxは近い将来、Flashのサポートを打ち切ります。そもそもが、ウェブサーバーにこれをいれても動かなくなるのです。

 8. SELinuxを扱えるユーザーはきちんと決めること。
 シェアログイン方式を採っている場合、「guest_t」で設定できます。
 

  ”『チャンスよ来い』じゃないでしょ、ロイ。”

 9. サービスを安全にするためのツールは有効活用すること。
 サーバー攻撃のほとんどは、ネットワークからやってきます。
 Systemdを使えば、サービスを強制閉鎖させられます。
 他にも「PrivateTmp=yes」などで、PrivateTmpを利用すると、サーバーの/tmpディレクトリにtmpfsをマウントさせるときに、プライベート・tmpfsに名前空間が与えられるようになります。
 じつは、これでハッカーの不正アクセスに遭っても、ホスト側の/tmpディレクトリには、中々アクセスされなくなるのです。同時に、/tmpディレクトリの中身を傍受して、システムの攻撃に利用されるリスクも防げます。

 10. InaccessibleDirectories=/homeと、マウント名前空間を設定する。
 ホストシステム側の/homeディレクトリに(あるいはどのディレクトリにも)アクセスできなくなります。サービスがハッキングに遭ったとしても、コンテンツまでもを破壊することは簡単ではありません。

 11. ReadOnlyDirectories=/varで、マウント名前空間を設定する。
 
ディレクトリのコンテンツを読み込み限定モードに変更できます。/usrディレクトリも読み込み限定に設定すると、なおよいでしょう。
 ディレクトリを読み込み限定にしておくと、プログラムが書き換えられることがありません。ハッキングに遭ったそばから、何事もなかったかのようにサービスを再開させられるかもしれません。

 12. 適切に権限認証を省略する。(例:CapabilityBoundingSet=CAP_CHOWN CAP_KILL)
 カーネルの特権プロセスのうち、どれかが停止させられた場合、他の特権プロセスもすべて停止します。大抵の特権プロセスは、それでよいのですが、「サービスをストップさせる」というプロセスだけなら、特権が なくても実行できたほうが、便利かもしれません。

13. 運営しているサービスが、インターネットに接続することが全く予定にない場合は、PrivateNetwork=yesに設定すること。
 サービスユニット ファイルに、ネットワーク名前空間が適用され、オフラインならではのサービスが使えるようになります。
 サーバーに関連するマシンを攻撃して大変有益なことでもない限り、「オフライン」という時点で、ハッカーが攻撃する気はだいぶ失せていることでしょう。インターネットで見つからないサーバーを、攻撃することはほとんどできないからです。

14. サービスにコントロール・デバイスを使用する。
 Systemdには、サービスで使うことができるコントロールデバイスを探し出す機能『DeviceAllow』があります。「DeviceAllow=/dev/null rw」と設定することで、「/dev/null」のみを専用のデバイスノードにして、他のデバイスノードにはアクセス不能にします。
 これは、デバイス用cgroupコントローラーの代表的な機能です。

 15.もうすぐsystemdに追加される「ProtectSystem Strict」も有効活用すること。
 この名前空間に設定すると、運営しているサービスに安全に閉鎖された環境を用意することができる。
 

  ”主導権はあなたが握るの”

 16. SELinux(SEAndroid)が「enforcing」モードでないがぎり、携帯電話を使ってはダメ。
 ただ、私が聞いた話では、幸いなことに現在90%以上のアンドロイド・フォンがSEAndroidを「enforcing」モードで使っているそうです。少し安心しています。Appleの場合、GUY操作でSELinuxを使用できます。

 17. 出所が信用できるソフトウェアしかインストールしない。
 インターネットで見つけてきた野良パッケージはインストールしてはいけません。あなたにはあくまで、アプリケーションを管理する責務がある。携帯電話にも、コンピューターシステムにも、仮想マシンにも、コンテナにも、同じように気を配らなくてはならないことをお忘れなく。

 18. ネットバンキングをしない。
 これは、携帯でも、Linuxコンピューターでも同じです。
 実はこれ、私の実体験でね、以前ハッカーにクレジットカード番号を読まれて、お金を盗まれたことがあるんですよ。幸い50ドル程度で済みましたが。これが銀行口座の番号だったら、こんな程度では済まなかった。
 参ります。これだからハッカーお断りですよ。
 そして、長年こういうことに携わってきたのに、これしきのことを油断した自分が情けない。
 情けないぞ…
 

 19.クレジットカードに請求があったら、クレジット会社からいつも使っている携帯電話に、メールが届くよう設定すること。
 この方法で、いったいいくら盗まれたかを早く知ることができたから、対応のしようもあったのです。

 20. 会話や、やり取りをより安全に行うためには、Signal secure messaging appを使うこと。
 (訳者より:リンク先を見る限り、これはセキュリティ対策をとった『LINE』みたいなもののようです。『運営資金は寄付で賄っているため、利用料は無料』とのこと。お仕事などで役に立ったら、寄付をするのが最低限のマナーですね。そこらのチンピラに情報を盗み見されたくないという方は、導入を検討されてはいかがでしょう。)
 

  ”バスに乗り遅れるな、ガス”

 21. システムにはLinuxを使うこと。
 父の影響で興味を持ち始めたコンピューターでしたが、いざきちんと学んでみると、実はうちにあったシステムが、ウイルスに狙われそうな隙だらけだったんですよ。そこで私は、システムをLinuxに乗り換えようと考えたんです。インストールしてみると、今までのシステムと同じように動きました。
 Linuxが安全だという理由に、そもそもが攻撃されづらい設計になっている点が挙げられます。たとえば、デスクトップ1つとっても、ユーザーベースが少ない分、ハッキングに遭う確率が低いと言えるのです。
 長年猛威を振るってきたWindowsが、最も改善したOSだとする意見もあります。しかし、私はLinuxのほうが構造からして強いということを信じています。
 

 22. 自社の宣伝になってしまいますけど、さすがにアプリケーションを運営するシステムには、 Security Response Team が監視しているものを入れましょう。企業で使うソフトウェアですよ。大切です。

 23. カーネルは企業で使っても差し支えないものにする。
 コンテナは、カーネルにない機能を使えません。コンテナを安全に保つためには、まず最新のセキュリティ修正を施した、ぬけ穴や隙の少ないカーネルを使うことが大切です。
 そして、いくらカーネルが最新の修正を行っていたとしても、他のコードに脆弱性がある可能性もあるところに注意が必要です。
 

  "分かり合おうとするまでもないわ"

 24. ハッカーは「ソーシャル・エンジニアリング」を駆使して、emailのリンクや、ウェブブラウザ、電話のコールなどにもわなを仕掛けてくる。何事にも懐疑的になることです。
 ナイジェリアからお金は戻りません。
 国税庁が「お金を払え」なんて、電話では言わないから。
 「銀行から送られてきた」とかいうメールに、ウェブサイトへのリンクが張られていたら、それも案外高確率でニセモノ!そこに張られているリンクをクリックしちゃダメ!
 でも、どうしても確認するということなら、アドレスをブラウザにコピペして見ることが大切です。

 25. システムは常に最新にアップデートすること。
 古いシステムには、後から見つかったセキュリティ脆弱性が山とあるのです。ハッカーの餓鬼どもは、アップデートされていないシステムを、ピラニアのごとく待ち望んでいます。

 26. ネット上のサービスに接続する時には、常にHTTPSを使うこと。
 ChromeやFirefoxには、これをなるべく強制するモードがありますよね。2016年時点で安全な接続方法に対応しなかったウェブサイトは、もはや利用するに値しないと言えるのです。

 27.コンテナに seccompを使う。
 これはカーネルを標的にした、シングルポイント障害を発生させる攻撃に制限をかけることができます。
 

  ”そんなルームキー捨てちゃえば?リー。”

 28. 強固なセキュリティキー「YubiKey」を使う。

 29. システム上のデータを暗号化する。
 最近のラップトップは、ホームディレクトリとその他データ・ディレクトリを暗号化する機能があるものもあります。
 何年か前の話ですけど、ロンドンの地下鉄に乗っていたとき、ラップトップをすられたことがありました。
 なんだかカバンが軽いぞと、気づいた時にはもう電車のドアが閉まったところで、私のラップトップは、すう・・・と電車もろとも駅から遠ざかっていったのでした。とはいえ、ディスクの内容は暗号化されていました。中のデータまでもを盗まれている可能性はまだ幾分も低いはず。
 

 30. 管理しているすべてのウェブサイトに、 Let's Encryptを導入する。
 無料です。HTTPSと同様に、皆さんのアプリに入れない理由はありません。

 31. 決して、複数のウェブサーバーで同じパスワードを使わないこと。
 実は、パスワードを見破られないかぎり、ハッカーの罠にかかることはほとんどありません。そこにLet's Encryptを導入すれば、より強固な環境を構築できます。さらに、システムのログにssh keysを使えばなおよろしい。

 32. two-factor authentication (2FA/2要素認証)を使う。
 パスワードは不便です。誰かに知られてしまえば、安全には使えなくなりますし、たったそれだけのことでセキュリティが破られるようではいけません。
 28.で紹介した、YubiKeysを使えば、2要素認証が簡単に行えます。
 皆さん携帯電話はお持ちですよね?パスワードの他にも、登録している携帯電話を認識させないと、解除できない仕組みのほうが、パスワード単体よりもよほど安全です。
 

 33. たいした必要もないのに、常にアカウントを尋ね続ける最近のウェブサイト、何とかなりませんかね?もっとよいやり方はないのでしょうか。アカウントだよりなサービスの側にも問題があると思うのです。
 ともあれ、同じパスワードを使わないために、パスワード生成器を使いましょう。
 私の場合、ちょっと古典的に、 Password Safeを使って複数のパスをコピペして使っています。
 ちょっと聞いた話によると、他の人はLastPassや、似たような他のツールを、電話やウェブサービスで使っていて、便利なんだそうです。
 

 34. サービスID確認のために、 FreeIPAのようなツールをセットアップすること。
 このツールはKerberosのユーザ識別やアクセス許可に使われていて、どの従業員がシステムにアクセスしたかをより分かりやすく管理できているそうです。(セキュリティ業界の隠れた名作なんですよ。)アクティブディレクトリで使うもよし、とありますが、私としてはまだまだ使える範囲を広げてもいいと思っているのです。

 35. パスワードに文字数制限がないのなら、何か思い出しやすい一文を入れた方が、キーワードよりも安全である。
 私はこれ好きです。パスワードを忘れきることがありませんし、きちんと話すための言葉になっているせいか、入力も簡単なんですよね。
 

  ”もうあなたは自由なの”

 36. ウイルス入りUSBデバイスからシステムを守るために、USBGuardを使う。

 37. もう何年か経ちましたが、私はコンテナのセキュリティ部門で開発に携わっていました。
 まず、SELinuxはenforcingモードで動作させておくということを最初にお伝えしましたが、もし、現在使っているシステムがSELinuxに対応していなかった場合、もうディストリビューションから変えてしまいしょう。コンテナ経由でファイルシステムを破壊されないようにするには、SELinuxが一番の手段です。

 38. なにがあってもコンテナの中でサービスを展開する。
 将来、アプリケーションはOCI Image FormatとLinuxコンテナ技術を使って配布されるようになると、私は予想しております。これらのコンテナはDocker、 runC、 OCID、 RKT、 Systemd-nspawnなどのソフトを使って運用します。
 以前私は、「コンテナはきちんと制御しなくてはならない」ようなことを述べましたが、これらのソフトを使って適切にコンテナを監視して運用する分には、コンテナ単体より何倍も安全です。
 

 39. コンテナを仮想マシンで運用すること。
 仮想マシンがホストマシンを防御する能力に長けていることは、皆さんご存知のはずです。そして、パフォーマンスにおいてはコンテナのほうが上ということなので、その両方の長所をとりましょう。

 40. コンテナ化されたアプリを、他の仮想マシンに移し替えるときには、これまでとは違うセキュリティ対策が求められます。
 ウェブサービス・コンテナをDMZ内の仮想マシンで管理している場合、仮想マシン上のデータベース・コンテナはDMZに入れないで運用しなくてはなりません。

 41. 仮想マシンで求められるセキュリティ対策は、物理マシンで必要な対策とも異なりますし、コンテナ内部に作成された仮想マシンに必要な対策も異なります。(これを多層防御と言う場合があります。)

 42.コンテナを読み込み限定モードで動かす。
 コンテナ内部を開発しているときには、/usrディレクトリに様々な記述ができた方がよいのですが、いざ実際に使う段になったら、tmpfsとコンテナにマウントしたボリュームにのみ書き込み可能にすべきでしょう。

 43. コンテナ内での無駄な権限認証は避ける
 もしも、root権が必要なプロセスを乱発すれば、それだけプロセスがホスト側のシステムに任されることになります。権限認証を避けることで、ホスト側のシステムが操作される確率が減り、より安全に処理を遂行できます。

 44. コンテナのプロセスをroot権で実行しないこと
 大抵の処理に、特権プロセスは必要ありません。もし特権を要求した場合は、< 1024 ポートに送還され、ルート権がない一般ユーザーとして処理されます。そしてアプリの設計は、動作に特権が必要ないようにすることをおすすめします。
 

 45. CVEを常に最新のものにアップデートすること。
 OpenShiftのようなシステムを使うと、新たなセキュリティ修正が発見され次第、修正を自動的に適用してアプリをリビルドするので、とても便利です。

 46. 私の同僚が、「Dockerって、ネットからダウンロードしたランダムコードで動いていて、root権で操作できるんでしょ」と言っていましたが、これは油断もよいところです。
 ソフトウェアは、信用できる発信元から入手しましょう。そして、たとえ「docker.io」のような信用のおけるサイトにあったものだろうと、初心者がApacheアプリケーションに手をつけることはお勧めできません。そこには、OSの問題があるからです。

 47. 実際にコンテナを使用するのなら、アプリケーションをホストマシンに最適な状態でコンテナ化する必要があります。
 たとえばAtomic Hostのようなソフトを使うと、コンテナにあらゆるセキュリティ機能を追加し、運用に適した状態に整備してくれます。きちんとアップデートを重ねていれば、サーバー攻撃に遭う危険性も極力下げられますよ。
 使わない手はありませんね。
 

 48.  OpenScapのような、システムの脆弱性を発見するツールを使うこと。
 これも最新にアップデートしておくと、思わぬ脆弱性を発見するきっかけになります。(できれば、 atomic scanの結果にも少し目を向けていただきたいものです。)

 49. 他にもOpenScapには、セキュリティ設定がきちんと行われているかを検査する機能があります。
 たとえば、STIGs (Security Technical Implementation Guides)に準拠しているかなど。

 50. 子供へのプレゼントで送られてきた機械には、すべてゲストネットワークを設定すること。
 私、Amazon Echoにはまっております。自動点灯機能や、電源スイッチ便利ですよね。(『アレクサ、クリスマス・ライトを点けて』とか)
 ですが、これをLinuxOSで使うとなると、セキュリティ的にいかがなものか疑問が残ります。
 

  ”ほらね、ハックを追い出す方法なんて、50はある。”

  さて、あなたが管理の初心者だったとして、どれを実践してみますか?ブックマークお待ちしております。
 ここまで読んでいただき、ありがとうございました。

2017-07-08 16:26:15 / Hnoss
原文サイトを表示
[ 原文 ] https://opensource.com/article/17/1/yearbook-50-ways-avoid-getting-hacked
Creative Commons License この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。
クリエイティブ・コモンズ・ライセンス