OSのおはなし #3 セキュリティー
OSの進化とともに強化されていくセキュリティー。そこに攻撃を加えるウイルスもまた進化していった。今回はOSの視点からどのように新しいウイルスや攻撃に対応、またそれに対しどのようにアタッカーが新しい攻撃を仕掛けてきたかの歴史についてまとめました。
3大脅威(CIA)
コンピューターにとっての脅威は、Confidentially(無許可データアクセス)Integrity(無許可データ書き換え)Availability(DoS攻撃などの過剰不可によるシステムの妨害)に分類される。
セキュリティーとハッキングの攻防
■ 攻撃 オーバーフロー 無料ファーストクラス
一番始めのハッキングは航空券の名前欄に間違って余計な文字列を入力したところから始まる。スミス教授は間違って名前欄に「Smithhhhhhhh...」と入力した。すると空港の受付のモニターで座席のグレードを示す「エコノミー」の文字が「hhhhh」に書き換えられていることに気付く。
名前の長さには限界があり、それを越した場合は次の欄が書き換えられてしまう仕組みだったのだ。これを使用して教授は名前を「Smith ファーストクラス」とすることでお金を払わず自分の予約をファーストクラスに書き換えることに成功した。
■ 対策 犠牲のカナリア
gets()は際限なく入力された文字列を受け取ってしまい、割り当てられたメモリ範囲を越して書き換えてしまう。これを防ぐために、現在割り当てられているメモリの範囲の少し外側に適当な文字(犠牲のカナリア)を書き込み、もしこれが書き換えられた場合はオーバーフローがあったとし、システムを強制終了することにした。
■ 攻撃 カナリア避け
しかし、元のコードを解析するとカナリアの位置がバレてしまい、カナリアを避け他のデータを改ざんすることができてしまった。多くの場合実行コード(例えば、全てのデータを削除するコマンド)などを書き加えることによって攻撃としていた。
■ 対策 コード判別
名前入力欄付近はデータ格納領域であり、この部分が実行コードによって書き換えられることは不自然である。OS側はデータ領域にはデータであるというタグを加え、実行コード部分には実行コードというタグを加えることによってデータ領域が実行コードによって書き換えられることを防いだ
■ 攻撃 バイナリコードの再利用
しかし、コードを実行するのにコマンドを書き加える必要はない。システム内のどこかにあるコマンドのアドレスを書き加えればあとはOSが勝手にそのコマンドを実行してくれる。これで判別タグが突破されてしまった。
■ 対策 ランダムアドレス
システム内のコマンドの位置が一定であるとそのアドレスを使いコマンドを乱用されてしまう。そこでOSはそういったコマンドを含む全てのライブラリの位置を毎回ランダムで変えるようにした。
■ 攻撃 ロジック爆弾
攻撃を仕掛けてくるのは第三者だけではない。アメリカのとあるソフトウェア開発者は会社のシステムにあるコマンドを打ち込むと全てのデータが消えるバグを仕込ませ、自分が解雇された場合はそのコマンドを打ち込むと脅した。
■ 対策 ソースコードの提出
開発者による攻撃を恐れた会社はできあがったシステムのソースコードを提出するように求めた。これで開発者は勝手なことができなくなった。
■ 攻撃 ログインスプール
ログイン画面によく似たアプリを他人のパソコンで立ち上げておく。これでユーザーはそのアプリのログイン画面に本来のパスワードを打ち込んでしまうとパスワードが盗まれてしまう。
■ 攻撃 ウイルス、トロイの木馬
これらのウイルスは対象のコンピューターのシステムコードをなんらかの方法で書き換える。すぐには気づかないが、そののうちそのコード部分が実行されたとき、情報の漏洩などを引き起こす。
■ 対策 システムコードの長さを記憶
これに対し、OSはシステムコードのなどの長さを記憶することにした。こうすればある一定箇所のコードの長さが変わった場合、そこが書き換えられた恐れがあると分かる。現代のウイルスソフトが使う仕組み。
次回はメモリについてまとめる
この記事が気に入ったらサポートをしてみませんか?