「セキュアプログラミング開発を学習するための第一歩」を受けてみた
セキュアプログラミング開発を学習するための最初の一歩
主催:e-life : アプリケーションセキュリティの診断をやってる。
はじめに
セキュリティ技術者はどの程度欲しがられてるか?
エージェントはセキュリティ関連も幅が広くて、「セキュリティの仕事したいです」とか抜かしても冗談にしかならない。
OWASP だと 12 のセキュリティ対策のビジネスがある。と言ってる。
で、スキルもバラバラなので、基準を設けてみた
で、そこから抜粋とかしながら、単純に「こうすればいい」ではなく、本当の基礎からどういう勉強法をすべきかを議論する。
というかこのセキュリティを個々のプログラマに求めるのはきっとしんどいと思う。
あくまで持論ではあるけど、開発チームがそれを意識しなくてもセキュアなものしか作れないって環境を整えるのが大切なんじゃないかと?
だって、いちいち気にしないと作れないなんて、学習コストも開発効率も悪いに決まっている。
よって、セキュリティ部分の分離は当たり前、フレームワークに組み込んで、開発者から意識されないようにしなければならない。
セキュリティ関連用語
機密/安全/可用,攻撃/認証/認可,脅威/脆弱性
こんなのITに携わるエンジニアなら基礎用語だった…。
基礎知識
- セキュリティ技術者とビジネス機能
- セキュリティ対策と基本的な概念
- 技術的な知識カテゴリ
- 報告書の作成
- セキュリティに関連する法律・規約
似たようなのに OWASP SAMM があんねん。
https://www.owasp.org/index.php/Category:Software_Assurance_Maturity_Model
「経営・開発・テスト・運用」の4つのカテゴリでそれぞれ3段階のセキュリティエンジニアのレベルを定義してる。
情報源
https://msdn.microsoft.com/ja-jp/library/cc402180.aspx
MSの情報源は特に丁寧。
基本要素
HTTP
- リクエストとレスポンス
ヘッダやボディの構成はセキュリティでも知っておくべき内容。
METHOD, Statusとか。Status は 403 とか適切に返さない方がいい>攻撃のヒントを与えてしまう。 - 認証
Basic/Digest なんかは基本 - セッション管理
報告書
例:CVSS(オープンで汎用的な評価方法)脆弱性の深刻度を定量的に比較できる。
JVN (脆弱性対策情報DB)とかで判断基準になってる。評価基準が6つ
- 攻撃元区分
- 攻撃条件の複雑さ
- 攻撃前での認証要否
- 機密性への影響
- 安全性への影響
- 可溶性への影響
法律・法規
不正アクセス禁止法、有名だよね?他人の ID/Pass 使った場合に適用。
威力業務妨害、犯罪予告などで、他人の業務を妨げた場合に適用。
不正指令的電磁気的記録に関する罪。要するにウィルス/ワーム/マルウェアで違法扱い。
個人情報保護法。個人情報保護を怠り、不正な管理で漏洩したら違法。
電子計算機損壊等業務妨害罪。使用目的に沿うべき動作をせずに、業務を妨害させたらダメ。DOS 攻撃とか。スパムとか。
情報源
- 本
- Web
- MSDN セキュリティディベトッパーセンター
https://msdn.microsoft.com/ja-jp/security/aa570330.aspx - Java セキュアコーディングスタンダード
https://www.jpcert.or.jp/java-rules/ - OWASP Cheat sheet series
https://www.owasp.org/index.php/OWASP_Cheat_Sheet_Series - OWASP Testing guide
https://www.owasp.org/index.php/OWASP_Testing_Project
- MSDN セキュリティディベトッパーセンター
最低知っておきたいセキュリティ問題点
NPO 日本ネットワークセキュリティ協会「セキュアシステム開発ガイドライン」項目から抜粋してちらほら。
対策手法から
- 入力検証および不正データ入力時の無効化
基本だよね、ユーザの入力するすべてのデータは悪意があると思ってチェックする。 - 認証・認可
なりすましとか、管理者権限の不正取得の防御はせんとね。
許可されてない操作は全部弾け。 - パスワードセッション情報
パスワードの難易度ルールとか、セッション寿命とか、アカウントロック機能とか。
ってかセッションに署名入れて改ざん防止とか説明してないけど…ここは - 機密情報暗号化
- 機密情報のアクセス制御と、情報漏洩問題
- 監査とログ記録
fail2ban 使ってる人どんだけいるかねぇ?
現象面から
- システムダウン・レスポンス低下
- なりすまし・否認防止策
否認防止:ばっくれられない証拠を出す。 - 情報漏洩対策
経路暗号化とか、漏れた場合の安全策、人でミスった時の情報漏洩 - 改ざん防止
コンテンツやデータ、通信経路の改ざんを防ぐ - ユーザへの被害対策
- 脆弱性対策
サーバとかネットワーク含めて - 内部者対策
オペミスとか、故意の違反者対策 - 全般的な対策、運用時の管理
攻撃検知・防御、監視・ログや、システム・アクセス・操作ログの運用し参照する分を明確化。
バックアップデータの保護策、セキュリティを維持・向上するための運用設計
診断ツールとか
- Telnet: まぁ TELNET だよなぁ?
- Fiddra2: Mac なら http://fiddler.wikidot.com/mono から。 Mono 必須。
- OWASP ZAP
っつーか Kali Linux 使えやって言いたい気がする。