iOSのセキュリティバグに見る、仕組み作りの重要性|まず一度、会ってもらえるSEO@千葉県市原市

まず一度、会ってもらえるSEO@千葉県市原市|ウェブデザインときた

お問い合わせはこちら

お問い合わせは、メールでお気軽に

2日後の13:00までに返信します

お問い合わせ用ページ

iOSのセキュリティバグに見る、仕組み作りの重要性

こんにちは。ときたです(^^)/

去る2月21日、Appleが、iOSのソフトウェアアップデート7.0.6をリリースしました。
その内容と原因について、以下のような記事を見つけました。

Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?

この記事によると、「単純なプログラムミスが原因で、iOSとOS XのSSL接続に危険すぎる脆弱性がある」とのことです。
記事を読む限り、SSL接続ができていなくても「SSL接続ができている」と誤判定してしまうようですね。
※SSLというのは、「ウェブサイトで入力する個人情報やクレジットカード情報などを暗号化し、安全に送受信する技術」のことです。(Symantec

iPhoneをお持ちの方は、早めにソフトウエアアップデートを実施されることをおすすめします。

原因は単純なプログラムミス

原因は単純なプログラムミスです。

この処理には「エラーが発生していたらfailという処理に移行する」という処理が if(・・・) で書かれています。

「if(・・・)」という命令文は、「この条件に該当する場合は、次の行の処理を行う」という命令です。
命令文が2行以上ある場合は、{ } で囲むルールになっています。
{ } で囲まれていなければ、「if(・・・)」の次に書かれている1行のみ、つまり「goto fail;」(「fail」という処理に移行する)のみが実行されます。

プログラムソース(オリジナル)

しかし、上記の画像で示した部分の、2行目の「goto fail;」は、「if(・・・)」に関係なく、必ず実行されてしまいます。
そのため、ここで必ず「fail」という処理に移行してしまい、この行より後ろのチェック処理は実行されません。
しかも、この行に至るまでの if(・・・) が正常であったとしても「fail」に移行してしまいます。

私は、その先の処理の詳細はチェックしていませんが、このたった1行のせいで、チェック処理が無意味になってしまうことは確かです。

ミスを防ぐ仕組み

では、どうすれば、このミスを防ぐことができたでしょうか?

「if(・・・)」という命令文で記述した条件に該当する場合の処理は、1行だけなら { } で囲む必要はありません。
しかし、あえて「条件に該当する場合の処理が1行だけでも { } で囲む」という記述ルールを設けていたらどうでしょうか?

プログラムソース(改変後)

このように記述していれば、1行目の「goto fail;」で「fail」に移行してしまうため、2行目の「goto fail;」は永遠に実行されない処理となるだけですみます。
おそらく、今回の脆弱性には繋がらなかったことでしょう。

「条件に該当する場合の処理が1行だけでも { } で囲む」という記述ルールは、私が前職でSEとしてスタートした頃に先輩から教わったものです。
「付けなくてもいいものを、あえて付ける」という、ミスを防ぐ仕組みです。

ミスはよくないことです。
しかし、人間はミスをする動物です。
Appleほどの企業で働いている人でさえ、ほんのちょっとの油断でミスが出てしまうのです。

ミスを防ぐ努力は当然必要ですが、「ミスはあるもの、起こるもの」という前提に立って、ミスを防ぐ仕組みを作っておくことも必要ではないでしょうか。

この件で、そんなことを思いました。

あなたは、ミスを笑うだけですか?それともミスから学びますか?

それでは今日も、にこやかに(^^)/