[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[harden-mac:0753] Resource-forkとデータの偽装



Tomio Arisaka です。

>   Apple Safari Browser Automatically Executes Shell Scripts
>   だそうです。
>
> http://www.heise.de/english/newsticker/news/69862
> http://isc.sans.org/diary.php?storyid=1138
>
以前、似たような問題があったときに、Appleは次の文書を出していました。
<http://docs.info.apple.com/article.html?artnum=108009-ja>


さて、今回話題となったものは、データ・ファイル(jpg, mov等)を装った
Shell-Scriptです。
少々調べてみました。
MacOSX-10.3.x / 10.4.xにおいて、あるデータファイルを開くアプリケーションを
既定以外のものに設定すると、その情報がResource-forkに追加されます。
以下、その過程を示します。

(1) Resource-forkを持たないデータを用意する。
Mac:~ lisa$ cat > TestFile
This is a example.
^Z
[2]+  Stopped                 cat >TestFile
Mac:~ lisa$ ls -l ./TestFile ./TestFile/..namedfork/rsrc
-rw-r--r--   1 lisa  lisa  19  2 24 19:39 ./TestFile
-rw-r--r--   1 lisa  lisa   0  2 24 19:39 ./TestFile/..namedfork/rsrc

(2) Finder上でファイルメニュの「情報を見る」を実行し、「このアプリケー
ションで開く:」項目のアプリケーションを変更すると、Resource-forkが追加
されます。
Mac:~ lisa$ ls -l ./TestFile ./TestFile/..namedfork/rsrc
-rw-r--r--   1 lisa  lisa    19  2 24 19:40 ./TestFile
-rw-r--r--   1 lisa  lisa  1338  2 24 19:40 ./TestFile/..namedfork/rsrc

(3) 追加されたリソースを「DeRez」コマンドで確認します。'usro'タイプの
リソースが追加されています。
Mac:~ lisa$ /Developer/Tools/DeRez ./TestFile
data 'usro' (0) {
$"0000 0019 2F41 7070 6C69 6361 7469 6F6E" /* ..../Application */ $"732F 5361 6661 7269 2E61 7070 0000 0000" /* s/Safari.app.... */ $"0000 0000 9C63 6363 4E19 1919 0000 0000" /* ....〓cccN....... */
		...
         $"0000 0000"                                          /* .... */
};

以上の調査から、'usro'タイプのリソースに起動アプリのパスが記録されている
と分かりました。このパスをTerminal.appに書き換えてしまえば、任意のShell-
Scriptを実行させることができます。

ひとつひとつ「情報を見る」で確認もできますが、この部分を削除できないかと
考えました。
以下、試しに'usro'タイプのリソースだけを削除するShell-Scriptを作ってみま
した。私の環境ではうまく行きましたが、実践的な動作試験は行っていません。
Apple Developer ToolsのRezとDeRezに依存しています。(要するに手抜きです)

#!/bin/sh
#
# Remove 'usro' in resource-fork
# date: 2006-2-23
# author: Tomio Arisaka  <mio_rhapsody@xxxxxxx>
#
# parameters:
#       File-name: $1

if test -z "$1"; then
	echo "** No name of a data file ! **"
elif [ ! -r $1 ] || [ ! -w $1 ]; then
	echo "Error: cannot read or write '$1' "
fi
if [ -z "$1" ] || [ ! -r $1 ] || [ ! -w $1 ]; then
	echo ""
echo "'RemoveUSRO.sh' can remove a resource of the type 'usro' in a data file."
	echo "usage  : RemoveUSRO.sh 'data-file'"
	echo "         You may enter many data-files if you would like."
	echo "example: RemoveUSRO.sh 'file1.jpg' 'file2.png'"
	exit 1
fi
if [ ! -x '/Developer/Tools/DeRez' ] || [ ! -x '/Developer/Tools/Rez' ]; then
	echo "'Rez' or 'DeRez' does not exist."
	echo "You must install 'Developer Tools'."
	exit 1
fi

while test $1
do
	if [ -r $1 ] && [ -w $1 ]; then
		/Developer/Tools/DeRez -skip 'usro' $1 > ./__tmp_rsrc.r
		/Developer/Tools/Rez ./__tmp_rsrc.r -o ./__tmp_file
		cp ./__tmp_file/..namedfork/rsrc $1/..namedfork/rsrc
	else
		echo "Error: cannot read or write '$1' "
	fi
	shift
done
rm ./__tmp_rsrc.r ./__tmp_file
# End of file


--[PR]------------------------------------------------------------------
   ■□■□■ も う 英 会 話 で 損 し な い ! ■□■□■
  英会話で何度も失敗してしまった方に、その訳と解決のコツ大公開!
  --------------------------------------------------------------
 @1日5分から @1日約140円 @辞書も暗記も不要★10日間無料試聴OK!
    http://ad.freeml.com/cgi-bin/ad.cgi?id=dND5q
------------------------------------------------------------------[PR]--
■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp