はじめに
皆様いかがお過ごしでしょうか!プロダクト開発本部技術部ペイメントシステム課の yoponpon と申します。主にサブスクペイの技術基盤を見ております。 今回はあらゆるセキュリティ対策をしているサブスクペイについて、その対策の一部であるセキュアコーディング教育の文化について紹介をいたします。
セキュアコーディングとは
※まとまった公式な内容が見当たらなかったのでいくつかのサイトでの説明をまとめさせていただきました セキュアコーディングは、サービスやシステムへの悪意のある攻撃、マルウェアに対してその攻撃に耐えうるコーディングをすることを指します。例えば SQLインジェクション、XSS、CSRF などの攻撃に対策されたプログラム手法となります。 一般的な攻撃手法であれば Web Application Firewall や何かしらのソリューションで防ぐことも可能ですがアプリケーションのプログラム側で対策が求められる場合もあります。
サブスクペイにおけるセキュアコーディング教育の目的
サブスクペイでは個人情報やカード番号を保持しており PCI DSS へ準拠したシステムの構築が求められます。 その一環で セキュアコーディング教育の実施が求められております。 教育を行うことによりセキュリティ脆弱性に対する理解を深めてサービスの開発を行うメンバー全員がセキュリティ対策を講じてプログラミングを行えるようにすることを目的としております。
具体的なプロセスについて
サブスクペイのセキュアコーディング教育は定期的に実施をしており新規メンバー参入時、および年に一度ほど実施をしております。対象はサブスクペイの開発に携わる全員となっております。 直近は比較的に新規参入メンバーに教育者を実施していただくパターンが多いです。 すでにセキュアコーディングを把握しているメンバーが教育者になることもあるのですが、新規参入メンバーに教育を実施していただくことで、教育に必要な学習や事前準備を通して新規参入者がより内容を把握できると見込んでいるためです。
実施方法は、基本は教育者におまかせする形を取っております。数時間を押さえて会議形式で実施する形が基本となっておりますが、その中で輪読会形式、過去にはハンズオン形式などでセキュアコーディング教育を実施しました。表現としてはセキュアコーディング勉強会の方が伝わりやすいかもしれないですね。
具体的な内容について
教育資料のベースは IPAの安全なWebサイトの作り方 を利用しております。 この書籍の中で紹介されているすべての脆弱性について全員で理解を深める勉強会を実施しております。過去には OWASP top Ten で上位にあるものを取り込んで勉強会を実施したパターンもあります。
具体的には以下のような攻撃手法を把握および学習します。
- SQL インジェクション
- OS コマンド・インジェクション
- パス名パラメータの未チェック/ディレクトリ・トラバーサル
- セッション管理の不備
- クロスサイト・スクリプティング
- CSRF(クロスサイト・リクエスト・フォージェリ)
- HTTP ヘッダ・インジェクション
- メールヘッダ・インジェクション
- クリックジャッキング
- バッファオーバーフロー
この本の中では攻撃手法の説明だけでなく、それに対する根本的対策、保険的対策がまとめられており学習資料としてはとてもわかり易いです。 サブスクペイはこれらに追加でサブスクペイでの対策方法(プログラミング言語やフレームワークによって異なる部分)の共有も含めて実施しております。具体例の提示をすることによってアプリケーションの具体実装に落とし込めるようにしております。 また、具体実装を考えることによって言語やフレームワークでどこまで脆弱性対策をカバーしていて、どこから自分たちで実装をする必要があるのかを理解することができました。
その他の対策について
サブスクペイでは上記のような定期的な教育を実施しつつ日々の開発の中で、一般的なコードレビュー、セキュアコーディングレビューを実施しております。セキュアコーディングレビューは上記の教育で確認した攻撃対策がなされているかをチェック項目形式でレビューしております。
話はそれますが
IPA セキュア・プログラミング講座 もおすすめです。セキュアプログラミングに対して根本的な考え方や設計原則が学習できます。例えば以下の「Saltzer & Schroederの8原則」についても解説をしております。
- Economy of mechanism:効率的なメカニズム
- 単純で小さな設計を心がける。
- Fail-safe defaults:フェイルセーフなデフォルト
- 必要ないものを排除するのではなく、必要なものを許す判断を基本とする。
- Complete mediation:完全な仲介
- あらゆるオブジェクトに対するすべての処理に関与する。
- Open design:オープンな設計
- 設計内容を秘密していることに頼らない。
- Separation of privilege:権限の分離
- 1つの鍵を持つ者にアクセスを許してしまう仕組みよりも複数の鍵を使って保護する方が、強固だし柔軟でもある。
- Least privilege:最小限の権限
- システムのすべてのプログラムおよびすべてのユーザは、業務を遂行するために必要な最小の権限の組み合わせを使って操作を行うべきである。
- Least common mechanism:共通メカニズムの最小化
- 複数のユーザが共有し依存する仕組みの規模を最小限に押える。
- Psychological acceptability:心理学的受容性
- ユーザが日常的に無意識のうちに保護の仕組みを正しく利用できるように、使いやすさを優先した設計が重要である。
We are hiring!!
サブスクペイでのセキュアコーディング教育文化については以上となります。 アプリケーションの開発の中で重要となってくるセキュリティ対策について一緒にスキルアップしていきませんか? ROBOT PAYMENTでは一緒に働く仲間を募集しています!!! speakerdeck.com www.robotpayment.co.jp 🎉twitter採用担当アカウント開設!🎉どんどん情報発信します!!