セキュアプログラミングとは?設計原則や学習ツールを紹介!
セキュアプログラミングとは?

システムやアプリケーションには脆弱性が生じやすいもの。セキュアプログラミングとは、そのような脆弱性の原因を事前に取り除くプログラミングのことで、システムダウン、情報漏洩といったリスクを軽減します。
セキュアプログラミングの設計における8原則とは?
セキュアプログラミングについて考えるとき、ぜひ参考にしたいのが1975年に発表された「Saltzer & Schroeder」の8原則です。40年以上も前の古い時代に発表された原則ですが、現在も有効であると多くの設計で参照されています。
効率的なメカニズム
できるだけシンプルで小さな設計を心がけること。
フェイルセーフなデフォルト
不要なものを排除するのではなく、必要なものを許す判断が基準となること。誤操作・誤動作による障害が発生したとき、常に安全側に制御する。
完全な仲介
セキュリティメカニズムが漏れなく適用されるようにし、あらゆるオブジェクトに対するすべての処理に関与すること。
オープンな設計
設計内容を隠すことで、守れるようにはしないこと。常にオープンな設計であること。
権限の分離
複数の鍵を使って保護する。1つの鍵を持つ者にアクセスを許す仕組みよりも、強固で柔軟となります。
最小限の権限
すべてのプログラムとユーザは、業務を遂行するために必要な最小の権限の組み合わせを使って操作を行うこと。
共通メカニズムの最小化
複数のユーザが共有し依存する仕組みの規模を最小限にすること。
心理学的受容性
ユーザが日常的に無意識のうちに保護の仕組みを正しく利用することが大切。そのために、使いやすさを優先した設計が重要です。
セキュアプログラミングの実装における10原則とは?
セキュアプログラミングの実装原則として有名な「CERT Top 10 Secure Coding Practices」について紹介しましょう。
入力を検証する
信頼されないデータソースからのすべての入力について検証すること。適切な入力検証によって、ソフトウェアの脆弱性を緩和できます。
コンパイラの警告を注視する
コンパイラはプログラムコードに対して行われる精査で、コンパイラの警告に注意を払うこと。
セキュリティポリシー実現のためのプログラム構成/設計を行う
それぞれのアプリケーションやシステムで決めたセキュリティポリシーに従って、ソフトウェアアーキテクチャを作成・実装し、そのポリシーを適用するソフトウェアを設計すること。
シンプルなプログラムを心がける
常にシンプルで単純明快な設計であることが、開発工程でのミスの可能性を低くすることに繋がります。できる限り、シンプルで小さなデザインを心がけること。
アクセス拒否をデフォルトにする
「セキュアプログラミングの設計における8原則」のフェイルセーフなデフォルトと同じ意図で、デフォルトでアクセスを拒否する設計にすること。
最小特権の原則を順守する
どのプロセスでも、実行に必要な最低限の特権で実行すること。
他のシステムに送信するデータは無害化しておく
外部に渡すデータは、渡した先で問題とならないよう無害化しておくこと。
多層防御を実践する
複数の防御的な戦略でリスク管理すること。仮にひとつの対策しか行っておらず、それが不完全だった場合、被害が生じてしまいます。しかし防衛の層を複数設置しておくことで、よりセキュアになります。
効果的な品質保証テクニックを利用する
Fuzz テスト、侵入テスト、およびソースコードの監査など、効果的な品質保証テクニックをプログラムに組み込むこと。
セキュアコーディング標準を採用する
ターゲット開発言語やプラットフォームのためのセキュアコーディング標準を適用し、共通的な対応で効率化すること。
セキュリティエンジニアが身につけるべきプログラミング言語とは?
使用頻度や脆弱性などの観点から、セキュリティエンジニアがぜひ学んでおきたいプログラミング言語があります。
PHP
多くのWebサイトで使われているのが、PHP。使用頻度が高いため、セキュリティエンジニアはPHPについて学習して身につけておくといいでしょう。
JavaScript
JavaScript もWebサイトやシステム開発に多く使われています。セキュリティエンジニアとして触れる可能性が高くなるので、学習しておくのがおすすめです。
C言語・C++
汎用性と自由度が高いことから、さまざまな分野で活用されているC言語・C++。セキュリティ面についても配慮したプログラミングが必要となります。
Python
大手動画サイトや検索サイトなどで使われているのが、Pythonです。近年はAIでも使われることが増えてきており、セキュリティエンジニアなら触れる可能性が高い言語でしょう。
Pythonに関する関連サイト: https://www.brain-gate.net/content/column/system-program-python/
セキュアプログラミングにおける注意点
セキュアプログラミングで注意しておきたいのが、入力と出力のどちらかにセキュリティ対策を行えばいいと思われがちなこと。しかし入力と出力は、それぞれに独立したセキュリティ対策を施すことが重要です。
セキュアプログラミングの学習方法

セキュアプログラミングについて、どのように学習していけばいいでしょうか?
プログラミングスクール
プログラマーをはじめとしたIT業界の人材の需要が高いことから、プログラミングスクールやオンラインスクールの選択肢が増えています。受講料はかかりますが、プロのエンジニアのもと、わかりやすくセキュアプログラミングについて指導してもらえるでしょう。
勉強会やセミナーに参加する
エンジニア向けに数多くの勉強会やセミナーも開催されています。目的にあったセミナーがあれば、それを受講するというのもいいでしょう。都市部で開催されることが多いですが、最近はオンラインでのセミナーも増えています。
セキュリティエンジニア向け学習サイト・参考スライド
独学でセキュアプログラミングについて学習したい方は、学習サイトやスライドなどを利用してもいいでしょう。
IPA セキュア・プログラミング講座
IPA(独立行政法人情報処理推進機構)がオンラインで公開している講座です。基本原則から、セキュアプログラミングの基本を学べます。
https://www.ipa.go.jp/security/awareness/vendor/programming/index.html
安全なウェブサイトの作り方
同じくIPAが公開しているもので、セキュリティ実装チェックリストもあります。
https://www.ipa.go.jp/security/vuln/websecurity.html
セキュアコーディング
JPCERTコーディネーションセンターが公開している資料です。コーディングのルールなど実践的な内容を網羅しています。
https://www.jpcert.or.jp/securecoding/
セキュアプログラミングを学べる本
体系的に学ぶ 安全なWebアプリケーションの作り方
Webアプリケーションにはなぜ脆弱性が生まれ、脆弱性を解消するにはどうプログラミングすればいいか、原理と具体的な対処方法を学べます。
https://www.amazon.co.jp/dp/4797393165
セキュアプログラミング―失敗から学ぶ設計・実装・運用・管理
過去に起きたインシデントとそこから学ぶべき教訓をあげながら、セキュアプログラミングについて解説した1冊。
https://www.amazon.co.jp/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E2%80%95%E5%A4%B1%E6%95%97%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E3%83%BB%E5%AE%9F%E8%A3%85%E3%83%BB%E9%81%8B%E7%94%A8%E3%83%BB%E7%AE%A1%E7%90%86-%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%BBG-%E3%82%B0%E3%83%A9%E3%83%95/dp/4873111757
セキュア・バイ・デザイン 安全なソフトウェア設計
ソフトウェア開発者向けに、セキュアプログラミングについて実例をもとに、設計の原則について紹介した本です。
https://www.amazon.co.jp/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%BB%E3%83%90%E3%82%A4%E3%83%BB%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3-Dan-Bergh-Johnsson/dp/483997599X/ref=d_pd_sbs_sccl_2_2/357-3541850-6796468?pd_rd_w=fFBl2&content-id=amzn1.sym.8ad95213-acb7-4cad-bdb7-ec23df0c8556&pf_rd_p=8ad95213-acb7-4cad-bdb7-ec23df0c8556&pf_rd_r=BC48SNJNWKQYJ54J3MY2&pd_rd_wg=5LyEw&pd_rd_r=47e31f14-5fca-49e5-aaee-d36db4fc6041&pd_rd_i=483997599X&psc=1
セキュリティエンジニア向けの資格「情報処理完全確保支援士」とは?
セキュアプログラミングについて学習したら、ぜひ「情報処理完全確保支援士」の資格試験を受けてはどうでしょう。これはセキュリティエンジニア向けの国家資格で、セキュリティ知識やシステムの設計・開発などのスキルを証明するものです。
セキュアプログラミングについて学ぼう
どんなシステムやアプリケーションでも、セキュアなものであることの重要性がますます求められるようになっています。それとともにセキュアプログラミングについて理解し、設計できるエンジニアが重宝されています。ぜひこのような知識を身につけて、セキュアエンジニアを目指してはいかがでしょうか。
カテゴリ
おすすめコラム
セキュアプログラミングとは?設計原則や学習ツールを紹介!のページです。ITエンジニア・移動体通信エンジニア(技術者)の派遣求人ならブレーンゲート。株式会社ブレーンネットはシステムエンジニアやネットワークエンジニア、プログラマーの派遣・転職をサポートいたします。