CPUのアンチウィルス機能NXBitの説明、あるいはDEP(Data Execution Prevention)の説明

0
     

     今回は、NXBitの説明をする。これは、メモリオーバフロー、バッファオーバーフロー、メモリオーバーラン、バッファオーバーランという現象を防ぐ機能だ。これらは全部同じ現象だ。同意語と思えば良い。
     Windowsは、NXBitが提供する機能をDEP、厳密にはハードウェアDEPと呼んでいる(´・ω・`)
    [枕]
     PAK2配布の発端は、プチフリバスターの購入者から、速度が出ないというクレームが来た。色々とやり取りをしていて、セキュリティソフトが臭いとなり、使ってい るセキュリティソフトを外したら途端に速くなったという。PAK2はこのような経緯から開発した。もちろん、PAK2は、プチフリバスターとの併用を前提 に開発している。相性は良い。

    Windows 高速化 プチフリバスター
    ---> プチフリバスターかんたん紹介ページ
    ---> プチフリバスター技術詳細ページ

    PAK2を万能(は無能)というセキュリティソフトではない。(開発が楽だという理由で)不必要な機能は持っていない。例えば、OSの設定をきちんと行えば必要ない機能などだ。

    今回はDEP(Data Execution Prevention)の使い方、メカニズムを解説する。

    --->
    「PAK2」公式サイト
    --->「PAK2マニュアル」ダウンロード
    --->
    「PAK2」ダウンロードサイト


    1.CPUの構造欠陥、あるいはプログラミング言語の設計ミス
     元も子もない言い方をすると、現在のウィルス禍は、CPUの構造欠陥、あるいは設計ミス。そして、そのCPU用のプログラミング言語の設計ミスが濃厚だ。
     その証拠に、この問題はIBM/モトローラが製造販売しているPPC(というCPU)では今回説明するバッファオーバーフローと言う現象は発生しない。もう少し詳しく言うと、CPUの設計思想にはRISC型とCISC型の2つがあるが、RISC型のPPCではこの問題は起きない。DEPとは、CPUの構造欠陥を修正せず、増設で回避した機能だと言える。

    2.バッファオーバーフロー現象という問題
    [参考資料]
    http://www.microsoft.com/japan/technet/security/bulletin/MS04-028.mspx

    JPEG 画像 ウィルス 出現 一言で言うと、例えば、JPEG画像文書を読むうだけでウィルスに感染する現象の原因だ。CPUの脆弱性をついて、CPUを誤動作させる現象だ。悪意あるプログラムはこの現象を利用して、悪意あるプログラムを起動する。

     これが現在、一番問題となっている事である。



     もし、コンピュータに詳しい人がいるならば、おかしいと思うはずだ。本来あり得ない現象だからだ。だいたい、コンピュータとは次の動きをする。

    文書を開くということ


     これは、JPEG画像に限った事ではないのだが、文書を開く時はこの手順を取る。つまり、
    1. OSの上でアプリを起動。
    2. アプリは文書を読みメモリに展開。
    3. この場合は、一度メモリに展開した画像をモニタに描画する。
    文書ファイル、この場合はJPEGファイルだが、メモリに展開するだけなのでJPEGファイルにウィルスが入っていても、まったく無害だ。メモリ上のデータがウィルスだろうがプログラムとして実行されないのだから問題がない・・・(はずだったんだ。。。厳密には)。成仏チーン・・・




     このように文書を読むだけでは本来はウィルスに感染することは考えられない事だったのだが・・・ここで、メモリの内容をもう少し見てみよう。。。はは〜〜んと思うはずだ。

     メモリの内訳はこういう感じになる。

    プログラム情報の混在

     メモリに展開するデータは実は固まっていない。プログラム制御情報と混在しているのである。プログラム制御情報とは、次に実行するプログラムの開始情報と思って欲しい

     で・・・・・・メモリオーバーラン(Memory Over Run)、バッファオーバーフロー(Buffer Over flow)という言葉を思い出して欲しい。。。こういう事が起きるわけだ。
    バッファオーバーラン
    [クリックで拡大]

     左が本来の処理。右がバッファオーバーランが起きた場合。データをメモリに展開するときにオーバーランして、隣接する領域のデータを上書きして破壊していく。領域がはみ出るとこういう事になる。。。
     問題は、破壊された領域がただのデータを格納していれば問題ない。しかし、実際には、ここには次に実行するプログラム情報が入っている。厳密には、次に開始するプログラムの開始位置(アドレス)が入っている

     CPUは、上書き破壊されたアドレスを次のプログラムの開始位置と勘違いして実行する。
    これがバッファオーバーランによるウィルス感染のメカニズムだ。

    ウィルスの制御権乗っ取り
    [クリックで拡大]

     さて、オーバーランで上書きするデータを見てみよう。こんな感じになる。
    オーバーランで感染するウィルスは、ウィルスプログラム本体とそこにジャンプするアドレスのペアになっている。
     プログラム制御情報に、ウィルスへのJumpアドレスが上書きされる。CPUは、そのまま勘違いしてウィルスプログラムを実行する

     かくして、ウィルスに感染する事になる。南無成仏(チーン)。

    3.CPUの構造欠陥/コンパイラの仕様上の問題


    PPC系のパソコンのメモリ構造 CPUによってはこの現象は起きない。原因はプログラムの制御情報と作業用のメモリが混在している事に原因がある。ミッドウェー海戦で、爆弾と魚雷を交換している所に爆弾が突入して空母が一瞬にして沈没した様を連想する。いや、ガソリンスタンドでタバコを吸っていたら引火した感じかな

     プログラム制御情報とデータ情報をきちんと分離したコンピュータではこのような現象は起きない。不幸にしてWindowsの場合、採用するCPUはス タックレジスタと呼ぶ、メモリの管理装置が一つしかない。このスタックレジスタはプログラム制御情報を管理している。Windows系のプログラムは通 常、このスタックレジスタに作業用データ管理も兼務するようにしている。従い、このような現象が起きる。

     PPCを採用した他のOS(Linux,MacOS)の場合は上の図のようにすっきりした構成になっている。

     インテル系のCPUの場合、解決方法は複数存在した。

    ■CPUに拡張を行い、スタックレジスタをデータ用とプログラム用で2セット持たせる。
     ※これは組込制御用CPUを作っているルネサス社が特許を持っている。
      ルネサスのCPUは、この仕掛けを持っている。

    ■コンパイラー(プログラム開発環境のこと)に工夫を加え、作業用メモリの割り振りに
     スタックレジスタを使わないようにする。

    ■NXbit(やれやれやっと出せた)を採用する。

    4.NXbitによる解決
     正直言って、NXBitは、???なメカニズムだ。過去との互換性を維持するにしても、いくらでも洗練した手法がある。特許も複数出願しているのだが、、、どうも、、、インテル、AMDの研究開発セクションは調査が足りなかったのではないかと思うのだが。。。

    NXBit NXbit(WindowsではDEPと呼んでいる)は1バイト(8ビット)を9ビットに拡張したものだと思えば良い。1バイトを9ビットで処理する方式である。

      NXBitという拡張ビットを立てる。
    NXBitは、プログラム制御情報を書き込みする時だけONにする。あるいは逆にデータ書き込みする時だけONにすると決めておけば良い。

     オーバーランが起きたとき、NXBitの情報が失われる。CPUはNXBitの監視によりオーバーランを検出できる。NXBitを活用した機能をMS社はDEP(Data Execution Prevention)
    と呼んでいる。

     NXBitあるいはDEPは、決して洗練したメカニズムではないが、CPUがハードウェアで行うためソフトで実現するより数十倍、数百倍の高速動作する。
     このDEP、PAK2は次のようにして制御する。

    pak2_9.png

    [クリックで拡大]

     PAK2はこのメカニズムをワンタッチで設定する機能を提供する。Windows XP SP2からDEPは実装した。しかし、MS社もおっかな吃驚というか、過去との互換性維持から工場出荷時は消極的設定となっている。つまり、 Windowsのシステムプログラムを実行する時だけ、NXBitを使い、そうでないときには機能をOFFにするというものだ。

     ここ数年出荷したPCは、おおむねNXBitに対応していると思われる。
    せっかくCPUに標準で付いている機能なのだから、上手に使おう。

     ASUS EeePC 4GXのような、うっかりソフトを入れるとCPUパワーが不足するネットブックにセキュリティソフトを入れるのであれば、その前にDEPを試すべきだ。

    5.蛇足・・・
     ASUS EeePC 4GXはCドライブは4GBしかない。工場出荷状態で4GBのうち2.6GBがすでに使われており、空き容量は2GBない。Windowsの自動更新をONにしたならばあっという間にディスクがパンクする。

     これは推測であるが、、、OSの更新、セキュリティに関する物は、次の改良がされていると思われる。。。これは、セキュリティホール(主にオーバーランの発生箇所)を改修していると思われる。。。オーバーランの発生原因となるプログラム技法は思いつくにただ一つだ。

    ■長さをチェックしないメモリ(データ)のコピー
     専門的になるのだが、現在、OSはC言語という開発言語で開発している。99%C言語で記述している。

    1)strcpy()命令(厳密には関数と呼ぶ)を使用禁止し、strncpy()への変更。
     strcpy()は次のような使い方をする。

     strcpy( コピー先のメモリアドレス, コピー元のメモリアドレス );

     実際にはこのような使い方はしないのだが、乱暴に書いてみよう。

    例: strcpy( 1000, "hellow" );

     これは1000番地から、'h','e','l','l','o','w', ゼロと、7バイトの文字を書く。
    C言語では文字列の最後にはゼロが一文字あるという約束がある。最後のゼロ(ヌルと呼ぶ)が終端を示す。"hellow"に例えば、画面から入力したパスワードが入る事を考えてみよう。。。際限なく長いデータを1000番地から書ける事になる。。。ゼロが来るまで延々とコピーされる。1000番地側に、データ領域が32バイト用意していた場合、32バイト以上の文字列が来たときにオーバーランが起きる

     現在、MSのC言語はstrcpy()の使用を止め、strncpy()という拡張版の使用を水曜している。これは、

     strncpy( コピー先のメモリアドレス, コピー元のメモリアドレス, コピー上限 );

     となり、最後に、オーバーランを防ぐストッパを追加している。ここに受け入れ先のメモリ領域がが32バイトならば32と入れる。これで、オーバーランは起きない。

    2)データブロックのチェックの挿入。
     および、文書ファイルでの常識なのだが、次のような配置が使われている。

    文書ファイルの基本構造
     これはあくまで基本形である。JPEGに限らず文書ファイルは、先頭にデータの長さ。その後に、実際のデータを配置する。

     これをメモリにコピーする時に、メモリ側のサイズが小さい場合、オーバーランが起きる。これの解決策は簡単で、データ長の長さだけメモリを確保する。あるいは、事前に用意したメモリより大きい時は溢れるのでエラーで跳ねる。これだけで良い。。。

    JPEG 画像 ウィルス 出現
     たぶん、JPEG画像に感染するウィルスは、これだったのではないかと思う。Windowsが標準で持っているGDI+(画像描画プログラム)が事前に用意していたメモリより大きなデータが来たけど、エラー判定をしていなかったのだと思われる。

     たぶん、MSが行った改修はこれをエラーで跳ねるようにしたか、必要なサイズのメモリを確保するようにしたのだろう。。。

     もし、そうだとして、あながちMSを非難できない。仕様で、事前に長さは○×バイト以内とか定まっている場合があるからだ。このような場合、仕様違反となる長さのデータが埋め込まれていたわけで、本来のペナルティは文書ファイルを作った側になる。。。

     まあ、、、ウィルス製作者がそんなことを守るわけないのだが・・・

     このようなわけで、インターネットに接続し、得体の知れないWebサイトにある文書を常時読み書きするブラウザに集中砲火が起きるのもムベナルかな。。。である。

     参考資料「http://www.microsoft.com/japan/technet/security/bulletin/MS04-028.mspx」では、GDI+で問題が起きた。これはGDI+を利用する全てのアプリで同じ現象が起きる可能性を示唆している。

     フリーのメールソフト「Tunderbird」は、GDI+を使わず、自前の描画エンジンを持っているから安全だと主張するのはこのあたりきちんと作っていますよというピーアールだと思われる。。。たぶん、姉妹品のブラウザ「FireFox」も同様だと思われる。

               ***
                 ***

     ふう・・・一般人には敷居が高い技術情報であるが、コンピュータウィルスを必要以上に恐れないためにはやはり、知識を得ておく必要がある。

     また、PAK2のDEP制御機能はCPUの標準機能をONにしているので十分高速で効率の良いものだと提示できる。。。NXBitがスマートとはとても思えないのだがね。

     PAK2はフリーウェアである。上手に使って欲しい。



    --->「PAK2」公式サイト
    --->「PAK2マニュアル」ダウンロード
    --->
    「PAK2」ダウンロードサイト

     PAK2は、PCの高速化ソフト「プチフリバスター」の支援ツールとして開発しました。


    Windows 高速化 プチフリバスター
    ---> プチフリバスターかんたん紹介ページ
    ---> プチフリバスター技術詳細ページ




    この記事のトラックバックURL
    トラックバック

    SSDの高速化ツール Eee PC SDHC HDD 化 フリーウェア プチフリ 退治 解決 根絶に、現象測定ツール USB/SDHCカードブートにより簡単バックアップ フリーウェア USBメモリ、CFなどの不良検出ソフト FeliCa で ログオン フリーウェア USBウィルス対策ソフト フリーウェア 無限乱数式暗号フリーウェア USB ブート 簡単メモリチェック

    TEST1

    USB ブート 簡単メモリチェック

    selected entries

    categories

    archives

    recent comment

    • PBTM v0.1・起動USBによるEee PC・ネットブックのお手軽バックアップシステムを作る
      USBブート拡散部
    • WindowsXPの自動デフラグ機能について
       
    • ASUS Eee PC 701 SD-X日本語版の分解・オーバービューその2
      小林
    • 工人舎PM PM1WX16SA レビュー カスタマイズ 高速化
      meme
    • ★暗号化 Eee Storage/YoStoreの120%活用法
    • ★暗号化 Eee Storage/YoStoreの120%活用法
      ひろちゃん
    • f2dによるEee PC 901・4G-XのCドライブにSDHCを連結して容量を増大させる拡張 Part3.
      nick
    • f2dによるEee PC 901・4G-XのCドライブにSDHCを連結して容量を増大させる拡張 Part3.
      NAO
    • PBTM v0.1・起動USBによるEee PC・ネットブックのお手軽バックアップシステムを作る
      KyonKyon
    • PBTM v0.1・起動USBによるEee PC・ネットブックのお手軽バックアップシステムを作る
      kouichi

    recent trackback

    links

    profile

    search this site.

    others

    mobile

    qrcode

    powered

    無料ブログ作成サービス JUGEM