「サービスに弱点を作りこまない」ためのセキュアプログラミングとは

「サービスに弱点を作りこまない」ためのセキュアプログラミングとは

ウェブサイトの脆弱(ぜいじゃく)性を狙ったサイバー攻撃は何年も前から常態化しています。また、新たな脆弱性も次々発見されています。そのため、システムの管理者やソフトウエアの開発者は設計段階から脆弱性を作りこまない(セキュアな)視点を取り入れて開発し、発見された脆弱性にも速やかに対応することが求められます。
また、2020年には東京オリンピックが開催されますが、過去の大会では毎回、開催国の政府機関や企業などのウェブサイトへのサイバー攻撃が多数発生したため、日本でも攻撃されることが予想されます。

このような背景から、ヤフーではプログラミングに携わっている社員全員が、システムに脆弱性を作りこまないための知識と技術を学ぶ「セキュアプログラミング」研修を受講し修了テストに合格することを必須にしています。
今回は、この研修の内容と、ウェブアプリケーションセキュリティの第一人者、徳丸 浩さんの講義内容の一部をご紹介します。

画像
講師の徳丸 浩さん。日本のウェブアプリケーションセキュリティの第一人者で、IPA(独立行政法人 情報処理推進機構)の「安全なウェブサイトの作り方」の執筆者でもある

ウェブサイトに対する侵入事件のトレンド

最近増えているのは、ECサイトの決済システムの脆弱性を突かれることで改ざんされ、サイト利用者のクレジットカード情報が攻撃者に窃取されてしまう事件です。
この手の攻撃にはウェブサイトの運営者側がそもそも脆弱性を作りこまない、放置しないことが重要です。
また、利用者側で改ざんされていることに気づいたり、防いだりすることが非常に難しい攻撃ですが、クレジットカードの明細を定期的に確認する習慣を持つなどして、ご自身の資産を守っていくことも重要です。
参考)クレジットカード不正利用被害の発生状況(PDF)一般社団法人日本クレジット協会

脆弱(ぜいじゃく)性とは

徳丸さん:
ここでいう「脆弱性」とは「ソフトウェアなどにおけるセキュリティ上の弱点」で、OSやソフトウェアにおいて、プログラムの不具合、または設計上のミスなどが原因で発生する「悪用可能なバグ」や「設定不備」のことです。プログラムは正常に動作するものの、セキュリティ的に弱点がある状態で「本来想定している仕様であればできないはずのことが、できてしまう状態」ともいえます。
脆弱性があるパソコンやウェブサイトを利用した場合、攻撃を受けてサーバー内の重要な情報が漏えいしたり、ユーザー自身しか見られないはずの大切な情報が他の人に見られてしまったり、サービス自体が使えなくなったりなどの被害を受ける可能性があります。

画像
ログイン後に秘密情報が閲覧できるシステムが脆弱な仕様になっていた場合、秘密情報の書いてあるURLに直接アクセスすることで閲覧できてしまうことがあります

「弱点を作りこまない」システム開発をするために

徳丸さん:
脆弱性を突かれ、万が一サービスが停止したり、自社のウェブサイトを経由して情報を盗まれたりすると、お客様には多大な迷惑がかかり、社会からの信頼は損なわれて、事業の継続にも影響が出る恐れがあります。それを防ぐためにも、システムを開発する際には、 自社で開発している部分だけではなく、システム構築に利用しているオープンソースソフトウエアの脆弱性対策も必要です。

年々、攻撃の手法が変化する中、脆弱性のないシステムを開発するには、よくある攻撃パターンを知っておくことが大切です。よくあるパターンを知っていれば、ある程度推測ができるからです。たとえば、「安全なウェブサイトの作り方」に記載されている脆弱性の内容については知っておくとよいと思います。
参考)安全なウェブサイトの作り方(IPA)

とはいえ、プログラムの作り方や環境が変わっていくことで脆弱性の種類や攻撃の手法も変化し続けています。よくある攻撃パターンを知るだけではなく、継続して最新情報を確認し、対応し続ける必要があります。

また、開発者は脆弱性に関連する情報を、製品ベンダーからの情報や、公的機関が注意喚起を目的に運営するサイト、ニュースサイトなどから収集し続ける必要もあります。ですが、検索エンジンで上位に上がってきたものが必ずしも信頼に値するとは限らない場合もあるため、情報源の信頼性をどう見極めるかが非常に大切です。
参考)重要なセキュリティ情報一覧(IPA)

画像
画像
具体的にどのような攻撃がされるのかコードを表示しながら説明を受ける時間もありました

サイバー攻撃による被害を受けないためにできること

では、サービスを利用するユーザーがサイバー攻撃の被害を受けないためにできることはあるのでしょうか? ヤフーで情報セキュリティ問題を専門に扱う、インシデント対応チーム(CISO室:Chief Information Security Officer)の担当者に聞きました。

CISO室 冨川:
自宅や職場で利用しているパソコンのOSやソフトウェアのアップデート情報を必ず確認し、常に最新版にしてください。つい、後回しにしてしまっている方もいらっしゃるかもしれませんが、アップデートによって脆弱性の修正プログラムを適用できることもあるので、攻撃の被害を受けないためにぜひ行ってください。

ヤフーのセキュリティへの取り組み 今後の展望

CISO室 鈴木:
2020年1月中までに、エンジニア全員の受講と合格を目指しています。
この研修は、言語に依存しないセキュアプログラミング知識を学ぶ共通編と、言語(Java、Node.js、PHP)に応じた知識を学ぶ言語編の2編に分かれていて、すべて修了するまでには約10時間かかります。
毎年すべての内容を受講しなおすのは難しいと考えているので、来年度以降は、新しい脅威や脆弱性などの新しい情報を学び続けるための、知識アップデート講座を継続して行っていく予定です。
また、エンジニア以外の社員、たとえばヤフーのサービス責任者や企画担当者を対象にした研修も用意しようと考えています。

CISO室 日野:
2013年より、システム監査の一環としてセキュリティ専門業者による外部からの疑似攻撃を行う脆弱性診断を開始しました。2017年からはYJ-CSIRT(※)に移管し、ヤフーのサービス、ウェブサイトに脆弱性がないかを定期的に確認し、問題を見つけたらサービスに修正を促す役割を担っています。
ただ、開発者にセキュアなプログラミングを学ぶ機会は提供できていなかったためCTO(Chief Technology Officer)と相談し「脆弱性をプログラムに作りこまないことがユーザーに安全・安心なサービスをご利用いただくことにつながる。ぜひ、セキュアプログラミング研修を推進しよう」という話になりました。
その後、試行錯誤を重ね、3つの標準プログラミング言語への対応や運用フローが確立してきたことから、この研修をプログラミングに携わっている社員全員を対象に実施しました。

システムを設計・開発する段階で脆弱性対策をしっかり行うこと、サービスの公開後は新たな脆弱性の確認・対応を継続することで、上流・下流ともに守りを固め、ユーザーのみなさまに安心してサービスをご利用いただけると思っています。

※YJ-CSIRT(ワイジェイシーサート):Yahoo! JAPAN Computer Security Incident Response Team

画像

【関連リンク】