僕は今年に入ってからたまたま発見したセキュリティ脆弱性を積極的に報告するようにしはじめました。当然、検証の際には法を遵守するよう心がけていますし、他にも、検証の過程で誤って被害を与えてしまうことがないように、たとえば SQL Injection 脆弱性の発見は避けるなどの自分ルールを決めて、素人なりに細々とやっています。
さて最近、
- 昨今の学校のセキュリティ事情【第一章 学校のPC(生徒使用PC)について】 - toriimiyukkiの日記
- http://d.hatena.ne.jp/toriimiyukki/20110907/1315406102
というエントリを見つけまして、これをふむふむと読んでいたところ、:
ふと、自分の学校のユーザーリスト(下記のコマンドで取得)を見てると「testuser」なる者があった。 net group [グループ名] で、試したところ「****」というパスワードで通過したっていうね。【引用者註: パスワードについては伏せ字にしました】
という記述があるのを見つけました。他人の識別符号を使用しているということはこれは言うまでもなく不正アクセス行為ですよね。
これでギョッとしまして、続きのエントリも拝読したのですが、そちらにも法に抵触すると思われる内容が記されていました。
ところが、はてなブックマークのコメント等を見ていても、違法性を指摘するような声は少なく、どちらかというと 100 % 賞賛といった声が目立っていて、
- このエントリの作者は倫理的な問題意識を感じているかもしれないが、違法性については認識していないのではないか(認識していたとしたらこんなことブログに書かないのではという考えの上で)。またブックマークコメントなどを見てもこれでは認識を改められないのではないか
- このエントリの読者はこれを読んでこのような検証に対する違法性を認識しないのではないか
という点が心配になり、本当はもっと僕なんかよりも詳しい人からズバリと言ってもらえればとも思うんですが、このエントリを書くことにしました。
SQL Injection 脆弱性の検証について
- 昨今の学校のセキュリティ事情【第二章 学校のWebサイトについて-SQLインジェクション】【追加あり】 - toriimiyukkiの日記
- http://d.hatena.ne.jp/toriimiyukki/20110908/1315483176
というエントリには、:
まぁもうタイトルにも書いてあるのでお分かりですよね。 https://www.gakkou/****.php?ID=****&CHAIN=' OR 'a'='a 【引用者註: スクリプトファイル名と ID を伏せ字にしました】 とすればどのスレッドでも覗けてしまいます。 IDがメールのユニークなメールIDなので、そこを変えれば誰からのメールか分からないですがメールの内容を除くことが出来ました。
という記述があります。
CHAIN というものは単純なユーザ ID のハッシュということで、まあお粗末なことは確かなのですが、これは、『不正アクセス行為の禁止等に関する法律』における〈アクセス制御機能に係る他人の識別符号〉と解釈することができるのではないかなと思います。この解釈が正しければ、この SQL Injection 攻撃によって本来の認証機構を回避して他人になりすましたということになり、これは不正アクセス行為にあたるのではないかと思います。
この場合、自分宛のメールの URL から CHAIN を省いてアクセスがおこなえないことを確認したのちに、 引用文中の URL(ただしもちろん自分のメール ID を指定した上で)にアクセスし、メッセージが閲覧できるかどうか確認することで、脆弱性が実際に存在することが確認できたはずです。わざわざ他人のメールを見る必要はなかったはずです。
# ちなみに、(先ほど「たとえば SQL Injection は避ける」とか言っておいてアレなんですが)実は SQL Injection 脆弱性の届け出はしたことがあって(だってリンククリックしたら見つかったんだもの……)、その時は MySQL の SLEEP() 関数を仕込んで、指定した秒数ぶんレスポンスが遅延することを確認し、脆弱である可能性が高いと判断して届け出ました。
CHAIN パラメータの生成方法自体が脆弱であることの検証について
このエントリでは他人のユーザ ID のハッシュ値を実際にリクエストに含んで(CHAIN パラメータの値としてセットして)試行したかどうかについてははっきりとは書かれていません。
もしそのような行為をしたのであれば、先ほどと同じように、「他人の識別符号」を利用して認証機構を回避したことになり、確実にアウトと言えると思います。
この場合、僕だったら、自分のユーザ ID のハッシュ値を出して、システムから送られた URL に含まれる値と一致していれば、もうその段階で脆弱性だと断定して届け出ると思います。その先には絶対に踏み込みません。
「コマンドインジェクション」の検証について
- 昨今の学校のセキュリティ事情【第三章 学校のWebサイトについて-コマンドインジェクション/その他】 - toriimiyukkiの日記
- http://d.hatena.ne.jp/toriimiyukki/20110909/1315580347
には、:
悪意のある生徒ならこのようなファイルを置いて家に帰るはず... <?php print('<pre>' . shell_exec($_GET['cmd']) . '</pre>'); そう、このディレクトリには実行ファイルの禁止などもなく誰でも自由にファイルを置くことができた。
と書かれています。これを「コマンドインジェクション」と呼んでいるわけですね。いわゆる 「OS コマンドインジェクション攻撃」 を指しているのだと思います。ただ、この状態がこれが世間で言う当該脆弱性にあたると言えるかどうかはよくわかりません(いやだって「インジェクション」……?)。
まあ、それはともかくとしても、サーバ機の認証を回避して任意のコマンドを実行しようとしているわけですから、アウトなような気もしますが、セーフの可能性もあるような? どうなんでしょうこれは。
僕がこの脆弱性を見つけたらどう証明するか……うーんこれはちょっとどうしたらいいのかわからないです。任意の PHP スクリプトを置けるということなので、そのディレクトリに適当なファイルでも書き出してみる? 熟考の末適法な自信が持てなければ、検証はせずに危険っぽいぞということのみ伝えるかもしれません。
MySQL の root アカウントを発見した場合の検証について
そうしていくうちにMySQLを使ったプログラムを見つけるわけですよ。 <?php $mysqlname = 'root'; $mysqlpass = 'XXXXXX'; (略) MacのMySQLBrowserにて色々なデータベースを見てて面白いですね。 普通に個人情報があります。名前があります。住所が載ってます。電話番号がのってます。 こんな個人情報を扱っているのにこのセキュリティの低さにはイラッときます。
ということで、 MySQL の root アカウントへのログインもおこなったようで、これは間違いなくアウトだと思います。
MySQLでrootのパスワードを手に入れたら誰もがアクセスしたくなりますよね、なりますよね。
なりません。
というわけでこれは root アカウントのパスワードであることは明らかなので、たまたま発見してしまったとしても実際にログインしてみることは僕だったらないでしょう。ただ、 root アカウントでの任意のホストからのログインが許されているかどうかは、実際にログインしてみないとわからないですよねたぶん(このあたりとかちゃんとした検証方法ってあるんでしょうか……?)。これも、パスワードを見つけてしまった事実の報告と、いくつかの提案をするにとどめておくかもしれません。ちょっと釈然としないですね。でも僕のスキルなら仕方がないかなーそれが限度だなー。
学校側の対応と各エントリの反応について
……でまあ、
- 昨今の学校のセキュリティ事情【第四章 まとめ】 - toriimiyukkiの日記
- http://d.hatena.ne.jp/toriimiyukki/20110910/1315666497
にてその後の顛末についてまとめられているのですが、:
ですが、個人的には何らかの謝罪と一週間の自宅謹慎を受けることに。 第三章にて、数百名が申し込んだイベントの個人情報(名前、住所、電話番号)がありました。 自宅謹慎に関しては、自分でも一線を超えた感じもあるし、人様の個人情報も見たのでそこらはなんとかいいとします。 しかし、学校側として一切「ありがとう」という言葉は使わず、 今後一切脆弱性を突くなという感じのスタンスなんです。 「うちの学校はプライバシーマークも取得しているのでこういうことされては困るのです」
ということで学校側の対応もまったくどうかと思うのですが、 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/toriimiyukki/20110910/1315666497 から閲覧できるはてなブックマークのコメントを見るに、この問題を単に倫理的な問題として受け取っている向きが多くあります。確かに、脆弱性を見つけて報告したということは評価されるべきで、プライバシーマークがどうたらと訳のわからない言い訳で逃げられてもなぁとは思います。ただ、この方がやっていることは法に抵触することであり、ブクマコメントでほとんどそれに触れられていないどころか不正アクセスもやむなし的な発言が見られる(現在)のはいったいどういうことなんでしょうかねえ……。
僕も勉強中の身ですし、あまり偉そうなことは言いたくないのですが、たとえ善意の脆弱性検査であったとしても法を遵守してその範囲で実施するというのは当たり前のことじゃないかなと思います(裏を返せば法を遵守した上での検査であれば文句を言われる筋合いはないわけで)。この方が違法行為であることを認識の上でやっていたのかどうか、それとも知らなかったかどうかはわかりませんが、しかしいずれにしても周りの人間が教えてあげなければならないことです。ところが学校側はそういうことをちゃんと教育できていなさそうだし、エントリのコメントやブックマークのコメントを見ていても、学校の対応に憤って見落としているのか単にクラッカーカコイイとかいう価値観で賞賛しているのかわかりませんが、そういうちゃんとした指摘がほとんど見当たりません。よくないことだと思いますよ。
# 仮に違法行為だと認識した上でブログを書いているのだとしたら、このエントリは僕の壮大なお節介だったということになるわけですが>< なんとなくブログや SNS におけるよくある犯罪自慢事例(たとえば未成年の飲酒自慢)とそれに群がる人たち、という図と似たようなものにも感じられますが、そのあたりの話は興味がないのでここでは触れません。
ということで、ざっくり何が違法行為にあたりそうかということの指摘と、参考までに僕だったらどうしたかということを書かせてもらいました。
僕は素人なので、この指摘にも間違いが含まれているかもしれず、逆に指摘漏れもあるかもしれないのですが、このエントリが当該エントリの作者の方や、読者の方にとって、何か考えるきっかけにでもなればと願っています。