パスワードを忘れた? アカウント作成
6345 story

プレステ2の自由利用を可能にするバッファオーバフロー 69

ストーリー by Oliver
PS2独立記念日 部門より

本家より:ブート時のバッファオーバフローを利用して、プレステ2でソニーからライセンスを受けていないコードをmodchip等のハードウェア改造なしでも動かす手法が公開された。メモリカードに書き込む手段と正規のプレステ1ゲームさえ1枚もっていれば活用できる。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 質問形式でお送りします (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2003年08月17日 13時45分 (#380384)
    Q.なぜバッフアーオーバーフローがおこるのですか
    A.不定長のデーターに対して下のようなコードを書くからです。
    void func()
    {

    char buf[BUFSIZE];
    .
    .
    .

    }
    Q.何年も前からわかっていながら、なぜ対処しないのですか。
    A.このようなコードを書いてある本が存在するからという説と
    わざと入れているという説があります。
    Q.信じられません。自分のプログラムに穴をあけるなんて。
    A.一部のプログラマーは、これを指摘すると「仕様です」というので
    間違いありません。意図的にやっているのです。
    Q.彼らの目的は何なのですか。
    A.考えてみてください。われわれの周りにどれほどコンピューターがあるか
    DVDプレイヤー、カーナビ、携帯電話、自動販売機、パチンコ、ATM
    これらを自由に操ってみたいと思いませんか。
    実際には、パソコン以外には一般の人にはプログラムを作ることは許されていません。
    Q.それはバックドアという犯罪なのではないですか
    A.いいえ、問い詰められたら、バグということにします。
    • by Anonymous Coward on 2003年08月17日 18時43分 (#380438)
      反論:
      このQAは表面しか見ていません。BUFSIZEを定義していることが、バッファーオーバーフローに直結するわけではありません。
      問題はBUFSIZEを限界チェックをしていなことです。限界チェックをしないのなら、#defineする必要もないはずです。
      BUFSIZEという形式だけを見て、その目的まで覚えなかった、学習者のミスです。
      親コメント
      • by Anonymous Coward on 2003年08月17日 21時14分 (#380474)
        Q.ネタにマジレスされてますがどうしましょう。
        A.サイズをチェックするのは、みんな気がついている思います。問題はその後です
        Q.scanfを使うなとか fgets(buf,BUFSIZE,fp)ですか
        A.それほど簡単な問題ではありません。bufに収まらなかった時の処理が必要です。
        Q.それはどんなものがありますか
        A.
          1.切り捨てる
          2.さらに大きなバッフアーを確保する
          3.ループで順次処理する
        1の切り捨てるのは乱暴なようですが、背に腹は代えられません。
        2の方法はmallocを使って確保したバッフアーならreallocできます。
        3の方法はプログラムがかなり複雑になります。本質ではない部分に多くの力を注がねばなりません。
        Q.1はかっこ悪いし2は使えないし3は大変です。ほかに方法はありませんか
        A.気づかなかったふりをして、チェックしないという方法をとる人もいます。
        Q.最低ですね
        A.世渡り上手と言ってください
        親コメント
        • ネタにマジレスしたACです。
          ネタにマジレスするのは、礼儀です。

          Q.ではどうしたらいいんでしょう?
          A.パフォーマンスが落ちるからという理由で、たまたま知っているルーチンで処理をおこなうのがいけないのです。じっくり読み込んでいけば、バッファーオ
          • Q.ダブルバッフアーってなんですか
            A.たとえば最初の例だとbuf[2][BUFSIZE]というようにバッフアーを二つとります。
            そして、データを奇数バッフアー、偶数バッフアーの交互に読み取ります。
            Q.なぜそんな面倒なことをするのですが
            A.BUFSIZEで切断されたデーターの前後をみたいからです。たとえば2バイト文字コードのとか。分断されたキーワードとかです。圧縮されたデーターなどでは11bitとかの半端なビット長がまたがっていることもあります。
            Q.文字列処理ばりばりのコンパイラならいざしらず、滅多にないようなデーターに対して、おおがかりすぎませんか。
            A.そ
      • ていうか、C言語は配列の限界のチェックを自分でしなければならない言語だということが分かっていないだけでは?
        --
        (´д`;)
        親コメント
        • > ていうか、C言語は配列の限界のチェックを自分でしなければならない言語だということが分かっていないだけでは?

          え?そんな人にCode書かせていいの?
          • 書かせているからこのたぐいのバグが残ったままのコードが世に出るのでは?

            まあでも入門書とかもあまり良いのがないような気がするな。

            # バッファ長を考慮しない gets() や sprintf() がある
            # というのも問題といえば問題かな?
            --
            (´д`;)
            親コメント
            • C言語の失敗は、中途半端に配列の概念を定義したことだと思うな。
              素直にポインタだけにしておけば自分で管理しなきゃならんって気がつくだろうに、あんな配列なんてBASICだのCOBOLだのから流れてきたやつはみんなしくじるよ。
              • バッファは全部動的確保しろってか?

                #次はギガ単位でmallocしてNULL検査しない奴が増えそう。。。
                --
                wild wild computing
                親コメント
              • 無知に原因のすべてを押しつけるのはちょっと無理があります。
                世の中のホールの半分くらいは、無知が原因なのではなくて
                うっかりミスが原因でしょう。
                自動的に strict な境界チェックするようなライブラリを
                用意しない限り、この手の穴は防げません。
              • セキュリティ関連のタレコミを多くしている者でさえこのコメント [srad.jp]で、
                そこら中に char buf[1024] などというコードが散乱していることが多い、というのが現状ではないでしょうか。
                などと、固定長領域を確保すること自体がいけないかのようなことを書いている有様だしねえ。
              • >固定長領域を確保すること自体がいけないかのようなことを

                それはとらえ方が違うんじゃないか?

                char buf[1024]

                #define BUFSIZE 1024
                char buf[BUFSIZE]
                では大きく違うぞ。

                前者は仕様変更があった場合に穴になりやすかろう。
                (まさか違いがわからんとか言わないだろうな)
              • 逆に却下。
                もともとメモリが少ない上に仮想メモリが存在しないんで、
                ちょっとしたフラグメンテーションがすぐ動作不安定につながる。
                こんな環境では、ヒープをスタック気味に使っていけるような
                設計にせなあかん。

                確保したメモリをいつでも再配置できるような設計にしてもいい
                けど、こんなバイオレンスな設計が必要なほどデンジャラスな
                仕事はハナから手をつけずに蹴り返すが吉。
                大抵のゲームはリアルタイム性が要求されますからねぇ。
                しかも、マルチプロセスの上にバックグラウンドでDMAが飛び交って
                いるような最近の環境でそれやらかすのは自殺行為。
                --


                # ACなのでAC
                親コメント
    • LSB が標準から gets() 落したら、POSIX が文句つけたってのが最近あったな。
    • Q.なぜバッフアーオーバーフローがおこるのですか?
      A.コンシューマーゲーム機はCPU速度、メモリ容量ともに非常に制限されており
      エラーチェックルーチンなんぞ、入れる余裕がないからです。
      ゲームの場合、ユーザー入力などほとんど無く、必要性も認められません。

      #今回は起動時のBI
      • by Anonymous Coward on 2003年08月18日 13時43分 (#380654)
        Q.やはり出ましたね。環境に責任を押し付けてしまう人。
        A.認めるわけではないのですが、気持ちはわかります。
        たとえば近年発見されたBufferOverflowの例としては
        zlib
        libpng
        Apple QuickTime ActiveX v5.0.2
        Apple Quicktime/Darwin MP3 Broadcaster
        IE4.0
        など、本来は絵や音を取り扱うプログラムがあります。
        これらのソフトにとってはバッフアーオーバーを起こした文字列処理の部分はまったく本質でないわけです。
        そもそもBufferOverrunという報告書のもとになった事件はフィンランドのOUSPGグループが
        Outlook ExpressとNetscape Messengerで長いファイル名のファイルを添付するというものでした。
        手を抜いてはいけないのですが、手を抜きたくなる気持ちはわかります。
        Q.でもSendMailなんかは、テキストを扱うプログラムですが、ひどいものですよ。
        A.SendMailの歴史はセキュリティの歴史といっても過言ではないでしょう。BufferOverflowなんてSendMailには小さなことです。
        でも、彼らを攻めないでください。必要以上に複雑になったあのプログラムをメンテし続けているというだけで私は頭が下がります。
        親コメント
    • それも上司の命令で。

      CPUが6811って言えば解る人には解る目的か?

      でも、マジでヤバイんでAC

    • なんでBUFSIZ使わずに、わざわざそっくりな識別子のBUFSIZEを定義するの?
      いや、実際にこういうコード書くヤツがいたりするから、マジで疑問なんだけど。
      # 元ネタACさんを煽るつもりはない。
  • SCOが儲けてしまうのか! (スコア:2, おもしろおかしい)

    by DB-researcher (10541) on 2003年08月17日 8時34分 (#380323) ホームページ 日記
    Linuxが動くようになるハックだなんて、迷惑なものを作ってくれたもんだ!
    PS2が$699も値上がり [srad.jp]しちゃうじゃないか :-P
    --
    _.. ._._._ _... ._._._ ._. ._._._
    物は試しだ。コメントのしきい値を2にしてごらん
  • by Anonymous Coward on 2003年08月17日 7時15分 (#380312)
    独立していたのが共有された日では?
  • by Anonymous Coward on 2003年08月17日 7時09分 (#380310)
  • by Anonymous Coward on 2003年08月17日 11時35分 (#380356)
    これって、XBOXの奴と同じじゃないの?
    探せば他のゲーム機もこれと同じ方法でプロテクトを
    MODチップ無しでクリアできるんじゃない?
    • Re:XBOXと同じ? (スコア:3, 参考になる)

      by .mjt (13150) <reversethis-{gro.ntlc} {ta} {tjm}> on 2003年08月17日 15時44分 (#380409) 日記
      GCの場合はPSOのサーバーになりすますプログラムとDNSサーバーをPCに仕込んで、PCからコードを送信する手法が有るみたいです。

      # ↑ちなみにたれこんでも却下でした

      GBAとかDCのように手軽な方法論が用意されたゲーム機は少ないようで。
      親コメント
    • by AliceYou (2190) on 2003年08月19日 11時13分 (#381150) 日記

      開発環境がアセンブラだったこともあり、メモリカードへの
      読み書きはデータ長決め打ちで行っていました。

      ※あと、メモリカードへの実行可能なデータの保存と
      ワークエリア(RAM)上でのプログラムの実行禁止の
      規約もあったような…たしかこの辺を違反すると、
      SNKのダメが出たはず。

      ゲーム機のセーブデータなら、データは
      固定長として、最大のサイズでもスタック領域に
      踏み込まないようにするのが簡単だと思うんですが、
      最近のゲームはそれではいけないんでしょうか。

      親コメント
    • by Anonymous Coward
      GameCubeとか家庭用サーバーに… いや、なんでもない。
  • by Anonymous Coward on 2003年08月17日 15時16分 (#380400)
    これってワレズも動くのん?
    • by Anonymous Coward
      >これってワレズも動くのん?

      初期のゲームなら動くかも知れませんが後のほうは無理じゃないですかね。
      プロテクトがどう発展してきたかを考えればお分かりでは?

      始めはブートのみクリヤーすればよかったので本物で起動してから
      タイトルが出たところでニセモノと交換すると動いた。
      ※サターンリングとか、黄金軸ってやつですね。
      この程度ならクラックすれ恐らく動くかもしれませんが
      実際はディスク共に専用の書く必要があるかもしれません。

      以後のものは適度にディスクのプロテクト部分をチェックするので
      ダメだと思います。

      #君、シーガルで中古買った方が面倒なくていいよ。

       
       

      うーんと元リン
      • by Li on (9067) on 2003年08月17日 22時48分 (#380502) 日記
        >うーんと元リンクが消えてしまったのでよくわかりませんが
        現在は復活しているようです。
        親コメント
  • by Anonymous Coward on 2003年08月17日 19時34分 (#380453)
    これに使えるのはPS2用のメモリーカード(8MB)の方ですよね。

    #単にメモリーカードといえば1Mbitの奴を指すものだと思うのでAC
typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...