アカウント名:
パスワード:
The -f option overrides any previous -i options.
正体を偽ってコンピュータへ侵入し、データ消去やファイルの外部流出、他のコンピュータの攻撃などの破壊活動を行なうプログラム。トロイの木馬はコンピュータウイルスのように他のファイルに寄生したりはせず、自分自身での増殖活動も行わない。
システムコールをたたかれたら,/bin/rmの名前を変えても無駄です。
/bin/rmは,システムライブラリのunlink()などを呼び出しているに過ぎないわけですし。そのunlink()も内部的にはsyscall(SYS_unlink,)を呼び出しているに過ぎないでしょう。
トロイの木馬は実行された時点で防ぐ手だてはありません,実行したユーザーにできることはすべて行うことができます。
これだけだと不親切なので…,rmだけでファイルを消せなくしたければ,情報を見るからファイルをロックです。もちろんこれも正しい手順で行えば消せますが,消しにくくはなります。
>AppleScriptが実行に際してrmコマンドを実行するのに、まさかunlinkは使わないでしょう。
今回はたまたまAppleScriptを使って,ターミナルから/bin/rmを呼び出していたというだけです。
将来,同様な悪意あるプログラムが,直接システムコールを叩くことができる
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs
回避策 (スコア:0, 参考になる)
rm -i にエイリアスを張るのが一応の回避策かな。
A warning on a new destructive 'trojan horse' [macosxhints.com]
Re:回避策 (スコア:2, 参考になる)
とした状態で
rm -rf hoge
ってすると確認無しで消えると思います。提示リンク先のリプライにも書いてありますし、manによると って書いてありますね(そして実際そのとおりに動いているように見えます)。rmをrm -iにaliasしても、-fをそのうしろに付けられたらアウトです。rm -i -rfはrm -rfと同じ。
#そもそもフルパスで呼ばれたらアウトでは。
んじゃどうするかって話ですが、chmod o-rx /bin/rmするくらいしか思いつかないです。
#削除するときはsudo rmするということで。一般ユーザはrm禁止:-)
それ以前にP2Pで拾った怪しいファイルを開くなよ、って話ではありますが:-)
man rm(was Re:回避策) (スコア:1, 参考になる)
-f <略>The -f option overrides any previous -i options.
-i <略>The -i option overrides any previous -f options.
-----
ですから、rm -i -rf は確認無しに削除され、rm -rf -i は確認有りです。
--
vm%パスワード入れるの面倒くさい
Re:man rm(was Re:回避策) (スコア:1)
alias rm='rm -i'
ってしてあっても、
rm -rf hoge
を実行したときに実際に実行されるのは
rm -i -rf hoge
つまり
rm -rf hoge
でしょう。
#普段俺はalias rm='/bin/rm -i'して必要なときだけ-f付けて使ってます。
Re:man rm(was Re:回避策) (スコア:1, 参考になる)
ぐるりさんに言いたかったんじゃなくて、ぐるりさんの書き込みに「-i」を後ろにつけた場合のことが載ってなかったので、補足したかっただけなのでした。
以下、余談。
回避策ですけど、「rm -rf *」だったらなぁ。
$ cd
$ touch -- -i
しておくと、ホームディレクトリで「rm -rf *」しても「-i」ファイル名が読み込まれた時点で、「rm -rf -i」と同義になって止まってくれたり。
これ確か /.J の「バックアップをどうしてるか」みたいなストーリーの中に書いてあったんですが。どのストーリーだか思い出せず...。
あ、消す時は、以下で。
$ rm -- -i
「rm -rf ~」だと...さくっと思いついて man bash 見て試してみたんですが、
$ cd
$ export HOME=/Users/hoge/.Trash
$ rm -rf ~
だと、「.Trash」が消えるだけで済むとゆー。要は(Pantherのデフォルトでbashなので)bashが補完してる「~」の参照先を変えちまえっつー。
まぁ、著しく使い勝手が悪くなるので現実的じゃありませんが(笑
ま、LimeWireでWordなんてgetすんな、つか容量小さいんだからdownload時間で気付けっつーか。
--
vm
Re:man rm(was Re:回避策) (スコア:1, 参考になる)
あまりよろしくないかと。
UNIX FAQ [nurs.or.jp]
Re:man rm(was Re:回避策) (スコア:1)
alias del="rm -i"
とかの方がいいっていう話、でしょうか?
rmをrm -iにしておくと、いざaliasされていない環境で作業するときも思わずrm -iのつもりでrmってタイプしちゃう、と。
なるほど、参考になります。
Re:回避策 (スコア:1, 参考になる)
だからトロイでいいのか。P2Pで落とした怪しげなファイルは実行しないことかな。
本家ではネタみたいなことばかり書いてあるけど。
Re:回避策 (スコア:1)
まぁ、アプリケーションバンドルの中に無駄ファイルをパディングされたら意味なしですが^^;
Re:回避策 (スコア:1)
タイプの物もありますから、サイズだけでは判断出来ない様な気がします。
解る人には解るというレベルだろうけど。
AdobeReaderのダウンロードマネージャで700KBぐらいか。さすがに
100KBではバレるのかな。でもこのぐらいの差なら、だまされる人は
だまされる様な気も。
Re:回避策 (スコア:1)
/bin/rmを他の名前に変えちゃって、rm -iなシェル・スクリプトを/bin/rmにしちゃえば大丈夫でしょう。もしくはせっかくopen sourceなので、rmコマンドのソースをちょこっといじって、デフォルトを-iオプション付きにしちゃうとか。
Re:回避策 (スコア:1)
私はzshをログインシェルに変更していますが、AppleScriptからdo shell scriptを実行するときはsh(つまりPantherだったらbash)が使われているようです。
あと、「デフォルトを-iつきにする」では解決しないんでは。「-fは-iをオーバーライドできない」くらいにしないと…
#それはそれで不便だが。
Re:回避策 (スコア:1)
そういえばそうですね。御指摘感謝。
overrideできなくしちゃうと、はげしく不便なコマンドになってしまいますね。
AppleScriptがログイン・シェルを使わないのなら、rmが自分の親プロセスをたどっていけば、自分がコマンドラインで起動されたか、AppleScriptからかを判断できることもありそうです。AppleScriptからだったら-i優先にするとか。あとは、rootでないのに$HOMEをrmするときにはオプションにかかわらず警告を出すとか。
しかしいろいろ考えてもまぁ、不便ですよね。やっぱり。
なんていうか、結局「あやしげなファイルをむやみに実行しない」ってことしか。
Re:回避策 (スコア:1, 参考になる)
システムコールをたたかれたら,/bin/rmの名前を変えても無駄です。
/bin/rmは,システムライブラリのunlink()などを呼び出しているに過ぎないわけですし。そのunlink()も内部的にはsyscall(SYS_unlink,)を呼び出しているに過ぎないでしょう。
トロイの木馬は実行された時点で防ぐ手だてはありません,実行したユーザーにできることはすべて行うことができます。
これだけだと不親切なので…,rmだけでファイルを消せなくしたければ,情報を見るからファイルをロックです。もちろんこれも正しい手順で行えば消せますが,消しにくくはなります。
Re:回避策 (スコア:2)
ちょい補足。Finderでは表示されないドットファイルに対しては、コマンドラインから
/Developer/Tools/SetFile -a L ファイル名
でロックできます(要Developer Tools)。外すときは
/Developer/Tools/SetFile -a l ファイル名
で。
#TinkerToolsとかで表示させるという手もあるか。
Re:回避策 (スコア:1)
AppleScriptが実行に際してrmコマンドを実行するのに、まさかunlinkは使わないでしょう。普通にforkとかexecとかの汎用のルーチンじゃないですかね。
Re:回避策 (スコア:0)
>AppleScriptが実行に際してrmコマンドを実行するのに、まさかunlinkは使わないでしょう。
今回はたまたまAppleScriptを使って,ターミナルから/bin/rmを呼び出していたというだけです。
将来,同様な悪意あるプログラムが,直接システムコールを叩くことができる