セキュリティ

セキュリティプログラミング

投稿日:

セキュリティプログラミングとは、ソフトウェア開発において、脆弱性を作り込まないように安全な実装を行うことを意味します。目的は、外部からの攻撃や内部不正による情報漏えい、改ざん、サービス停止を防ぐことです。

■ セキュアコーディングの基準

セキュアコーディングのための主なポイントは以下の通りです。

 ・入力値の検証(バリデーション)
 ・バッファオーバーフロー対策
 ・エラーメッセージに機密情報を含めない
 ・安全な乱数生成(rand()ではなく暗号論的乱数)

これらを規定した代表的な基準には以下があります。

基準 特徴主な適用分野
CERT Secure Coding Standard 言語別の詳細な安全実装ルールC/C++、Javaなどの組込みや業務アプリ
MISRA C / MISRA C++安全性重視の組込みシステム向けルール自動車・産業機器
OWASP Secure Coding PracticesWebアプリ開発での安全な実装指針Webアプリケーション

これらを中心に、プロジェクトの特徴を踏まえ、コーディング規約として整理します。
基準の沿ったプログラミングが実施されているかを確認するには、有識者によるコーディングレビューだけでは不十分であり、解析ツールを活用する必要があります。

■ 静的解析(SAST: Static Application Security Testing)

プログラムを実行せずにソースコードやバイナリを解析し、脆弱性やバグを検出する手法です。
コードの全体を網羅的に解析できます。プログラミング段階など開発の早い段階で脆弱性を発見可能です。

代表的ツールとしては、以下があります。

・SonarQube(多言語対応、品質分析)
・Coverity(深いコード解析、産業系で利用)
・Fortify SCA
・CodeQL(GitHubが提供)

■ 動的解析(DAST: Dynamic Application Security Testing)

アプリケーションを実行し、動作中に脆弱性を検出する手法。実際の攻撃シナリオを模してテストします。実際の挙動を確認できます。実行に時間とテスト環境が必要となるため、結合テストやシステムテストにおいて実施します。

代表的ツールとしては、以下があります。

・OWASP ZAP(Webアプリの自動診断)
・Burp Suite(Webセキュリティ診断)
・AppScan
・Arachni

■ まとめ

セキュリティプログラミングは、脆弱性の発生を未然に防ぎ、安全なソフトウェアを作るための基本です。以下のように、セキュアコーディング規約の遵守、静的解析・動的解析の活用、そして運用時まで見据えた設計が不可欠です。

・設計段階での安全性考慮(入力検証、エラー処理、暗号化)
・実装時のコーディング規約遵守(OWASP、CERTなど)
・テスト工程での自動化(SAST、DAST、ペネトレーションテスト)
・リリース後の継続的改善(脆弱性対応、アップデート)

セキュリティは「後付け」ではなく、開発ライフサイクル全体に組み込む文化が必要です。

-セキュリティ

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

リリースと外部認証

本番環境への移行前には、単にコードをデプロイするだけでなく、リスクを最小化しつつ安定稼働を確保するための準備が必要です。 ■ 最終テスト システムテストが完了した後、ユーザによる受け入れテスト(UAT …

「セキュリティマネジメントマニュアル」公開

セキュリティ対策といっても、イメージできない方々も多いでしょう。 セキュリティ対策を実施するためのセキュリティマネジメントを理解するためのマニュアルを作成しました。 基本方針(トップマネジメント)と情 …

はじめての「Webセキュリティ」入門

情報セキュリティの中で、最も注視される領域がインターネットを使うWebシステムのセキュリティです。拡大しているECサイトやWebサービスでは、誰でも使える「インターネット」を介してアクセスされます。顧 …

防御のための「セキュリティ攻撃」入門

ソフトウェアに脆弱性があっても、通常の機能を使う上では全く問題はありません。しかし、ソフトウェア設計者、プログラマーの関心や意識のない機能外の箇所で、悪意のある処理を実行できるアクセスが可能となってし …

セキュリティのためのテスト

セキュリティテストとは、システムやアプリケーションのセキュリティ対策が適切に機能しているかを検証し、脆弱性や設定不備を特定するプロセスです。目的は、攻撃を受ける前に弱点を見つけ、対策を講じることです。 …

Chinese (Simplified)Chinese (Traditional)EnglishFilipinoFrenchGermanHindiJapaneseKoreanMalayThaiVietnamese