メニュー
Infomation
■お知らせ
[スパム対策]コメントにURLを含めると自動的に削除されます。
■このサイトについて
一応残していますが、全時代の遺物。全ての情報は古く役に立ちません 連絡先:メールアドレス
■日記更新情報
RSSRSS|RSS(本文のみ)|lirs
実験&リサーチ
巡回先
製作環境
 

 



2004|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|11|12|
2011|01|
2014|05|08|
2017|07|
2018|03|
2020|08|10|

2005年02月09日(Wednesday)

_ (MacMini)メモ

#lsmod

Module Size Used by

ipv6 266924 12

autofs4 18596 0

ds 18116 0

yenta_socket 19424 0

pcmcia_core 62388 2 ds,yenta_socket

sungem 30756 0

sungem_phy 9120 1 sungem

snd 48168 0

audio 45728 1

soundcore 8004 3 snd,audio

wacom 11648 0


ファイル共有は動いた。

タブレットはクリックは出来るようになったんですが、座標が狂ってる。

おかしい。

USBポートが2個しかないので、足りなくて困ります。

Windowsと違って、抜いてさしたらバッチリ動くってことも当然期待できないからあんまり抜きたくないし・・。

USB2.0のハブをつないでいますが、USB-HDDとかハブにつなぐと、ハブに電源供給してても電源不足エラーになるし。

(500mAギリギリまで要求するようで、ハブにつなぐと必ず電力不足になるみたいです)

テレビチューナーが入っていたサブマシンをどかしてMacMiniを置いたので、テレビが見えなくなってすごく困ってます。


(メモ)

■MacMini (YDL)

Linux suidream.kno.jp 2.6.8-1.ydl.7 #1 Wed Sep 22 18:46:40 EDT 2004 ppc ppc ppc GNU/Linux

■KNOnline pri. Server(Fedora core1)

Linux alice.kno.jp 2.4.22-1.2199.nptl #1 Wed Aug 4 12:21:48 EDT 2004 i686 i686 i386 GNU/Linux

■ThinkPad X40(TurboLinux10F..)

Linux lilith.kno.jp 2.6.0-19 #3 Tue Jan 25 21:14:32 JST 2005 i686 unknown

_ みるく

牛乳。

生臭いし、キモいし、白い液体だしこんなもの飲めるか!!

と10年程言っていたのですが、6年ほど前から大好きになってしまいまして、ここ最近では特に消費量が増える一方です。

1日1Lくらい飲んじゃう? みたいな。

何が困るかと言うとゴミ捨てるのが面倒です。

(正確に言うと資源回収に出すのが面倒です)

なにかいい方法はないものか。

本日のコメント(全14件) [コメントを投稿]

§ ぉゅぅ [   1. 自販機で買って,その場で廃棄。    2. 牛または山羊等を飼って自主生産。    3. 自給自足(ご想..]

§ wadia [4.粉ミルクに切り替える(ぉ 自給自足って・・・(w]

§ どくとるひらめ [5.銭湯に行ってひとっ風呂浴びて、そして腰に手を当てて   ビンの牛乳をぐいっ(笑) …じゃなくて、ビンの牛乳を宅..]

§ K@i [牛乳自体は昔から好きですが、愛知に来てから飲むとトイレに行きたくなる体質になった・・・なぜ? めんどくさがらずにエコ..]

§ AMark [牛乳配達でビン牛乳にする。毎朝までに玄関に出しておけば新しい牛乳が変わりにおいてあります。]

§ yuki [7.自主生産してくれるひ(以下自粛)]

§ Suika [ミルクに大反応(ノωヽ)]

§ ひかりん [ビン牛乳にする場合、出張時には気を付けましょうね。 帰ってきたらチーズになってたりして(そんなワケねー!)]

§ ふじはじめ [8.自主生産してくれる、ふt(みゃぁぁぁぁぁっ)]

§ Suika [ふみゃあ! 瓶牛乳おいしそうだなぁ・・・。 でも突然ふらっとどこか行く人には向いていませんね・・]

§ ゆき。 [関係ないが瓶牛乳というと、秋葉原駅の総武線ホームで飲めた気がします。 最後に飲んだのっていつだっけな?まだやってたか..]

§ ひかりん [>ゆき。  総武線ホームでの瓶牛乳売りはまだやっていますよ~♪  この前飲みました。  新年になってからは飲みにいっ..]

§ かざたち [あそこの前とおると、なぜか買ってしまうのですよね>総武線ホームの瓶売り場 登る→曲がる→止まる→買う→飲む→返す→乗..]

§ Suika [秋葉原のやつはいつも飲んでしまいますね。 反対側ホームに行ってでも飲む。]


2006年02月09日(Thursday)

_ DEP:Data Execute Prevention

最近ソフトの話題がなかったので久々に。

DEPというのはWindowsXP XP2から使えるようになったセキュリティ機能で、コード領域以外からのプログラムの実行を抑制します。

要するにAMD OpteronのNX-bit(No eXecute bit)の機能をWindowsが対応したものです。

NX-bitはデータ領域とコード領域を区別するためのフラグで、データ領域からのコード実行をできないようにします。

何のことだか判りづらいですね。。。

この機能の主たる狙いはバッファオーバーフローによるクラッキングからコンピュータを保護する事です。

バッファオーバーフローが起こるというのはプログラムのバグが原因です。

そういう仕様だったとすれば仕様のミスです。

かつて「セキュリティ」なんて言葉が連呼されなかった頃のソフトウエアにはほとんどこの問題が入っていて、今でもWindows自体やIEでも頻繁にバッファオーバーフローの問題は見つかりますよね。

つまりそのくらい起きやすいミスなのです。

しかもこのミスは最悪の場合、悪意あるユーザーが任意のコードを実行する事が出来てしまい、結果的にコンピュータを乗っ取られます。・・・とマイクロソフトの説明を見てもよくわからんが。


まぁ、そういう時は実際にやってみるのが一番。

って事でバッファオーバーフローが発生するプログラムをわざと書いてみましょう。

ついでにDEPに対応したコンピュータで実行してみて、実際に実行が阻止されるか確かめてみます。

DEPを利用するためには、NX-bitに対応したハードウエア(CPU)が必要ですが、最近ではPentiumDやXeonなどのIntelのプロセッサでも対応しているものがあります。

ただしIntelでの名称はExecute Disable Bitです。

Intelの「プロセッサ識別ユーティリティ」で確認できます。

「ビット無効化の実行」・・・って明らかに日本語としておかしい

Execute Disable Bitを直訳したんだろうな・・。

余談ですが技術系の日本語の資料は翻訳が不適切で返って判りづらい事が多いので英語マニュアルも必須です。。


気を取り直して、プログラムプログラム。

コード領域以外のメモリにコードを書き込んで、そこが実行されるようにすればDEP機能が働くはずです。

典型的なパターンといえば、バッファのサイズチェックミスかなぁ。

って事で以下のようなコードを書きました。

この関数はパスワードをチェックするもので、パスワードが正しければ1、間違っていれば0を返します。

でも省略してあるので絶対に0しか返ってきません。

このコードの問題は一目瞭然ですが、パスワードに26バイト以上を指定するとバッファオーバフローが発生します。

(正確には配列が4バイトのアライメントに置かれるでしょうから28バイトくらいまでは大丈夫かもしれませんが)

というわけでこれを利用して不正なコードを実行しましょう。イェイ。


そもそも上の関数が実行されるとき何が行われているのか。

まず関数を呼ぶ前に現在実行しているアドレスを保存しておく必要があります。

そうしないと、関数の処理が終わった後に元の位置に戻ってこれません。

というわけで現在の実行位置を表すeipレジスタの内容をスタックに入れます。

スタックはどんどん上に増えていく仕組みになってます。

図解するとこんな感じ。

最初にeipがスタックに積まれ、次にスタックの位置を表すebp、そして関数のローカル変数に使われる領域になっていきます。

関数が終了したときはその逆で、スタックからebp、eipを取り出して元の位置に戻ります。

さて、上の関数でいうローカル変数はbyTestBuffer[25]です。

25バイト(+アライメント)分の領域は自由に使えますが、その次にあるのはebpとeipです。

上の関数に長いパスワードを与えてバッファオーバーフローを起こさせればeipの値が格納されているメモリを任意の値に書き換えてしまう事ができますね。

eipの内容を書き換えると、例えば100という値に書き換えるとこの関数が終了したとき、CPUは100番地を実行しはじめます。

そこに実行させたいコードを書いておけば不正なコード実行成功です。

おめでとうございます。


という訳でお試しに以下のような呼び出し方をしてみました。

色々いい加減というか今みるとおかしいですが、テストって事で多めに見てください。。

PasswordCheck関数に不正な36バイトのパスワードを与えてます。

これぶっちゃけ書くの結構大変でした。。。

根気のない僕には手動アセンブリは辛い。

(ほんとはだいぶ前に書いていたんですが、めんどくさくて・・)

簡単に解説すると、[32]~[35]の部分がちょうどeipの部分になります。

関数が終了するとeipが0x0013fe90になります。

そうするとCPUは0x0013fe90番地を実行しはじめます。

ところがしかし0x0013fe90番地というのは元々ローカル変数があった場所です。

つまり[0]~[28]でコピーしたデータがある部分です。

このデータをCPUはコードだとみなして実行していきます。

VisualC++のデバッガで追っかけてみると確かに送り込んだコードが実行されています。

赤で囲った部分が引数として不正に渡したコードです。

つまり不正なデータを関数に与えたことによって任意のコードが実行されてしまっているわけですね。

コードの内容は特に意味はありませんが、以下のようなコードになってます。

1.関数の戻り値を1にする

2.壊してしまったebpの値を復元する

3.元の位置にジャンプする

(*上のは僕の環境でたまたま動くように書いただけです

  実行のたびにアドレスは変わる可能性があるので、アドレス直書の部分は本来は毎回変えなければなりません)


よってこのプログラムを実行するとPasswordCheck関数の結果は1になります。

パスワード通っちゃいました。

めでたしめでたし。


あ、本来の目的忘れる所だった。

DEPを有効にしてもう一度実行するとちゃんと保護機能が働き、アプリケーションが強制終了させられました。

こんな感じで。

除外設定もできます。

ただし、カーネルモードで動くものは除外設定できないのでOS全体のDEP機能を無効にする必要があります。

boot.iniを編集して、/NoExecuteを/executeにすれば無効になります。

ちなみにeMbedded Visual C++付属のWindowsCEエミュレータがDEPのせいで起動しませんでした。

詳細をクリックすると製造元にWindowsXPに適したバージョンをもらえだそうです。

製造元Microsoft・・・。

ま、エミュレータ等は動的にコード作らないといけないのでどうしても仕方ないのですがね。

本日のコメント(全3件) [コメントを投稿]

§ みかん [のっ、ハンドアセンブルおつかれさまです。メモリモデルをsmallモデル(フラットモデル)じゃなくて、セグメント分割(..]

§ Suika [みかんさん>> x86って現在において不思議なアーキテクチャですよねえ。 根底が古くて、CISCで流れからすれば少数..]

§ ChefPypeglype [ポロシャツ フ&#125..]


最近のコメント

364,000 at 2008.06.14
Copyright (c) Suika KNOnline.NET