セキュリティの基礎

これは [Tech Do Advent Calendar 2018](https://qiita.com/advent-calendar/2018/techdo) の21日目の記事です。

# はじめに

先日、サポーターズ勉強会で「[これだけは絶対覚えたいセキュリティ基礎講座](https://supporterzcolab.com/event/640/)」という内容で約80分話してきました。
この記事は、そこで [話した内容](https://speakerdeck.com/ariaki/the-basics-of-information-security) をもとに、セキュリティの基礎について改めてまとめます。
セキュリティに関する技術的な記事はたくさんありますが、初めて **セキュリティの考え方** に触れる記事は少ないため、これからエンジニアになられる方を対象に心構えをお伝えできればと思います。

# セキュリティの基礎を知る

## セキュリティリスク

### セキュリティリスクとは
セキュリティにおける **リスク** とは、未だ被害が発生していない潜在的なものを指します。
これに対して、実際にセキュリティ事故が具現化した状態を **インシデント** と呼びます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/184843/53e5e0ee-b848-fc0e-3df0-73e9d82fdba3.png" width=480>

### リスクの大きさ
リスクの大きさは以下の式で表すことができます。

```
リスクの大きさ = 脅威の程度 x 脆弱性の程度 x 資産価値
```

#### 脅威（きょうい）
脅威とは、個人や企業に損害や影響を与える要因です。
セキュリティリスクは可能性そのものを指しますが、脅威は**要因**を指します。
脅威を洗い出す際には、対象となる個人や組織に対して、①既に起こったことがあるもの（顕在的脅威）、②今後起こり得るもの（潜在的脅威）、の両側面から想定することが重要になります。

種類 | 分類 | 例
-----|-----|------
人為的脅威 | 意図的脅威 | 攻撃（不正侵入、ウイルス、改ざん、盗聴、なりすまし、等）
〃 | 偶発的脅威 | 人為的ミス、障害
環境的脅威 | - | 災害（地震、洪水、台風、火事、等）

#### 脆弱性（ぜいじゃくせい）
脆弱性とは、以下に示すような **不具合や設計上のミス** が原因となって発生した情報セキュリティ上の欠陥です。
セキュリティホールとも呼ばれ、脆弱性に対して **不正アクセスなどの攻撃を受ける** 可能性を有します。

種類 | 例
-----|------
物理的脆弱性 | 建物などの設備やハードウェアに存在する<br>（建物構造、機器故障、盗難、紛失、等）
人的脆弱性 | 組織や人、運用管理に存在する<br>（組織管理、人、問題対処法、等）
技術的脆弱性 | プログラム上に存在する<br>（アプリケーション、プロトコル、等）

#### 資産
資産とは、個人や企業が保有する **価値** そのものを指します。
直接的な金銭的価値に加え、消失/流出等によってどの程度の直接/間接的被害を受けるかといった部分までを指します。

種類 | 例
-----|------
情報 | データベース、データファイル、設計書、等
ソフトウェア | 業務用ソフト、アプリケーションソフト、等
ハードウェア | コンピュータ、通信装置、記憶媒体、等
サービス | 電源、暖房、照明、通信網、等
人 | 人そのもの

#### リスクの図式
ここまでで紹介した、「脅威」「脆弱性」「資産」を元に図示すると以下のようになります。
それぞれがどのようなものか把握・認識することがセキュリティリスク対処の第一歩です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/184843/a01c60a5-ede0-5528-88f8-f0c0d1c6ba99.png" width=480>

### リスクアセスメント
リスクアセスメントとは、リスクの特定～評価までを網羅するプロセスを指します。

1. リスク特定：リスクを発見し、認識し、記述する
2. リスク分析：リスクの特質を理解し、リスクレベル（※）を決定する
3. リスク評価：リスクとその大きさが受容（許容）可能かを決定するため、リスク分析の結果をリスク基準（※）と比較する

※リスクレベル ：リスクの大きさ（起こりやすさ×被害程度）
※リスク基準：リスクの重大性を評価するための目安とする条件

リスクアセスメントによって評価されたリスクに対して、「リスク対応」を行う。

### リスクコントロール
リスクへの対策には以下2つの考え方があります。

#### リスクコントロール
リスクコントロールとは、被害の甚大化を防ごうとする **予防的対策** です。
インシデントそものが **発生しない** ことに加え、発生しても **その被害を最小限に抑える** 事がリスクコントロールといえます。
それには以下のような手法があります。

- リスク回避：不要情報の破棄、等
- リスク軽減
    - リスク分散：分散処理、等
    - リスク集中：マシンルームで集中管理、等
    - リスク移転：アウトソーシング、等
    - 損失予防：保守メンテナンス、等
    - 損失軽減：システム多重化、バックアップ、等

それぞれの対策を発生可能性と損害程度で表すと以下の通りです。

<img src="https://qiita-image-store.s3.amazonaws.com/0/184843/9a453937-0e98-83a5-9cc9-5fc760d12af5.png" width=480>

#### リスクファイナンス
リスクファイナンスとは、インシデントの発生に対して **事後対策** として行う **資金面での対策** のことです。

- リスク保有：自らの財政力で自己負担する
- リスク移転：保険会社などの第三者に資金的なリスクを移転させる

## 情報セキュリティ

### 情報セキュリティの3要素
情報セキュリティの基本要素として、以下の7つが挙げられます。

- 機密性（Confidentiality）：アクセスを認められた者だけが、情報にアクセスできる
- 完全性（Integrity）：情報が破壊、改ざん又は消去されていない
- 可用性（Availability）：アクセスを認められた者が、必要時にアクセスできる
- 真正性（Authenticity）：ある主体又は資源が、主張どおりであることを確実にする
- 責任追跡性（Accountability）：動作及び動作主を一意に追跡できることを確実にする
- 否認防止（Non-Repudiation）：発生事象を後から否認されないように証明する
- 信頼性（Reliability）：意図した動作及び結果に一致する

上記のうち、先頭3つは基本的な3原則として、特に重要視されています。
私たちの資産は、漏洩のリスク（機密性）、改ざんのリスク（完全性）、使えなくなるリスク（可用性）など、様々なリスクを検証しながらバランスよく運用する必要があります。

### セキュリティ対策
脅威に対するセキュリティ対策は1つとは限らず、一般的には以下のようにステップごとの対策を行う必要がある。

<img src="https://qiita-image-store.s3.amazonaws.com/0/184843/b2613db5-3aac-108a-9758-1dbe28f079d7.png" width=480>

- 抑止：脅威そのものを発生させない（制度・教育・等）
- 予防：発生する脅威を防止する（認証・暗号化・ウイルス対策・ファイアウォール・等）
- 検出：脅威の発生を検知する（侵入検知・ログ分析・等）
- 回復：復旧し、事業を継続する（バックアップ・多重化・フォレンジック・等）

#### セキュリティ対策の分類
セキュリティ対策方法として、以下のように分類される。

種類 | 例
-----|------
技術的対策 | ファイアウォール、侵入検知、ウイルス対策、等
物理的対策 | 防犯対策、入退室管理、盗難防止、等
人的対策 | 規程、手順書、従業員教育、等

#### セキュリティ対策の観点
セキュリティ対策を行う際の観点として以下の2つが挙げられます。
この中でも特に **個人情報保護** は優先して対策を行うよう注意していく必要があります。

- 個人情報保護：保管されている個人情報が漏洩しないための対策
- 事業継続担保：攻撃等による事業の停止が最小限に収まるための対策

# 知識をつける
昨今は [ゼロデイ攻撃](https://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%AD%E3%83%87%E3%82%A4%E6%94%BB%E6%92%83) といわれる未知の脆弱性をついた攻撃が話題になっています。
こういった脆弱性の多くは [危殆化](http://e-words.jp/w/%E5%8D%B1%E6%AE%86%E5%8C%96.html) によってもたらされ、私たちはセキュリティ知識を補い続けなければなりません。
ここでは、知識を保管していくためのキーワードとなるガイドラインへのリンクを提示します。

## ガイドライン

#### 情報セキュリティガイドライン
- [OWASP Top 10 - 2017](https://www.owasp.org/index.php/Japan)
- [PCI DSS](https://www.pcisecuritystandards.org/document_library)
- [CWE/SANS Top 25 Most Dangerous Software Errors](http://cwe.mitre.org/top25/)
- [JIS Q 27002 : 2014](http://kikakurui.com/q/Q27002-2014-01.html)
- [安全なウェブサイトの作り方](https://www.ipa.go.jp/security/vuln/websecurity.html)
- [開発者向けセキュリティ関連コンテンツ](http://www.meti.go.jp/policy/netsecurity/secdoc/dev_contents.html)

#### コーディングガイドライン
- [CERT Top 10 Secure Coding Standard](https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices)
- [OWASP Secure Coding Practices](https://www.owasp.org/index.php/OWASP_Secure_Coding_Practices_-_Quick_Reference_Guide)
- [OWASP Top 10 Proactive Controls](https://www.owasp.org/images/a/a8/OWASPTop10ProactiveControls2016-Japanese.pdf)
- [JPCERT セキュアコーディングスタンダード](https://www.jpcert.or.jp/securecoding/)
- [IPA セキュア・プログラミング講座](https://www.ipa.go.jp/security/awareness/vendor/programming/)
- [Androidアプリのセキュア設計・セキュアコーディングガイド](https://www.jssec.org/report/securecoding.html)

#### 攻撃手法のトレンド
- [情報セキュリティ10大脅威 2018](https://www.ipa.go.jp/security/vuln/10threats2018.html)
- [サイバー攻撃トレンド：2018年上半期レポート](https://www.checkpoint.co.jp/press/2018/pressrelease_20180925.html)
- [2018 IT Security Outlook](https://www.esecurityplanet.com/network-security/2018-it-security-outlook.html)

# 最後に
私たちは、目の前にあるアプリケーションの脆弱性に対する防衛策については最新情報を取り入れますが、セキュリティとは何かといった基礎部分に目が向く事は少ないのではないでしょうか。
たとえば [情報セキュリティマネジメントシステム基礎講座](http://www.atmarkit.co.jp/ait/series/2478/) など、インターネット上には有用な情報がたくさん存在しますし、ここに挙げられたような **ISMS** のようなセキュリティに対する標準的な仕様も存在します。
興味のある方は是非一度調べてみてください。
皆さまが創り出すシステムやサービスがよりセキュアで素晴らしいものになることを祈ります。