2012年4月29日日曜日

セキュリティについて:DEP, ASLR

コンピュータへのHackingに対抗するための技術としてDEP(Data Execution Prevention:データ実行防止)、ASLR( Address space layout randomization:アドレス空間配置のランダム化)というのをあるのを知りました。結構昔からある技術でした。wikipediaでも調べればのってますが、概要をメモしときます。昔からよく行われるHackingの手法に「バッファオーバーフロー攻撃」というのがありますが、どちらもそれに対抗するものです。

・DEP
「バッファオーバーフロー攻撃」はデータをバッファのサイズ以上に書き込んで、その時意図的に自分の実行したいプログラムをそのデータ列にいれて、そこを実行させようとします。そこでメモリ管理テーブルにNXビットというのを設けて、データエリアとプログラムエリアを判別できるようにしてやろうということです。バッファオーバーフローではデータエリアにデータが書き込まれるはずなので、そこを実行しようとしたらOS側で検知して、中止します。windows XP SP2以降のwindowsに実装さrているそうです。(Linuxにはなし)
ただこれをすり抜ける技術としてReturn-to-libc攻撃というのが考えられて、さらによりセキュリティをあげるため、以下のASLRが考えられたようです。

・ASLR
バッファオーバーフロー攻撃を成功させるためにはスタック領域やヒープ領域のアドレスがわかっていないとできません。(更にいうとReturn-to-libc攻撃を成功させるためにはlibcのアドレスも必要です)そこで、これらのアドレスを実行時にランダムに配置してやれば攻撃できない(正確には難易度があがる)ということになります。Return-to-libc攻撃がかなり困難になります。windowsはVista以降、Linuxはカーネル2.6.12から、Mac OSXは10.5から一部のライブラリに実装したそうです。
ただこれはOSが32bitの場合、16bitでしかランダム化できないため、力技で攻撃すれば総当りで、最近のCPUなら分単位で突破できる可能性があります。(64bitのOSだと、成功の確率が飛躍的に下がるため、非常にセキュアになるそうです)

2012年4月26日木曜日

Android開発環境が更新

久しぶりにwindows上のAndroid開発環境を更新しようと思い立ちました。ところがeclipseを起動できなくて異常終了してしまいます。ログを見てもよくわからず、諦めて"eclipse -clean"でコマンドプロンプトから直接起動。(知らないうちにJavaの何かが更新されたかな?)これで起動できるといきなりADTがver17以降にあげろと文句言われてしまいました。SDK Managerで更新しようとすると、なぜかplatform-toolsのmvがうまくいかないと言われて、更新ができません。
でもよく考えたらSDK Managerってplatform-tools以下にあるんじゃなかったっけ?それじゃ更新できんだろうと思い、色々調べてみると、eclipseのHelp>Software check(日本語化してしまってるんで、ちょっとうろ覚えです)から更新するといいとありましたが、やっぱり怒られます。試しにplatform-toolsは更新しないようにチェックを外してからやると、先のダイアログで勝手に含まれてしまうようなメッセージがでましたが、無事できたようです。それにしてもeclipseの更新は時間がかかります。なんでこうなのか・・・

ちなみにMacだと特に問題は起こりませんでした。windows特有の問題なんだろうな〜(googleさん、ほとんどLinuxで開発してるみたいで、windowsへのポーティングにはよく問題がおきます)

2012年4月6日金曜日

enghelperをインストール

ここのところruby環境をubuntu11.10で整えるのに頑張っていましたが、それもenghelperを動かしてみたかったからです。これは英次郎のデータをもとに加工して、辞書ツールや、英文をいれると「適度に」日本語のルビをふってくれるものです。(この「適度」というのがポイントです。パラメータで自分の実力にあわせてチューニングできます)
ただ先にも書きましたが、ubuntu等のディストリビューションではruby-1.8が主流で、まだまだ1.9は入っていません。しかたなくrvm(Ruby Version Manager)をインストールしてruby-1.9.2をインストールしようとしましたが、従来のrubyと環境がうまく整合させるのに苦労しました。(これもenghelperがruby-1.9を前提に作ってあったためです)さらにenghelperは動作に、nokogiriとengtaggerをrubyのライブラリとして要求しており、これのインストールにも苦労しました。通常、gemを使えばそのままライブラリをインストールできるはずでした。まずgemを使うのに苦労しました。最初、どうもバージョンが古いと言われたので、以下を実行しました。

$ sudo gem update --system

しかしこれやろうとするとubuntuのシステムとぶつかる恐れがあるので推奨しない、apt-getを使えと言われました。しかたなく 以下を実行。

  sudo apt-get install rubygems

これで最新のバージョンになり、gem installができるようになりました。(それでも最新のgemよりは古いんだろうな)これでnokogiriとengtaggerがインストールできるようになりました。
nokogiriのインストール

sudo apt-get isntall libopenssl-ruby
 sudo apt-get install libopenssl-ruby
 sudo apt-get install libxslt-dev
 sudo apt-get install libxml2-dev
 sudo gem install nokogiri
nokogiri本体は、gem installでOK。動作に必要なライブラリがいくつかあり、足りないものを事前にインストールしておく。

engtaggerのインストール

sudo gem install engtagger

ところでenghelperですが、どうもDLした内容と説明があっていません。説明に書いてあるスクリプトが見つかりません。しばらく悩んでいましたが、どうも3月末から4月にかけて更新が2,3回行われたようです。現時点で最新のenghelper-0.5.7をDLしてきて内容が説明と同じものなのを確認できました。
これで辞書ツールを動かすことができました。
さすがに元のデータが用語数多い英次郎です。例題が大量にでてきます。(ただその内容については、賛否両論あるので自己責任で)
次に肝心のルビ振りツールですがうまく動きません。apacheのerror.logを見ると、engtaggerのロード(require)でロードできないとエラーがでています。engtagger, nokogiriともどうもrequire(Rubyの文法でライブラリのロードです)でエラーがでます。
> require 'engtagger'
LoadError: no such file to load -- engtagger
from /usr/share/ruby-rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'

gemできちんとインストールしたはずだが、場所を確認する。
$ gem which engtagger
エラーがでる?入ってないのか?
$ sudo gem which engtagger
/var/lib/gems/1.8/gems/engtagger-0.1.1/lib/engtagger.rb
よくわかりませんが、通常ユーザとrootで環境が違うようです。ただこの場所はどうみてもrvmが入っている/usr/share/ruby-rvm以下ではないのでまずい感じです。(rubygemsがubuntu標準なのでこの位置に入れられてしまうか?)

さらにnokogiriも調べてみます。こっちはgem which でどうしても見つかりませんが、偶然以下で見つけました。
/var/lib/gems/1.9.1/gems/nokogiri-1.5.2
どうみても場所がばらばらです。

しかたなく手作業で以下の場所にコピーしてしまいます。(irbで $LOAD_PATHを表示させてどこからライブラリを読んでいるかを調べておきました)
/usr/share/ruby-rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1

結局コピーしたのは以下のものです。

-rw-r--r-- 1 root root 25037 2012-04-06 18:41 engtagger.rb
-rw-r--r-- 1 root root  3877 2012-04-06 18:45 nokogiri.rb
drwxr-xr-x 2 root root  4096 2012-04-06 18:42 engtagger
drwxr-xr-x 7 root root  4096 2012-04-06 18:46 nokogiri
drwxr-xr-x 3 root root  4096 2012-04-06 18:46 xsd

よくわかりませんが、.rbがディレクトリ以下のものもrequireしていたんで一緒にコピーしておきました。これで無事enghelperが動作してくれました。

きちんとルビをふってくれてます。(^^)v