【Think】システムセキュリティの実装は「多層防御」と「侵入後の範囲制限」が基本な気がする
もちろん、他にも考えるべき要素はいっぱいある。
たとえば、守る情報の重要性とか、どれだけコストかけられるかとか、まぁ色々。
とはいえ、「多層防御」と「侵入後の被害制限」はやっぱ基本だと思う。
第一に、「どうやって侵入させないか」(多層防御)
hr.icon
攻撃者が最初の目的地にたどり着くまでのルートを、どれだけ長くできるか、どれだけしんどくできるかが勝負。
防御を積み上げまくる。破綻しにくい城をどう作るか、みたいなイメージで考えるといい。
どんな侵入経路がある?
どんな攻撃が想定される?
どうすれば、突破までが面倒で、やってられないって思わせられる?
このへん詰めて考えていくと、多層的な防御が自然とできあがっていく。
注意すべきなのが「脆弱性」。
いくら壁を高くしても、どっかに小さな穴があったら意味がない。
自分の使ってる部品・構成の中に、抜け道(脆弱性)がないか、常に気にしておく必要がある。
第二に、「突破されたときにどうするか」(最小権限)
hr.icon
どれだけ防御を固めても、突破される可能性は常にある。
ゼロにはできない。だから「侵入されたら終わり」じゃなく、「侵入されても最小限で抑える」が大事。
たとえば、乗っ取られたプロセスの権限を最初から小さくしておく。
そいつにファイル全部触れる権限とかあったらアウト。
操作できる範囲を限定しとけば、乗っ取られても「それだけ」しかできない。
バイナリにコード署名つけて、そもそもプロセスの動きを制限しとくのもアリ。
ただしこれは、OS側がちゃんとそういう仕組み持ってないと意味ない。
まあ大抵のプラットフォームは持ってる。
たとえば:
AWS なら IAM Policy とか。
Linux なら chroot だけじゃなく、seccomp, AppArmor, SELinux とか。
Mac なら entitlements や sandbox。
その他
hr.icon
攻撃面を如何に小さくするかってのも大事だな。
侵入経路を減らすように努力しよう。
特に、突破されたら被害が甚大になってしまうような場所は、侵入経路を0、ないし1つにするくらいの本気を見せるべき。
侵入経路が少ければ少ないほど、攻撃者は突破しにくくなる。
これも「城攻め」とかを考えればシンプルだと思う。
侵入経路が一つしかないと、味方も守りやすいし、相手は攻めにくい。
クレジットカードとか顧客情報の管理とかは、すごいとこだとネットワークが完全に切り離されたサーバーで管理するとかあるよな。
人が物理的にそのサーバーにデータを出し入れして管理するみたいな。
これも攻撃面を小さくする例だと思う。