セキュアコーディングとは?目的や必要なスキルなどを解説

システムを構築する上で、コーディングの指針となる「セキュアコーディング」。

システムやソフトウェアを開発したとき、脆弱性があると、サイバー攻撃の標的となってしまいます。

これまでは、重要な情報をネットワークから切り離すことで対策していましたが、クラウドサービスの登場もあり、それだけでは対応が難しくなってしまいました。

そのような状況を受けて、セキュアコーディングは、脆弱性を回避するコーディングによって、サイバー攻撃に強いシステムを開発することを目標とします。

この記事では、セキュアコーディングがどのようなものなのか、必要性や対処すべきリスクについて解説します。

合わせて、開発段階ごとに着目するポイントと、セキュアコーディング実現のために必要なスキルについても見ていきましょう。

セキュアコーディングとは

セキュア(secure)は「安心な」という意味の英単語ですが、では「安心なコーディング」を意味するセキュアコーディングとは、どのようなものなのでしょうか。

ここでは、セキュアコーディングの意味と、その必要性について解説します。

セキュアコーディング

セキュアコーディングは「セキュアプログラミング」とも呼ばれ、サイバー攻撃に強いコードを書くことを指します。

サイバー攻撃は、設計ミスなどで発生するシステムの脆弱性を突いてきます。

サイバー攻撃を受けると、個人情報をはじめとする重要なデータが外部に流出してしまいます。

そのような被害に遭わないために、サイバー攻撃から身を守るためのコーディングが求められています。

セキュアコーディングは、「セキュアな」コードを書くための作法であり、規約でもあるのです。

ここで、ITシステムにおける「セキュア(安心な)」について、少し解説します。

IT業界においてセキュアという言葉は「セキュリティーが担保されている」という状態を指します。

セキュアなシステムを実現するためには、サイバー攻撃に強いシステムを構築すること以外にも、運用ルールの策定や保守点検が必要です。

セキュアコーディングはその中で、安全なソフトウェアの設計・構築を担っています。

セキュアコーディングの必要性

これまでのセキュリティの考え方では、重要なデータをネットワークから切り離すというものでした。

しかし、今ではほとんどのデータはシステム上で運用されており、このシステムの脆弱性を狙ったサイバー攻撃が多発しています。

近年はクラウドサービスの発展もあり、そもそもデータとネットワークを切り離すことは難しいのが現状です。

そこで、これまでのセキュリティ対策だけではなく、プログラムそのものの安全性がより重要になりました。

こうした流れを受けて、脆弱性を持たない、つまりはサイバー攻撃に付け入る隙を与えない「セキュアコーディング」という考え方が広まりました。

現在はどんなシステムであってもサイバー攻撃とは無関係ではいられないため、セキュアコーディングはより重要となっています。

セキュアコーディングが対処すべきリスク

サイバー攻撃からの防衛を目的とするセキュアコーディング。

ではセキュアコーディングは、具体的にはどのようなサイバー攻撃に対処すべきなのでしょうか。

ここでは、その代表的なサイバー攻撃について解説します。

SQLインジェクション攻撃

SQLインジェクション攻撃は、データベースに不正な命令をして、重要な情報を引き出す攻撃です。

SQLとはデータベースを操作するためのプログラミング言語で、Webフォームに入力された文字列とデータベース上の情報を照会する際にも使用されます。

SQLインジェクション攻撃では、悪意のあるSQL文をWebフォームなどに入力し、データベースに実行させることで、情報を不正に入手します。

このような攻撃を防ぐためには、WebフォームにSQL文を入力できないように設計するなどの対策が考えられます。

コマンドインジェクション攻撃

コマンドインジェクション攻撃もSQLインジェクションと同じく、Webフォームなどから悪意のある命令を送ることで、システムを不正に操作する攻撃です。

ここで使われるのは「シェルコマンド」といって、コンピュータシステムに対して命令をするためのプログラミング言語です。

しかしシェルコマンドはSQLと違い、システムの設定変更といった、より高度な命令を実行できます。

コマンドインジェクション攻撃では、データベースだけでなく、システム全般が標的となるため、ファイルやシステムの改竄、ウイルスの侵入といった被害が想定されます。

コマンドインジェクション攻撃の対策としては、やはりフォームにおける想定外の入力を無効にすることが重要です。

パラメータ改竄

インターネット上の情報にアクセスするために用いるURL。

URLの末尾にある「?」以降にはパラメータと呼ばれる情報が書かれていて、これによってシステム内のさまざまな情報にアクセスすることができます。

パラメータ改竄は、URLのパラメータをアドレスバー上から書き換えることで、通常では閲覧できない情報にアクセスする攻撃です。

例えば、あるWebサイトの会員ページを表すパラメータが「user=*~~」であったとします。

ここで何の対策もしていないシステムの場合は、末尾の「~~」を別のパラメータに改竄して、他人の会員ページを閲覧することができてしまいます。

URLはさまざまな場所に記録される上に、パラメータ改竄は容易であるため、重要な情報はPOSTメソッドで送信するなど、設計段階から細かな対策が求められます。

URL上に記載されるパラメータを、POSTに対してGETパラメータなどと呼びますが、技術力が低いエンジニアが設計した時に、重要な情報をGETに記載してしまう可能性があります。

特に最近は
「1ヶ月の学習で、WEBエンジニアに転職!」
というような、短期間で未経験からエンジニア転職を勧めるような広告をよく見かけます。

このようなエンジニアが、少人数のプロジェクトに参画した場合など、このような問題が起きる可能性があるでしょう。

セキュアコーディングにおける開発段階ごとのポイント

セキュアコーディングは、サイバー攻撃に強いシステムを構築するためにおこなわれます。

実際の開発において、セキュアコーディングとしてどのようなことが考慮されているのでしょうか。

ここでは、開発段階ごとに着目されるポイントをかんたんに解説します。

要件定義

要件定義の段階では、これから開発するシステムの特徴や想定される運用環境から、セキュアコーディングで対処するべき脆弱性をまとめて、対策を練ります。

どのようなサイバー攻撃が想定されるか、あるいはどの程度のセキュリティが要求されているかによって、対処する内容は異なります。

設計

セキュアコーディングを実現する設計原則として、カーネギーメロン大学が公開している
「Top 10 Secure Coding Practices」
が広く知られています。

多くのセキュアコーディングでは、ここで定められた原則を参考にして、コーディング規約が策定されます。

特に、複数のプログラミング言語を用いる設計の場合、言語ごとに固有の脆弱性があるため、言語の脆弱性を避けたコーディングを徹底する必要があります。

開発

開発の段階では、設計の際に定められたコーディング規約が順守されているかを監視することが大切です。

セキュアコーディングでは、フォーム入力やデータアクセスにおいて、しっかりと対策がなされているかがポイントです。

コードレビューなどを用いて、脆弱性が生まれていないかを確認していくことが推奨されています。

テスト

テスト段階では、要件定義で想定したサイバー攻撃を開発システムに対しておこなうことで、セキュアコーディングによる対策が有効であるかのセキュリティテストをします。

ここでは、さまざまな尺度からシステムのセキュリティを評価することが重要となります。

セキュアコーディングを実現するためのスキル

セキュアコーディングは、サイバー攻撃に強いシステムを構築するための手法です。

では、通常のコーディングと比べて、セキュアコーディングを実現するためには、どのようなスキルが求められるのでしょうか。

IT全般の知識

まずは一般のコーディングでも大切な、IT全般の知識が求められます。

セキュアコーディングではさまざまなサイバー攻撃を想定して、対策を立てる必要があるため、さらに広く深い知識がなければなりません。

具体的には、プログラミングスキル以外にも、サーバやネットワーク、データベース、OSといったITインフラにまつわる知識が重要です。

サーバやネットワークの知識が無ければパラメータ改竄に対応することは難しく、データベースの知識が無いとSQLインジェクション攻撃を防ぐことができません。

このように、セキュアコーディングは、単純なプログラミングスキルだけでなく、IT全般への深い理解が求められる手法です。

セキュリティー技術への知識

セキュアコーディングにおいては、サイバー攻撃やセキュリティ対策の実例、さらには暗号化といった、セキュリティ技術にまつわる知識も不可欠です。

セキュリティの分野においては、脆弱性や新たな攻撃手法が日々発見されるため、常に最新の動向を追っていなければなりません。

また、古い暗号はすでに解読されていることが多いため、暗号化技術についても、知識のアップデートが必要です。

ITにまつわる法律知識

ITセキュリティについては、日本でも法整備が進められており、すでに多くの法律が制定されています。

セキュアコーディングの方針や情報の取り扱い方法を策定する際には、セキュリティにまつわる法律をもとにする必要があります。

また、万が一、情報流出が発生した場合の対処も、法律に則っておこなわなければなりません。

セキュアコーディングを実現する上では、セキュリティ関連の法律を知っておくが大切です。

最新の電子機器に関する知識

最近は、色々な機器がIoTによってネット接続が可能になっています。

通信を行うということは、それだけセキュリティリスクが増えるとも捉えることが出来ます。

そのため、単なるシステムの知識だけではなく、どんどんと新しく開発されるハードウェアに関する知識も必要になります。

新しい攻撃手法に関する知識

セキュリティの世界は、「いたちごっこ」と言われる事が多いです。

守る側は、最善の守りを築き、それに対抗する攻撃方法が模索され、突破されれば更に新しい防御手法を探す。

この様に、常に攻撃者と防御者がせめぎ合っているため、最新の攻撃手法について学ぶ必要性があります。

監視に関する知識

セキュアコーディングと切っても切れない関係なのが、「監視・運用業務」です。

どんなシステムも、重要なのは開発段階ではなく、実際にシステムが稼働した後です。

運用監視においても、十分な知識や準備が必要になります。

例えば、「適切なログの出力」。

システム開発においては、このログの出力の方法は、エンジニアによって異なります。

詳細なログを出力することは、問題が起きた際に、解決までの時間を短縮してくれます。

一方で、多量のログが残っていると、
「必要な情報が探しにくい」
「ログの保存領域を無駄に消費する」
などのデメリットも存在します。

そのため、運用監視の際の仕組みに関しても、設計段階で十分に思案する必要があるのです。

他にも、
・定期的に状態を確認する監視の仕組み
・もしもバグが起きた時の最善の対処
・必要なデータのバックアップや復旧マニュアル
こういった点も、設計の段階から必要になります。

安心安全なシステム開発はAMELAに

今回は、セキュアコーディングについて見てきました。

システムのセキュリティに関しては、年々重要性が増しています。

それは、クラウドサービスの多様化により、様々な重要情報が、ネット上に保管されるなどの、時代の変化が一つの要因でしょう。

こういった時代で、
「単にシステムを作る」
という企業が多いのも事実です。

AMELAでは、セキュアコーディングを意識した、最適な設計・開発を行っています。

海外の優秀なエンジニアを参画させる「オフショア開発」では、通常の開発に比べて、
・優秀なエンジニアが低単価で開発してくれる
・同じ納期で、多くの人員を導入できる
・高品質なシステムを安価に依頼できる
などのメリットがあります。

失敗が許されない「セキュリティ」という分野こそ、高品質なオフショア開発を活用してみてはいかがでしょうか。