Home > Tags > TIPS

TIPS

AndroidのPermission状況

Android APIを追い掛けていて困るのは、どのAPIでどのPermissionが必要かわかりにくいことだ。マニュアルに明記してあることもあるが、大体は「エラーが出たらManifestに」といった場当たり的な対処が推奨されてしまっている。

STOWAWAYには、Android 2.2のPermissoon Mapがある[1]。これは、どのAPIを呼び出せばどのパーミッションが必要かわかるマップだが、いかんせん情報量が多くてわかりにくい。また、基本は同じとはいえAPI levelにより多少変化もしている。

そこで、整理のために論文”Android Permissions Demystified”(PDF)を元にして、おおまかな区別を抜き出してメモとする。

まず最初に触れておきたいのは、結局統一したPermissionのポリシーなど無い、ということだ。以下に説明するようにあちこちで権限が持ちだされ、チェックされ、あるいは無視されている。中には無駄にチェックするAPIもあるらしい。よって、現状のAPI Levelでは食い違っている箇所がでることを前提とする。

最初に、Permissionは3種類の脅威レベルに分けられる。

  1. Normal Permission: 壁紙の変更など、APIへのアクセスを制限するもの。
  2. Dangerous Permission: SMS送信など、API呼び出しにより潜在的に危険をもたらすもの。
  3. Signature/System Permission: 署名されたアプリケーションでだけ使えるもの。バックアップやアプリケーションのインストールなど、特に危険なもの。
  4. (他、各アプリケーションが独自に定めるPermission)

Android API frameworkの構造は「APIライブラリ」「システムプロセス中のAPI実装」の二つのパートに分割できる。「APIライブラリ」は各アプリケーションの仮想マシンで動作するもの。当然、アプリケーションと同様の制限を受ける。それに対し「システムプロセス中のAPI実装」に制限はない。ライブラリが構文糖としてユーザからのリクエストを代理で受け、裏でシステム側で実行する、といった感じになる。

APIの呼び出しは三ステップで行われる。まず、アプリケーションはライブラリのAPIをinvokeする。次に、ライブラリはライブラリ中のprivate interfaceをinvokeする。このprivate interfaceはRPC stubになっていて、最後にRPCリクエストがシステムプロセスとして、システムサービスに誰が処理してくれるか尋ねる。この仕組みはJavaのreflectionが使われている。

例えば、ClipboardManager.getText()は、IClipboard$Stub$Proxyに引き渡され、システムのClipboardServiceが呼ばれる。

さて、肝心のPermissionのチェックだが、統一ポリシーなどは存在せず、実に色々な箇所で行われる。システムプロセス中のAPI実装でチェックするものもあれば、ライブラリ中で随時チェックするものもある。極一部の権限(INTERNET, WRITE_EXTERNAL_STORAGE, BLUETOOTHなど)は、Unix groupで制御されている。この場合、API側は何もチェックせず、ただinvokeするだけである。

Android NDKで開発できるNative Codeでは、直接にはシステムのPermissionを制御できない。、ソケットやファイルにアクセスする場合、Java wrapperを用意して行うことになる。

Content Providerは、単独のアプリケーションとしてインストールされて他のシステムプロセスやAPIライブラリからは切り離され、抱える情報の保護のために静的/動的なPermissionチェックを行う。アクセス先は、read/writeといった定義と、”content://a/b”のようなpathにより指定される[2]

Intentは、全てシステムサービスのActibityManagerServiceを通じて送信される。二つのテクニックによりIntentの送信は制限されている。一つは、Permissionを持っているアプリケーションにだけ送信する仕組みである。もう一つは、システムのIntentはUIDがマッチするプロセスにしか送信しない仕組みである。受信の場合もだいたいはPermissionが必要であり、OSが送信するIntentの受取先を制限している。

(論文では、この後もテストコードを暮ろうとしたらAndroid側が色々アレで大変でしたという話や、APIの分析結果が続きますが、省略。)

  1. 一応、本命はapkをアップロードして余分な権限を宣言していないか解析を行えるStowawayの方、のはず。 []
  2. 余談だが、BlackHatなどで発表されたMercuryという「うっかりContent ProviderやServiceに権限をつけ忘れて、publicになっていないか」というチェックを行うためのツールが存在し、最新のAndroguardと組み合わせて使うこともできるらしい(AREには未収録)。 []

Pukiwikiで大量に同じテンプレートのページを作る方法

局所的に必要になったのでメモ。

make_pagesプラグインを利用する。

私はomakeのほうのコマンドライン版を使用した。make_pages.phpの中の設定を書き換えて、ページタイトルの一覧を準備。./make_pages.php list.txt template.txt といったように指定すれば、一気に作成できる。

ただし、作成したページはtag_listプラグインなどに掲載されないので、一度ウェブからアクセスしてやる必要がある。アクセスした時点で大体認識されるようなので、後は普通に書き換えていけばOK。

ApacheでX-ナントカヘッダを追加

葉っぱ日記を参考に、ApacheでX-XSS-ProtectionとX-Content-Type-Optionsを指定した。

<IfModule headers_module>
        Header append X-XSS-Protection 1
        Header append X-Content-Type-Options nosniff
</IfModule>

書いておくと、一部の攻撃が通用しにくくなるので、まあ気休めですね。

AzuaSKKにはてな辞書を追加

「はてなダイアリーキーワードふりがなリスト」をSKKの辞書に変換を参考に、AquaSKKに辞書を追加してみた。

OSXですると面倒なので、VMのFreeBSDでskktoolsを入れてそちらで作業。なんとなくEUC-JPではなく途中だけUTF-8で処理してみた。

AquaSKKの辞書にそのまま追加してもあまり面白くなかったので、「ダイナミック補完」を有効にして、先読み候補が出るようにしてみる。1個だけならさほどうるさくないのでまあいいかな。結構意外な選択肢がでて面白い。

そしてなにより、SKKの弱点である[1]固有名詞に強くなった。

  1. SKKは辞書を鍛えやすいのですぐ克服できる弱点ですが。同音異義語が一番怖い。 []

iCalのTODO

フリーウェアのすばらしさが、iCal の欠点を粉々にする

正直TODOはあまり使っていないのだけれども、ちょっと試してみるか。日常だと付箋とかホワイトボードとかが便利すぎて。

Postfix + Postgrey + Cyrus-mapd 2.3 での構築(途中)

Cyrus-imapdをインストールしたところから、設定を再開。まずは imapd.conf を適当に稼動しているのを見つつ操作。序盤の操作は前回同様。

# /usr/local/cyrus/mkimap
# saslpasswd2 -c cyrus-admin
# /usr/local/bin/cyradm --user cyrus-admin localhost

はまった点。

その一、認証をauxpropにしていなかった。saslauthd経由で今迄やっていたのでそうしようとしたが、よく考えるとauxpropでそのまま読んでくれた方が都合が良かった。/usr/local/lib/sasl2/Sendmail.confもauxpropに修正。

その二、ドメインが違った。外のドメインのためのメールボックスなので、saslpasswd2 -c cyrus-admin@hostname.domainname などと一々ドメイン指定しなければいけなかった。ユーザを作る際も同様。

IMAPsにするべく、SSL用の鍵を作成。

# openssl genrsa -rand /dev/urandom -out ca.key 2048
# openssl req -new -key ca.key -out ca.csr
# openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
# openssl genrsa -rand /dev/urandom -out server.key
# openssl req -new -key server.key -out server.csr
# echo 01 > ca.srl
# openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt

で、最終的なimapd.conf がこんな感じ。

configdirectory: /var/imap
partition-default: /var/spool/imap
servername: mail.fortunerinn.org
admins: cyrus-admin
sieveusehomedir: yes
subscription_db: berkeley
sasl_pwcheck_method: auxprop
sasl_auto_transition: yes
tls_cert_file: /usr/local/etc/cert/server.crt
tls_key_file: /usr/local/etc/cert/server.key
lmtpsocket: /var/imap/socket/lmtp
idlesocket: /var/imap/socket/idle

imapsyncをportsから入れて、メールボックスを仮移行

# imapsync \
  --host1 192.168.xxx.xxx \
  --user1 silver --passfile1 passwdfile1 \
  --host2 192.168.xxx.xxx \
  --user2 silver --passfile2 passwdfile2

後は、Postfix + postgrey設定だな。

ダイエット成功

ただしMozilla Firefoxですが。

色々プラグインを入れて使っていましたが、急にひっかかるなどの重い症状が頻発し、あまつさえ終了時にはウィンドウが消えた後も数分プロセスが残りCPU1個を占有しっぱなしにするという事態となりました。会社内ではマシンスペックはかなり良い方のはずなので、ハードウェアではなくソフトウェアの原因の可能性が高いです。

快適なブラウズがないと仕事に差し支えるので、流石に改善を決意。

1. プロファイルの新規作成
ブックマークや設定はファイル単位で移行。ついでにFireBugsなど利用頻度が低いのに重そうなプラグインも入れないことにする。最初はそれなりに軽かったけど、気がつくと終了時に止まるように。

2. places.sqliteのダイエット
“SQLite Optimizer” で vacuum や reindex を行ってみても、あまり効果なし。履歴を30日から1週間程度に縮めても、そんなに差はなし。

3. prefs.js のダイエット
プロファイルのフォルダを見ていると、Firefoxの設定が保存される prefs.js が 1.5MB とかなり太っていることに気がついて、バックアップの後いらない行を消去。古いプラグインの設定などを消したところ、1.5MBが1/3の500KB程になりました。昔使っていた GreaceMonkey版 Autopagerize や、NoScript の設定がかなりの量になっており、これを消したのが大きかったようです。

結果、prefs.js を修正した後は10秒でブラウザが再起動できるようになり、スクロールがひっかかる事もほぼ無くなりました。

年単位でプラグインを色々試しながらやっている人は、一度prefs.jsを整理してみては如何でしょう。

Unixツール系

runit – a UNIX init scheme with service supervision

Unixでデーモンを監視したい場合、darmontoolsを今さら使うのもなんだし、最近はこのあたりを使うのがいいらしい。

NS2HTML – Your firewall made easy.
NetScreen用のファイアウォール設定整形。ちょっと使ってみるか。

Solarisネットワークチューニング・アンドキュメンテッド

ftp-adminの憂鬱: ネットワーク性能のチューニング (TCP編)

ftp.jaist.ac.jp の中の人が綴る、Solarisのネットワークサーバ用チューニングについて。アンドキュメンテドな事を大規模FTPサーバで実機検証しつつの貴重なノウハウ。

紋章を知るとヨーロッパが分かる!

0. 目次:紋章を知るとヨーロッパが分かる! – 最終防衛ライン2

どこかで見て基礎の基礎だけは知っていたが、面白い。実例で見せてくれるとやっぱりわかりやすいな。

コートの飴染みをお湯で取る

コートに付いた染みをなんとか取ろうとしてみる。のど飴の染みなので、どうやらお湯につけて溶かし流すのが良いらしい。

洗面台でお湯につけて、ブラシで絞り出してみる。しばらくすると、お湯全体がうっすらと色付いてきた。どうやら効いているようだ。

そのまま何度か繰り返したところ、お湯の色もかわらなくなったので、これ位で十分だろうと終了。濡れているので変色具合がよくわからないが、多分それなりに取れたのだろうと予想する。

そのまま延ばして陰干しして終了。後で見たら、きちんと取れていた。これで今年も使える。

ちなみに、私はタイトルで煽る気があまり無いのでこんな感じだが、きっと煽るとすれば「1年たったコートの飴染みを取る方法」とか「クリーニングに出さない飴染みの取り方」とかそんな感じになるのだろう。ホッテントリというか、はてなブックマーク業界にあまり興味が無いし、SEOすら適当なのでこんな感じのままでいいや。

ウェブ日記だブログだCMSだと色々世間は流れているが、やっている事は単なる備忘録に過ぎない。10年以上前にそうやって初めたし、あと10年たってやっているとしても多分このままなのだろう。

シェルコード! シェルコード!

会社の上司Aの肝煎りで、一日部内で業務を止めてシェルコードに関する集中勉強会をする。

普段は Ollydbg ばかりで、Immunity Debuggerは初めて使ったが、DLL 内のトランポリン用命令の探索がさくっとできるのは便利そうだ。一々ダンプさせてgrepさせていたのが馬鹿のように思える。

そして、今はシェルコードですらインタラクティブ+ヴィジュアルで構築の時代なのか。昔ちまちまと禁止文字を考えながらやっていた時代は遠くなったものだ。まあ、それでも色々と手法は必要なわけで、初心者がすると大変なわけだが…。

知っている知識の実践と確認という点があるとはいえ、色々とためになる時間だった。

Tシャツ見積り

T-shirt sizing – Radium Software

Tシャツのサイズと言えば,普通,S・M・L・XLの四種類ぐらいしかない。つまり,それぐらい大まかに見積もりを行う,ということ。

そういえば、Tシャツじゃないけれども、見積りで松竹梅ってよく作るな。だいたい竹に落ちつくが、上を見せておくことでコスト意識をそらす手法としてよく見る。

Carbon Emacs から Dictionary.app で辞書引き。

CISSPの勉強の際、メモを取りながらやっていたが、辞書まわりが整備できておらず不便だったので、ひとりぶろぐ: [Emacs]Carbon EmacsからDictionary.app(辞書)で単語を調べるを参考にして、辞書を引けるように設定。

lookupがわりに、C-x C-y に割り当てて快適快適。

パソコンファームで自作機処分

【PC Watch】 不要PCを無償でリサイクル処分してくれるパソコンファーム利用体験記 〜宅配便で送るだけの超簡単システム

これは便利そうだ。
CRTとか本体とか本体とか、微妙なものはいくらでもあるしね。

Home > Tags > TIPS

Return to page top

12