[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[harden-mac:0753] Resource-forkとデータの偽装
- To: harden-mac@xxxxxxxxxx
- Subject: [harden-mac:0753] Resource-forkとデータの偽装
- From: Tomio Arisaka <mio_rhapsody@xxxxxxx>
- Date: Fri, 24 Feb 2006 23:44:27 +0900
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