「セキュアコーディングってよく聞くけどどういう意味?」
「セキュアコーディングって具体的に何に気をつければ良い?」
そんなお悩みをお持ちではありませんか?日々進化するハッキングなどから自社システムを守るには、セキュアコーディングが重要です。本記事では、セキュアコーディングの意味や10個の原則、必要なスキルについて解説します。
セキュアコーディングとは?
セキュアコーディングとは、いわゆるハッカーなどの悪い人の攻撃に備えた防御プログラムを書くことです。ハッカーはプログラムのバグや問題のある箇所を狙って攻撃してきます。彼らの目的は、プログラムから個人情報を抜き取り外部に販売することなどです。
このような被害を受けないためのプログラミング作法をセキュアコーディングと呼んでいます。なお、セキュアプログラミングと言われることも多いです。
セキュアとは?
セキュアととは主にIT業界で使われている用語で「セキュリティーが担保されているシステム」を指します。セキュアは英語のsecure(安心な)から来た言葉です。
セキュアコーディングはセキュアなソフトウェアの構築を目指すために行います。また、セキュアコーディングだけでなく、本人認証の導入やシステム運用ルールの制定なども並行して行い、セキュリティーを更に強化しなければいけない場合もあるでしょう。
※関連記事
【ソフトウェアテストとは】具体的な方法や7原則について解説
セキュアコーディングはどんな脅威から守るのか?
そもそもなぜセキュアコーディングを行う必要があるのでしょうか。理由はWebサービスは24時間インターネットと繋がっているため、悪い人から被害を受ける可能性が高いためです。たとえば、Webサービスから個人情報を抜き出して売る人などがいます。
具体的には、次のような方法でWebサービスから情報を抜き出しており、それぞれに対策を立てなくてはいけません。
-
- SQLインジェクション
- コマンドインジェクション
- パラメータ改ざん
1つ1つの攻撃手法について詳しく解説していきます。
1.SQLインジェクション
SQLとはデータベースを操作するための命令文のことです。データベースには、ユーザーの個人情報や企業の情報などが保管されることもあり、厳重に扱う必要があります。
SQLインジェクションは、SQL文をフォームなどに入力する攻撃手段です。プログラムに不備があると、フォームに入力されたSQL文が実行されてしまい、データベースが操作されてしまう可能性があります。もし、データを削除するSQL文を入力されてしまったら、大事な情報が消失してしまうかもしれません。
このような被害に合わないために、SQL文の入力を無効化する必要があります。
※関連記事
データベース開発とは?開発するメリットや注意点について徹底解説
2.コマンドインジェクション
コマンドインジェクションとは、フォームからシェルコマンド入力を行う攻撃手段です。シェルコマンドとは、コンピュータに指示を出すためのコマンドのことであり、たとえばファイルを削除したり、ソフトウェアの設定を変更したりすることができます。
SQLインジェクションは攻撃対象がデータベースのみでしたが、コマンドインジェクションはもっと広い範囲が攻撃対象となります。そのため、思いも寄らない被害が発生する可能性もあるでしょう。
たとえば、シェル操作によってファイルが改ざんされたり、ウイルスを紛れさせられたりすることが考えられます。このような被害に合わないために、やはりユーザーの特殊な入力を無効化しなくてはいけません。
3.パラメータ改ざん
パラメータ改ざんとは、URLのパラメーターを変更する攻撃手段です。
URLの「?」の後ろにはパラメーターがついていることがあります。プログラムはこのパラメーターを使って情報送受信を行っており、ECサイトやSNSなどのWebアプリにとっては必要不可欠なものです。
たとえばECサイトでは、商品番号のパラメーターをつけることで、その番号の商品購入ページを表示できるようになっていることがあります。
このパラメーターについて、ユーザーが勝手に変更することも可能です。パラメーターを変更した結果、まだ未発売の商品ページが表示されてしまう可能性もあります。
そのためWebアプリを開発する場合、ユーザーがパラメーターを改ざんした場合を考慮してプログラムを組む必要があるでしょう。
セキュアコーディングの10個の原則について
セキュアコーディングを行うことが重要と言っても、具体的にどのようなコーディングを行うべきか分からない方がほとんどでしょう。セキュアコーディングを行う際の参考になる資料として、「Top 10 Secure Coding Practices」というものがあります。こちらは、セキュアコーディングを行う際に意識すべきことをランキング形式でまとめたものです。
こちらの10個の原則について日本語でまとめました。
-
- バリデーションを行う
- コンパイラの警告を確認
- セキュリティーポリシーを実装する
- 設計はシンプルを心がける
- デフォルトで拒否する
- 最小特権の原則を守る
- 他のシステムに送信するデータはサニタイズ
- 多層防御を実践
- 品質保証技術を使用する
- セキュアコーディング標準を採用する
1つ1つの原則について詳しく解説していきます。
参考:Top 10 Secure Coding Practices
1.バリデーションを行う
バリデーションとはデータの妥当性を確認することです。具体的には、ユーザーが入力したデータの確認を行い、問題があればそのデータを読み込まないようにします。
たとえばフォームに入力された電話番号がしっかりと電話番号の形式で入力されているかをチェックすることなどです。バリデーションを正しく行えば、ユーザーの不正な入力も防止することができます。
2.コンパイラの警告を確認
コンパイラとはソースコードを機械語に翻訳する機械のことです。コンパイラは翻訳する際、ソースコードに問題があれば警告文を出してくれることがあります。
この警告文を無視せず根本的な解決を行うことで、セキュリティ上の問題の発見にも繋がるでしょう。
3.セキュリティーポリシーを実装する
セキュリティーポリシーとは、企業のセキュリティー対策の指針となるポリシーのことです。たとえば個人情報などの取り扱い方や、システム運用・保守を行う上で気をつけるべきことなどをポリシーとしてまとめます。
セキュリティーポリシーを実装することで、万が一外部からの攻撃を受けた場合、ウイルス感染の拡大などを極力防げる可能性があるでしょう。
4.設計はシンプルを心がける
システムの設計をシンプルにすることはセキュアコーディングにとっても重要です。なるべくシンプルにした方が、セキュリティーの問題も発見しやすくなります。
とはいえ、最近のシステムは求められる機能が多く、設計が複雑になってしまうこともあるでしょう。機能を維持しつつなるべく設計をシンプルにすることが重要になってきます。
※関連記事
ソフトウェアの開発工程を具体的に解説|流れや種類も漏れなく紹介
5.デフォルトで拒否する
デフォルトはコンピュータ分野において「初期設定」を意味します。デフォルトで拒否するとは、初期設定の時点でシステムのアクセスや操作などを全員禁止することです。そして、システムを使う人のみ、後からアクセスや操作を許可するようにします。
具体的には、システムへのアクセスを許可する人のリストを作成し、システムにそのリストを読み込ませ、リストに入っていない人のアクセスはブロックするようにします。
こうすることで、予期しない人からのアクセスを遮断することが可能です。このような仕組みをホワイトリスト方式と呼びます。
これとは逆に、ブラックリスト方式というものもあります。ブラックリスト方式とは、システムにアクセスさせてはいけない危険な人のリストを作成し、リストに入っている人のアクセスのみブロックする仕組みのことです。しかし、この方式ではリスト外の危険なアクセスはブロックできない可能性があります。
そのため、デフォルトで拒否するホワイトリスト方式が重要になってくるのです。
6.最小特権の原則を守る
最小権限の原則とは、目的に必要な最低限の機能しか与えないようにすることです。
たとえば、顧客管理システムをユーザーが使う場合、必要のない機能(画面のデザイン変更機能など)は使えないように設定します。
最小特権の原則を守ることでシステムの不正利用のリスクを減らすことが可能です。
7.他のシステムに送信するデータはサニタイズ
サニタイズとは「&」などの特殊文字を一般的な文字に変換することです。サニタイズを行うことで、SQLコマンドやシェルコマンドなどの入力は基本的には拒否できます。
サニタイズ処理はセキュアコーディングの基本と言えるでしょう。ユーザーが入力したデータはサニタイズすることを忘れないことが大切です。
8.多層防御を実践
多層防御とは複数の防御層を重ねることでセキュリティーを強化することです。
一般的には、入口・内部・出口の3階層で防御し、それぞれ別の観点からセキュリティー対策を実施することで、幅広い攻撃をカバーすることを目的とします。
9.品質保証技術を使用する
品質保証プログラムを活用することも大切です。外部のソースコード監査や脆弱性診断をセキュリティー対策として組み込みます。
外部の人にレビューしてもらうことで、思わぬセキュリティー上の問題を発見できる可能性があるでしょう。
10.セキュアコーディング標準を採用する
上記で紹介した9つの原則だけでなく、企業独自の規約を作ることも重要です。
開発言語やプラットフォームごとにセキュアコーディング標準を作り、外部からの幅広い攻撃に備えます。
セキュアコーディングに必要なスキル
最後に、セキュアコーディングに必要なスキルについて解説します。セキュアコーディングを行う際は、次の4つのスキルが必要です。
-
- ITスキル全般
- OS操作
- 暗号化に関する知識
- セキュリティー関連の法律知識
1つ1つのスキルについて詳しく解説していきます。
1.ITスキル全般
1つ目はITスキル全般です。
プログラミングやHTML・CSSはもちろん、サーバーやネットワーク、データベースなどのインフラ知識も備えている必要があります。たとえばデータベースの知識がないと、SQLインジェクションの対策を考えることができません。
2.OS操作
2つ目はOS操作です。
Webサーバーは主にLinuxOSを使うことが多いです。そのためLinuxコマンドの使い方やセキュリティー対策の知識をメインに備える必要があるでしょう。
3.暗号化に関する知識
3つ目は暗号化に関する知識です。
暗号化とは、第三者に通信内容などを解読できないように暗号に変換することです。暗号化はセキュリティー対策の1つとして広く活用されています。
暗号化に関しては最新のスキルを保有している必要があります。古い暗号化技術は、すでにハッカー達の間で攻略方法が共有されている恐れがあるためです。
4.セキュリティー関連の法律知識
4つ目はセキュリティー関連の法律知識です。
万が一セキュリティートラブルや個人情報の流出などの被害が発生した場合、法律に則った対処が必要になります。
また、社内で個人情報などを扱うルールを決める際も、セキュリティー関連の法律を元にする必要があるでしょう。
最後に
この記事で説明してきた内容をまとめると以下のとおりです。
-
- セキュアコーディングはどんな脅威から守るのか?:SQLインジェクション/コマンドインジェクション/パラメータ改ざん
- セキュアコーディングの10つの原則:バリデーションを行う/コンパイラの警告を確認/セキュリティーポリシーを実装する/設計はシンプルを心がける/デフォルトで拒否する/最小特権の原則を守る/他のシステムに送信するデータはサニタイズ/多層防御を実践/品質保証技術を使用する/セキュアコーディング標準を採用する
- セキュアコーディングに必要なスキル:ITスキル全般/OS操作/暗号に関する知識/セキュリティー関連の法律知識
セキュアコーディングにはプログラミングやサーバーに関する高度な技術が必要です。セキュリティーを保持したシステムを開発するには、開発実績が豊富な開発会社に依頼しましょう。
株式会社エイチビーラボでは、ベトナムに特化したオフショア開発サービスを提供しております。オフショア開発のノウハウが蓄積されており、システムに対する攻撃から身を守るセキュアなシステムの構築にも対応可能です。システム開発でお困りの方は、ぜひお気軽にお問い合わせください。ご相談から、開発、運用まで親身にサポートいたします。