Appleの社歴に刻まれた重大な脆弱性「goto fail;」とはなにか?

カテゴリー :iPhone

先日,iPhone,iPad向けのOS「iOS7.0.6」がリリースされました.

ユーザに対していつものように最新OSが出たので更新してね,とAppleは告知しました.終

で今回は済むものではありませんでした,ディベロッパ向けにAppleが公開した詳しい内容を見るとびっくり

簡単にいえば「iOS6のときから使ってた機密通信に抜け道あったから修正したよ」という内容だったのです.

迅速に今回のアップデートをする必要があるユーザ

脆弱性を持っているのかを確認するサイトが作られています.

goto fail;

アクセスした時にこのような赤い表示が出る場合は問題があるプログラムを使用している事になります.

2014-02-25

iOS7.0.6にアップデートし対策を施した場合,もしくは「SSLPatch」(←脱獄tweek,わからない人は気にしない)を導入した場合,緑の表示になります.

2014年2月24日時点のAppleはディベロッパーサイトにて現在のiOSの利用割合を

  • iOS7 82%
  • iOS6 15%
  • その他 3%

chart-2-10-14

このように発表しています.

今回の脆弱性をもっているiOSは6.0.0~7.0.4(海外では7.0.5)なので実に9割以上のiPhoneが今回修正された脆弱性を抱えていることになります.

iOS5を使ってるなら安心だ!と思った人もいるかもしれませんが今回のバグフィックスで修正された脆弱性の危険はないにしても今回より以前に修正された脆弱性を放置しているということを意識しなくてはなりません.

なにいてるのか分からな人は今回のiOSにアップデートしないとかなりやばいという意識は持ってください!

脆弱性ってなんだよ,なにされるんだよ

今回の脆弱性をクラッカーが悪用した場合,クレジット決済の情報を盗聴したり,どこかのサービスにログインする際のパスワードも丸裸で盗聴可能です.

決済やログインの際にセキュリティを保証するために用いられる「SSL認証」に今回問題がありました.

本来認証棄却すべき誤った認証を条件次第では認証したことにしてしまう点が今回の脆弱性です.(プログラムを一部しか読んでのでざっくり)

SSL認証について

今回SSL認証について改めておさらいしたので参考にしたサイトです

改めてここに書いても意味ないので興味がある人は覗いてみてください

今回のバグの原因がひどすぎる

今回のバグはハッカーの間で「goto fail;」と通称されています.

その由来はこのような単純なプログラムの記述のミスがすべてを引き起こしてしまったことに由来します.

そのプログラムの抜粋がこちら

OSStatus        err;
	...

	if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
		goto fail;
	if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
		goto fail;
		goto fail;
	if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
		goto fail;
	...

見ての通り誤って「goto fail;」の記述を2重に記述しています,それがきっかけになってとんでもない事になってしまいました.

goto fail;」という名前からプログラミング言語でのgoto文の使用に問題があるという話の展開をしている記事も見受けられましたが,今回重要な論点はコピーアンドペーストの恐ろしさの理解コードレビューの重要性バグチェックの重要性であると私は考えています.

今回のミスでAppleのセキュリティに関する認識が甘いことが示されてしまいました.

現在Appleはこれといって特別な対応をとっていませんが海外の研究者はiOSユーザの強制アップデートをすべきであるという見解を展開している方もいます,今度どのような対応を取るのか動向が気になります.

参考

ImperialViolet – Apple’s SSL/TLS bug

ちなみに

go to fail を日本語訳すると 英辞郎「go to gail」検索結果

追記
macOSX向けのSSLのバグ修正を含むアップデートが提供されたようです。macユーザーの方も今すぐアップデートをしてください。