教授のSPARC4が遅くなった原因は、xtermの下を埋め尽くしたxroachだった
(infosec.exchange/@paco)- CS学科のITサポート担当者が、教授からの Sparc4の性能低下 への不満を受けて研究室を訪れ、ウィンドウの背後に隠れていたxroachを発見
- ウィンドウを1つ最小化すると、画面の下が 黒い四角形 のように見え、その中でゴキブリたちが非常にゆっくり動いていた
- 動きは約 0.5 fps 程度で、xtermの下にxroachのゴキブリが多すぎて、1つの黒い塊のように見えていた
- 問題の核心はハードウェアそのものというより、ユーザーが見えない場所で xroachが表示され続けていた状態 だった
- 古いX11デスクトップ環境では、いたずら系プログラムも実際の性能問題のように見えることがあり、隠れたウィンドウやバックグラウンド状態の確認が重要
教授の研究室で確認した症状
- Paco Hopeは、以前CS学科のITサポート担当者として働いていた頃、教授が Sparc4が遅い と不満を訴えたため研究室に呼ばれた
- 最初に行ったのはウィンドウを1つ最小化することで、その下には予想外の 黒い四角形 が現れた
- 黒い領域の中では、xroachのゴキブリたちが少しずつ動いていた
- 動きは約 0.5 fps に見えるほど遅かった
xtermの下を埋め尽くしたxroach
- xtermの下にxroachがあまりにも多く敷き詰められていて、個々のゴキブリではなく、ほぼ 単色の黒い四角形 のように見えた
- 教授はウィンドウを最小化するまでその下の状態を見ておらず、性能低下への不満は、この隠れた画面状態を確認したことで手がかりがつかめた
短い回想と反応
- この逸話は、2023年7月25日にPaco HopeがMastodonへ投稿した短い回想
- 投稿には202件のブーストと389件のお気に入りが表示され、古いデスクトップ環境やいたずら系プログラムを覚えているユーザーたちの共感を集めた
1件のコメント
Hacker News のコメント
地元の病院で技術サポートをしていたとき、看護師から、画面に「何か天気予報みたいなウィンドウ」が出ていて、マウスがその下に潜り込んでしまい閉じられない、という電話があった。
興味が湧いたのでコンピュータには触らないように伝え、10分ほどかけて到着すると、「1分前に勝手に閉じました。30分は出ていました」と言われた。
机の配置とウィンドウの説明からモニターのボタンを押してみると、キーボードの角が誤って押していたモニターの OSD メニューが表示され、明るさ 100% を太陽アイコンで示していた。マウスがその下に入るのも当然だった。
また10分歩いて戻り、次の電話を待った。
看護師たちは命を救い、人生最悪の日を過ごしている人々の世話で忙しいのに、そのうえ実装も保守もひどいワークステーションまで扱わなければならない。助けを求めると、問題を作った側の人間がやって来て見下すこともある。
看護師たちは愚かでも怠け者でもなく、些細な IT 問題に時間を使うよりも、もっと重要な仕事をしなければならない人たちだ。
実際の診療に重要な機器はたいてい専任の専門家が管理していて、MRI 装置のコンピュータは Active Directory に参加しておらず、ネットワークにもつながっていないことさえあった。問題はプリンターを直す人ではなく、GE にエスカレーションされた。
行ってみると、CRT モニターの上に大きなスピーカーが2つ付いたブームボックスが置かれていて、それをどかすと魔法のように問題が解決した。
実際、看護師は起きていたことをかなり正確に説明していたとも言える。
1989年、元学界の経済学者たちが Digital VAX 11/750 で計量経済モデルを動かしていた職場で、1人で IT 部門を担当していた。
このミニコンピュータはマルチユーザー OS の VMS を走らせており、すべてのユーザーが管理者権限を持っていた。各自がプロセス優先度を最大まで上げればモデルが速く動くと思っていたが、それがコンピュータ運用に必要なリアルタイムプロセスを妨げ、かえって逆効果になっていた。
原因を突き止めて権限を回収し、システムを再起動すると正常に戻り、システムを速くしてくれてありがとうと感謝された。
別の人が自分自身を1000個 fork し、
nice値を 19 に下げたあとsleep(0)して終了するプログラムを作った。CPU 時間を少しでももらえればすぐ終わるのだが、emacs が動いている間はその機会を得られなかった。その間、xloadが表示する負荷は真っ黒な箱になっていた。emacs を使っていた人は root で
ps -ef | grep procname | xargs killを実行したが、kill の処理には CPU 時間が必要で、sleep(0)より時間がかかり、ほとんど効果がなかった。2回目のいたずらではプロセス名を
emaにしたため、結果として emacs のインスタンスも全部死んだ。3回目にはプロセス名を
etにしたところ、偶然/etc/initdにも引っかかり、マシンが突然再起動した。Scheme インタプリタは起動が遅く、特に20人以上がログインしているとさらにひどかった。TA が
ctrl-zでインタプリタを一時停止し、viで編集してからfgで戻る方法を教えてくれた。問題は、半分どころかクラスの3分の2が
fgを忘れ、編集後に新しい Scheme インスタンスをまた起動していたことだ。課題締め切りの夜、端末室でシステムが完全に這うように遅くなっていたのを覚えている。その後、Scheme インスタンスを2つ以上動かしている同級生を見つけて
fgを思い出させる方法を覚えたし、8クイーン問題を無限再帰で解く「解法」も負荷軽減にはまったく役に立たなかった。本当の教訓は、後に CS 401 の課題締め切りの夜にはログインしないことだった。共有端末が同じ部屋に集まっていたので、自分の行動の効果をリアルタイムで見られて楽しかった。
人々が列に並んでいるある環境で、誰かが自分の問題を他の人より先に見てもらえないかと尋ねた。つまり列の一番前に送ってほしいという依頼だった。
彼は「もちろんです!」と言い、相手が驚くと、「ただし、同じお願いをする他の人にも同じようにするということはご存じですよね?」と付け加えた。
結局その人は、自分の場所でそのまま待つことにした。
昔の黄金のような学生時代を思い出す
私の場合は2000年代初頭で、大学の実習室のコンピュータは強力ではなかったので、人々は重い X セッションを立ち上げずに Linux コンソールで作業することが多かった
2001年ごろ
console_ioctl(4)のマニュアルページを読んでいて、いたずらのネタが満載だと気づいた。コンソールフォントを操作してすべての文字を逆さまにしたり、大文字と小文字を入れ替えたり、キーボード LED のパターンを点滅させたり、パレットを変えて画面を黒くフェードアウトさせてから戻したりする小さなプログラムを作ったそこにサーバーコンポーネントを付け、普通に見える端末で実行しておき、被害者が来るのを待ってから同じ部屋の別のマシンからリモートで効果をオンにして反応を見た。幸い、すぐに人々が困惑するのを見ることよりもコーディングそのもののほうが面白いと気づき、後者はやめた
もう一つのいたずらは、
gettyのログインプロンプトで root ログインが成功したかのように表示される内容を自分でタイプすることだった。motdまで含め、改行はタブとスペースでまねし、絶対に RET は押さず、最後を[root@mailhost root]#で終わらせたある人は好奇心から
whoamiと入力して、なぜパスワードプロンプトが出るのかと面食らい、ある人は何も触れずに怯えたまま退いて、別の端末からシステム管理者にメールを送ったユーザーがログインしてさえいれば、タスクスケジューラで実質どんなプログラムでもそのユーザー権限で実行でき、Active Directory と組み合わせるとユーザー情報も分かった。誰がどこにいるかを把握して特定サイトの
iexplorerを開いたり、無害な Word 文書を表示したりするようなことだった。最も悪質な例は自動ログアウトのバッチスクリプトだった後になって人々が方法に気づき、リモート実行をまねしようとしたが、対象ユーザーの権限ではなく自分の権限で実行してしまい、IT 管理者が来たときには誰が実行したのかの痕跡があまりにも明白だった
私はいたずらをやめ、最終的には IT を経てソフトウェアエンジニアが職業になった。あのとき懲戒を受けていたらどうなっていたのか、時々気になる
IBM 370 メインフレームに80人以上のプログラマーがいて、VM/370 がプログラマーごとに1台ずつ仮想マシンを作ってくれていた。私は「スーパーユーザー」権限を持つ2人のシステムプログラマーのうちの1人だった
仮想マシン内では通常 CMS を動かしていたが、ほかのものも実行でき、MVS を動かしているマシンもあった
仮想マシン自体にコマンドを送るには、デフォルトが
#の特殊文字をコマンドの前に付けた。たとえば#cp ...は仮想マシンへ行くコマンドで、この魔法のプレフィックスは好きな文字に変えられたある日退屈して、仮想マシンの中でさらに VM を動かせるのか気になった。「第2レベル」で VM をブートし、プレフィックスを
!に変え、その中で新しい仮想マシンを作ることができたさらに「第3レベル」の仮想マシンで VM をブートし、プレフィックスを
@に変えた。結局 8段階のネストまで入り込み、VM が VM を動かし、さらにまた VM を動かせることを確認したさて終わらせてネストしたレベルを終了しようと、習慣で
#cp shutdownと入力したところ、実マシンの実際の VM が終了してしまった。慌ててマシンルームへ走り、コンソールのスタートボタンを押した当然システムログは残っており、もう一人のシステムプログラマーが私の部屋に来て「二度とやるな」と言った。面白い時代だった
#はレベル0のオペレーティングシステム、つまりホストではなく、レベル1 VM のプレフィックスだと思っていた#でレベル0にコマンドを送っていたのなら、レベル1のプレフィックスは何だったのか気になるkillall procnameを呼び出した。マシンは即座に落ちたシステム管理者が来て初めて、Solaris での
killallは別のことをするのだと知り、二度と使うなと言われた80年代に大学で学生としてVAX 11/750、正確には8750 Systimeクローンにアクセスしてコーディング課題をしていた。
学生用端末は大きな部屋の半分にあり、残りの半分は大学のIT職員が使っていた。IT管理者側に空き端末がないと、職員が1人か2人、パーティションのすぐ向こうにある学生用端末を使うことがあった。
ある日、COBOLプロジェクトのコンパイルを待っていてあまりに退屈だったので、システム管理者のユーザー名とパスワードを捕まえられるか気になった。CLIでログインプロンプトを、ビープ音やメッセージまで完全にまねるスクリプトを書いた。
スクリプトは画面をクリアしてユーザー名とパスワードの入力を待ち、入力されるとそれを自分にメールで送り、ユーザー名/パスワードのエラーを表示してからログアウトし、本物のログインプロセスへ渡すものだった。
気づかなかった同級生数人で試して匿名のいたずらを少しした後、システム管理者たちに本当に試してみることにした。IT職員が普段使う2台の端末にログインしてスクリプトを走らせておき、数時間後に戻ると、驚きつつ少し不安にもなることに、SYSTEMログインパスワードを手に入れていた。
1か月ほどそのマシンを完全に制御でき、SYSTEMパスワードが変わるたびに時々スクリプトを再実行した。誰にも言わず、卒業最後の日に念のためログインしてスクリプトを削除した。当時の英国では、不正なコンピューターアクセスに関する法律が厳しくなりつつあった。
そのマシンの膨大なマニュアルとともに多くの時間を過ごし、VMSを探求して学んだが、誰にも気づかれなかった。
Ctrl+Alt+Delでセキュリティコンテキストに入る必要があった。https://en.wikipedia.org/wiki/Control-Alt-Delete
彼らは私に初めての仕事をくれた :-) さらに、あまり知られていないアカウントを1つか2つ、必要な権限をあらかじめ付与しておき、「公式」アカウントからSYSTEM権限が取り上げられても取り戻せるようにしていた。
面白い時代だったし、無邪気でもあった。権限でめちゃくちゃなことはしなかった。
今はプログラミングで食べているのも、それほど驚くことではない。
私のものは学校のWindows、おそらくNovellネットワーク向けのVisual Basic 5だった。
win.iniを変えて本物のログイン画面の前に実行させるのはとても簡単だった。ユーザー名とパスワードを共有ネットワークドライブかローカルファイルに保存し、「パスワードエラー」を表示してから本物のログインプロンプトへ抜ける仕組みだった。
結局問題は、「友人」が同じ手法で人々のネットワークアカウントのファイルを自分のアカウントへコピーしたことから起きた。クォータを使い切ったとき、システムがネットワーク管理者に警告したのだろうと思う。ざっと調べると、彼が先生の論文ファイルまでコピーしていたことが明らかになり、それは本当に大きなタブーだった。
この出来事のおかげで、結局ジュニア技術サポート/ネットワーク管理者という初めてのコンピューター関連の仕事を得た。
1988年、高校で友人と一緒に、新しいコンピューター室のIBM PS/2 Model 30-286 30台に配布されていたNetWareで、
autoexecのネットワークブートシーケンスにプログラムを差し込める脆弱性を見つけた。その前には、当時新しかったVGAレジスタをいじり、80x25テキストモードから320x200・256色グラフィックモードへ、ちらつきや崩れなしに切り替える方法を見つけていた。どちらのモードもリフレッシュレートが70Hzだったからだ。
友人はピエロの顔のデジタル画像を
A000:0000にあらかじめ置いておくTSRを作り、約4分後に数フレームだけピエロの顔を表示して、すぐにユーザーが作業していた画面へ戻すようにした。教室の隅で、学生たちが混乱しておびえた表情をするのを見て笑いをこらえきれず、ばれてしまった。特に、ある学生が教師を呼んで3分以上画面を見させていたのに、教師が振り向いた瞬間にピエロの顔がぱっと出たタイミングは圧巻だった。
友人の名前はBrianで、私が知る中で最も賢い人の一人だった。10年後、私たちはmobygames.comを作った。
音の周波数が常に変化していたので、固定された音程は一瞬もなかった。当時のスピーカーは普通ビープ音を出すだけの時代で、使っていないマシンで動かしておくことが多かった。
90年代初頭、州立大学のコンピューターサイエンス学科に入ったばかりの学部生だった。コンピューター室には SunOS を動かす Sun SPARCstation IPC がずらりと並び、学科の人たちが連絡に使う基本的なメールシステムがあった。
技術に詳しい人たちはすでに Usenet を探索していたが、ほとんどの人にとってメールこそがデジタル世界のすべてだった。
ある日、友人たちといたずらをしようということになり、ランダムな格言を出力する有名な
fortuneコマンドから着想を得た。私たちが書いたおかしくてばかばかしい文を集めたテキストファイルからランダムに1行を選び、コンピューターサイエンス学科の任意のユーザーにメールで送る簡単なシェルスクリプトを作り、それを cron ジョブに登録して毎時1通ずつ送られるようにした。最初は無害ないたずらだった。人々はメッセージを面白がり、実習室で共有したりしていた。メッセージの出どころは学科内の話題になったが、誰もどこから来ているのか分からず、私たちは同級生や教授たちが謎の送信者を推理するのを楽しんでいた。
ところが、学部長が「なぜコンピューター科学者はクリスマスとハロウィンを混同するのか? Oct 31 == Dec 25 だから」という、とりわけ突拍子もないメッセージを受け取ったことで事態が大きくなった。彼はそのジョークを理解できず、暗号のようなメッセージか潜在的な脅威だと思った。
キャンパスの IT チームが調査に投入され、メールの出所を追跡しようとする1週間がかりの騒ぎになった。友人たちと私は、見つかって退学になるのではないかと不安に見守っていた。
結局、数日眠れない夜を過ごした末に自首することにした。学部長のところへ行って白状すると、長い沈黙のあと、彼は笑い始めた。実はコンピューターサイエンスの教授の一人がジョークを説明しており、私たちがいつ名乗り出るか待っていたのだった。
彼はいたずらを大目に見てくれ、私たちの主体性を創造的だと受け止めてくれたが、そうしたいたずらが意図せぬ結果を招くことについて警告した。
振り返ると、面白く記憶に残るいたずらであり、技術利用の倫理について貴重な教訓を与えてくれた。今では、自分のコンピューターサイエンスの学生たちにデジタル世界での倫理的行動の重要性を教えるとき、よく話しているエピソードだ。
数学科の学科長の PC が妙な動きをしていて、問題を見なければならなかったことがある。
調べてみると、彼は Prime95 に Core 2 Duo の片方のコアの余剰サイクルを10年間すべて使わせており、そのマシンは室温まで冷めないと起動しなかった。
大学院時代、友人が別の友人に仕掛けたいたずら。
被害者がログインしたまま少し端末を離れた隙に、いたずらした側が
.loginファイルにecho sleep -1 >> .loginを追加した。数日後、
sleep文が20個以上くっついてから、ようやくその学生のログインに何か異常にまずいことが起きているのが明らかになった。日に日に最初のログインから使える端末になるまでの時間が遅くなり、被害者はいら立ちを募らせ、ついに我慢できなくなったところでいたずらが発覚した。しばらくして、ログインごとに1秒ずつ足すのは微妙すぎると判断した。
echo "echo sleep 1 >> ~/.login" >> ~/.login昔話のかなり多くが、結局「悪意ではなく笑わせるつもりだったが、あんなに増殖したり、あんなに多くのリソースを使ったりするとは思わなかった」に行き着くのが面白い。
Morris worm も似たようなものだ。議論の余地はあるが、マルウェアとして設計されたと見ることもできるし、少なくとも伝えられているところでは、あそこまで深刻になる意図はなかったという。