最近ごちゃごちゃと言われ始めてるUNIX系OSのセキュリティ確保。沙耶です。
ノーガード戦法でいいじゃないかって○すのひとに言われました。やだよwwwww
ちまちまテストせにゃならんなぁ、とは思ってるのだが…めんどいよ、めんどいw
ひつまぶし(なぜかお腹が満たされる)なので適当に嘘書いてみよぅ。
現在のところセキュア系ソリューションの機軸はいくつかありますが。
サーバOSにどうのこうのする前に、まずサーバが置いてある場所に鍵つけてねw
監視カメラもねwwwwwいや、ほら、ダミーじゃなくて!wwwwww
サーバのフロントパネル、ラックにも鍵つけようねwwwwwwオープンラックじゃしょうがないけどもw
とりあえず話はそれからだwwwww 事務所の真ん中にデスクトップマシンぽつねんと置いてあるのをサーバとか言われてもwwwww どうやって守れとwwwww
とりあえずハンマー持ってくれば攻撃できるじゃないのw
さて、物理的には安全を確保したとして。まず大黒柱となるのはこれ。
・サーバ仮想化技術
ひとつのサーバOSの上に仮想的に別のサーバシステムを構築し、実運用をその仮想サーバの上で行う技術。
代表格はVMwareなどですが、ハードウェアエミュレーションを行うもの、jailやchrootなどでファイルシステム的に分離させてしまうもの、chrootなどに加えて実機カーネルとの間に割り込んで実機保護も加えるもの。
その形態は現在のところ大まかに上記の三つ。
ハードウェアエミュレーションはひとつのサーバOS上にエミュレータソフトウェアによる仮想ハードウェアを構築し、そこにまたOSを突っ込むと言う激しく手間の掛かる方法。ただしもっとも安全。VMWareがこの代表。欠点は原則としてオーバーヘッドが大きく、処理速度の低下が比較的大きめ。
ESXなどでは専用OSで実装するため、オーバーヘッドによる落ち込みが極めて小さくなる。話じゃ1%以下だとか。
利点は実機のOSと仮想システムが完全分離するため、仮想システムがいくら破壊されようが実機にまったく影響が無いこと。実機側のサービスを完全封鎖して仮想システムのひとつを踏み台にするなどすると実機へのアクセスに仮想システムを一段破らないといけない、など敷居が高くなる。
SELinuxやLIDSなどのセキュアOSのサポートが制限なく普通に突っ込めてしまうのも非常に強力。
多段システムをクラックするのは共通パスでも使ってるのでなければ相当キツい。
仮想だけの制御を奪ってもあまりうまみがないですしね。
jailやchrootはかつてはハニーポッドなどとも呼ばれたりもしましたね。VMなどでもハニーポッドは作れるけど、ハニーポッドごときにそんなもん使うのはもったいないので。
※ハニーポッド:対攻撃者用トラップ。わざと脆弱性の残るシステムを用意し、侵入しやすい経路を作ってあげておく。侵入経路はあるが、攻撃者の侵入は検知し、リアルタイムで報告されたりする。挙句、外部とのネットワーク接続が数回つないだら使えなくなる、とか完全に乗っ取れるだけのステップは踏ませず、その攻撃者がサーバへの侵入時にどのような手口を用いるか、何を使っているかを完全に観察・記録するための専用サーバ。
何をするか、っつーとルートディレクトリが指定位置にかわってしまう、というもの。ファイルシステムとして分離する形態ですね。特定のアプリケーションのルートディレクトリを/var/tmpなどにすると、/var/tmpより上の階層にいけなくなる。
で、/var/tmp以下にそのアプリケーションのための環境を整備してやるわけですよ。
いくつかの公開サービスに限定するなら、かなりお手軽、OSはネイティブに動作しているのでオーバーヘッドもほとんど無く、高速に動作します。
欠点はシステム本体のOSとは分離されないため、ブルートフォースなどシステム本体へのクラッキングには無力、アプリケーションを通しての攻撃にしか意味を持たないこと。システムサービスやカーネル本体への攻撃にはまったく意味を持たない。
ソーシャルハッキングに非常に弱い、っていうかそれはどれでもいっしょと言えば一緒だがw
んでまあ最近ちょくちょく人気なのが、chrootとハードウェアエミュレートの中間にある仮想専有サーバ。
chrootしたファイルシステム内に、サーバOS全体を組み上げる。
ただし、実機ハードウェアリソースへのアクセスは専用ソフトウェアを介在させ、そのソフトウェア経由で行う。んで、当然そのソフトウェアはchroot外に。
本来はchrootしたアプリケーション(この場合は仮想システムのカーネルになるのだが)はchroot外にはアクセスできない。まあ、そのへんはなにやってんのかよく見てないからシラネ。
ハードウェアエミュレーションの長所である、仮想サーバの独立性とchrootの高速性を併せ持つ。
chrootなどと異なり、実機システムのサービスは外部に対して完全封鎖可能。
欠点はカーネル本体は実機のひとつだけ(あとは仮想サーバ専用の特殊カーネル)なので、仮想サーバでは一見完全独立しているようで、カーネルのコンパイルなど、ハードウェアリソースを直接叩く行為が行えない。欠点でもあり長所でもあるが。
最近人気のXenなんかがこれ。VPSなどと記述されることもある。
はいはい、ここまでがハードウェアリソースに対するセキュリティ。
そして、ソフトウェアリソースに対するセキュリティとしてあるのがSELinuxとかLIDSなんかですね。
・SecureOS
これらはアクセスコントロールと呼ばれる機能が主幹。たとえroot権限で動くプロセスですら、「そのプロセスに対して許可されているファイルシステムリソースへのアクセス以外を一切許可しない」。
あとはそのアクセスコントロールのリストのメンテナンスが重要。ってかだるいw 考えたくないw
こうなってくると重要なのが、「わかんないからとりあえずフルパッケージインストールしてりゃおk」なんて調子で作成されたシステム。てかいまだにiDCのホスティングなんかでもこの調子でインストールする連中は多い。
セキュアの鉄則は「最小限」に押しとどめること。利用しないものを入れる積極的な理由があるなら教えていただこう、ってやつですね。
何かあったときに使うかもしれないから、ならその「何か」があったときに入れましょう。
依存関係も含めて把握しやすいしね。
サーバにXFree86入れてVNC入れてとかを公開サーバでやるなと。Windowがないと困る、なんてのはサーバ操作に向いてない。とはいえコントロールパネル全盛なんだよねぇ。configがぐっちゃぐっちゃになるんで好きじゃないんだけど。
でもま、いくらシステム的にがんばったところで、ユーザーレベルでどの程度の安全意識持ってるか、が鍵なんだけどね。
いくら「セキュリティと利便性はトレードオフですよ?」って言ってもリモートであれもしたいこれもしたいって言ってきた挙句PDCでも、とか言い出して、最後にセキュリティは完璧にしろとかわけのわからないことを言う人は綿流しに処したいところw 完璧ってなんだ完璧ってw 回線切って首吊って氏ねwwwwwww
さて、パスワード認証ってのも最近はどこでも使われてるし、身近になってきましたが、現実問題パスワード認証なんてセキュリティとしちゃ下策だよね。
破ろうと思えば力技でたどり着きうるし、ソーシャルハッキングにすこぶる弱いし、絶対馬鹿がどっかにメモしてるし。
RSA鍵交換+生体認証付ドングル利用あたりが現実解としてはそれなりに硬いかなー。S/Keyあたりも織り交ぜるといいかもだけど、それだとドングル自体で計算できるべきなんだよね。
チケットサーバがどこにでも置いてあるわけでもねーし。いろんな方法論はあるけどね。無知なエンドユーザーに理解させられるのはこのへんまでが限界なんじゃないかと。
時折、SSL使っていればホームページは安全とか抜かす阿呆がいて、死んでしまえ、と思うことがある人手を上げて。
…ノ
あと何度もパスワードはほとんど非可逆の関数で暗号化してる、っていってんのに「いまのボクのパスワードは何?」って聞いてくる人とかねwwwwwwwww それが出来るんだったらビットマップ->jpeg->オリジナルビットマップが作れるわっwwww
そんなに簡単にほいほい非可逆暗号化のアルゴリズムが破れるんなら暗号化の意味がない、ってどうしてわからないのだろう…。
きっとパスワードの原本がどっかにテキストで保存されてるとか思ってるんだろうなぁ…。
世界って広いなぁ…。
あの用語の中に、是非にも半田鏝を加えて欲しいと思う私。ITの基本は半田づけでっせw
それはさておき、汎用系は、大型の汎用機を使ったシステムのことでしょ。あることの専用に使うシステムではあっても『汎用機』を使うところがミソ。今は、汎用機、は、メインフレームとか呼ばれたりする大型計算機を指すことが多いかな。汎用系と言う文脈で使う場合はメインフレームと同義で良いと思う。大型計算機のOSは、独自のもの。
もちろん、中型や小型の汎用機もあって、中型くらいまでは、大型の縮小版って感じで、使い勝手も同じような感じだったりするけど、小型汎用機の中には、OSにUNIXやWindows Serverを使ったものも増えてるみたい。
ちなみに、汎用機、っていう場合、語源どおりに解釈すると、PCなども含まれます。かつては何かを処理させようと思った場合、それ専用のコンピュータを物理的に組み上げていたのです。これを専用機と言います。例えば、事務処理用のオフコンとかあったりしますが、これなど専用機の一例でしょう。しかし、汎用機は、基本的な物理的構成やOSを変えることなく、走らせるプログラムを変更するだけでさまざまな目的に使えるように作られています。つまり1台のコンピュータが、いろんな目的に使える、ってことで、汎用機、と呼ばれます。
ということで、PCは、まさに汎用機ですね。
COBOLは今でも使う人は多いですね。今勉強している人は非常に少ないでしょうが、それでも現役の言語です。もともと事務処理言語なので、BCD(Binary Coded Decimal)処理に長けています。確か言語仕様の中に入っていたのではないかな。かつては事務処理にも使われることが多かった大型計算機などは、文字コードがEBCDIC(Extended Binary Coded Decimal Interchange Code)であり、CPUの命令セットにBCD演算命令を持っていたりするのですが、C言語などはBCD演算の演算子を持っていないため、素ではせっかくのBCD演算命令を使えなかったりします。Cでお金を誤差なく扱うプログラムを書くのは、それなりにテクニックがいるんじゃなかろうかと想像します。
あ、でもね、普通の人はプログラム言語なんて、どれであれ、知らなくて実害のないものです。
パッチ、、、昔はバイナリパッチとか言って、対象となるプログラムファイルを書き換えたりなんかもしてましたねぇ。
マシン語=機械語はアセンブリ言語とは違います。マシン語は、本当に単なる数時の羅列。昔は雑誌などに、マシン語ソース(=プログラムそのもの)がダンプリストという形で載っており、それを打ち込んでプログラムを直接作ったりしていました。アセンブリ言語は、そのマシン語を人間にわかりやすい符丁で対応させ、さらにコード記述しやすくするための付加機能(ラベル付けなど)を加えたものを言います。
C++、、、Objective Cも忘れないで~
オブジェクト指向が好きなら、Adaとかsmalltalkとか、、、