
FF6に任意のコードを実行できる脆弱性が発見される 46
脆弱性と言って良いのかはおいておいて 部門より
スーパーファミコンの人気RPG、ファイナルファンタジー6(FF6)にて、任意のコードを実行できる脆弱性が発見された(ニコニコ動画で公開されているデモ動画)。
FF6には、本来キャラクターが装備できないアイテムを武器として装備できてしまうバグがあるのだが、この際に特定のアイテムを装備させて戦闘中に攻撃すると、メモリ内の$000Fおよび$0010部分に格納されているデータをアドレスとして参照し、対応するデータをコードとして実行してしまうという。$000Fは「戦闘開始からの経過時間をカウントするカウンターの2バイト目」で、$0010は戦闘中いくつかに変化する値が格納されているとのことだが、これだけでは任意のコードを実行できない。しかし、$000Fが0xC7、$0010が0xCEという値になっていた場合、「シャドウ」というキャラクターの名前データが格納されているメモリ領域のコードが実行されてしまうという。シャドウの名前はプレイヤーが自由に設定できるため、ここに実行したいコードを用意することで任意のコードを実行できる仕組みだ。
ただし、名前は最大6文字までという制限があるので、名前の最後に他のキャラの名前データのアドレスにジャンプする命令を入れることで長いコードを実行させるというテクニックが必要だそうだ。公開されているデモでは、戦闘終了後に適切にエンディングイベントに飛ぶような処理を行っているとのことで、10人のキャラクターを利用して任意コードを実行させているという。これらはすべてゲーム内で普通に入力可能な文字を使っているため、実機での再現が可能なようだ。
動画の最後では実行したコードが紹介されているが、エンディングイベントを呼び出すにはただイベント管理用のデータを書き換えるだけではダメで、いくつか回避処理を行う必要があるとのこと。よくもまあこのような手法を編み出したものだと感動せざるを得ない。
ファミマガに載ってたら (スコア:3, おもしろおかしい)
誰もがウソ技と疑わないレベル
Re: (スコア:0)
でもウソとかしか思えない技が複数あって、悩むんだ。
Re: (スコア:0)
アイテムを装備して殴ると暴走することがあるというところまでは当時の雑誌に載っていた記憶がある。
Re: (スコア:0)
2バイト目は1バイト目のフレームカウントが埋まるまで動かないから、つまり255/60で4秒強の遊びがあるから、人力でもなんとか再現可能になってるんだよな。これが0.1秒とかのシビアなタイミングなら無理だったと思うけど、実際に投稿されてたら認められただろうね。
Re: (スコア:0)
某ゲームで自分が原因のバグが裏技として掲載されていたときは切腹を覚悟しましたわ
Re:ファミマガに載ってたら (スコア:1)
おお、同じ経験の人がいた。
でかでかと、裏ワザ(しかも調子に乗ってやってるとストップする)として載ったのを読んだ時、意識失いかけましたわ。
で、検証したらやっぱりというか何というかメモリ破壊してたちゅー、上司に不都合報告書(BUG症状及びその対策届け)書いて出しました。
当時はパッチ当てなんかなかったので、セカンドロットから修正入りましたが、ユーザーから「裏ワザ使えない!」って電話がお客様相談室に届いて・・・どないしろちゅーねん!!
Re:ファミマガに載ってたら (スコア:1)
こういうこと [srad.jp]も実際にあったんだろうか?
らじゃったのだ
Re: (スコア:0)
水晶の龍を買った口
回避策は (スコア:1)
FF7にアップグレード?
Re:回避策は (スコア:1)
PS版以降はアイテム装備のバグが修正されているので、PS版へのアップグレードは回避策になる。
Re:回避策は (スコア:1)
ハードごと買わせるアップグレードは邪道だ!
Re: (スコア:0)
リコールが必要だな
Re: (スコア:0)
FF8の主人公「呼んだ?」
Re:回避策は (スコア:1)
突発豪雨は(・∀・)カエレ!!
Re: (スコア:0)
Re: (スコア:0)
このアドレスだとゼロページと呼ばれていた領域な気がするので、アーキテクチャが違うPSではこの手順では起きないのではないかと。
(SFCエミュレータな作りにしていたらまた別でしょうけれど)
Re: (スコア:0)
だから「当時のバグを、頑張って再現しました」とかそーゆー表現になるんだな。
Re: (スコア:0)
うちのはFF37ですが、何か?
# それ別なFF
ポケモン赤緑 (スコア:1)
ポケモン赤緑にも任意コード実行が出来る「5かいバグ [geocities.jp]」というのがありますね
Re: (スコア:0)
ポケモン黄はチューリング完全らしい
脆弱性なんですか? (スコア:0)
部門名にも書いてあるけど。
バグではあるんだろうが。
ファミコンのカセットを第三者が抜き取って持ち帰れる事や、ファミコンに刺した状態でゲームを置き去りにすると他人に勝手に遊ばれる事を脆弱性とは呼ばないのと同じで、そもそもファミコン内で閉じているシステムのバグまで脆弱性扱いってのは、何か違う気がする。
ネットワークに繋がって無くても、ファミコン自体に感染してその後に遊んだソフトの何か影響を与えられるとかまで行けば、さすがに脆弱性と呼ばれるかも知れないが。
Re:脆弱性なんですか? (スコア:2, 興味深い)
立派な脆弱性かと。
「シナリオを進行しないと閲覧することが出来ないように意図して製作されたエンディング」を任意に閲覧可能という本脆弱性は、「シナリオの進行度」という制約条件を「攻撃者が製作者の意図しないプログラムを実行させる事」で強引に突破している訳です。
些細な異常動作・フリーズ・クラッシュ等が起きるバグから、実際に悪用可能な実証コードを製作したのは大きなパラダイムかと。
ちなみに、任意コードを限られた文字等でエンコードするのは、現実の話題となる脆弱性を悪用した攻撃のシェルコード [wikipedia.org]で良く見かけるテクニックだったりします。
Re: (スコア:0)
脆弱性には「悪意ある第三者」が必要
Re: (スコア:0)
私は、悪意ある第三者は必須要件ではないと考えております。
例えばシェアウェアのライセンスキーのクラックや、DRMの解除等は第三者が居なくても起こりえるセキュリティの脆弱性かと思いますが如何でしょう。
侵されているのはソフトウェアの完全性や機密性ですね。
Re: (スコア:0)
スクウェア「仕様です。ゲーム性の一端です。」
#祖コメが無粋だと思う
Re: (スコア:0)
>後に遊んだソフトの何か影響を与えられる
「テニス」で何歩かプレイヤーを歩かせた後に電源を切らずにカセットを抜く。
「スーパーマリオブラザーズ」のソフトに入れ変えてリセットボタンを押す。
コンティニューで通常面以外の面へ。
Re: (スコア:0)
つまり、「テニスで歩いた歩数」は脆弱性案件って事ですねw
Re:脆弱性なんですか? (スコア:1)
「電源を入れたままカセットを抜くことができる」ところが脆弱性でしょう。
その問題を解消した「メガドライブ」で遊ぶことをおすすめします。
#日本版のメガドライブは、電源スイッチに連動して機械的にロックがかかり、電源稼働中はカートリッジが抜けないようになってるるのですが、
#海外版のジェネシスは、その機構がありません。
#「アメリカ人は大ざっぱだから、電源を入れたままむりやり引っこ抜いて壊しちまう」から、オミットしたというもっぱらの噂でしたが…
Re: (スコア:0)
スーパーファミコンも同じ構造ですね
何故か64でなくなりましたが
Re: (スコア:0)
メガドラ2は電源オンのままカセットを引き抜ける構造でした。
そのおかげでセーブデータ消されたことがあるorz
Re: (スコア:0)
同じ人の動画で、エンディング最後の「The End」を描画する機能文字を「表示」して終了とか、メモリ破壊でデバッグモードを呼び出してラストフロアに直行かつラストバトルをスキップとか、いろいろひどいのがある。
Re: (スコア:0)
セキュリティ関係ないしね。
第三者が自由に名前を変えられるなら
それなら脆弱だとは思うけど。
Re: (スコア:0)
> ファミコンのカセットを第三者が抜き取って持ち帰れる事や、ファミコンに刺した状態でゲームを置き去りにすると他人に勝手に遊ばれる事を脆弱性とは呼ばない
それ脆弱性だと思うけど。
Re:脆弱性なんですか? (スコア:1)
その辺はそのマシンの脆弱性ではなく(操作者を区別する機能は無いという意味での)仕様の範囲で、それを防ぐのは運用じゃないかなぁ。
だから「ファミコンをプレイさせるゲームセンター」があったとして、その点をカバーする手段をとっていなかったら、その店を一つのシステムと見立てて「そのシステムの脆弱性」とは言えるだろう。
でもファミコン本体の脆弱性じゃない。(弱点とは呼べるとしても)
#ストーリーのはあくまでゲーム内で許される行動の結果、想定していない結果が見られるのだから、脆弱性orバグであって仕様の範囲ではない。
ニコニコのか (スコア:0)
youtubeのが先だったけど、そっちのは話題にならんのよね
Re: (スコア:0)
話題になったから取り上げられたのではない。
話題にするために誰かがタレこんだから取り上げられたのだ。
さあ君もタレこもう。
マリオワールドにも (スコア:0)
スーパーマリオワールドにも任意のコードを実行できる脆弱性(?)があります。FF6と違って前提条件やタイミングが非常に厳密なので人間にできるとは思えませんが…
http://tasvideos.org/2513M.html [tasvideos.org]
Re: (スコア:0)
関連ストーリーにTASによるロックマン1での任意コード実行が出てる。今回のが新しいのは人力でも現実的に不可能ではなさそうなあたりかな(「約14分後」に約4秒のマージンがあってフレーム単位の入力を要求していない)。
Re:マリオワールドにも (スコア:2)
ロックマン1はもう人力でED呼び出しやっちゃってる人いるからすごい
【RTA】ロックマンin3:53【2014-06-21】 [nicovideo.jp]
ロックマンRTAにおける 任意コード実行テクニックについて [nicovideo.jp]
Re: (スコア:0)
http://media-pickup.com/entertainment/20150124/super-mario-world-credi... [media-pickup.com]
同じバグなのかどうかはわかりませんが、人力でやっちゃった人がいるらしいです。
Re: (スコア:0)
それが人力でやってる方がいるんですよねぇ…
http://nlab.itmedia.co.jp/nl/articles/1501/22/news114.html [itmedia.co.jp]
MZ-80Kとか (スコア:0)
GOTO $D000 で、画面先頭から直接キャラクタコードで書いたプログラムを動かせるので、結構やりたい放題でしたね。(苦笑)
Re:MZ-80Kとか (スコア:1)
ネ木1 ネ木4のことかぁー!!
http://developers.srad.jp/comments.pl?sid=344503&cid=1078384 [srad.jp]
Re: (スコア:0)
昔、MZ-80BのラリーXもどきで外周の壁を通路に変更してマシン語データ部分から飛び出して
ハングするまでメモリ内部を消しまくるってことをしてたっけ。
Re: (スコア:0)
MZ-80は1バイトデータを書き換えるだけでキーが高速連打モードになったりっとやりたい放題できましたね。
#メモリ内部を消しまくるのはわたしもやったな
モロにURL書いてある (スコア:0)
初出はニコ動じゃなくてhttp://tasvideos.org/forum/viewtopic.php?p=404974#404974 [tasvideos.org]の方なんでは?
機械装備で変なアイテム装備して戦闘すると暴走するのは結構有名だけど、任意コードまで結構かかったなぁ…